import { useMemo } from 'react'; import PropTypes from 'prop-types'; import { useStreamManagerActions } from '../../../../../contexts/StreamManagerActions'; import { streamManager as $streamManagerContent } from '../../../../../content'; import { QUIZ_DATA_KEYS, POLL_DATA_KEYS, STREAM_ACTION_NAME, STREAM_MANAGER_ACTION_LIMITS } from '../../../../../constants'; import Input from './formElements/Input'; import RadioTextGroup from './formElements/RadioTextGroup/RadioTextGroup'; import RangeSelector from './formElements/RangeSelector'; const $content = $streamManagerContent.stream_manager_actions.quiz; const QuizOrPollQuestionsComponent = ({ formType }) => { const { currentStreamManagerActionErrors, getStreamManagerActionData, updateStreamManagerActionData } = useStreamManagerActions(); const { question, answers, correctAnswerIndex = undefined, duration } = getStreamManagerActionData(formType); const LIMITS = useMemo( () => STREAM_MANAGER_ACTION_LIMITS[formType], [formType] ); const contentMapper = useMemo( () => ({ [STREAM_ACTION_NAME.QUIZ]: { content: $streamManagerContent.stream_manager_actions.quiz, dataKey: QUIZ_DATA_KEYS.QUESTION, rangeSelector: { label: $streamManagerContent.stream_manager_actions.quiz.duration, dataKey: QUIZ_DATA_KEYS.DURATION, min: LIMITS[QUIZ_DATA_KEYS.DURATION].min, max: LIMITS[QUIZ_DATA_KEYS.DURATION].max }, inputGroup: { label: $streamManagerContent.stream_manager_actions.quiz.answers, type: 'radio', dataKey: QUIZ_DATA_KEYS.ANSWERS, min: LIMITS[QUIZ_DATA_KEYS.ANSWERS].min, max: LIMITS[QUIZ_DATA_KEYS.ANSWERS].max } }, [STREAM_ACTION_NAME.POLL]: { content: $streamManagerContent.stream_manager_actions.poll, dataKey: POLL_DATA_KEYS.QUESTION, rangeSelector: { label: $streamManagerContent.stream_manager_actions.poll.duration, dataKey: POLL_DATA_KEYS.DURATION, min: LIMITS[POLL_DATA_KEYS.DURATION].min, max: LIMITS[POLL_DATA_KEYS.DURATION].max }, inputGroup: { label: $streamManagerContent.stream_manager_actions.poll.answers, type: 'text', dataKey: POLL_DATA_KEYS.ANSWERS, min: LIMITS[POLL_DATA_KEYS.ANSWERS].min, max: LIMITS[POLL_DATA_KEYS.ANSWERS].max } } }), [LIMITS] ); const updateStreamManagerActionQuizPollData = (data) => { updateStreamManagerActionData({ dataOrFn: data, actionName: formType }); }; const radioGroupSelectedAnswerProps = formType === STREAM_ACTION_NAME.QUIZ ? { selectedDataKey: QUIZ_DATA_KEYS.CORRECT_ANSWER_INDEX, selectedOptionIndex: correctAnswerIndex } : {}; const { content: { question: questionLabel, answers_input_name_attribute: streamManagerActionFormAnswers, question_input_name_attribute: streamManagerActionFormQuestion, duration_input_name_attribute: streamManagerActionFormDuration }, dataKey, rangeSelector: { label: rangeSelectorLabel, dataKey: rangeSelectorDataKey, min: rangeSelectorMin, max: rangeSelectorMax }, inputGroup: { type: inputGroupInputType, dataKey: inputGroupDataKey, min: inputGroupMin, max: inputGroupMax } } = contentMapper[formType]; return ( <> ); }; QuizOrPollQuestionsComponent.propTypes = { formType: PropTypes.string.isRequired }; export default QuizOrPollQuestionsComponent;