import './Survey.css' import * as React from "react"; import {useEffect} from "react"; import {SurveyDto} from "../../api/Api"; import {Box, Button, Paper, Step, StepContent, StepLabel, Stepper, Typography} from "@mui/material"; import {store} from "../../store/store"; import {addAnswer, setContents} from "../../store/actions/data"; import {ResultByGroup} from "../../store/initialState"; interface Props { survey: SurveyDto | undefined } const Survey: React.FC = ({survey}) => { const [activeStep, setActiveStep] = React.useState(-1) const [results, setResults] = React.useState(store.getState()) const [preparedSurvey, setPreparedSurvey] = React.useState({} as SurveyDto) const handleNext = (group: string | undefined, value: number | undefined) => { if (group !== undefined && value !== undefined) { store.dispatch(addAnswer({ group: group, value: value })) } setActiveStep((prevActiveStep) => prevActiveStep + 1) }; const handleBack = () => { setActiveStep((prevActiveStep) => prevActiveStep - 1) }; const handleReset = () => { store.dispatch(setContents([] as ResultByGroup[])) setActiveStep(-1) }; const randomizeIfNeeded = (isNeeded: boolean, array: any[]) => { if (isNeeded) { return array.sort((a, b) => 0.5 - Math.random()) } else { return array } } useEffect(() => { store.dispatch(setContents([] as ResultByGroup[])) return store.subscribe(() => setResults(store.getState())) }, []) useEffect(() => { if (undefined !== survey) { setPreparedSurvey({ title: survey.title, settings: survey.settings, intro: survey.intro, questions: randomizeIfNeeded(survey.settings.randomizeQuestions, survey.questions).map(q => { return { group: q.group, title: q.title, question: q.question, options: randomizeIfNeeded(survey.settings.randomizeOptions, q.options) } }) }) } }, [survey]) const prepare = (text: string | undefined) => { if (text !== undefined) { return text .replaceAll("\n", "
") .replaceAll("

{preparedSurvey?.title}



{preparedSurvey?.questions?.map((question, index) => Last step ) : null }> {'Question ' + (index + 1)}

{question.title}

{question.question}
{question.options.map((option, index) =>

)}
)}
{activeStep === preparedSurvey?.questions?.length && ( All steps completed - you're finished
    {results.data.resultsByGroup?.map((result, index) =>
  • {result.group} : {result.value}
  • )}
)}
) } export default Survey;