"use strict";
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Amount = void 0;
var react_1 = __importDefault(require("react"));
var bem_react_classname_1 = require("bem-react-classname");
var cn_1 = require("../cn");
var heading_1 = __importDefault(require("../heading/heading"));
var label_1 = __importDefault(require("../label/label"));
var performance_1 = __importDefault(require("../performance"));
var format_amount_1 = require("../lib/format-amount");
var ZERO_MINOR_PART_REGEXP = /^0+$/;
/**
 * Компонент для отображения суммы, согласно следующему гайдлайну:
 * https://design.alfabank.ru/patterns/amount
 */
var Amount = /** @class */ (function (_super) {
    __extends(Amount, _super);
    function Amount() {
        var _this = _super !== null && _super.apply(this, arguments) || this;
        _this.cn = bem_react_classname_1.createCn('amount');
        return _this;
    }
    Amount.prototype.render = function () {
        var _a = this.props, amount = _a.amount, size = _a.size;
        var _b = format_amount_1.formatAmount(amount), majorPart = _b.majorPart, minorPart = _b.minorPart, currencySymbol = _b.currencySymbol;
        var amountInner = (react_1.default.createElement(react_1.default.Fragment, null,
            react_1.default.createElement("span", { className: this.cn('major') }, majorPart),
            this.renderSeparatorAndMinorPart(minorPart),
            this.renderCurrencySymbol(currencySymbol)));
        return (react_1.default.createElement("div", { className: this.cn({ bold: this.props.bold }), id: this.props.id, "data-test-id": this.props['data-test-id'] }, this.props.isHeading ? (react_1.default.createElement(heading_1.default, { size: size }, amountInner)) : (react_1.default.createElement(label_1.default, { size: size }, amountInner))));
    };
    Amount.prototype.renderSeparatorAndMinorPart = function (minorPart) {
        var showZeroMinorPart = this.props.showZeroMinorPart;
        var needMinorPart = false;
        if (minorPart) {
            needMinorPart = true;
            if (!showZeroMinorPart && ZERO_MINOR_PART_REGEXP.test(minorPart)) {
                needMinorPart = false;
            }
        }
        if (needMinorPart) {
            return (react_1.default.createElement(react_1.default.Fragment, null,
                react_1.default.createElement("span", { className: this.cn('separator') }, format_amount_1.AMOUNT_MAJOR_MINOR_PARTS_SEPARATOR),
                react_1.default.createElement("span", { className: this.cn('minor') }, minorPart)));
        }
        return null;
    };
    Amount.prototype.renderCurrencySymbol = function (currencySymbol) {
        return (react_1.default.createElement("span", { className: this.cn('currency') },
            format_amount_1.THINSP,
            currencySymbol));
    };
    Amount.defaultProps = {
        size: 'm',
        showZeroMinorPart: true,
        bold: false,
        isHeading: false,
    };
    Amount = __decorate([
        performance_1.default(true)
    ], Amount);
    return Amount;
}(react_1.default.Component));
exports.Amount = Amount;
exports.default = cn_1.withTheme(Amount);

//# sourceMappingURL=amount.js.map
