{"version":3,"file":"useMainQuestion.cjs","sources":["../../../../../src/components/feedback/main-question/useMainQuestion.ts"],"sourcesContent":["import {\n    type Dispatch,\n    type FormEventHandler,\n    type SetStateAction,\n    useCallback,\n    useEffect,\n    useRef,\n    useState,\n} from \"react\";\nimport type { FeedbackOption, FeedbackType } from \"../types.js\";\n\ntype Value =\n    | FeedbackOption<string | number>\n    | FeedbackOption<string | number>[]\n    | undefined;\n\ntype MainQuestion = {\n    currentValue: Value;\n    setCurrentValue: Dispatch<SetStateAction<Value>>;\n    message: string | undefined;\n    setMessage: Dispatch<SetStateAction<string | undefined>>;\n    submitted: boolean;\n    handleSubmit: FormEventHandler<HTMLFormElement>;\n};\n\nexport const useMainQuestion = (\n    onSubmit: (f: FeedbackType) => void,\n): MainQuestion => {\n    const [currentValue, setCurrentValue] = useState<\n        FeedbackOption | FeedbackOption[]\n    >();\n    const [message, setMessage] = useState<string>();\n    const [submitted, setSubmitted] = useState(false);\n\n    const feedbackRef = useRef({\n        onSubmit,\n        currentValue,\n        message,\n        submitted,\n    });\n\n    useEffect(() => {\n        feedbackRef.current = {\n            ...feedbackRef.current,\n            onSubmit,\n            currentValue,\n            message,\n            submitted,\n        };\n    }, [onSubmit, currentValue, message, submitted]);\n\n    const submitHandler = useCallback((intentionalSubmit = true) => {\n        const { message, currentValue, submitted, onSubmit } =\n            feedbackRef.current;\n\n        if (!submitted && currentValue !== undefined) {\n            const feedbackValue = Array.isArray(currentValue)\n                ? currentValue.map((option) => option.value)\n                : currentValue?.value;\n            onSubmit({\n                feedbackValue,\n                intentionalSubmit,\n                ...(intentionalSubmit && message ? { message } : {}),\n            });\n        }\n    }, []);\n\n    const autoSubmit = useCallback(() => submitHandler(false), [submitHandler]);\n\n    useEffect(() => {\n        if (typeof window !== \"undefined\") {\n            window.addEventListener(\"beforeunload\", autoSubmit);\n        }\n        return () => {\n            autoSubmit();\n            window.removeEventListener(\"beforeunload\", autoSubmit);\n        };\n    }, [autoSubmit]);\n\n    const handleSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n        e.preventDefault();\n        submitHandler();\n        setSubmitted(true);\n    };\n\n    return {\n        currentValue,\n        setCurrentValue,\n        message,\n        setMessage,\n        submitted,\n        handleSubmit,\n    };\n};\n"],"names":["onSubmit","currentValue","setCurrentValue","useState","message","setMessage","submitted","setSubmitted","feedbackRef","useRef","useEffect","current","submitHandler","useCallback","intentionalSubmit","feedbackValue","Array","isArray","map","option","value","autoSubmit","window","addEventListener","removeEventListener","handleSubmit","e","preventDefault"],"mappings":"iIA0BIA,IAEA,MAAOC,EAAcC,GAAmBC,cAGjCC,EAASC,GAAcF,cACvBG,EAAWC,GAAgBJ,EAAAA,UAAS,GAErCK,EAAcC,EAAAA,OAAO,CACvBT,SAAAA,EACAC,aAAAA,EACAG,QAAAA,EACAE,UAAAA,IAGJI,EAAAA,UAAU,KACNF,EAAYG,QAAU,IACfH,EAAYG,QACfX,SAAAA,EACAC,aAAAA,EACAG,QAAAA,EACAE,UAAAA,IAEL,CAACN,EAAUC,EAAcG,EAASE,IAErC,MAAMM,EAAgBC,EAAAA,YAAY,CAACC,GAAoB,KACnD,MAAQV,QAAAA,EAASH,aAAAA,EAAcK,UAAAA,EAAWN,SAAAA,GACtCQ,EAAYG,QAEhB,IAAKL,QAA8B,IAAjBL,EAA4B,CAI1CD,EAAS,CACLe,cAJkBC,MAAMC,QAAQhB,GAC9BA,EAAaiB,IAAKC,GAAWA,EAAOC,OACpCnB,GAAcmB,MAGhBN,kBAAAA,KACIA,GAAqBV,EAAU,CAAEA,QAAAA,GAAY,CAAA,GAEzD,GACD,IAEGiB,EAAaR,EAAAA,YAAY,IAAMD,GAAc,GAAQ,CAACA,IAE5DF,OAAAA,EAAAA,UAAU,YACKY,OAAW,KAClBA,OAAOC,iBAAiB,eAAgBF,GAErC,KACHA,IACAC,OAAOE,oBAAoB,eAAgBH,KAEhD,CAACA,IAQG,CACHpB,aAAAA,EACAC,gBAAAA,EACAE,QAAAA,EACAC,WAAAA,EACAC,UAAAA,EACAmB,aAZqDC,IACrDA,EAAEC,iBACFf,IACAL,GAAa"}