@trellixio/roaster-coffee
Version:
Beans' product component library
67 lines (61 loc) • 2.54 kB
JavaScript
;
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