UNPKG

fomantic-ui-react

Version:

Fomantic-UI React -- A React Component Library.

266 lines (237 loc) 9.9 kB
/** * fomantic-ui-react v0.0.1-alpha.10 * (c) 2022 FireLoong <fireloong@foxmail.com> * @license MIT */ import { _ as _defineProperty, a as _objectWithoutProperties } from './dep-9f1126c1.js'; import { _ as _toConsumableArray } from './dep-529aef5e.js'; import { _ as _slicedToArray } from './dep-dc9b74a1.js'; import React, { forwardRef, useState, useEffect, useContext, useImperativeHandle, createContext, createRef, createElement } from 'react'; import { render } from 'react-dom'; import classNames from 'classnames'; import _ from 'lodash'; import { Header } from '../header/index.js'; import { Icon } from '../icon/index.js'; import { Transition } from '../transition/index.js'; import { Div } from '../div/index.js'; import { uniq } from '../_util/classNamesUniq.js'; var _excluded$1 = ["className", "theme", "compact", "title", "message", "closeIcon", "displayTime", "id", "onCloseClick"]; function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var Toast = /*#__PURE__*/forwardRef(function (_ref, ref) { var className = _ref.className, _ref$theme = _ref.theme, theme = _ref$theme === void 0 ? "neutral" : _ref$theme, _ref$compact = _ref.compact, compact = _ref$compact === void 0 ? true : _ref$compact, title = _ref.title, message = _ref.message, closeIcon = _ref.closeIcon, _ref$displayTime = _ref.displayTime, displayTime = _ref$displayTime === void 0 ? 3e3 : _ref$displayTime, id = _ref.id, onCloseClick = _ref.onCloseClick, props = _objectWithoutProperties(_ref, _excluded$1); var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), visible = _useState2[0], setVisible = _useState2[1]; var _useState3 = useState(false), _useState4 = _slicedToArray(_useState3, 2), box = _useState4[0], setBox = _useState4[1]; useEffect(function () { setTimeout(function () { setBox(true); setVisible(true); }); }, []); useEffect(function () { var timer; if (visible) { if (displayTime > 0) { timer = setTimeout(function () { clearTimeout(timer); setVisible(false); setTimeout(function () { setBox(false); id && remove(id); }, 550); }, displayTime); } } return function () { if (timer) clearTimeout(timer); }; }, [visible]); var remove = useContext(ToastRemoveContext); useImperativeHandle(ref, function () { return { close: function close() { return id && remove(id); } }; }); return /* @__PURE__ */React.createElement(Div, _objectSpread$1({ as: Transition, className: uniq(classNames("floating", { "toast-box": box, compact: compact, unclickable: closeIcon }, className)), animation: "scale", duration: 500, visible: visible, onClick: function onClick(e) { if (!closeIcon) { setVisible(false); setTimeout(function () { onCloseClick === null || onCloseClick === void 0 ? void 0 : onCloseClick({ e: e }); }, 500); } } }, props), /* @__PURE__ */React.createElement("div", { className: classNames("ui", "toast", theme, { compact: compact }, "visible") }, /* @__PURE__ */React.createElement("div", { className: "content" }, title && /* @__PURE__ */React.createElement(Header, null, title), /* @__PURE__ */React.createElement("div", { className: "message" }, message)), closeIcon && /* @__PURE__ */React.createElement(Icon, { name: "close", onClick: function onClick(e) { setVisible(false); setTimeout(function () { onCloseClick === null || onCloseClick === void 0 ? void 0 : onCloseClick({ e: e }); }, 500); } }), /* @__PURE__ */React.createElement("span", { className: "wait progressing pausable" }))); }); Toast.displayName = "Toast"; var _excluded = ["as", "className", "position", "context", "zIndex", "newestOnTop"], _excluded2 = ["ref", "key", "onCloseClick"]; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var seed = 0; var listMap = /* @__PURE__ */new Map(); var ToastRemoveContext = /*#__PURE__*/createContext(function () {}); var ToastContainer = /*#__PURE__*/forwardRef(function (_ref, ref) { var _ref$as = _ref.as, as = _ref$as === void 0 ? "div" : _ref$as, className = _ref.className, _ref$position = _ref.position, position = _ref$position === void 0 ? "top right" : _ref$position, _ref$context = _ref.context, context = _ref$context === void 0 ? "body" : _ref$context, zIndex = _ref.zIndex, newestOnTop = _ref.newestOnTop, props = _objectWithoutProperties(_ref, _excluded); var _useState = useState([]), _useState2 = _slicedToArray(_useState, 2), list = _useState2[0], setList = _useState2[1]; if (!as) { as = "div"; } var push = function push(options) { var key = String(seed += 1); var ref2 = /*#__PURE__*/createRef(); setList(function (oldList) { return newestOnTop ? [_objectSpread(_objectSpread({}, options), {}, { id: key, key: key, ref: ref2 })].concat(_toConsumableArray(oldList)) : [].concat(_toConsumableArray(oldList), [_objectSpread(_objectSpread({}, options), {}, { id: key, key: key, ref: ref2 })]); }); return Promise.resolve(ref2.current); }; var remove = function remove(key) { setList(function (oldList) { var index = oldList.findIndex(function (item) { return item.key === key; }); if (index !== -1) { var tempList = _toConsumableArray(oldList); tempList.splice(index, 1); return _toConsumableArray(tempList); } return oldList; }); }; var removeAll = function removeAll() { setList([]); }; useImperativeHandle(ref, function () { return { push: push, remove: remove, removeAll: removeAll }; }); return /* @__PURE__ */React.createElement(ToastRemoveContext.Provider, { value: remove }, /*#__PURE__*/createElement(as, _objectSpread({ className: classNames("ui", "toast-container", position, className), style: { zIndex: zIndex } }, props), list.map(function (tProps) { var ref2 = tProps.ref, key = tProps.key, _onCloseClick = tProps.onCloseClick, sProps = _objectWithoutProperties(tProps, _excluded2); return /* @__PURE__ */React.createElement(Toast, _objectSpread({ ref: ref2, key: key, onCloseClick: function onCloseClick(e) { remove(key); _onCloseClick === null || _onCloseClick === void 0 ? void 0 : _onCloseClick(e); } }, sProps)); }))); }); var fetchListInstance = function fetchListInstance(containerOptions) { return new Promise(function (resolve) { var attach = function () { var parentElement = document.body; var context = containerOptions.context || "body"; if (typeof context === "string") { var element2 = document.querySelector(context); if (element2 instanceof HTMLElement) parentElement = element2; } if (context instanceof HTMLElement) parentElement = context; var containerClassName = "fomantic-toast-".concat(_.kebabCase(containerOptions.position || "top right")); var container = parentElement.querySelector(".".concat(containerClassName)); if (container && container instanceof HTMLElement) { return container; } var element = document.createElement("div"); element.setAttribute("class", containerClassName); parentElement.appendChild(element); return element; }(); var hasExec = false; render( /* @__PURE__ */React.createElement(ToastContainer, _objectSpread(_objectSpread({}, containerOptions), {}, { ref: function ref(instance) { if (!hasExec) { hasExec = true; listMap.set(containerOptions.position || "top right", instance); resolve(instance || void 0); } } })), attach); }); }; export { Toast as T, ToastRemoveContext as a, fetchListInstance as f, listMap as l }; //# sourceMappingURL=dep-03f131db.js.map