import _extends from "@babel/runtime/helpers/esm/extends";
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
var _SingleToast;
import React from 'react';
import ReactDOM from 'react-dom';
import { Toast } from "../../Toast/Toast";

/**
 * `SingleToast` — это короткое немодальное уведомление, которое сообщает пользователю о результате выполнения его команды.
 * Результат может быть положительным, отрицательным или нейтральным.
 *
 * Позволяет вызывать тосты с помощью статических методов.
 * В отличие от статических методов из компонента Toast их можно кастомизировать и они работают с `React@18`.
 *
 * Метод `push` поддерживает два api.
 *
 * 1. Устаревший с последовательной передачей аргументов: `SingleToast.push('Hi', { label: 'Cancel', handler: () => {} }, 15000)`
 * 2. Новый с передачей объекта конфигурации: `SingleToast.push('Hi', { action: { label: 'Cancel', handler: () => {} }, showTime: 15000 })`
 *
 * Устаревший подход с передачей аргументов последовательным образом **будет удалён** в следующей мажорной версии.
 *
 * ##### Особенности компонента SingleToast
 * Для корректной работы `<SingleToast />` должен быть отрисован только **один раз** на странице. После чего его можно вызывать из любого места приложения методом `SingleToast.push()`. Однако, переданные в компонент пропсы, такие как `theme`, `onPush` и остальные, будут применяться ко всем вызовам.
 */
export var SingleToast = /*#__PURE__*/function (_React$Component) {
  function SingleToast() {
    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.render = function () {
      return /*#__PURE__*/React.createElement(Toast, _extends({
        ref: SingleToast.ref
      }, _this.props));
    };
    return _this;
  }
  _inheritsLoose(SingleToast, _React$Component);
  return SingleToast;
}(React.Component);
_SingleToast = SingleToast;
SingleToast.__KONTUR_REACT_UI__ = 'SingleToast';
SingleToast.displayName = 'SingleToast';
SingleToast.ref = /*#__PURE__*/React.createRef();
SingleToast.close = function () {
  if (React.version.search('18') === 0) {
    ReactDOM.flushSync(function () {
      var _SingleToast$ref$curr;
      return (_SingleToast$ref$curr = _SingleToast.ref.current) == null ? void 0 : _SingleToast$ref$curr.close();
    });
  } else {
    var _SingleToast$ref$curr2;
    (_SingleToast$ref$curr2 = _SingleToast.ref.current) == null || _SingleToast$ref$curr2.close();
  }
}; /**
   * Показывает тост с `notification` в качестве сообщения.
   * Тост автоматически скрывается через 3 или 7 секунд,
   * в зависимости от наличия у него кнопки `action` внутри config-а.
   * Время показа можно задать вручную, передав `showTime` внутри config-а.
   *
   * @public
   * @param {React.ReactNode} notification
   * @param {ToastPushConfig} config объект с конфигурацией отображения компонента Toast
   *
   * @description Сейчас есть поддержка старого api метода push с передачей аргументов последовательно, но с версии 6.0 этот функционал будет удалён.
   * @example
   * // Будет удален в 6.0
   * SingleToast.push('notification', { label: "cat meow", handler: () => {} }, 15_000, false, "error")
   *
   * @example
   * // Останется в > 6.0
   * SingleToast.push('notification', { action: { label: "cat meow", handler: () => {} }, showTime: 15_000, showCloseIcon: false, use: "error" })
   */
SingleToast.push = function (notification, configOrAction, showTime, showCloseIcon, use) {
  var _SingleToast$ref$curr3;
  _SingleToast.close();
  (_SingleToast$ref$curr3 = _SingleToast.ref.current) == null || _SingleToast$ref$curr3.push(notification, configOrAction, showTime, showCloseIcon, use);
};