UNPKG

@yamada-ui/react

Version:

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

78 lines (74 loc) 2.22 kB
"use client"; const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs'); const require_system_provider = require('../../core/system/system-provider.cjs'); let react = require("react"); react = require_rolldown_runtime.__toESM(react); //#region src/components/snacks/use-snacks.tsx let counter = 0; /** * `useSnacks` is a custom hook for controlling notifications used in forms and the like. * * @see https://yamada-ui.com/docs/hooks/use-snacks */ const useSnacks = (options = {}) => { const [items, setItems] = (0, react.useState)([]); const { config } = require_system_provider.useSystem(); const systemOptions = (0, react.useMemo)(() => config.snacks ?? {}, [config]); const defaultOptions = (0, react.useMemo)(() => ({ ...systemOptions, ...options }), [options, systemOptions]); const { direction, limit = 3, startIndex } = defaultOptions; const getOptions = (0, react.useCallback)((options$1) => ({ ...defaultOptions, ...options$1 }), [defaultOptions]); return { snack: (0, react.useMemo)(() => { const methods = (options$1 = {}) => { options$1 = getOptions(options$1); counter += 1; const { id = counter.toString(),...rest } = options$1; const onClose = () => setItems((prev) => prev.filter((prevOptions) => prevOptions.id !== id)); const snack = { id, onClose, ...rest }; setItems((prev) => [...prev.splice(-1 * ((limit ?? Infinity) - 1)), snack]); return id; }; methods.update = (id, options$1) => { options$1 = getOptions(options$1); setItems((prev) => prev.map((prevOptions) => prevOptions.id === id ? { ...prevOptions, ...options$1 } : prevOptions)); }; methods.closeAll = () => { setItems([]); }; methods.close = (id) => { setItems((prev) => prev.filter((prevOptions) => prevOptions.id !== id)); }; methods.isActive = (id) => !!items.find((prevOptions) => prevOptions.id === id); return methods; }, [ items, limit, getOptions ]), snacks: (0, react.useMemo)(() => ({ direction, items, startIndex }), [ direction, startIndex, items ]) }; }; //#endregion exports.useSnacks = useSnacks; //# sourceMappingURL=use-snacks.cjs.map