This commit is contained in:
MikanD
2025-05-31 18:15:52 +03:00
parent a37118dc6a
commit 7555757ca3
2 changed files with 81 additions and 7 deletions

View File

@@ -1,7 +1,7 @@
import {LoadingList} from "../components/LoadingList.tsx"; import {LoadingList} from "../components/LoadingList.tsx";
import {Survey} from "../types/survey.ts"; import {AgreementQuestion, Question, QuestionPair, QuestionType, Survey} from "../types/survey.ts";
import {Link, useParams} from "react-router-dom"; import {Link, useParams} from "react-router-dom";
import React from "react"; import React, { useState } from "react";
import {useData, useDataPage} from "../API/common.ts"; import {useData, useDataPage} from "../API/common.ts";
import {LoadingData} from "../components/LoadingData.tsx"; import {LoadingData} from "../components/LoadingData.tsx";
@@ -36,18 +36,74 @@ function SurveyQuestions({survey}: { survey: Survey | null | undefined }) {
const _survey = survey as Survey; const _survey = survey as Survey;
const questionsPairs = useDataPage("surveys", "question-pairs", {survey:_survey.id}); const [questions, setQuestions] = useState<Question[]|null>(null);
const questionsAgreement = useDataPage("surveys", "question-pairs", {survey:_survey.id});
//const questions = const questionsPairs = useDataPage<QuestionPair>("surveys", "question-pairs", {survey:_survey.id});
const questionsAgreement = useDataPage<AgreementQuestion>("surveys", "agreement-questions", {survey:_survey.id});
if (questions === null && questionsPairs.items !== null && questionsAgreement.items !== null){
function setQuestionType(question: Question, questionType: QuestionType) {
question.questionType = questionType;
return question;
}
var _questions = [...questionsPairs.items.map(q=>setQuestionType(q, QuestionType.QuestionPair)), ...questionsAgreement.items.map(q=>setQuestionType(q, QuestionType.AgreementQuestion))];
_questions.sort(()=>Math.random() - .5);
console.log(questionsPairs.items.map(q=>setQuestionType(q, QuestionType.QuestionPair)));
setQuestions(_questions);
}
//console.log(questions);
return ( return (
<> <>
<LoadingList data={questions} listElement={(question=>(
<QuestionBlock key={(question as Question).questionType+"#"+question.id} question={question as Question}/>
))}/>
</> </>
); );
} }
function QuestionBlock({question}:{question: Question}) {
switch (question.questionType) {
case QuestionType.AgreementQuestion:
const qa = question as AgreementQuestion;
return (
<div className={"question agreement"}>
(Вы согласны с утверждением?)
{qa.question}
<button>
Согласен
</button>
<button>
Несогласен
</button>
</div>
);
case QuestionType.QuestionPair:
const qp = question as QuestionPair;
return (
<div className={"question pair"}>
(Выберите подходящий ответ)
{qp.statements.map(s=>(<button>{s.text}</button>))}
</div>
);
default:
break;
}
return null;
}

View File

@@ -11,6 +11,24 @@ interface Statement extends UniqueItem{
score_variable: number; score_variable: number;
} }
export interface QuestionPair extends UniqueItem{ export enum QuestionType{
QuestionPair,
AgreementQuestion
}
export interface Question extends UniqueItem{
questionType: QuestionType,
answer?: number;
}
export interface QuestionPair extends Question{
statements: Statement[]
}
export interface AgreementQuestion extends Question{
question: string;
score_variable: number;
} }