UNPKG

wix-style-react

Version:
66 lines (65 loc) 2.83 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.useToastContainer = useToastContainer; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = require("react"); var _core = require("../core"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function useToastContainer(props) { var [, forceUpdate] = (0, _react.useReducer)(x => x + 1, 0); var containerRef = (0, _react.useRef)(null); var toastToRender = (0, _react.useRef)(new Map()).current; var instance = (0, _react.useRef)({ toastKey: 1, props }).current; (0, _react.useEffect)(() => { _core.eventManager.cancelEmit(_core.Event.WillUnmount).on(_core.Event.Show, buildToast).on(_core.Event.Clear, toastId => containerRef.current && removeToast(toastId)).emit(_core.Event.DidMount, instance); return () => { toastToRender.clear(); _core.eventManager.emit(_core.Event.WillUnmount, instance); }; // TODO: fix ESLint error // eslint-disable-next-line react-hooks/exhaustive-deps }, []); (0, _react.useEffect)(() => { instance.props = props; }); var removeToast = toastId => { if (toastId !== undefined && toastToRender.has(toastId)) { toastToRender.delete(toastId); forceUpdate(); } }; var buildToast = (content, options) => { var toastProps = _objectSpread(_objectSpread({}, options), {}, { key: instance.toastKey++, onClose: event => { event == null || event.preventDefault(); event == null || event.stopPropagation(); removeToast(options.toastId); options.onClose == null || options.onClose(event); } }); appendToast(content, toastProps); }; var appendToast = (content, toastProps) => { if (!containerRef.current) return; var { toastId } = toastProps; var toast = { content, props: toastProps }; toastToRender.set(toastId, toast); forceUpdate(); }; return { toasts: Array.from(toastToRender.values()), containerRef }; } //# sourceMappingURL=useToastContainer.js.map