import { useCallback, useState, type JSX } from 'react'; import { useTranslation } from 'next-i18next'; import { apiv3Put } from '~/client/util/apiv3-client'; import { toastSuccess } from '~/client/util/toastr'; import { useQuestionnaireModal } from '~/features/questionnaire/client/stores/model'; import { useCurrentUser } from '~/stores-universal/context'; import loggerFactory from '~/utils/logger'; import { StatusType } from '../../interfaces/questionnaire-answer-status'; import type { IQuestionnaireOrderHasId } from '../../interfaces/questionnaire-order'; import { GuestQuestionnaireAnswerStatusService } from '../services/guest-questionnaire-answer-status'; const logger = loggerFactory('growi:QuestionnaireToast'); type QuestionnaireToastProps = { questionnaireOrder: IQuestionnaireOrderHasId, } const QuestionnaireToast = ({ questionnaireOrder }: QuestionnaireToastProps): JSX.Element => { const { open: openQuestionnaireModal } = useQuestionnaireModal(); const { data: currentUser } = useCurrentUser(); const lang = currentUser?.lang; const [isOpen, setIsOpen] = useState(true); const { t } = useTranslation(); const answerBtnClickHandler = useCallback(() => { openQuestionnaireModal(questionnaireOrder._id, () => setIsOpen(false)); }, [openQuestionnaireModal, questionnaireOrder._id]); const denyBtnClickHandler = useCallback(async() => { // Immediately close setIsOpen(false); try { await apiv3Put('/questionnaire/deny', { questionnaireOrderId: questionnaireOrder._id, }); if (currentUser == null) { GuestQuestionnaireAnswerStatusService.setStatus(questionnaireOrder._id, StatusType.denied); } toastSuccess(t('questionnaire.denied')); } catch (e) { logger.error(e); } }, [questionnaireOrder._id, t, currentUser]); // No showing toasts since not important const closeBtnClickHandler = useCallback(async() => { setIsOpen(false); try { await apiv3Put('/questionnaire/skip', { questionnaireOrderId: questionnaireOrder._id, }); if (currentUser == null) { GuestQuestionnaireAnswerStatusService.setStatus(questionnaireOrder._id, StatusType.skipped); } } catch (e) { logger.error(e); } }, [questionnaireOrder._id, currentUser]); const questionnaireOrderShortTitle = lang === 'en_US' ? questionnaireOrder.shortTitle.en_US : questionnaireOrder.shortTitle.ja_JP; return (