'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
var React = require('react');
var DrawerContext = require('../DrawerContext.js');
var PopupContext = require('../../Popup/PopupContext.js');
var canUseDOM = require('../../../utils/canUseDOM.js');

var ESCAPE_KEYCODE = 27;
var useDrawer = function useDrawer(_ref) {
  var id = _ref.id,
    isOpen = _ref.isOpen,
    popupInfo = _ref.popupInfo,
    onEscKeyDown = _ref.onEscKeyDown,
    onClose = _ref.onClose,
    _ref$closeOnEsc = _ref.closeOnEsc,
    closeOnEsc = _ref$closeOnEsc === void 0 ? true : _ref$closeOnEsc,
    _ref$disableScroll = _ref.disableScroll,
    disableScroll = _ref$disableScroll === void 0 ? true : _ref$disableScroll;
  var popupController = PopupContext.usePopupContext();
  var overflow = React.useRef(canUseDOM.canUseDOM ? document.body.style.overflow : 'initial');

  // При ESC закрывает текущее окно, если это возможно
  var onKeyDown = React.useCallback(function (event) {
    if (!closeOnEsc) {
      return;
    }
    if (event.keyCode === ESCAPE_KEYCODE && DrawerContext.getIdLastDrawer(Array.from(popupController.items.values())) === id) {
      if (onEscKeyDown) {
        onEscKeyDown(event);
        return;
      }
      if (onClose) {
        onClose();
      }
    }
  }, [onClose, onEscKeyDown, popupController.items, closeOnEsc]);
  React.useEffect(function () {
    window.addEventListener('keydown', onKeyDown);
    return function () {
      window.removeEventListener('keydown', onKeyDown);
    };
  }, [onKeyDown]);

  // linaria не поддерживает динамический global
  React.useEffect(function () {
    if (!canUseDOM.canUseDOM) {
      return;
    }
    if (isOpen && disableScroll) {
      overflow.current = document.body.style.overflow;
      document.body.style.overflow = 'hidden';
    }
  }, [isOpen, disableScroll]);
  React.useEffect(function () {
    if (!canUseDOM.canUseDOM) {
      return;
    }
    if (!isOpen && !DrawerContext.hasDrawers(Array.from(popupController.items.values()))) {
      document.body.style.overflow = overflow.current;
    }
  }, [isOpen, popupController.items]);

  // При анмаунте компонента нужно обновлять overflow у body.
  React.useEffect(function () {
    return function () {
      if (!canUseDOM.canUseDOM) {
        return;
      }
      if (!DrawerContext.hasDrawers(Array.from(popupController.items.values()))) {
        document.body.style.overflow = overflow.current;
      }
    };
  }, []);
  var drawerInfo = _rollupPluginBabelHelpers.objectSpread2({
    id: id,
    info: {
      isDrawer: true
    }
  }, popupInfo);
  return {
    drawerInfo: drawerInfo
  };
};

exports.useDrawer = useDrawer;
