{"version":3,"file":"useModal-x1DKDYeB.js","sources":["../../../app/javascript/shared/hooks/useModal.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\ntype ModalOptionsType = {\n defaultOpen?: boolean;\n afterOpen?: () => void;\n afterClose?: () => void;\n};\n\nconst useModal = >(\n defaultModalProps: T = {} as T,\n options?: ModalOptionsType,\n) => {\n const { afterOpen, afterClose, defaultOpen = false } = options || {};\n const cacheKeyRef = useRef(0);\n const [modal, setModal] = useState(defaultOpen);\n const [modalProps, setModalProps] = useState(defaultModalProps);\n\n const openModal = (newModalProps = {} as T) => {\n setModalProps(newModalProps);\n setModal(true);\n if (afterOpen) {\n afterOpen();\n }\n };\n\n const closeModal = () => {\n setModalProps(defaultModalProps);\n setModal(false);\n cacheKeyRef.current += 1;\n if (afterClose) {\n afterClose();\n }\n };\n\n const toggleModal = (newModalProps = {} as T) => {\n if (modal) {\n closeModal();\n } else {\n openModal(newModalProps);\n }\n };\n\n return {\n modal,\n modalKey: cacheKeyRef.current,\n modalProps,\n toggleModal,\n closeModal,\n openModal,\n setModalProps,\n };\n};\n\nexport default useModal;\n"],"names":["useModal","defaultModalProps","options","afterOpen","afterClose","defaultOpen","cacheKeyRef","useRef","modal","setModal","useState","modalProps","setModalProps","openModal","newModalProps","closeModal","toggleModal"],"mappings":"yCAQA,MAAMA,EAAW,CACfC,EAAuB,GACvBC,IACG,CACH,KAAM,CAAE,UAAAC,EAAW,WAAAC,EAAY,YAAAC,EAAc,EAAM,EAAIH,GAAW,GAC5DI,EAAcC,SAAO,CAAC,EACtB,CAACC,EAAOC,CAAQ,EAAIC,WAASL,CAAW,EACxC,CAACM,EAAYC,CAAa,EAAIF,WAAYT,CAAiB,EAE3DY,EAAY,CAACC,EAAgB,KAAY,CAC7CF,EAAcE,CAAa,EAC3BL,EAAS,EAAI,EACTN,GACQA,GACZ,EAGIY,EAAa,IAAM,CACvBH,EAAcX,CAAiB,EAC/BQ,EAAS,EAAK,EACdH,EAAY,SAAW,EACnBF,GACSA,GACb,EAGIY,EAAc,CAACF,EAAgB,KAAY,CAC3CN,EACSO,IAEXF,EAAUC,CAAa,CACzB,EAGK,MAAA,CACL,MAAAN,EACA,SAAUF,EAAY,QACtB,WAAAK,EACA,YAAAK,EACA,WAAAD,EACA,UAAAF,EACA,cAAAD,CAAA,CAEJ"}