"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
Object.defineProperty(exports, "useDrawer", {
    enumerable: true,
    get: function() {
        return useDrawer;
    }
});
const _react = require("react");
const _DrawerContext = require("../DrawerContext");
const _Popup = require("../../Popup");
const _utils = require("../../../utils");
const ESCAPE_KEYCODE = 27;
const useDrawer = ({ id, isOpen, popupInfo, onEscKeyDown, onClose, closeOnEsc = true, disableScroll = true })=>{
    const popupController = (0, _Popup.usePopupContext)();
    const overflow = (0, _react.useRef)(_utils.canUseDOM ? document.body.style.overflow : 'initial');
    // При ESC закрывает текущее окно, если это возможно
    const onKeyDown = (0, _react.useCallback)((event)=>{
        if (!closeOnEsc) {
            return;
        }
        if (event.keyCode === ESCAPE_KEYCODE && (0, _DrawerContext.getIdLastDrawer)(Array.from(popupController.items.values())) === id) {
            if (onEscKeyDown) {
                onEscKeyDown(event);
                return;
            }
            if (onClose) {
                onClose();
            }
        }
    }, [
        onClose,
        onEscKeyDown,
        popupController.items,
        closeOnEsc
    ]);
    (0, _react.useEffect)(()=>{
        window.addEventListener('keydown', onKeyDown);
        return ()=>{
            window.removeEventListener('keydown', onKeyDown);
        };
    }, [
        onKeyDown
    ]);
    // linaria не поддерживает динамический global
    (0, _react.useEffect)(()=>{
        if (!_utils.canUseDOM) {
            return;
        }
        if (isOpen && disableScroll) {
            overflow.current = document.body.style.overflow;
            document.body.style.overflow = 'hidden';
        }
    }, [
        isOpen,
        disableScroll
    ]);
    (0, _react.useEffect)(()=>{
        if (!_utils.canUseDOM) {
            return;
        }
        if (!isOpen && !(0, _DrawerContext.hasDrawers)(Array.from(popupController.items.values()))) {
            document.body.style.overflow = overflow.current;
        }
    }, [
        isOpen,
        popupController.items
    ]);
    // При анмаунте компонента нужно обновлять overflow у body.
    (0, _react.useEffect)(()=>{
        return ()=>{
            if (!_utils.canUseDOM) {
                return;
            }
            if (!(0, _DrawerContext.hasDrawers)(Array.from(popupController.items.values()))) {
                document.body.style.overflow = overflow.current;
            }
        };
    }, []);
    const drawerInfo = {
        id,
        info: {
            isDrawer: true
        },
        ...popupInfo
    };
    return {
        drawerInfo
    };
};
