"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
Object.defineProperty(exports, "useValue", {
    enumerable: true,
    get: function() {
        return useValue;
    }
});
const _react = require("react");
const _utils = require("../utils");
const getInitialValue = ({ defaultValue, multiple })=>{
    if (multiple) {
        return defaultValue || [];
    }
    return defaultValue || '';
};
const useValue = ({ outerValue, outerOnChange, defaultValue, multiple, nativeMode, valueToItemMap, renderValue, onChangeValue })=>{
    // Внутреннее состояние для корректной работы в uncontrolled-режиме.
    const [internalValue, setInternalValue] = (0, _react.useState)(getInitialValue({
        defaultValue,
        multiple
    }));
    // Актуальное состояние компонента.
    const value = (0, _utils.hasOuterValue)(outerValue) ? outerValue : internalValue;
    // Состояние поля поиска в target
    const [textValue, setTextValueState] = (0, _react.useState)((0, _utils.getTextValue)(multiple, value, valueToItemMap, renderValue));
    const setTextValue = (newTextValue)=>{
        if (newTextValue === textValue) {
            return;
        }
        setTextValueState(newTextValue);
        onChangeValue?.(newTextValue);
    };
    const handleChange = (newValue, item)=>{
        setInternalValue(newValue);
        if (outerOnChange && !nativeMode) {
            outerOnChange(newValue, item);
        }
    };
    return {
        value,
        handleChange,
        textValue,
        setTextValue
    };
};
