UNPKG

@trellixio/roaster-coffee

Version:
67 lines (61 loc) 2.54 kB
'use strict'; var React = require('react'); var reactTransitionGroup = require('react-transition-group'); var index$4 = require('../../../utils/classNames/index.js'); var index$2 = require('../../../utils/guid/index.js'); var index$1 = require('../../../utils/useDidUpdate/index.js'); var index = require('../../../utils/useForceUpdate/index.js'); require('@floating-ui/react'); var events = require('../events.js'); var Toasts_context = require('../Toasts.context.js'); var index$3 = require('../ToastsContainer/index.js'); var useToastsState = require('./useToastsState/useToastsState.js'); function _interopNamespaceDefault(e) { var n = Object.create(null); if (e) { for (var k in e) { n[k] = e[k]; } } n.default = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React); function ToastsProvider({ className, autoClose = 4e3, limit = 5, children }) { const forceUpdate = index.useForceUpdate(); const refs = React__namespace.useRef({}); const previousLength = React__namespace.useRef(0); const { toasts, queue, showToast, updateToast, hideToast, clean, cleanQueue } = useToastsState.default({ limit }); index$1.useDidUpdate(() => { if (toasts.length > previousLength.current) { setTimeout(() => forceUpdate(), 0); } previousLength.current = toasts.length; }, [toasts]); events.useToastsEvents({ show: showToast, hide: hideToast, update: updateToast, clean, cleanQueue }); const items = toasts.map((toast) => { toast.id = toast.id || index$2.guid(); return /* @__PURE__ */ React__namespace.createElement(reactTransitionGroup.Transition, { key: toast.id, nodeRef: { current: refs.current[toast.id] } }, () => /* @__PURE__ */ React__namespace.createElement( index$3.ToastsContainer, { innerRef: (node) => { refs.current[toast.id] = node; }, toast, onHide: hideToast, autoClose } )); }); const contextValue = React__namespace.useMemo(() => ({ toasts, queue }), []); return /* @__PURE__ */ React__namespace.createElement(Toasts_context.ToastsContext.Provider, { value: contextValue }, /* @__PURE__ */ React__namespace.createElement("section", { className: index$4.classNames("toasts", className) }, /* @__PURE__ */ React__namespace.createElement(reactTransitionGroup.TransitionGroup, null, items)), children); } ToastsProvider.displayName = "ToastsProvider"; exports.ToastsProvider = ToastsProvider; //# sourceMappingURL=index.js.map