{"version":3,"file":"useValidFormSend.mjs","sources":[""],"sourcesContent":["import type { Dispatch, RefObject, SetStateAction } from \"react\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { getElRefHelper } from \"./getElRefHelper\";\r\nimport { useFormValidation } from \"./useFormValidation\";\r\nimport { FormSend } from \"../../plugins/forms/send\";\r\n\r\ntype TUseValidFormSendReturn = {\r\n  isLoading: boolean;\r\n  isValid: boolean | null;\r\n  setIsLoading: Dispatch<SetStateAction<boolean>>;\r\n  setIsValid: Dispatch<SetStateAction<boolean | null>>;\r\n};\r\n\r\n/**\n * Хук позволяет выполнить функцию после валидации формы\n * @template TResult - тип значения, которым резолвится Promise в колбэке `onValid`.\n * @returns {TUseValidFormSendReturn} Возвращает состояние отправки (`isLoading`), состояние валидации (`isValid`) и соответствующие setter-функции.\n * @example\n * import { useValidFormSend } from \"@delement/ui/utils/react\";\r\n * import { Form } from \"@delement/ui/components\";\r\n * import { useRef } from \"react\";\r\n *\r\n * export const App = () => {\r\n *   const formRef = useRef(null);\r\n *   const onConfirm = (e) => console.debug(e);\r\n *   const { isLoading } = useValidFormSend(formRef, onConfirm);\r\n *\r\n *   return <Form extraClasses={{ isLoading }} ref={formRef} cfg={{ isIgnoreAutoSend: true }} />\r\n * }\r\n */\r\nexport const useValidFormSend = <TResult = unknown>(\r\n  formRef: RefObject<unknown>,\r\n  onValid?: (fd: FormData) => Promise<TResult>\r\n): TUseValidFormSendReturn => {\r\n\r\n  const [ isLoading, setIsLoading ] = useState<TUseValidFormSendReturn[\"isLoading\"]>(false);\r\n\r\n  const { isValid, setIsValid } = useFormValidation(formRef, null, \"form\");\r\n\r\n  useEffect(() => {\r\n    if (isValid) {\r\n      const formEl = getElRefHelper(formRef);\r\n      if (typeof onValid === \"function\" && !!formEl) {\r\n        const fd = FormSend.getFormData(formEl as HTMLFormElement);\r\n        setIsLoading(true);\r\n        const onFinally = () => {\r\n          setIsLoading(false);\r\n          setIsValid(null);\r\n        };\r\n        try {\r\n          onValid(fd)\r\n            .finally(() => {\r\n              onFinally();\r\n            });\r\n        } catch (e) {\r\n          console.error(`[useValidFormSend] \"onValid\" callback must return Promise!`, e);\r\n          onFinally();\r\n        }\r\n      }\r\n    }\r\n  }, [ isValid ]);\r\n\r\n  return {\r\n    isLoading,\r\n    isValid,\r\n    setIsLoading,\r\n    setIsValid,\r\n  };\r\n\r\n};\r\n"],"names":["useValidFormSend","formRef","onValid","isLoading","setIsLoading","useState","isValid","setIsValid","useFormValidation","useEffect","formEl","getElRefHelper","fd","FormSend","getFormData","onFinally","finally","e","console","error"],"mappings":";;;;;;;;;;;;;;;;;SA8BaA,iBAAmB,CAC9BC,QACAC,WAGA,MAAQC,UAAWC,cAAiBC,SAA+C,OAEnF,MAAMC,QAAEA,QAAOC,WAAEA,YAAeC,kBAAkBP,QAAS,KAAM,QAEjEQ,UAAU,KACR,GAAIH,QAAS,CACX,MAAMI,OAASC,eAAeV,SAC9B,UAAWC,UAAY,cAAgBQ,OAAQ,CAC7C,MAAME,GAAKC,SAASC,YAAYJ,QAChCN,aAAa,MACb,MAAMW,UAAY,KAChBX,aAAa,OACbG,WAAW,OAEb,IACEL,QAAQU,IACLI,QAAQ,KACPD,aAEN,CAAE,MAAOE,GACPC,QAAQC,MAAM,6DAA8DF,GAC5EF,WACF,CACF,CACF,GACC,CAAET,UAEL,MAAO,CACLH,oBACAG,gBACAF,0BACAG"}