UNPKG

@yamada-ui/react

Version:

React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion

51 lines (47 loc) 1.76 kB
"use client"; const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs'); const require_utils_index = require('../../utils/index.cjs'); const require_use_disclosure = require('./use-disclosure.cjs'); let react = require("react"); react = require_rolldown_runtime.__toESM(react); //#region src/hooks/use-disclosure/use-promise-disclosure.ts /** * `usePromiseDisclosure` is a custom hook that helps handle common open/close or toggle scenarios with promises. * It can be used to control components such as `Modal`, `Dialog`, `Drawer`, etc. * * @see https://yamada-ui.com/docs/hooks/use-promise-disclosure */ const usePromiseDisclosure = ({ disableCloseOnSuccess = false, error,...rest } = {}) => { const { open, onClose: onInternalClose, onOpen: onInternalOpen, onToggle } = require_use_disclosure.useDisclosure(rest); const rejectRef = (0, react.useRef)(void 0); const resolveRef = (0, react.useRef)(require_utils_index.utils_exports.noop); const onOpen = (0, react.useCallback)(async (value) => { const promise = new Promise((resolve, reject) => { resolveRef.current = (async (value$1) => { rejectRef.current = void 0; resolve(value$1); if (!disableCloseOnSuccess) await onInternalClose(value$1); }); rejectRef.current = reject; }); await onInternalOpen(value); return await promise; }, [ onInternalOpen, onInternalClose, disableCloseOnSuccess ]); return { open, onClose: (0, react.useCallback)(async (value) => { rejectRef.current?.(error); await onInternalClose(value); }, [onInternalClose, error]), onOpen, onSuccess: resolveRef.current, onToggle }; }; //#endregion exports.usePromiseDisclosure = usePromiseDisclosure; //# sourceMappingURL=use-promise-disclosure.cjs.map