@nguyenmv2/buy-button
Version:
BuyButton.js allows merchants to build Shopify interfaces into any website
73 lines (55 loc) • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = formatMoney;
var _moneyFormat = _interopRequireDefault(require("../defaults/money-format"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var placeholderRegex = /\{\{\s*(\w+)\s*\}\}/;
var thousandsRegex = /(\d)(?=(\d\d\d)+(?!\d))/g;
function formatWithDelimiters(number) {
var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
var thousands = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ',';
var decimal = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';
if (isNaN(number) || number == null) {
return 0;
}
var fixedNumber = (number / 100.0).toFixed(precision);
var parts = fixedNumber.split('.');
var dollars = parts[0].replace(thousandsRegex, "$1".concat(thousands));
var cents = parts[1] ? decimal + parts[1] : '';
return dollars + cents;
}
function formatMoney(amount, format) {
var cents = amount * 100;
if (typeof cents === 'string') {
cents = cents.replace('.', '');
}
var value = '';
var formatString = format || _moneyFormat.default;
var placeholderMatch = formatString.match(placeholderRegex);
if (!placeholderMatch) {
formatString = _moneyFormat.default;
placeholderMatch = formatString.match(placeholderRegex);
}
switch (placeholderMatch[1]) {
case 'amount':
value = formatWithDelimiters(cents);
break;
case 'amount_no_decimals':
value = formatWithDelimiters(cents, 0);
break;
case 'amount_with_comma_separator':
value = formatWithDelimiters(cents, 2, '.', ',');
break;
case 'amount_no_decimals_with_comma_separator':
value = formatWithDelimiters(cents, 0, '.', ',');
break;
case 'amount_no_decimals_with_space_separator':
value = formatWithDelimiters(cents, 0, ' ');
break;
default:
value = formatWithDelimiters(cents);
}
return formatString.replace(placeholderRegex, value);
}