UNPKG

@wix/design-system

Version:

@wix/design-system

121 lines (120 loc) 4.67 kB
"use strict"; exports.__esModule = true; exports.ToastContainer = void 0; var _react = _interopRequireWildcard(require("react")); var _ToastContext = require("../Toast/ToastContext"); var _ToastContainer = require("./ToastContainer.classes"); var _useStackShift = require("./hooks/useStackShift"); var _useExitTransition = require("./hooks/useExitTransition"); var _jsxFileName = "/home/builduser/work/57e038ea7326c1ec/packages/wix-design-system/dist/cjs/ToastContainer/ToastContainer.tsx"; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } /* mirrors $duration / $shift-easing in styles/ToastContainer.module.scss */ var SHIFT_DURATION = 300; var SHIFT_EASING = 'cubic-bezier(0, 0, 0.2, 1)'; var reducedMotionQuery; var prefersReducedMotion = () => { var _reducedMotionQuery; if (reducedMotionQuery === undefined) { reducedMotionQuery = typeof window !== 'undefined' && typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-reduced-motion: reduce)') : null; } return !!((_reducedMotionQuery = reducedMotionQuery) != null && _reducedMotionQuery.matches); }; var ToastContainer = exports.ToastContainer = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => { var offset = _ref.offset, zIndex = _ref.zIndex, dataHook = _ref.dataHook, position = _ref.position, _ref$maxToasts = _ref.maxToasts, maxToasts = _ref$maxToasts === void 0 ? 1 : _ref$maxToasts, className = _ref.className, children = _ref.children; var toasts = _react.default.Children.toArray(children).filter(_react.isValidElement).reverse(); var stacked = maxToasts > 1; var reducedMotion = prefersReducedMotion(); var itemRefs = (0, _react.useRef)(new Map()); var hiddenByKey = (0, _react.useRef)(new Map()); var getItemRef = key => { var itemRef = itemRefs.current.get(key); if (!itemRef) { itemRef = /*#__PURE__*/(0, _react.createRef)(); itemRefs.current.set(key, itemRef); } return itemRef; }; var entries = (0, _useExitTransition.useExitTransition)({ elements: toasts, getNode: key => getItemRef(key).current }); var itemKeys = entries.map(entry => entry.key).join('|'); (0, _useStackShift.useStackShift)({ itemKeys, itemRefs, enabled: stacked && !reducedMotion, duration: SHIFT_DURATION, easing: SHIFT_EASING }); var nextHidden = new Map(); var liveIndex = 0; var items = entries.map(_ref2 => { var key = _ref2.key, element = _ref2.element, exiting = _ref2.exiting; var hidden; if (exiting) { var _hiddenByKey$current$; hidden = (_hiddenByKey$current$ = hiddenByKey.current.get(key)) !== null && _hiddenByKey$current$ !== void 0 ? _hiddenByKey$current$ : false; } else { hidden = liveIndex >= maxToasts; liveIndex += 1; } nextHidden.set(key, hidden); var containerKey = "toast-container-".concat(key); return /*#__PURE__*/_react.default.createElement("div", { key: containerKey, ref: getItemRef(key), "data-hook": containerKey, "data-hidden": hidden, className: _ToastContainer.classes.item({ hidden, exiting }), __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 84, columnNumber: 9 } }, /*#__PURE__*/_react.default.createElement(_ToastContext.ToastContext.Provider, { value: { hidden }, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 91, columnNumber: 11 } }, element)); }); hiddenByKey.current = nextHidden; return /*#__PURE__*/_react.default.createElement("div", { ref: ref, className: _ToastContainer.classes.root({ stacked }, className), "data-hook": dataHook, style: { bottom: offset, zIndex, position: position || 'fixed' }, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 101, columnNumber: 7 } }, items); }); ToastContainer.displayName = 'ToastContainer'; //# sourceMappingURL=ToastContainer.js.map