UNPKG

@braineet/ui

Version:

Braineet design system

179 lines (177 loc) 6.29 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"]; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } 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 = toast; exports.default = _default;