"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 __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PhoneInput = void 0;
// @ts-nocheck
/* eslint-disable max-len */
var react_1 = __importDefault(require("react"));
var bem_react_classname_1 = require("bem-react-classname");
var cn_1 = require("../cn");
var input_1 = __importDefault(require("../input/input"));
/**
 * Компонент ввода телефона по маске.
 */
var PhoneInput = /** @class */ (function (_super) {
    __extends(PhoneInput, _super);
    function PhoneInput() {
        var _this = _super !== null && _super.apply(this, arguments) || this;
        _this.cn = bem_react_classname_1.createCn('phone-input');
        _this.state = {
            updatedValue: undefined,
        };
        /**
         * Промежуточный обработчик value после изменения значения.
         * В value проверяется, что первый числовой символ 7,
         * если 7, то ничего не делаем
         * если 8, то происходит замена на 7
         * иначе вставляем 7, а остальное сдвигаем
         */
        _this.handleChange = function (value, event) {
            var onChange = _this.props.onChange;
            var valueForOnChange = value;
            if ((value === null || value === void 0 ? void 0 : value.length) > 1 && !/^\+7.*$/.test(value)) {
                var plus = value[0], code = value[1];
                if (code === '8') {
                    valueForOnChange = value.replace(/^\+(8)(.*)$/, '+7$2');
                }
                else {
                    valueForOnChange = plus + "7" + PhoneInput.shiftValue(value.slice(1).replace(/\s/g, ''));
                }
            }
            else if ((value === null || value === void 0 ? void 0 : value.length) === 1) {
                valueForOnChange = '';
            }
            if (onChange) {
                onChange(valueForOnChange, event);
            }
            else {
                _this.setState({ updatedValue: valueForOnChange });
            }
        };
        return _this;
    }
    PhoneInput.prototype.render = function () {
        var _this = this;
        var value = this.props.value;
        var updatedValue = this.state.updatedValue;
        return (react_1.default.createElement(input_1.default, __assign({}, this.props, { type: "tel", ref: function (root) {
                _this.root = root;
            }, formNoValidate: true, className: this.cn(), onChange: this.handleChange, value: updatedValue === undefined ? value : updatedValue })));
    };
    PhoneInput.shiftValue = function (originalValue, mask) {
        if (mask === void 0) { mask = ' 111 111 11 11'; }
        var shiftedValue = '';
        var specCounter = 0;
        mask.split('').forEach(function (sym, index) {
            if (sym !== '1' && originalValue[index - specCounter]) {
                shiftedValue += sym;
                specCounter += 1;
            }
            else {
                shiftedValue += originalValue[index - specCounter] || '';
            }
        });
        return shiftedValue;
    };
    /**
     * Устанавливает фокус на поле ввода.
     */
    PhoneInput.prototype.focus = function () {
        this.root.focus();
    };
    /**
     * Убирает фокус с поля ввода.
     */
    PhoneInput.prototype.blur = function () {
        this.root.blur();
    };
    /**
     * Скроллит страницу до поля ввода.
     */
    PhoneInput.prototype.scrollTo = function () {
        this.root.scrollTo();
    };
    PhoneInput.defaultProps = {
        mask: '+1 111 111 11 11',
        placeholder: '+7 000 000 00 00',
    };
    return PhoneInput;
}(react_1.default.PureComponent));
exports.PhoneInput = PhoneInput;
exports.default = cn_1.withTheme(PhoneInput);

//# sourceMappingURL=phone-input.js.map
