@bigbinary/neetoui
Version:
neetoUI drives the experience at all neeto products
312 lines (308 loc) • 12.7 kB
JavaScript
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
import _typeof from '@babel/runtime/helpers/typeof';
import _extends from '@babel/runtime/helpers/extends';
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
import React__default from 'react';
import { t } from 'i18next';
import { Close, CheckCircle, Warning, Info } from '@bigbinary/neeto-icons';
import { Slide, toast } from 'react-toastify';
import { n as noop, U as UniqueArray } from './index-Dxaw6gl9.js';
import Linkify from 'linkify-react';
import '@babel/runtime/helpers/classCallCheck';
import '@babel/runtime/helpers/createClass';
import '@bigbinary/neeto-cist';
import 'qs';
import 'ramda';
import './en-CIkXIYyl.js';
import '@babel/runtime/helpers/toConsumableArray';
import 'dayjs';
import 'dayjs/plugin/localeData';
import 'dayjs/plugin/utc';
import 'dayjs/plugin/weekday';
import 'dayjs/plugin/weekOfYear';
var Toast = function Toast(_ref) {
var type = _ref.type,
message = _ref.message,
_ref$buttonLabel = _ref.buttonLabel,
buttonLabel = _ref$buttonLabel === void 0 ? "" : _ref$buttonLabel,
_ref$onClick = _ref.onClick,
_onClick = _ref$onClick === void 0 ? noop : _ref$onClick;
return /*#__PURE__*/React__default.createElement("div", {
"data-cy": "toastr-".concat(type, "-container"),
"data-test": "toastr-".concat(type, "-container")
}, /*#__PURE__*/React__default.createElement(Linkify, {
options: {
defaultProtocol: "https",
rel: "noreferrer",
target: "_blank"
}
}, /*#__PURE__*/React__default.createElement("p", null, message)), buttonLabel && /*#__PURE__*/React__default.createElement("div", {
className: "toastr-message-container__btn-wrapper"
}, /*#__PURE__*/React__default.createElement("button", {
className: "neeto-ui-btn neeto-ui-btn--style-tertiary",
"data-cy": "toastr-".concat(type, "-button"),
onClick: function onClick(e) {
e.stopPropagation();
_onClick();
}
}, buttonLabel)));
};
var _excluded = ["closeToast"],
_excluded2 = ["buttonLabel", "onClick", "showIcon"];
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 TOAST_CONFIG = {
autoClose: 3500,
transition: Slide,
position: toast.POSITION.BOTTOM_LEFT,
hideProgressBar: true,
closeButton: function closeButton(_ref) {
var closeToast = _ref.closeToast,
props = _objectWithoutProperties(_ref, _excluded);
return /*#__PURE__*/React__default.createElement(Close, _extends({
className: "neeto-ui-toastr__close-button",
color: "currentColor",
"data-cy": "toastr-close-button",
size: 16,
onClick: closeToast
}, props));
},
role: "log",
className: "neeto-ui-toastr"
};
var TOAST_ICON = {
success: /*#__PURE__*/React__default.createElement(CheckCircle, {
className: "neeto-ui-text-white",
"data-cy": "success-toast-icon",
"data-testid": "success-toast-icon"
}),
warning: /*#__PURE__*/React__default.createElement(Warning, {
className: "neeto-ui-text-white",
"data-cy": "warning-toast-icon",
"data-testid": "warning-toast-icon"
}),
error: /*#__PURE__*/React__default.createElement(Warning, {
className: "neeto-ui-text-white",
"data-cy": "error-toast-icon",
"data-testid": "error-toast-icon"
}),
info: /*#__PURE__*/React__default.createElement(Info, {
className: "neeto-ui-text-white",
"data-cy": "info-toast-icon",
"data-testid": "info-toast-icon"
})
};
var toastrList = new UniqueArray();
var parseToastrConfig = function parseToastrConfig(config) {
if (_typeof(config[0]) === "object") {
var _config$ = config[0],
_buttonLabel = _config$.buttonLabel,
_onClick = _config$.onClick,
_showIcon = _config$.showIcon,
_customConfig = _objectWithoutProperties(_config$, _excluded2);
return {
buttonLabel: _buttonLabel,
onClick: _onClick,
showIcon: _showIcon,
customConfig: _customConfig
};
}
var _config = _slicedToArray(config, 4),
buttonLabel = _config[0],
onClick = _config[1],
customConfig = _config[2],
showIcon = _config[3];
return {
buttonLabel: buttonLabel,
onClick: onClick,
customConfig: customConfig,
showIcon: showIcon
};
};
var getToastrMessage = function getToastrMessage(message) {
if ((message === null || message === void 0 ? void 0 : message.noticeCode) === "custom_message" && "customMessage" in message) {
return message.customMessage;
} else if (message && _typeof(message) === "object" && message.noticeCode) {
return t(message.noticeCode, message);
} else if (message && _typeof(message) === "object" && message.notice) {
return message.notice;
}
return message;
};
var withUniqueCheck = function withUniqueCheck(type, toastFunc) {
return function (message) {
message = getToastrMessage(message);
for (var _len = arguments.length, toastrConfig = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
toastrConfig[_key - 1] = arguments[_key];
}
var _parseToastrConfig = parseToastrConfig(toastrConfig),
buttonLabel = _parseToastrConfig.buttonLabel,
onClick = _parseToastrConfig.onClick,
_parseToastrConfig$sh = _parseToastrConfig.showIcon,
showIcon = _parseToastrConfig$sh === void 0 ? false : _parseToastrConfig$sh,
_parseToastrConfig$cu = _parseToastrConfig.customConfig,
customConfig = _parseToastrConfig$cu === void 0 ? {} : _parseToastrConfig$cu;
var toastId = null;
if (toastrList.add({
type: type,
message: message,
buttonLabel: buttonLabel
})) {
var config = _objectSpread(_objectSpread({}, TOAST_CONFIG), {}, {
// The false value of the icon was ignored in the implementations before v9.0.2.
// After 9.0.2, the implementation is such that the icon is rendered as passed in the config.
// Since the `false` value used to show the default icon set internally, used a function that returns null
// which solved the problem.
// PR which addressed this issue: https://github.com/fkhadra/react-toastify/pull/758
icon: showIcon ? TOAST_ICON[type] : function () {
return null;
},
onClose: function onClose() {
return toastrList.remove({
type: type,
message: message,
buttonLabel: buttonLabel
});
}
}, customConfig);
toastId = toastFunc({
message: message,
buttonLabel: buttonLabel,
onClick: onClick,
config: config
});
}
return toastId;
};
};
var showSuccessToastr = withUniqueCheck("success", function (_ref2) {
var message = _ref2.message,
buttonLabel = _ref2.buttonLabel,
onClick = _ref2.onClick,
config = _ref2.config;
return toast.success( /*#__PURE__*/React__default.createElement(Toast, {
buttonLabel: buttonLabel,
message: message,
onClick: onClick,
type: "success"
}), config);
});
var showInfoToastr = withUniqueCheck("info", function (_ref3) {
var message = _ref3.message,
buttonLabel = _ref3.buttonLabel,
onClick = _ref3.onClick,
config = _ref3.config;
return toast.info( /*#__PURE__*/React__default.createElement(Toast, {
buttonLabel: buttonLabel,
message: message,
onClick: onClick,
type: "info"
}), config);
});
var showWarningToastr = withUniqueCheck("warning", function (_ref4) {
var message = _ref4.message,
buttonLabel = _ref4.buttonLabel,
onClick = _ref4.onClick,
config = _ref4.config;
return toast.warning( /*#__PURE__*/React__default.createElement(Toast, {
buttonLabel: buttonLabel,
message: message,
onClick: onClick,
type: "warning"
}), config);
});
var isError = function isError(e) {
return e && e.stack && e.message;
};
var isAxiosError = function isAxiosError(e) {
return e && _typeof(e) === "object" && e.isAxiosError === true;
};
var isString = function isString(s) {
return typeof s === "string" || s instanceof String;
};
var isArray = function isArray(a) {
return Array.isArray(a);
};
var isErrorCodeObject = function isErrorCodeObject(e) {
return _typeof(e) === "object" && "key" in e && "context" in e;
};
var errorCodeTranslation = function errorCodeTranslation(errorCode) {
if (typeof errorCode === "string") {
return t(errorCode);
} else if (isErrorCodeObject(errorCode)) {
return t(errorCode.key, errorCode.context);
}
return undefined;
};
var getErrorMessage = function getErrorMessage(response) {
var _response$error = response.error,
error = _response$error === void 0 ? "" : _response$error,
_response$errors = response.errors,
errors = _response$errors === void 0 ? [] : _response$errors,
_response$errorCode = response.errorCode,
errorCode = _response$errorCode === void 0 ? "" : _response$errorCode,
_response$errorCodes = response.errorCodes,
errorCodes = _response$errorCodes === void 0 ? [] : _response$errorCodes;
var errorMessages = "";
if (error) errorMessages = error;else if (isArray(errors)) errorMessages = errors.join("\n");
var errorCodeTranslations = errorCode && t(errorCode, response) || (errorCodes === null || errorCodes === void 0 ? void 0 : errorCodes.map(errorCodeTranslation).join("\n"));
if (errorMessages && errorCodeTranslations) {
return [errorMessages, errorCodeTranslations].join("\n");
}
return errorMessages || errorCodeTranslations;
};
var withParsedErrorMsg = function withParsedErrorMsg(toastrFunc) {
return function (errorObject) {
var _errorObject;
var errorMessage;
errorObject = getToastrMessage(errorObject);
var responseData = ((_errorObject = errorObject) === null || _errorObject === void 0 || (_errorObject = _errorObject.response) === null || _errorObject === void 0 ? void 0 : _errorObject.data) || {};
if (responseData.noticeCode === "custom_message" && "customMessage" in responseData) {
errorMessage = responseData.customMessage;
} else if (responseData !== null && responseData !== void 0 && responseData.noticeCode) {
var data = errorObject.response.data;
errorMessage = t(data.noticeCode, data);
} else if (isAxiosError(errorObject)) {
errorMessage = getErrorMessage(responseData) || errorObject.message;
} else if (isError(errorObject)) errorMessage = errorObject.message;else if (isString(errorObject)) errorMessage = errorObject;else errorMessage = "Something went wrong.";
for (var _len2 = arguments.length, toastrConfig = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
toastrConfig[_key2 - 1] = arguments[_key2];
}
var _parseToastrConfig2 = parseToastrConfig(toastrConfig),
buttonLabel = _parseToastrConfig2.buttonLabel,
onClick = _parseToastrConfig2.onClick,
customConfig = _parseToastrConfig2.customConfig,
showIcon = _parseToastrConfig2.showIcon;
return toastrFunc(errorMessage, _objectSpread({
buttonLabel: buttonLabel,
onClick: onClick,
role: "alert",
autoClose: false,
showIcon: showIcon
}, customConfig));
};
};
var showErrorToastr = withParsedErrorMsg(withUniqueCheck("error", function (_ref5) {
var message = _ref5.message,
buttonLabel = _ref5.buttonLabel,
onClick = _ref5.onClick,
showIcon = _ref5.showIcon,
config = _ref5.config;
return toast.error( /*#__PURE__*/React__default.createElement(Toast, {
buttonLabel: buttonLabel,
message: message,
onClick: onClick,
showIcon: showIcon,
type: "error"
}), config);
}));
var Toastr = {
info: showInfoToastr,
show: showInfoToastr,
success: showSuccessToastr,
error: showErrorToastr,
warning: showWarningToastr
};
export { Toastr as default };
//# sourceMappingURL=Toastr.js.map