извлечение из стора значения типа вопроса для сохранения результата
This commit is contained in:
parent
4703f5ab83
commit
0eea50c6b6
@ -5,37 +5,37 @@ export default function CrossedEyeIcon() {
|
|||||||
<path
|
<path
|
||||||
d="M7.5 7.5625L22.5 24.0625"
|
d="M7.5 7.5625L22.5 24.0625"
|
||||||
stroke="#7E2AEA"
|
stroke="#7E2AEA"
|
||||||
stroke-width="1.5"
|
strokeWidth="1.5"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
d="M17.5215 18.5871C16.8333 19.2175 15.9329 19.5657 14.9996 19.5621C14.2427 19.562 13.5036 19.3329 12.8794 18.9049C12.2551 18.4769 11.775 17.87 11.5022 17.164C11.2293 16.458 11.1765 15.686 11.3506 14.9494C11.5247 14.2128 11.9176 13.5462 12.4777 13.0371"
|
d="M17.5215 18.5871C16.8333 19.2175 15.9329 19.5657 14.9996 19.5621C14.2427 19.562 13.5036 19.3329 12.8794 18.9049C12.2551 18.4769 11.775 17.87 11.5022 17.164C11.2293 16.458 11.1765 15.686 11.3506 14.9494C11.5247 14.2128 11.9176 13.5462 12.4777 13.0371"
|
||||||
stroke="#7E2AEA"
|
stroke="#7E2AEA"
|
||||||
stroke-width="1.5"
|
strokeWidth="1.5"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
d="M9.9375 10.2441C6.1125 12.1754 4.5 15.8129 4.5 15.8129C4.5 15.8129 7.5 22.5629 15 22.5629C16.7574 22.5772 18.4929 22.1723 20.0625 21.3816"
|
d="M9.9375 10.2441C6.1125 12.1754 4.5 15.8129 4.5 15.8129C4.5 15.8129 7.5 22.5629 15 22.5629C16.7574 22.5772 18.4929 22.1723 20.0625 21.3816"
|
||||||
stroke="#7E2AEA"
|
stroke="#7E2AEA"
|
||||||
stroke-width="1.5"
|
strokeWidth="1.5"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
d="M22.5594 19.6656C24.6031 17.8375 25.5031 15.8125 25.5031 15.8125C25.5031 15.8125 22.5031 9.06252 15.0031 9.06252C14.3529 9.06124 13.7038 9.11455 13.0625 9.2219"
|
d="M22.5594 19.6656C24.6031 17.8375 25.5031 15.8125 25.5031 15.8125C25.5031 15.8125 22.5031 9.06252 15.0031 9.06252C14.3529 9.06124 13.7038 9.11455 13.0625 9.2219"
|
||||||
stroke="#7E2AEA"
|
stroke="#7E2AEA"
|
||||||
stroke-width="1.5"
|
strokeWidth="1.5"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
d="M15.7031 12.1289C16.5006 12.28 17.2273 12.6864 17.7735 13.2868C18.3198 13.8871 18.6559 14.6489 18.7313 15.457"
|
d="M15.7031 12.1289C16.5006 12.28 17.2273 12.6864 17.7735 13.2868C18.3198 13.8871 18.6559 14.6489 18.7313 15.457"
|
||||||
stroke="#7E2AEA"
|
stroke="#7E2AEA"
|
||||||
stroke-width="1.5"
|
strokeWidth="1.5"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -18,9 +18,9 @@ export default function HideIcon() {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path d="M14.7218 18.4322C13.8897 18.6339 12.9835 18.75 12 18.75C4.5 18.75 1.5 12 1.5 12C1.5 12 4.5 5.25 12 5.25C19.5 5.25 22.5 12 22.5 12C22.5 12 21.7941 14.0139 19 16" stroke="#4D4D4D" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
<path d="M14.7218 18.4322C13.8897 18.6339 12.9835 18.75 12 18.75C4.5 18.75 1.5 12 1.5 12C1.5 12 4.5 5.25 12 5.25C19.5 5.25 22.5 12 22.5 12C22.5 12 21.7941 14.0139 19 16" stroke="#4D4D4D" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/>
|
||||||
<path d="M24 16L19.5 20L15 16" stroke="#4D4D4D" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
<path d="M24 16L19.5 20L15 16" stroke="#4D4D4D" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/>
|
||||||
<path d="M12 15.75C14.0711 15.75 15.75 14.0711 15.75 12C15.75 9.92893 14.0711 8.25 12 8.25C9.92893 8.25 8.25 9.92893 8.25 12C8.25 14.0711 9.92893 15.75 12 15.75Z" stroke="#4D4D4D" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
<path d="M12 15.75C14.0711 15.75 15.75 14.0711 15.75 12C15.75 9.92893 14.0711 8.25 12 8.25C9.92893 8.25 8.25 9.92893 8.25 12C8.25 14.0711 9.92893 15.75 12 15.75Z" stroke="#4D4D4D" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/>
|
||||||
</svg>
|
</svg>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import {Box, IconButton, Paper} from "@mui/material";
|
import {Box, Checkbox, FormControlLabel, IconButton, Paper, useTheme} from "@mui/material";
|
||||||
import CustomTextField from "@ui_kit/CustomTextField";
|
import CustomTextField from "@ui_kit/CustomTextField";
|
||||||
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
|
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
|
||||||
import ExpandLessIcon from '@mui/icons-material/ExpandLess';
|
import ExpandLessIcon from '@mui/icons-material/ExpandLess';
|
||||||
@ -10,20 +10,25 @@ import React, {useState} from "react";
|
|||||||
import DeleteIcon from "@icons/questionsPage/deleteIcon";
|
import DeleteIcon from "@icons/questionsPage/deleteIcon";
|
||||||
import {useParams} from "react-router-dom";
|
import {useParams} from "react-router-dom";
|
||||||
import {questionStore} from "@root/questions";
|
import {questionStore} from "@root/questions";
|
||||||
|
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||||
|
import CopyIcon from "@icons/questionsPage/CopyIcon";
|
||||||
|
import CrossedEyeIcon from "@icons/CrossedEyeIcon";
|
||||||
|
import EyeIcon from "@icons/EyeIcon";
|
||||||
|
import HideIcon from "@icons/questionsPage/hideIcon";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
switchState: string;
|
|
||||||
SSHC: (data: string) => void;
|
|
||||||
DeleteClick: () => void;
|
DeleteClick: () => void;
|
||||||
totalIndex: number
|
totalIndex: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function QuestionsPageCard({ SSHC, switchState, totalIndex }: Props) {
|
export default function QuestionsPageCard({totalIndex, DeleteClick}: Props) {
|
||||||
|
const theme = useTheme();
|
||||||
const params = Number(useParams().quizId);
|
const params = Number(useParams().quizId);
|
||||||
const {listQuestions, updateQuestionsList, createQuestion, removeQuestion} = questionStore()
|
const {listQuestions, updateQuestionsList, createQuestion, removeQuestion} = questionStore()
|
||||||
const [isExpanded, setIsExpanded] = useState<boolean>(false);
|
const [isExpanded, setIsExpanded] = useState<boolean>(false);
|
||||||
|
const switchState = listQuestions[params][totalIndex].type
|
||||||
return (
|
return (
|
||||||
<Paper sx={{ maxWidth: "796px", width: "100%", borderRadius: "12px", margin: "20px 0", backgroundColor: isExpanded ? "white" : "#333647" }}>
|
<Paper draggable="true" sx={{ maxWidth: "796px", width: "100%", borderRadius: "12px", margin: "20px 0", backgroundColor: isExpanded ? "white" : "#333647" }}>
|
||||||
<Box
|
<Box
|
||||||
sx={{ width: "100%", maxWidth: "760px", display: "flex", alignItems: "center", gap: "10px", padding: "20px" }}
|
sx={{ width: "100%", maxWidth: "760px", display: "flex", alignItems: "center", gap: "10px", padding: "20px" }}
|
||||||
>
|
>
|
||||||
@ -39,18 +44,37 @@ export default function QuestionsPageCard({ SSHC, switchState, totalIndex }: Pro
|
|||||||
:<ExpandLessIcon fill="#7E2AEA"/>
|
:<ExpandLessIcon fill="#7E2AEA"/>
|
||||||
}
|
}
|
||||||
</IconButton>
|
</IconButton>
|
||||||
<OneIcon />
|
<Box sx={{display: "flex"}}>
|
||||||
<PointsIcon />
|
<FormControlLabel
|
||||||
<IconButton sx={{ borderRadius: "6px", padding: "2px" }}>
|
control={
|
||||||
|
<Checkbox
|
||||||
|
icon={<HideIcon/>}
|
||||||
|
checkedIcon={<CrossedEyeIcon />}
|
||||||
|
/>}
|
||||||
|
label={""}
|
||||||
|
sx={{
|
||||||
|
color: theme.palette.grey2.main,
|
||||||
|
ml: "-9px",
|
||||||
|
mr: 0,
|
||||||
|
userSelect: "none",
|
||||||
|
}}
|
||||||
|
|
||||||
|
/>
|
||||||
|
<IconButton><CopyIcon/></IconButton>
|
||||||
|
<IconButton sx={{ borderRadius: "6px", padding: "2px" }} onClick={DeleteClick}>
|
||||||
<DeleteIcon />
|
<DeleteIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</Box>
|
</Box>
|
||||||
|
<OneIcon />
|
||||||
|
<PointsIcon />
|
||||||
|
|
||||||
|
</Box>
|
||||||
{isExpanded && (
|
{isExpanded && (
|
||||||
<Box sx={{display: "flex", flexDirection: "column", padding: 0, borderRadius: "12px"}}>
|
<Box sx={{display: "flex", flexDirection: "column", padding: 0, borderRadius: "12px"}}>
|
||||||
{switchState.length === 0 ?
|
{switchState.length === 0 ?
|
||||||
<TypeQuestions switchState={switchState} SSHC={SSHC}/>
|
<TypeQuestions totalIndex={totalIndex}/>
|
||||||
:
|
:
|
||||||
<SwitchQuestionsPage switchState={switchState} totalIndex={totalIndex}/>}
|
<SwitchQuestionsPage totalIndex={totalIndex}/>}
|
||||||
</Box>)
|
</Box>)
|
||||||
}
|
}
|
||||||
</Paper>
|
</Paper>
|
||||||
|
|||||||
@ -23,11 +23,10 @@ export default function QuestionsPage() {
|
|||||||
let result = listQuizes[params].step - 1
|
let result = listQuizes[params].step - 1
|
||||||
updateQuizesList(params, {step: result ? result : 1})
|
updateQuizesList(params, {step: result ? result : 1})
|
||||||
};
|
};
|
||||||
|
// const [switchState, setSwitchState] = React.useState('');
|
||||||
const [switchState, setSwitchState] = React.useState('');
|
// const SSHC = (data: string) => {
|
||||||
const SSHC = (data: string) => {
|
// setSwitchState(data)
|
||||||
setSwitchState(data)
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
return (
|
return (
|
||||||
@ -44,7 +43,7 @@ export default function QuestionsPage() {
|
|||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
{Object.values(listQuestions[params]).map((e, index) => (
|
{Object.values(listQuestions[params]).map((e, index) => (
|
||||||
<QuestionsPageCard key={index} totalIndex={index} switchState={switchState} SSHC={SSHC} DeleteClick={() => removeQuestion(params,index)}/>
|
<QuestionsPageCard key={index} totalIndex={index} DeleteClick={() => removeQuestion(params,index)}/>
|
||||||
)
|
)
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
@ -11,14 +11,17 @@ import RatingOptions from "./RatingOptions/RatingOptions";
|
|||||||
import Emoji from "./Emoji/Emoji";
|
import Emoji from "./Emoji/Emoji";
|
||||||
import DropDown from "./DropDown/DropDown";
|
import DropDown from "./DropDown/DropDown";
|
||||||
import UploadFile from "./UploadFile/UploadFile";
|
import UploadFile from "./UploadFile/UploadFile";
|
||||||
|
import {useParams} from "react-router-dom";
|
||||||
|
import {questionStore} from "@root/questions";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
switchState: string,
|
|
||||||
// DeleteClick: () => void;
|
|
||||||
totalIndex: number,
|
totalIndex: number,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function SwitchQuestionsPage ({switchState = '', totalIndex }: Props) {
|
export default function SwitchQuestionsPage ({totalIndex }: Props) {
|
||||||
|
const params = Number(useParams().quizId);
|
||||||
|
const {listQuestions, updateQuestionsList, createQuestion, removeQuestion} = questionStore()
|
||||||
|
const switchState = listQuestions[params][totalIndex].type
|
||||||
switch (switchState) {
|
switch (switchState) {
|
||||||
case 'answer':
|
case 'answer':
|
||||||
return (<AnswerOptions totalIndex={totalIndex}/>);
|
return (<AnswerOptions totalIndex={totalIndex}/>);
|
||||||
|
|||||||
@ -12,28 +12,32 @@ import Page from "../../assets/icons/questionsPage/page";
|
|||||||
import RatingIcon from "../../assets/icons/questionsPage/rating";
|
import RatingIcon from "../../assets/icons/questionsPage/rating";
|
||||||
import {Box} from "@mui/material";
|
import {Box} from "@mui/material";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
import {useParams} from "react-router-dom";
|
||||||
|
import {questionStore} from "@root/questions";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
switchState: string;
|
totalIndex: number
|
||||||
SSHC: (data: string) => void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function TypeQuestions({ SSHC, switchState }: Props) {
|
export default function TypeQuestions({totalIndex }: Props) {
|
||||||
|
const params = Number(useParams().quizId);
|
||||||
|
const {listQuestions, updateQuestionsList, createQuestion, removeQuestion} = questionStore()
|
||||||
|
const switchState = listQuestions[params][totalIndex].type
|
||||||
const buttonTypeQuestions: { icon: JSX.Element; title: string; value: string }[] = [
|
const buttonTypeQuestions: { icon: JSX.Element; title: string; value: string }[] = [
|
||||||
{
|
{
|
||||||
icon: <Answer/>,
|
icon: <Answer/>,
|
||||||
title: 'Варианты ответов',
|
title: 'Варианты ответов',
|
||||||
value: 'answer',
|
value: 'variant',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: <OptionsPict/>,
|
icon: <OptionsPict/>,
|
||||||
title: 'Варианты с картинками',
|
title: 'Варианты с картинками',
|
||||||
value: 'answerpict',
|
value: 'images',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: <OptionsAndPict/>,
|
icon: <OptionsAndPict/>,
|
||||||
title: 'Варианты и картинка',
|
title: 'Варианты и картинка',
|
||||||
value: 'answerandpict',
|
value: 'varimg',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: <Emoji/>,
|
icon: <Emoji/>,
|
||||||
@ -43,12 +47,12 @@ export default function TypeQuestions({ SSHC, switchState }: Props) {
|
|||||||
{
|
{
|
||||||
icon: <Input/>,
|
icon: <Input/>,
|
||||||
title: 'Своё поле для ввода',
|
title: 'Своё поле для ввода',
|
||||||
value: 'textfield',
|
value: 'text',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: <DropDown/>,
|
icon: <DropDown/>,
|
||||||
title: 'Выпадающий список',
|
title: 'Выпадающий список',
|
||||||
value: 'dropdown',
|
value: 'select',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: <Date/>,
|
icon: <Date/>,
|
||||||
@ -58,12 +62,12 @@ export default function TypeQuestions({ SSHC, switchState }: Props) {
|
|||||||
{
|
{
|
||||||
icon: <Slider/>,
|
icon: <Slider/>,
|
||||||
title: 'Ползунок',
|
title: 'Ползунок',
|
||||||
value: 'slider',
|
value: 'number',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: <Download/>,
|
icon: <Download/>,
|
||||||
title: 'Загрузка файла',
|
title: 'Загрузка файла',
|
||||||
value: 'uploader',
|
value: 'file',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: <Page/>,
|
icon: <Page/>,
|
||||||
@ -83,8 +87,8 @@ export default function TypeQuestions({ SSHC, switchState }: Props) {
|
|||||||
<QuestionsMiniButton
|
<QuestionsMiniButton
|
||||||
key={title}
|
key={title}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
SSHC(value);
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
|
updateQuestionsList(params, totalIndex, {type: value})
|
||||||
}}
|
}}
|
||||||
icon={icon}
|
icon={icon}
|
||||||
text={title}
|
text={title}
|
||||||
|
|||||||
@ -15,23 +15,6 @@ export const questionStore = create<QuestionStore>()(
|
|||||||
persist(
|
persist(
|
||||||
(set, get) => ({
|
(set, get) => ({
|
||||||
listQuestions: {
|
listQuestions: {
|
||||||
// 1871018: [
|
|
||||||
// {
|
|
||||||
// "title": "",
|
|
||||||
// "description": "",
|
|
||||||
// "type": "",
|
|
||||||
// "required": true,
|
|
||||||
// "deleted": true,
|
|
||||||
// "page": 0,
|
|
||||||
// "content": "",
|
|
||||||
// "version": 0,
|
|
||||||
// "parent_ids": [
|
|
||||||
// 0
|
|
||||||
// ],
|
|
||||||
// "created_at": "",
|
|
||||||
// "updated_at": ""
|
|
||||||
// },
|
|
||||||
// ]
|
|
||||||
},
|
},
|
||||||
updateQuestionsList: (id: number, index: number, values: any) => {
|
updateQuestionsList: (id: number, index: number, values: any) => {
|
||||||
const array = get()["listQuestions"][id] || [];
|
const array = get()["listQuestions"][id] || [];
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user