2023-09-21 07:00:08 +00:00
import { DoubleArrowRight } from "@icons/questionsPage/DoubleArrowRight" ;
2023-11-16 16:41:25 +00:00
import { DoubleTick } from "@icons/questionsPage/DoubleTick" ;
2023-09-21 07:00:08 +00:00
import { VectorQuestions } from "@icons/questionsPage/VectorQuestions" ;
2023-09-25 13:43:15 +00:00
import { DeleteIcon } from "@icons/questionsPage/deleteIcon" ;
2023-10-10 13:33:21 +00:00
import type { SxProps } from "@mui/material" ;
2023-11-16 16:41:25 +00:00
import {
2023-12-16 16:06:46 +00:00
Box , Button ,
IconButton , Modal ,
2023-11-16 16:41:25 +00:00
Tooltip ,
Typography ,
useMediaQuery ,
useTheme ,
} from "@mui/material" ;
2023-12-14 09:40:53 +00:00
import { copyQuestion , deleteQuestion , deleteQuestionWithTimeout , clearRuleForAll , updateQuestion , getQuestionByContentId } from "@root/questions/actions" ;
import { updateOpenBranchingPanel , updateDesireToOpenABranchingModal , } from "@root/uiTools/actions" ;
2023-11-16 16:41:25 +00:00
import MiniButtonSetting from "@ui_kit/MiniButtonSetting" ;
import { CopyIcon } from "../../assets/icons/questionsPage/CopyIcon" ;
import Branching from "../../assets/icons/questionsPage/branching" ;
import Clue from "../../assets/icons/questionsPage/clue" ;
import { HideIcon } from "../../assets/icons/questionsPage/hideIcon" ;
import SettingIcon from "../../assets/icons/questionsPage/settingIcon" ;
2023-11-29 13:49:52 +00:00
import type { AnyTypedQuizQuestion } from "../../model/questionTypes/shared" ;
2023-12-04 16:33:50 +00:00
import { useCurrentQuiz } from "@root/quizes/hooks" ;
2023-12-05 23:34:40 +00:00
import { enqueueSnackbar } from "notistack" ;
import { useQuestionsStore } from "@root/questions/store" ;
2023-12-14 16:50:02 +00:00
import { updateOpenedModalSettingsId } from "@root/uiTools/actions" ;
2023-12-13 10:55:57 +00:00
import { updateRootContentId } from "@root/quizes/actions" ;
2023-12-14 09:40:53 +00:00
import { useUiTools } from "@root/uiTools/store" ;
2023-12-16 16:06:46 +00:00
import { useState } from "react" ;
2023-03-15 22:56:53 +00:00
2023-03-18 21:35:09 +00:00
interface Props {
2023-11-16 16:41:25 +00:00
switchState : string ;
SSHC : ( data : string ) = > void ;
2023-11-29 13:49:52 +00:00
question : AnyTypedQuizQuestion ;
2023-11-16 16:41:25 +00:00
sx? : SxProps ;
2023-03-18 21:35:09 +00:00
}
2023-03-15 22:56:53 +00:00
2023-09-22 07:26:07 +00:00
export default function ButtonsOptions ( {
2023-11-16 16:41:25 +00:00
SSHC ,
switchState ,
question ,
2023-09-22 07:26:07 +00:00
} : Props ) {
2023-11-16 16:41:25 +00:00
const theme = useTheme ( ) ;
const isMobile = useMediaQuery ( theme . breakpoints . down ( 790 ) ) ;
const isWrappMiniButtonSetting = useMediaQuery ( theme . breakpoints . down ( 920 ) ) ;
2023-12-04 16:33:50 +00:00
const quiz = useCurrentQuiz ( ) ;
2023-12-14 09:40:53 +00:00
const { questions } = useQuestionsStore . getState ( ) ;
2023-12-16 16:06:46 +00:00
const [ openDelete , setOpenDelete ] = useState < boolean > ( false ) ;
2023-09-21 07:00:08 +00:00
2023-11-16 16:41:25 +00:00
const openedModal = ( ) = > {
2023-12-14 17:58:56 +00:00
updateOpenBranchingPanel ( true ) ;
updateDesireToOpenABranchingModal ( question . content . id ) ;
2023-11-16 16:41:25 +00:00
} ;
2023-09-20 17:39:17 +00:00
2023-12-16 16:06:46 +00:00
const deleteFn = ( ) = > {
if ( question . type !== null ) {
if ( question . content . rule . parentId === "root" ) { //удалить из стора root и очистить rule всем вопросам
updateRootContentId ( quiz . id , "" ) ;
clearRuleForAll ( ) ;
deleteQuestion ( question . id ) ;
} else if ( question . content . rule . parentId . length > 0 ) { //удалить из стора вопрос из дерева и очистить е г о потомков
const clearQuestions = [ ] as string [ ] ;
//записываем потомков , а их результаты удаляем
const getChildren = ( parentQuestion : AnyTypedQuizQuestion ) = > {
questions . forEach ( ( targetQuestion ) = > {
2023-12-21 08:29:51 +00:00
if ( targetQuestion . type !== null && targetQuestion . content . rule . parentId === parentQuestion . content . id ) { //если у вопроса совпал родитель с родителем => он потомок, в кучу е г о
if ( targetQuestion . type !== "result" && targetQuestion . type !== null ) {
2023-12-16 16:06:46 +00:00
if ( ! clearQuestions . includes ( targetQuestion . content . id ) ) clearQuestions . push ( targetQuestion . content . id ) ;
getChildren ( targetQuestion ) ; //и ищем е г о потомков
}
}
} ) ;
} ;
getChildren ( question ) ;
//чистим потомков от инфы ветвления
clearQuestions . forEach ( ( id ) = > {
updateQuestion ( id , question = > {
question . content . rule . parentId = "" ;
question . content . rule . main = [ ] ;
question . content . rule . default = "" ;
} ) ;
} ) ;
//чистим rule родителя
const parentQuestion = getQuestionByContentId ( question . content . rule . parentId ) ;
const newRule = { } ;
newRule . main = parentQuestion . content . rule . main . filter ( ( data ) = > data . next !== question . content . id ) ; //удаляем условия перехода от родителя к этому вопросу
newRule . parentId = parentQuestion . content . rule . parentId ;
newRule . default = parentQuestion . content . rule . parentId === question . content . id ? "" : parentQuestion . content . rule . parentId ;
newRule . children = [ . . . parentQuestion . content . rule . children ] . splice ( parentQuestion . content . rule . children . indexOf ( question . content . id ) , 1 ) ;
updateQuestion ( question . content . rule . parentId , ( PQ ) = > {
PQ . content . rule = newRule ;
} ) ;
deleteQuestion ( question . id ) ;
}
deleteQuestion ( question . id ) ;
2023-12-23 02:16:02 +00:00
const result = questions . find ( q = > q . type === "result" && q . content . rule . parentId === question . content . id )
if ( result ) deleteQuestion ( result . id ) ;
2023-12-16 16:06:46 +00:00
} else {
deleteQuestion ( question . id ) ;
}
} ;
2023-12-04 11:44:08 +00:00
2023-11-16 16:41:25 +00:00
const buttonSetting : {
icon : JSX.Element ;
title : string ;
value : string ;
myFunc? : any ;
} [ ] = [
{
icon : (
< SettingIcon
color = {
switchState === "setting" ? "#ffffff" : theme . palette . grey3 . main
}
/ >
) ,
title : "Настройки" ,
value : "setting" ,
} ,
2023-12-14 10:37:45 +00:00
// {
// icon: (
// <Clue
// color={switchState === "help" ? "#ffffff" : theme.palette.grey3.main}
// />
// ),
// title: "Подсказка",
// value: "help",
// },
2023-11-16 16:41:25 +00:00
{
icon : (
< Branching
color = {
switchState === "branching" ? "#ffffff" : theme . palette . grey3 . main
}
/ >
) ,
title : "Ветвление" ,
value : "branching" ,
2023-12-05 23:34:40 +00:00
myFunc : ( question ) = > {
2023-12-14 17:58:56 +00:00
updateOpenBranchingPanel ( true ) ;
2023-12-12 19:05:30 +00:00
updateDesireToOpenABranchingModal ( question . content . id ) ;
2023-12-05 23:34:40 +00:00
}
2023-11-16 16:41:25 +00:00
} ,
] ;
2023-09-21 07:00:08 +00:00
2023-11-16 16:41:25 +00:00
return (
< Box
sx = { {
display : "flex" ,
alignItems : "center" ,
justifyContent : "space-between" ,
width : "100%" ,
background : "#f2f3f7" ,
height : isMobile ? "92px" : "70px" ,
} }
>
< Box
sx = { {
padding : isMobile ? " 3px 12px 11px" : "20px" ,
display : "flex" ,
flexWrap : isMobile ? "wrap" : "nowrap" ,
gap : "6px" ,
2023-10-13 13:42:28 +00:00
} }
2023-11-16 16:41:25 +00:00
>
{ buttonSetting . map ( ( { icon , title , value , myFunc } ) = > (
< Box key = { value } >
{ value === "branching" ? (
< Tooltip
arrow
placement = "right"
componentsProps = { {
tooltip : {
sx : {
background : "#fff" ,
borderRadius : "6px" ,
color : "#9A9AAF" ,
boxShadow : "0px 8px 24px rgba(210, 208, 225, 0.4)" ,
"& .MuiTooltip-arrow" : {
color : "#FFF" ,
} ,
} ,
} ,
} }
title = {
< Box >
< Typography
sx = { {
color : "#4D4D4D" ,
fontWeight : "bold" ,
fontSize : "14px" ,
marginBottom : "10px" ,
} }
>
Б у д е т п о к а з а н п р и у с л о в и и
< / Typography >
< Typography sx = { { fontWeight : "bold" , fontSize : "12px" } } >
Н а з в а н и е
< / Typography >
< Typography
sx = { {
fontWeight : "bold" ,
fontSize : "12px" ,
marginBottom : "10px" ,
} }
>
У с л о в и е 1 , У с л о в и е 2
< / Typography >
< Typography sx = { { color : "#7E2AEA" , fontSize : "12px" } } >
В с е у с л о в и я о б я з а т е л ь н ы
< / Typography >
< / Box >
}
>
< MiniButtonSetting
key = { title }
onClick = { ( ) = > {
2023-12-12 19:05:30 +00:00
openedModal ( ) ;
2023-12-08 11:53:41 +00:00
// SSHC(value);
// myFunc(question);
2023-11-16 16:41:25 +00:00
} }
sx = { {
2023-12-17 22:34:22 +00:00
display : quiz.config.type === "form" ? "none" : "flex" ,
2023-11-16 16:41:25 +00:00
backgroundColor :
switchState === value
? theme . palette . brightPurple . main
: "transparent" ,
color :
switchState === value
? "#ffffff"
: theme . palette . grey3 . main ,
minWidth : isWrappMiniButtonSetting ? "30px" : "64px" ,
height : "30px" ,
"&:hover" : {
color : theme.palette.grey3.main ,
"& path" : { stroke : theme.palette.grey3.main } ,
} ,
} }
>
{ icon }
{ isWrappMiniButtonSetting ? null : title }
< / MiniButtonSetting >
< / Tooltip >
) : (
< >
< MiniButtonSetting
key = { title }
onClick = { ( ) = > {
SSHC ( value ) ;
myFunc ( ) ;
} }
sx = { {
backgroundColor :
switchState === value
? theme . palette . brightPurple . main
: "transparent" ,
color :
switchState === value
? "#ffffff"
: theme . palette . grey3 . main ,
minWidth : isWrappMiniButtonSetting ? "30px" : "64px" ,
height : "30px" ,
"&:hover" : {
color : theme.palette.grey3.main ,
"& path" : { stroke : theme.palette.grey3.main } ,
} ,
} }
>
{ icon }
{ isWrappMiniButtonSetting ? null : title }
< / MiniButtonSetting >
< / >
) }
< / Box >
) ) }
< >
< MiniButtonSetting
onClick = { undefined } // TODO
sx = { {
minWidth : "30px" ,
height : "30px" ,
backgroundColor : "#FEDFD0" ,
} }
2023-10-13 11:28:51 +00:00
>
2023-11-16 16:41:25 +00:00
< DoubleTick style = { { color : "#FC712F" , fontSize : "9px" } } / >
< / MiniButtonSetting >
< MiniButtonSetting
onClick = { undefined } // TODO
sx = { {
minWidth : "30px" ,
height : "30px" ,
backgroundColor : "#FEDFD0" ,
} }
2023-10-13 11:28:51 +00:00
>
2023-11-16 16:41:25 +00:00
< DoubleArrowRight style = { { color : "#FC712F" , fontSize : "9px" } } / >
< / MiniButtonSetting >
< MiniButtonSetting
onClick = { undefined } // TODO
sx = { {
minWidth : "30px" ,
height : "30px" ,
backgroundColor : "#FEDFD0" ,
} }
>
< VectorQuestions style = { { color : "#FC712F" , fontSize : "9px" } } / >
< / MiniButtonSetting >
< / >
< / Box >
< Box
sx = { {
padding : "20px" ,
display : "flex" ,
2023-12-01 20:45:35 +00:00
gap : "6px" ,
2023-11-16 16:41:25 +00:00
} }
>
< IconButton sx = { { borderRadius : "6px" , padding : "2px" } } >
< HideIcon style = { { color : "#4D4D4D" } } / >
< / IconButton >
< IconButton
sx = { { borderRadius : "6px" , padding : "2px" } }
onClick = { ( ) = > copyQuestion ( question . id , question . quizId ) }
2023-10-13 11:28:51 +00:00
>
2023-11-16 16:41:25 +00:00
< CopyIcon color = { "#4D4D4D" } / >
< / IconButton >
< IconButton
sx = { { borderRadius : "6px" , padding : "2px" } }
2023-12-12 19:05:30 +00:00
onClick = { ( ) = > {
2023-12-16 16:06:46 +00:00
if ( question . content . rule . parentId . length !== 0 ) {
setOpenDelete ( true )
} else {
deleteQuestionWithTimeout ( question . id , deleteFn ) ;
}
2023-12-11 10:08:54 +00:00
2023-11-16 16:41:25 +00:00
} }
2023-11-27 23:07:24 +00:00
data - cy = "delete-question"
2023-11-16 16:41:25 +00:00
>
< DeleteIcon color = { "#4D4D4D" } / >
< / IconButton >
2023-12-16 16:06:46 +00:00
< Modal open = { openDelete } onClose = { ( ) = > setOpenDelete ( false ) } >
< Box
sx = { {
position : "absolute" ,
top : "50%" ,
left : "50%" ,
transform : "translate(-50%, -50%)" ,
padding : "30px" ,
borderRadius : "10px" ,
background : "#FFFFFF" ,
} }
>
< Typography variant = "h6" sx = { { textAlign : "center" } } >
В ы у д а л я е т е в о п р о с , у ч а с т в у ю щ и й в в е т в л е н и и . В с е е г о п о т о м к и п о т е р я ю т д а н н ы е в е т в л е н и я . В ы у в е р е н ы , ч т о х о т и т е у д а л и т ь в о п р о с ?
< / Typography >
< Box
sx = { {
marginTop : "30px" ,
display : "flex" ,
justifyContent : "center" ,
gap : "15px" ,
} }
>
< Button
variant = "contained"
sx = { { minWidth : "150px" } }
onClick = { ( ) = > setOpenDelete ( false ) }
>
О т м е н а
< / Button >
< Button
variant = "contained"
sx = { { minWidth : "150px" } }
onClick = { ( ) = > {
deleteQuestionWithTimeout ( question . id , deleteFn ) ;
} }
>
П о д т в е р д и т ь
< / Button >
< / Box >
< / Box >
< / Modal >
2023-11-16 16:41:25 +00:00
< / Box >
< / Box >
) ;
2023-04-15 09:10:59 +00:00
}