fomantic-ui-react
Version:
Fomantic-UI React -- A React Component Library.
266 lines (237 loc) • 9.9 kB
JavaScript
/**
* 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