@braineet/ui
Version:
Braineet design system
179 lines (177 loc) • 6.13 kB
JavaScript
"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;