UNPKG

@braineet/ui

Version:

Braineet design system

179 lines (177 loc) 6.13 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _isFunction = _interopRequireDefault(require("lodash/isFunction")); var _isString = _interopRequireDefault(require("lodash/isString")); var _reactToastify = require("react-toastify"); var _alert = _interopRequireDefault(require("../alert")); var _box = _interopRequireDefault(require("../box")); var _pane = _interopRequireDefault(require("../pane")); var _spinner = _interopRequireDefault(require("../spinner")); var _styles = require("./styles"); var _jsxRuntime = require("react/jsx-runtime"); var _excluded = ["closeToast", "text", "icon", "children", "onClick", "appareance", "isLoading"], _excluded2 = ["icon"], _excluded3 = ["icon"]; /* eslint-disable react/prop-types */ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } var iconByType = { success: 'tick', error: 'error' }; var Msg = function Msg(_ref) { var closeToast = _ref.closeToast, text = _ref.text, icon = _ref.icon, children = _ref.children, onClick = _ref.onClick, _ref$appareance = _ref.appareance, appareance = _ref$appareance === void 0 ? 'default' : _ref$appareance, isLoading = _ref.isLoading, restOptions = _objectWithoutPropertiesLoose(_ref, _excluded); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_styles.Wrapper, { children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_pane.default, { display: "flex", alignY: "center", className: "content", children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_alert.default, { icon: isLoading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_box.default, { mr: 4, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_spinner.default, { color: "black", type: "ring", size: 16 }) }) : icon, color: appareance === 'default' ? 'black' : appareance, textStyles: { marginRight: 0 }, isClosable: !(restOptions != null && restOptions.closeButton), onClose: closeToast, children: text }) }) }); }; var createToast = function createToast(toastify, _ref2) { var icon = _ref2.icon, options = _objectWithoutPropertiesLoose(_ref2, _excluded2); return toastify(/*#__PURE__*/(0, _jsxRuntime.jsx)(Msg, _extends({}, options, { icon: icon })), _extends({}, options, { containerId: 'toast' })); }; var createAsyncToast = function createAsyncToast(promise, _ref3, options) { var pending = _ref3.pending, success = _ref3.success, error = _ref3.error; var id; if (pending) { id = createToast(_reactToastify.toast.loading, _extends({}, options, { text: pending, isLoading: true })); } var resetParams = { isLoading: null, autoClose: null, closeOnClick: null, closeButton: null, draggable: null }; var resolver = function resolver(type, input, result) { // Remove the toast if the input has not been provided. This prevents the toast from hanging // in the pending state if a success/error toast has not been provided. if (input == null) { _reactToastify.toast.dismiss(id); return; } var baseParams = _extends({ type: type, appareance: type, icon: iconByType[type] }, resetParams, options, { data: result, autoClose: false }); var params = (0, _isString.default)(input) ? { text: input } : input; // if the id is set we know that it's an update if (id) { updateToast(id, _extends({}, baseParams, params)); } else { // using toast.promise without loading createToast(params.render, _extends({}, baseParams, params)); } return result; }; var p = (0, _isFunction.default)(promise) ? promise() : promise; p.then(function (result) { return resolver('success', success, result); }).catch(function (err) { return resolver('error', error, err); }); return p; }; var updateToast = function updateToast(toastId, _ref4) { var icon = _ref4.icon, options = _objectWithoutPropertiesLoose(_ref4, _excluded3); return _reactToastify.toast.update(toastId, _extends({}, options, { render: /*#__PURE__*/(0, _jsxRuntime.jsx)(Msg, _extends({ icon: icon }, options)), containerId: 'toast' })); }; var toast = function toast(options) { return createToast(_reactToastify.toast, options); }; toast.success = function (options) { return createToast(_reactToastify.toast.success, _extends({ appareance: 'success', icon: iconByType.success }, options)); }; toast.error = function (options) { return createToast(_reactToastify.toast.error, _extends({ appareance: 'error', icon: iconByType.error }, options)); }; toast.warning = function (options) { return createToast(_reactToastify.toast.warning, _extends({ appareance: 'warning' }, options)); }; toast.info = function (options) { return createToast(_reactToastify.toast.info, _extends({ appareance: 'action' }, options)); }; toast.loading = function (options) { return createToast(_reactToastify.toast.loading, options); }; toast.update = function (toastId, options) { return updateToast(toastId, _extends({}, options)); }; toast.promise = function (promise, _ref5, options) { var pending = _ref5.pending, success = _ref5.success, error = _ref5.error; return createAsyncToast(promise, { pending: pending, success: success, error: error }, options); }; toast.defaultProps = { appareance: 'black', onClick: function onClick() {} }; var _default = exports.default = toast;