frontPanel/src/pages/Questions/DraggableList/QuestionPageCard.tsx

266 lines
7.4 KiB
TypeScript
Raw Normal View History

2023-09-06 13:20:12 +00:00
import { useParams } from "react-router-dom";
2023-08-08 11:01:37 +00:00
import {
Box,
Checkbox,
FormControl,
2023-08-08 11:01:37 +00:00
FormControlLabel,
IconButton,
InputAdornment,
2023-08-08 11:01:37 +00:00
Paper,
TextField,
2023-08-08 11:01:37 +00:00
useTheme,
} from "@mui/material";
2023-08-11 07:25:28 +00:00
import TypeQuestions from "../TypeQuestions";
import SwitchQuestionsPage from "../SwitchQuestionsPage";
import {
questionStore,
updateQuestionsList,
copyQuestion,
removeQuestion,
} from "@root/questions";
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
2023-08-08 11:01:37 +00:00
import ExpandLessIcon from "@mui/icons-material/ExpandLess";
2023-08-11 07:25:28 +00:00
import DeleteIcon from "@icons/questionsPage/deleteIcon";
import OneIcon from "@icons/questionsPage/OneIcon";
import PointsIcon from "@icons/questionsPage/PointsIcon";
import CopyIcon from "@icons/questionsPage/CopyIcon";
import CrossedEyeIcon from "@icons/CrossedEyeIcon";
import HideIcon from "@icons/questionsPage/hideIcon";
import Answer from "@icons/questionsPage/answer";
import OptionsPict from "@icons/questionsPage/options_pict";
import OptionsAndPict from "@icons/questionsPage/options_and_pict";
import Emoji from "@icons/questionsPage/emoji";
import Input from "@icons/questionsPage/input";
import DropDown from "@icons/questionsPage/drop_down";
import Date from "@icons/questionsPage/date";
import Slider from "@icons/questionsPage/slider";
import Download from "@icons/questionsPage/download";
import Page from "@icons/questionsPage/page";
import RatingIcon from "@icons/questionsPage/rating";
2023-08-08 11:01:37 +00:00
import type { DraggableProvidedDragHandleProps } from "react-beautiful-dnd";
interface Props {
2023-08-08 11:01:37 +00:00
totalIndex: number;
2023-08-11 07:25:28 +00:00
draggableProps: DraggableProvidedDragHandleProps | null | undefined;
}
const IconAndrom = (isExpanded: boolean, switchState: string) => {
switch (switchState) {
case "variant":
2023-08-11 07:25:28 +00:00
return (
<Answer
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "images":
2023-08-11 07:25:28 +00:00
return (
<OptionsPict
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "varimg":
2023-08-11 07:25:28 +00:00
return (
<OptionsAndPict
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "emoji":
2023-08-11 07:25:28 +00:00
return (
<Emoji
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "text":
2023-08-11 07:25:28 +00:00
return (
<Input
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "select":
2023-08-11 07:25:28 +00:00
return (
<DropDown
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "date":
2023-08-11 07:25:28 +00:00
return (
<Date
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "number":
2023-08-11 07:25:28 +00:00
return (
<Slider
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "file":
2023-08-11 07:25:28 +00:00
return (
<Download
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "page":
2023-08-11 07:25:28 +00:00
return (
<Page
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
case "rating":
2023-08-11 07:25:28 +00:00
return (
<RatingIcon
color={isExpanded ? "#9A9AAF" : "white"}
sx={{ height: "22px", width: "20px" }}
/>
);
default:
return <></>;
}
};
2023-08-11 07:25:28 +00:00
export default function QuestionsPageCard({
totalIndex,
draggableProps,
}: Props) {
2023-09-06 13:20:12 +00:00
const quizId = Number(useParams().quizId);
2023-08-08 11:01:37 +00:00
const theme = useTheme();
const { listQuestions } = questionStore();
2023-09-06 13:20:12 +00:00
const { type: switchState, expanded: isExpanded } =
listQuestions[quizId][totalIndex];
2023-08-08 11:01:37 +00:00
return (
<Paper
id={String(totalIndex)}
sx={{
maxWidth: "796px",
width: "100%",
borderRadius: "12px",
margin: "20px 0",
2023-08-08 11:01:37 +00:00
backgroundColor: isExpanded ? "white" : "#333647",
}}
>
<Box
2023-08-11 07:25:28 +00:00
sx={{
width: "100%",
maxWidth: "760px",
display: "flex",
alignItems: "center",
gap: "10px",
padding: "20px",
}}
2023-08-08 11:01:37 +00:00
>
<FormControl fullWidth variant="standard" sx={{ p: 0 }}>
<TextField
fullWidth
2023-09-06 13:20:12 +00:00
value={listQuestions[quizId][totalIndex].title}
placeholder={"Заголовок вопроса"}
onChange={(e) => {
2023-09-06 13:20:12 +00:00
updateQuestionsList(quizId, totalIndex, {
title: e.target.value,
});
console.log(listQuestions[quizId][totalIndex].title);
}}
InputProps={{
2023-08-11 07:25:28 +00:00
startAdornment: (
<InputAdornment position="start">
{IconAndrom(isExpanded, switchState)}
</InputAdornment>
),
}}
sx={{
"& .MuiInputBase-root": {
color: isExpanded ? "#9A9AAF" : "white",
2023-08-11 07:25:28 +00:00
backgroundColor: isExpanded
? theme.palette.background.default
: "transparent",
height: "48px",
borderRadius: "10px",
},
}}
inputProps={{
sx: {
borderRadius: "10px",
fontSize: "18px",
lineHeight: "21px",
py: 0,
paddingLeft: switchState.length === 0 ? 0 : "18px",
},
}}
2023-08-08 11:01:37 +00:00
/>
</FormControl>
2023-08-18 07:48:16 +00:00
<IconButton
onClick={() =>
2023-09-06 13:20:12 +00:00
updateQuestionsList(quizId, totalIndex, { expanded: !isExpanded })
2023-08-18 07:48:16 +00:00
}
>
2023-08-03 17:36:42 +00:00
{isExpanded ? <ExpandMoreIcon /> : <ExpandLessIcon fill="#7E2AEA" />}
</IconButton>
{isExpanded ? (
<></>
) : (
<Box sx={{ display: "flex", borderRight: "solid 1px white" }}>
<FormControlLabel
2023-08-11 07:25:28 +00:00
control={
<Checkbox
icon={<HideIcon color={"#7E2AEA"} />}
checkedIcon={<CrossedEyeIcon />}
/>
}
label={""}
sx={{
color: theme.palette.grey2.main,
ml: "-9px",
mr: 0,
userSelect: "none",
}}
/>
2023-09-06 13:20:12 +00:00
<IconButton onClick={() => copyQuestion(quizId, totalIndex)}>
<CopyIcon color={"white"} />
</IconButton>
2023-08-11 07:25:28 +00:00
<IconButton
sx={{ cursor: "pointer", borderRadius: "6px", padding: "2px" }}
2023-09-06 13:20:12 +00:00
onClick={() => removeQuestion(quizId, totalIndex)}
2023-08-11 07:25:28 +00:00
>
<DeleteIcon color={"white"} />
</IconButton>
</Box>
)}
2023-08-08 11:01:37 +00:00
<OneIcon />
2023-08-11 07:25:28 +00:00
<IconButton {...draggableProps}>
2023-08-08 11:01:37 +00:00
<PointsIcon />
</IconButton>
2023-08-08 11:01:37 +00:00
</Box>
{isExpanded && (
2023-08-11 07:25:28 +00:00
<Box
sx={{
display: "flex",
flexDirection: "column",
padding: 0,
borderRadius: "12px",
}}
>
2023-08-08 11:01:37 +00:00
{switchState.length === 0 ? (
<TypeQuestions totalIndex={totalIndex} />
) : (
<SwitchQuestionsPage totalIndex={totalIndex} />
)}
</Box>
)}
</Paper>
);
}