"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatePickerInput = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = require("react");
const react_imask_1 = require("react-imask");
const CalendarOutlineMd_1 = require("../../../icons/CalendarOutlineMd");
const constants_1 = require("../constants");
const styles_1 = require("./styles");
/**
 * регулярка, указывающая на любые буквы и цифры длинной от 1 до 4 символов включительно
 */
const KEYS_IN_MASK = /\w{1,4}/g;
exports.DatePickerInput = (0, react_1.forwardRef)(({ onClick, mask, size = 'medium', onFocus, disabled, placeholder = constants_1.DEFAULT_PLACEHOLDER, startAdornment, ...props }, ref) => {
    const [normalizedMask, maskBlocks] = (0, react_1.useMemo)(() => {
        // маска maskField соглашается работать только с разделителями имеющими символ "`" (косая кавычка) перед заменяемым элементом
        const nMask = mask?.replace('.', '.`');
        const blocks = {};
        // создаем массив элементов, попадающих под регулярку
        mask.match(KEYS_IN_MASK)?.forEach((maskPart) => {
            // Число, с количество цифр "9" равному количеству букв части маски.
            // Например, для части ключа 'ГГГГ' результат будет 9999
            const to = Number(String.prototype.padStart(maskPart.length, '9'));
            // для каждой части маски, создаем свой MaskBlock
            blocks[maskPart] = {
                mask: react_imask_1.IMask.MaskedRange,
                from: 0,
                to,
                maxLength: maskPart.length,
            };
        });
        return [nMask, blocks];
    }, [mask]);
    //Определяем активный обработчик focus для обертки если состояние не disabled
    const handleFocusWrapper = (0, react_1.useMemo)(() => (!disabled ? onFocus : undefined), [disabled, onFocus]);
    return ((0, jsx_runtime_1.jsx)(styles_1.Wrapper, { onFocus: handleFocusWrapper, tabIndex: -1, "aria-disabled": disabled, children: (0, jsx_runtime_1.jsx)(styles_1.StyledMaskField, { ...props, ref: ref, size: size, disabled: disabled, mask: normalizedMask, unmask: false, blocks: maskBlocks, placeholder: placeholder, autofix: false, fullWidth: true, InputProps: {
                endAdornment: (0, jsx_runtime_1.jsx)(CalendarOutlineMd_1.CalendarOutlineMd, {}),
                startAdornment,
            }, inputProps: {
                autoComplete: 'off',
                ...props.inputProps,
                ref,
            }, 
            // Обрабатываем клик на контейнере, а не в инпуте, это связано с неактивной областью с иконкой (endAdornment)
            onClick: onClick }) }));
});
