@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
74 lines (70 loc) • 2.63 kB
JavaScript
"use client";
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
const require_utils_index = require('../../utils/index.cjs');
const require_system_provider = require('../../core/system/system-provider.cjs');
const require_notice = require('./notice.cjs');
const require_notice_provider = require('./notice-provider.cjs');
let react = require("react");
react = require_rolldown_runtime.__toESM(react);
let react_jsx_runtime = require("react/jsx-runtime");
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
let sonner = require("sonner");
sonner = require_rolldown_runtime.__toESM(sonner);
//#region src/components/notice/use-notice.tsx
/**
* `useNotice` is a custom hook that controls the notifications of the application using Sonner.
*
* @see https://yamada-ui.com/docs/hooks/use-notice
*/
const useNotice = (options = {}) => {
const { getId, getLimit, updateLimit } = require_notice_provider.useNoticeContext();
const { config } = require_system_provider.useSystem();
const systemOptions = (0, react.useMemo)(() => (0, require_utils_index.utils_exports.omitObject)(config.notice ?? {}, ["expand"]), [config]);
const defaultOptions = (0, react.useMemo)(() => ({
...systemOptions,
...options
}), [options, systemOptions]);
const getOptions = (0, react.useCallback)((options$1) => ({
...defaultOptions,
...options$1
}), [defaultOptions]);
return (0, react.useMemo)(() => {
const notice = (options$1 = {}) => {
options$1 = getOptions(options$1);
const { closable = true, closeStrategy = ["click", "drag"], duration, limit = 3, placement = "start",...props } = options$1;
if (limit) {
if (getLimit(placement) !== limit) updateLimit({
limit,
placement
});
}
const closeStrategies = (0, require_utils_index.utils_exports.isArray)(closeStrategy) ? closeStrategy : [closeStrategy];
const resolvedOptions = {
dismissible: closeStrategies.includes("drag") && closable,
duration: duration ?? Number.POSITIVE_INFINITY,
toasterId: getId(placement)
};
return sonner.toast.custom((id) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_notice.NoticeItem, {
...props,
id,
closable,
closeStrategies
}), resolvedOptions);
};
notice.close = (id) => sonner.toast.dismiss(id);
notice.closeAll = () => sonner.toast.dismiss();
notice.update = (id, options$1) => {
sonner.toast.dismiss(id);
return notice(options$1);
};
return notice;
}, [
getLimit,
getOptions,
getId,
updateLimit
]);
};
//#endregion
exports.useNotice = useNotice;
//# sourceMappingURL=use-notice.cjs.map