This commit is contained in:
Nastya 2024-11-16 01:42:19 +03:00
commit 0cd932ec45
6 changed files with 53 additions and 36 deletions

@ -35,9 +35,11 @@ export default function OptionsAndPicture({
const [selectedVariantId, setSelectedVariantId] = useState<string | null>( const [selectedVariantId, setSelectedVariantId] = useState<string | null>(
null, null,
); );
const variant = useMemo(() => question.content.variants.find( const variant = question.content.variants.find(
(variant) => variant.id === selectedVariantId, (variant) => variant.id === selectedVariantId,
),[selectedVariantId]) )
console.log("variant")
console.log(variant)
const theme = useTheme(); const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down(790)); const isMobile = useMediaQuery(theme.breakpoints.down(790));
const quizQid = useCurrentQuiz()?.qid; const quizQid = useCurrentQuiz()?.qid;
@ -48,6 +50,7 @@ export default function OptionsAndPicture({
setPictureUploading(true); setPictureUploading(true);
closeImageUploadModal();
const url = await uploadQuestionImage( const url = await uploadQuestionImage(
question.id, question.id,
quizQid, quizQid,
@ -64,7 +67,7 @@ export default function OptionsAndPicture({
variant.originalImageUrl = url; variant.originalImageUrl = url;
}, },
); );
closeImageUploadModal(); setOpenCropModal(true)
setPictureUploading(false); setPictureUploading(false);
}; };

@ -35,9 +35,9 @@ export default function OptionsPicture({
const [openCropModal, setOpenCropModal] = useState(false); const [openCropModal, setOpenCropModal] = useState(false);
const [selectedVariantId, setSelectedVariantId] = useState<string | null>(null); const [selectedVariantId, setSelectedVariantId] = useState<string | null>(null);
const variant = useMemo(() => question.content.variants.find( const variant = question.content.variants.find(
(variant) => variant.id === selectedVariantId, (variant) => variant.id === selectedVariantId,
),[selectedVariantId]) )
const [switchState, setSwitchState] = useState("setting"); const [switchState, setSwitchState] = useState("setting");
const isMobile = useMediaQuery(theme.breakpoints.down(790)); const isMobile = useMediaQuery(theme.breakpoints.down(790));

@ -26,6 +26,7 @@ export default function UploadImage({
if (!quiz) return null; if (!quiz) return null;
console.log(question) console.log(question)
console.log(quiz)
return ( return (
<Box sx={{ padding: "20px" }}> <Box sx={{ padding: "20px" }}>
@ -72,6 +73,7 @@ export default function UploadImage({
updateQuestion(question.id, (question) => { updateQuestion(question.id, (question) => {
question.content.back = null; question.content.back = null;
question.content.originalBack = null; question.content.originalBack = null;
if ("editedUrlImagesList" in question.content) question.content.editedUrlImagesList = null;
}); });
}} }}
onImageSavedClick={() => { onImageSavedClick={() => {
@ -84,7 +86,7 @@ export default function UploadImage({
editedUrlImagesList={question.content?.editedUrlImagesList} editedUrlImagesList={question.content?.editedUrlImagesList}
questionId={question.id.toString()} questionId={question.id.toString()}
questionType={question.type} questionType={question.type}
quizId={quiz.id} quizId={quiz.qid}
open={openCropModal} open={openCropModal}
selfClose={() => setOpenCropModal(false)} selfClose={() => setOpenCropModal(false)}
setPictureUploading={setPictureUploading} setPictureUploading={setPictureUploading}

@ -97,7 +97,7 @@ export const DropZone = ({
handleImageChange={handleImageUpload} handleImageChange={handleImageUpload}
/> />
<ButtonBase <ButtonBase
onClick={ () => onImageSavedClick ? onImageSavedClick() : openImageUploadModal() onClick={ () => onImageSavedClick &&imageUrl ? onImageSavedClick() : openImageUploadModal()
} }
sx={{ sx={{
width: "100%", width: "100%",

@ -45,6 +45,7 @@ export const MediaSelectionAndDisplay: FC<Iprops> = ({
async function handleImageUpload(file: File) { async function handleImageUpload(file: File) {
setPictureUploading(true); setPictureUploading(true);
closeImageUploadModal();
const url = await uploadQuestionImage( const url = await uploadQuestionImage(
resultData.id, resultData.id,
quizQid, quizQid,
@ -54,7 +55,7 @@ export const MediaSelectionAndDisplay: FC<Iprops> = ({
question.content.originalBack = url; question.content.originalBack = url;
}, },
); );
closeImageUploadModal(); setOpenCropModal(true)
setPictureUploading(false); setPictureUploading(false);
} }

@ -50,9 +50,7 @@ export const CropModalInit: FC<CropOnOpenType> = ({
(async () => { (async () => {
let newImageBlob = imageBlob; let newImageBlob = imageBlob;
if (originalImageUrl !== undefined) { if (originalImageUrl !== undefined) {
const response = await fetch(originalImageUrl, { const response = await fetch(originalImageUrl);
mode: 'no-cors',
});
newImageBlob = await response.blob(); newImageBlob = await response.blob();
console.log(newImageBlob) console.log(newImageBlob)
}; };
@ -61,7 +59,7 @@ export const CropModalInit: FC<CropOnOpenType> = ({
const isGif = await isImageBlobAGifFile(newImageBlob); const isGif = await isImageBlobAGifFile(newImageBlob);
if (isGif) { if (isGif) {
saveImagesAndRules(newImageBlob); saveImagesAndRules(newImageBlob);
return; return setPictureUploading(false);
} }
//Для работы нам нужны урлы. Оригинальной и редактированных картинок //Для работы нам нужны урлы. Оригинальной и редактированных картинок
let newOriginalImageUrl = originalImageUrl || URL.createObjectURL(newImageBlob) let newOriginalImageUrl = originalImageUrl || URL.createObjectURL(newImageBlob)
@ -157,48 +155,61 @@ export const CropModalInit: FC<CropOnOpenType> = ({
const saveImagesAndRules = async () => { const saveImagesAndRules = async () => {
setPictureUploading(true) setPictureUploading(true)
if (editedImages === null) return; if (editedImages === null) return;
closeModal();
//массив запросов
const requests: Promise<void>[] = [];
//Преобразовываем и отправляем на бек картинки. //Преобразовываем и отправляем на бек картинки.
if (variantId) {//Работаем с вариантом if (variantId) {//Работаем с вариантом
for (let k in editedImages) { for (let k in editedImages) {
let key = k; requests.push(new Promise(async (resolve) => {
const img = document.createElement("img"); let key = k;
img.crossOrigin = 'anonymous';
img.src = editedImages[key].url;
const blob = await getModifiedImageBlob(img, editedImages[key].newRules.crop, editedImages[key].newRules.darken);
uploadQuestionImage(questionId, quizId, blob, (question, url) => { const img = document.createElement("img");
if (!("variants" in question.content)) return; img.crossOrigin = 'anonymous';
img.src = editedImages[key].url;
const blob = await getModifiedImageBlob(img, editedImages[key].newRules.crop, editedImages[key].newRules.darken);
const variant = question.content.variants.find( uploadQuestionImage(questionId, quizId, blob, (question, url) => {
(variant) => variant.id === variantId, if (!("variants" in question.content)) return;
);
if (!variant) return;
if (!("editedUrlImagesList" in variant)) variant.editedUrlImagesList = {}
variant.editedUrlImagesList[key] = url; const variant = question.content.variants.find(
}); (variant) => variant.id === variantId,
);
if (!variant) return;
if (!variant.editedUrlImagesList) variant.editedUrlImagesList = {}
variant.editedUrlImagesList[key] = url;
resolve()
});
}))
} }
} else {//Работаем с контентом } else {//Работаем с контентом
for (let k in editedImages) { for (let k in editedImages) {
let key = k; requests.push(new Promise(async (resolve) => {
const img = document.createElement("img"); let key = k;
img.crossOrigin = 'anonymous';
img.src = editedImages[key].url;
const blob = await getModifiedImageBlob(img, editedImages[key].newRules.crop, editedImages[key].newRules.darken);
uploadQuestionImage(questionId, quizId, blob, (question, url) => { const img = document.createElement("img");
if (!("editedUrlImagesList" in question.content)) question.content.editedUrlImagesList = {}; img.crossOrigin = 'anonymous';
img.src = editedImages[key].url;
const blob = await getModifiedImageBlob(img, editedImages[key].newRules.crop, editedImages[key].newRules.darken);
question.content.editedUrlImagesList[key] = url; uploadQuestionImage(questionId, quizId, blob, (question, url) => {
}); if (!question.content.editedUrlImagesList) question.content.editedUrlImagesList = {};
question.content.editedUrlImagesList[key] = url;
resolve()
});
}))
} }
} }
closeModal(); await Promise.all(requests)
setPictureUploading(false); setPictureUploading(false);
}; };