import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
var _excluded = ["caption", "icon"];
var _class, _Dropdown;
import React from 'react';
import { filterProps } from "../../../lib/filterProps";
import { MenuHeader } from "../../MenuHeader";
import { MenuItem } from "../../MenuItem";
import { MenuSeparator } from "../../MenuSeparator";
import { Select } from "../../Select";
import { CommonWrapper } from "../../../internal/CommonWrapper";
import { rootNode } from "../../../lib/rootNode";
import { ThemeContext } from "../../../lib/theming/ThemeContext";
import { getDropdownTheme } from "../getDropdownTheme";
var PASS_PROPS = {
  _renderButton: true,
  error: true,
  disabled: true,
  disablePortal: true,
  menuAlign: true,
  menuWidth: true,
  maxMenuHeight: true,
  use: true,
  size: true,
  warning: true,
  width: true,
  onOpen: true,
  onClose: true,
  onMouseEnter: true,
  onMouseLeave: true,
  onMouseOver: true,
  menuPos: true,
  corners: true,
  id: true,
  'aria-describedby': true,
  'aria-label': true
};
export var DropdownDataTids = {
  root: 'Dropdown__root'
};

/**
 * Выпадающее меню `Dropdown`. Содержит несколько команд, объединенных по смыслу.
 *
 * Используйте кнопку-меню:
 * * когда не хватает места для нескольких кнопок.
 * * когда названия действий очень длинные.
 * * когда действия редко используются или объединены по смыслу.
 *
 * Не используйте `Dropdown` для выбора значения из набора вариантов. В таком случае воспользуйтесь компонентом Select.
 */
export var Dropdown = rootNode(_class = (_Dropdown = /*#__PURE__*/function (_React$Component) {
  function Dropdown() {
    var _this;
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
    _this.renderMain = function () {
      var _this$props = _this.props,
        caption = _this$props.caption,
        icon = _this$props.icon,
        rest = _objectWithoutPropertiesLoose(_this$props, _excluded);
      var items = React.Children.map(_this.props.children, function (item) {
        return item;
      }) || [];
      return /*#__PURE__*/(
        React.createElement(CommonWrapper, _extends({
          rootNodeRef: _this.setRootNode
        }, rest), /*#__PURE__*/
        React.createElement(Select, _extends({
          "data-tid": DropdownDataTids.root,
          ref: _this._refSelect
        }, filterProps(rest, PASS_PROPS), {
          value: caption,
          items: items,
          _icon: icon,
          renderValue: renderValue
        })))
      );
    };
    _this._refSelect = function (element) {
      _this._select = element;
    };
    return _this;
  }
  _inheritsLoose(Dropdown, _React$Component);
  var _proto = Dropdown.prototype;
  _proto.render = function render() {
    var _this2 = this;
    return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, function (theme) {
      _this2.theme = getDropdownTheme(theme);
      return /*#__PURE__*/React.createElement(ThemeContext.Provider, {
        value: _this2.theme
      }, _this2.renderMain());
    });
  }; /**
     * @public
     */
  _proto.open = function open() {
    if (this._select) {
      this._select.open();
    }
  } /**
    * @public
    */;
  _proto.close = function close() {
    if (this._select) {
      this._select.close();
    }
  };
  return Dropdown;
}(React.Component), _Dropdown.__KONTUR_REACT_UI__ = 'Dropdown', _Dropdown.displayName = 'Dropdown', _Dropdown.Header = MenuHeader, _Dropdown.MenuItem = MenuItem, _Dropdown.Separator = MenuSeparator, _Dropdown)) || _class;
function renderValue(value) {
  return value;
}