"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useCollabsible = void 0;
const react_1 = require("react");
/**
 * Хук используется для управления логикой открытия/скрытия текста
 *
 */
const useCollabsible = (forwardedRef) => {
    const localRef = (0, react_1.useRef)(null);
    const ref = forwardedRef && typeof forwardedRef !== 'function'
        ? forwardedRef
        : localRef;
    const [isCollapsable, setIsCollapsable] = (0, react_1.useState)(true);
    const [initialHeight, setInitialHeight] = (0, react_1.useState)('0');
    const [currentHeight, setCurrentHeight] = (0, react_1.useState)('auto');
    const [isOpenCollapse, setIsOpenCollapse] = (0, react_1.useState)(false);
    (0, react_1.useEffect)(() => {
        if (ref.current) {
            const node = ref.current;
            /**
             * Eсли isOpenCollapse=false то в стилях webkit-line-clamp = rowsCount
             * Получаем клиентскую высоту, она будет равна количеству строк умноженной на высоту строки
             */
            const clientH = Math.round(node.getBoundingClientRect().height);
            const scrollH = node.scrollHeight;
            setInitialHeight(`${clientH}px`);
            if (scrollH > clientH) {
                // если scrollHeight > clientHeight то  компонент переполнен, значит нужна кнопка для управлением открытия/скрытия текста
                return setIsCollapsable(true);
            }
            setIsCollapsable(false);
        }
    }, [ref]);
    (0, react_1.useEffect)(() => {
        if (ref.current) {
            const node = ref.current;
            const scrollH = node.scrollHeight;
            if (isOpenCollapse) {
                // Показываем скрытую часть текста
                return setCurrentHeight(`${scrollH}px`);
            }
            setCurrentHeight(initialHeight);
        }
    }, [initialHeight, isOpenCollapse, ref]);
    const toggleCollapse = () => {
        setIsOpenCollapse(!isOpenCollapse);
    };
    return {
        ref,
        isCollapsable,
        isOpenCollapse,
        currentHeight,
        toggleCollapse,
    };
};
exports.useCollabsible = useCollabsible;
