2023-11-15 18:38:02 +00:00
|
|
|
|
import { QuizQuestionVariant } from "@model/questionTypes/variant";
|
2023-10-24 15:18:31 +00:00
|
|
|
|
import { Box, ButtonBase, Typography, useTheme } from "@mui/material";
|
2023-11-15 18:38:02 +00:00
|
|
|
|
import { openCropModal } from "@root/cropModal";
|
|
|
|
|
import { setQuestionBackgroundImage, setQuestionOriginalBackgroundImage } from "@root/questions/actions";
|
2023-09-13 14:14:27 +00:00
|
|
|
|
import { CropModal } from "@ui_kit/Modal/CropModal";
|
2023-10-24 15:18:31 +00:00
|
|
|
|
import UploadBox from "@ui_kit/UploadBox";
|
2023-11-15 18:38:02 +00:00
|
|
|
|
import { useState, type DragEvent } from "react";
|
2023-10-24 15:18:31 +00:00
|
|
|
|
import UploadIcon from "../../../assets/icons/UploadIcon";
|
2023-09-05 13:54:41 +00:00
|
|
|
|
import { UploadImageModal } from "./UploadImageModal";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type UploadImageProps = {
|
2023-11-15 18:38:02 +00:00
|
|
|
|
question: QuizQuestionVariant;
|
2023-09-05 13:54:41 +00:00
|
|
|
|
};
|
|
|
|
|
|
2023-11-15 18:38:02 +00:00
|
|
|
|
export default function UploadImage({ question }: UploadImageProps) {
|
2023-10-24 15:18:31 +00:00
|
|
|
|
const theme = useTheme();
|
2023-11-15 18:38:02 +00:00
|
|
|
|
const [isUploadImageModalOpen, setIsUploadImageModalOpen] = useState(false);
|
2023-09-05 13:54:41 +00:00
|
|
|
|
|
2023-10-24 15:18:31 +00:00
|
|
|
|
const handleImageUpload = (files: FileList | null) => {
|
|
|
|
|
if (!files?.length) return;
|
2023-09-05 13:54:41 +00:00
|
|
|
|
|
2023-10-24 15:18:31 +00:00
|
|
|
|
const [file] = Array.from(files);
|
2023-09-05 13:54:41 +00:00
|
|
|
|
|
2023-10-24 15:18:31 +00:00
|
|
|
|
const url = URL.createObjectURL(file);
|
2023-09-05 13:54:41 +00:00
|
|
|
|
|
2023-11-15 18:38:02 +00:00
|
|
|
|
setQuestionBackgroundImage(question.id, url);
|
|
|
|
|
setQuestionOriginalBackgroundImage(question.id, url);
|
2023-10-24 15:18:31 +00:00
|
|
|
|
setIsUploadImageModalOpen(false);
|
|
|
|
|
openCropModal(url, url);
|
|
|
|
|
};
|
2023-09-05 13:54:41 +00:00
|
|
|
|
|
2023-10-24 15:18:31 +00:00
|
|
|
|
const handleDrop = (event: DragEvent<HTMLDivElement>) => {
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
|
|
|
|
|
handleImageUpload(event.dataTransfer.files);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function handleCropModalSaveClick(url: string) {
|
2023-11-15 18:38:02 +00:00
|
|
|
|
setQuestionBackgroundImage(question.id, url);
|
2023-10-24 15:18:31 +00:00
|
|
|
|
}
|
2023-09-05 13:54:41 +00:00
|
|
|
|
|
2023-10-24 15:18:31 +00:00
|
|
|
|
return (
|
|
|
|
|
<Box sx={{ padding: "20px" }}>
|
|
|
|
|
<Typography
|
|
|
|
|
sx={{
|
|
|
|
|
fontWeight: 500,
|
|
|
|
|
color: theme.palette.grey3.main,
|
|
|
|
|
mt: "11px",
|
|
|
|
|
mb: "14px",
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
Загрузить изображение
|
|
|
|
|
</Typography>
|
|
|
|
|
<ButtonBase
|
|
|
|
|
onClick={() => setIsUploadImageModalOpen(true)}
|
|
|
|
|
sx={{
|
|
|
|
|
width: "100%",
|
|
|
|
|
maxWidth: "260px",
|
|
|
|
|
height: "120px",
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
{question.content.back ?
|
|
|
|
|
<img
|
|
|
|
|
src={question.content.back}
|
|
|
|
|
alt="question background"
|
|
|
|
|
style={{
|
|
|
|
|
width: "100%",
|
|
|
|
|
height: "100%",
|
|
|
|
|
objectFit: "scale-down",
|
|
|
|
|
display: "block",
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
:
|
|
|
|
|
<UploadBox
|
|
|
|
|
handleDrop={handleDrop}
|
|
|
|
|
sx={{ maxWidth: "260px" }}
|
|
|
|
|
icon={<UploadIcon />}
|
|
|
|
|
text="5 MB максимум"
|
|
|
|
|
/>
|
|
|
|
|
}
|
|
|
|
|
</ButtonBase>
|
|
|
|
|
<UploadImageModal
|
|
|
|
|
open={isUploadImageModalOpen}
|
|
|
|
|
onClose={() => setIsUploadImageModalOpen(false)}
|
|
|
|
|
imgHC={handleImageUpload}
|
|
|
|
|
/>
|
|
|
|
|
<CropModal onSaveImageClick={handleCropModalSaveClick} />
|
|
|
|
|
</Box>
|
|
|
|
|
);
|
2023-09-05 13:54:41 +00:00
|
|
|
|
}
|