@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
JavaScript
"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