@chatui/core
Version:
The React library for Chatbot UI
99 lines (97 loc) • 3.24 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Price = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _react = _interopRequireDefault(require("react"));
var _clsx = _interopRequireDefault(require("clsx"));
var _excluded = ["className", "price", "currency", "locale", "original", "autoFit"];
/* eslint-disable react/no-array-index-key */
var canFormat = 'Intl' in window && typeof Intl.NumberFormat.prototype.formatToParts === 'function';
/**
* xl - 60
* lg - 48
* md - 36
* sm - 28
*/
function getSize(parts) {
var getPartLength = function getPartLength(type) {
var _parts$find;
return ((_parts$find = parts.find(function (p) {
return p.type === type;
})) === null || _parts$find === void 0 || (_parts$find = _parts$find.value) === null || _parts$find === void 0 ? void 0 : _parts$find.length) || 0;
};
var len1 = getPartLength('integer');
var len2 = getPartLength('fraction');
if (len1 < 2) {
return 'xl';
}
if (len1 === 2) {
return len2 ? 'lg' : 'xl';
}
if (len1 === 3) {
return len2 ? len2 > 1 ? 'md' : 'lg' : 'xl';
}
if (len1 === 4) {
return len2 ? len2 > 1 ? 'sm' : 'md' : 'lg';
}
return len2 ? 'sm' : 'md';
}
var Price = exports.Price = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
var className = props.className,
price = props.price,
currency = props.currency,
locale = props.locale,
original = props.original,
autoFit = props.autoFit,
other = (0, _objectWithoutProperties2.default)(props, _excluded);
var parts = [];
if (locale && currency && canFormat) {
parts = new Intl.NumberFormat(locale, {
style: 'currency',
currency: currency,
useGrouping: false,
minimumFractionDigits: 0
}).formatToParts(price);
} else {
parts = undefined;
}
// 部分 Android 机只返回 `[{ type: 'literal', value: '¥5.88' }]`
if (!parts || parts.length < 2) {
var decimal = '.';
var _split = "".concat(price).split(decimal),
_split2 = (0, _slicedToArray2.default)(_split, 2),
integer = _split2[0],
fraction = _split2[1];
parts = [{
type: 'currency',
value: currency
}, {
type: 'integer',
value: integer
}, {
type: 'decimal',
value: fraction && decimal
}, {
type: 'fraction',
value: fraction
}];
}
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
className: (0, _clsx.default)('Price', {
'Price--original': original
}, className),
"data-size": autoFit ? getSize(parts) : undefined,
ref: ref,
"aria-label": "\u4EF7\u683C\uFF1A".concat(price)
}, other), parts.map(function (t, i) {
return t.value ? /*#__PURE__*/_react.default.createElement("span", {
className: "Price-".concat(t.type),
key: i
}, t.value) : null;
}));
});