1
import { useCallback,useEffect,useMemo,useState } from "react";
3
import Question from "../../components/Question/Question";
4
import BlueButton from "../../components/UI/buttons/BlueButton/BlueButton";
5
import { useAppDispatch } from "../../hooks/useTypedDispatch";
6
import { useTypedSelector } from "../../hooks/useTypesSelector";
7
import { setFeedback } from "../../models/feedback";
8
import css from "./form.module.css";
10
interface IForm<TArgs = unknown>
12
handleSubmit: (e: React.FormEvent,...args: TArgs[]) => void;
14
const Form = <TArgs,>({ handleSubmit }: IForm<TArgs>) =>
16
const feedback = useTypedSelector((state) => state.extraQuestion);
17
const firstQuestion = useTypedSelector((state) => state.feedback);
18
const dispatch = useAppDispatch();
20
const [isAllResponse,setIsAllResponse] = useState<boolean>(false);
22
const handleResponseChangeRadioBtn = useCallback((question: number,value: number) =>
24
dispatch(setFeedback({ questionID: question,responseID: value }));
29
const isAllChoose = feedback.every((elem) => elem.responseID !== undefined);
31
setIsAllResponse(true);
34
const questions = useMemo((): string[] =>
37
" Клиентский сервис RUTUBE помог в решении проблемы?",
38
" Специалист RUTUBE хорошо изъяснялся и владел языком?",
39
" Специалист RUTUBE был отзывчив?",
40
" Специалист RUTUBE был компетентен?",
41
" Какова вероятность того, что вы порекомендуете RUTUBE коллеге или другу?"
47
<form onSubmit={(e) => handleSubmit(e,[firstQuestion,...feedback] as TArgs)}
49
<div className={css.form__question}>
51
question="1. Как быстро вы получили ответ от клиентского сервиса RUTUBE?"
52
value={feedback[0]?.responseID}
53
onChange={(value) => handleResponseChangeRadioBtn(feedback[0].questionID,value)}
55
labels={["Быстрее, чем ожидал","Как и ожидал","Медленнее, чем ожидал"]}
58
questionParagraph: css.form__text_question,
59
titleRadioBtn: css.title_radion_btn,
60
wrapperRadioBtns: css.wrapper_radio_btns
63
isChoosenValue={feedback[0]?.responseID ? true : false}
67
questions.map((question,index) =>
70
<div key={index} className={css.form__question}>
72
question={`${index + 2}. ${question}`}
73
value={feedback[index + 1]?.responseID}
74
onChange={(value) => handleResponseChangeRadioBtn(feedback[index + 1].questionID,value)}
76
maxRaiting={index === questions.length - 1 ? 11 : 5}
77
startFromZero={index === questions.length - 1 ? true : false}
80
questionParagraph: css.form__text_question
83
isChoosenValue={feedback[index + 1]?.responseID ? true : false}
89
<div className={css.wrapper_submit}>
91
disabled={!isAllResponse}
93
textBtn="Отправить ответы"
94
extraClassBtn={`${css.btn} ${!isAllResponse ? css.btn_disable : ""}`}