import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
var _excluded = ["size", "visibilityToggle"];
import { resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
import classNames from '../_util/classNames';
import { isValidElement } from '../_util/props-util';
import { cloneElement } from '../_util/vnode';
import Input from './Input';
import SearchOutlined from '@pf-ui/pf-icons-vue/SearchOutlined';
import inputProps from './inputProps';
import { computed, defineComponent, ref, nextTick } from 'vue';
import useConfigInject from '../_util/hooks/useConfigInject';
import omit from '../_util/omit';
var ActionMap = {
  click: 'onClick',
  hover: 'onMouseover'
};
var defaultIconRender = function defaultIconRender() {
  return _createVNode(SearchOutlined, null, null);
};
export default defineComponent({
  name: 'PfSearchInput',
  inheritAttrs: false,
  props: _objectSpread(_objectSpread({}, inputProps()), {}, {
    prefixCls: String,
    inputPrefixCls: String,
    action: {
      type: String,
      default: 'click'
    },
    visibilityToggle: {
      type: Boolean,
      default: true
    },
    iconRender: Function,
    onSearch: {
      type: Function
    }
  }),
  setup: function setup(props, _ref) {
    var slots = _ref.slots,
      attrs = _ref.attrs,
      expose = _ref.expose,
      emit = _ref.emit;
    var visible = ref(false);
    var showClear = ref(false);
    var clickAction = function clickAction(e) {
      var _inputRef$value;
      emit('search', (_inputRef$value = inputRef.value) === null || _inputRef$value === void 0 ? void 0 : _inputRef$value.stateValue, e);
    };
    var changeAction = function changeAction(e) {
      var _e$target;
      emit('change', e);
      //@ts-ignore
      if (e !== null && e !== void 0 && (_e$target = e.target) !== null && _e$target !== void 0 && _e$target.value) {
        showClear.value = true;
      } else {
        // 无值时, 保持搜索
        showClear.value = false;
      }
    };
    var inputRef = ref();
    var focus = function focus() {
      var _inputRef$value2;
      (_inputRef$value2 = inputRef.value) === null || _inputRef$value2 === void 0 ? void 0 : _inputRef$value2.focus();
    };
    var blur = function blur() {
      var _inputRef$value3;
      (_inputRef$value3 = inputRef.value) === null || _inputRef$value3 === void 0 ? void 0 : _inputRef$value3.blur();
    };
    expose({
      focus: focus,
      blur: blur
    });
    var onFocus = function onFocus(e) {
      var onFocus = props.onFocus;
      onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
      nextTick(function () {
        var _e$target2;
        //@ts-ignore
        if (e !== null && e !== void 0 && (_e$target2 = e.target) !== null && _e$target2 !== void 0 && _e$target2.value) {
          showClear.value = true;
        } else {
          // 无值时, 保持搜索
          showClear.value = false;
        }
      });
    };
    var onBlur = function onBlur(e) {
      var onBlur = props.onBlur;
      onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
      nextTick(function () {
        var _e$target3;
        //@ts-ignore
        if (e !== null && e !== void 0 && (_e$target3 = e.target) !== null && _e$target3 !== void 0 && _e$target3.value) {
          showClear.value = true;
        } else {
          // 无值时, 保持搜索
          showClear.value = false;
        }
      });
    };
    var getIcon = function getIcon(prefixCls) {
      var _iconProps;
      var action = props.action,
        _props$iconRender = props.iconRender,
        iconRender = _props$iconRender === void 0 ? slots.iconRender || defaultIconRender : _props$iconRender;
      var iconTrigger = ActionMap[action] || '';
      var icon = iconRender(visible.value);
      var iconProps = (_iconProps = {}, _defineProperty(_iconProps, iconTrigger, clickAction), _defineProperty(_iconProps, "class", "".concat(prefixCls, "-icon")), _defineProperty(_iconProps, "key", 'passwordIcon'), _defineProperty(_iconProps, "onMousedown", function onMousedown(e) {
        // Prevent focused state lost
        // https://github.com/ant-design/ant-design/issues/15173
        e.preventDefault();
      }), _defineProperty(_iconProps, "onMouseup", function onMouseup(e) {
        // Prevent caret position change
        // https://github.com/ant-design/ant-design/issues/23524
        e.preventDefault();
      }), _iconProps);
      return cloneElement(isValidElement(icon) ? icon : _createVNode("span", null, [icon]), iconProps);
    };
    var _useConfigInject = useConfigInject('search-input', props),
      prefixCls = _useConfigInject.prefixCls,
      getPrefixCls = _useConfigInject.getPrefixCls;
    var inputPrefixCls = computed(function () {
      return getPrefixCls('input', props.inputPrefixCls);
    });
    var renderSearchInput = function renderSearchInput() {
      var size = props.size,
        visibilityToggle = props.visibilityToggle,
        restProps = _objectWithoutProperties(props, _excluded);
      var suffixIcon = visibilityToggle && !showClear.value && getIcon(prefixCls.value);
      var inputClassName = classNames(prefixCls.value, attrs.class, _defineProperty({}, "".concat(prefixCls.value, "-").concat(size), !!size));
      var omittedProps = _objectSpread(_objectSpread(_objectSpread({}, omit(restProps, ['suffix', 'iconRender', 'action'])), attrs), {}, {
        type: 'text',
        class: inputClassName,
        prefixCls: inputPrefixCls.value,
        suffix: suffixIcon,
        onFocus: onFocus,
        onBlur: onBlur
      });
      if (size) {
        omittedProps.size = size;
      }
      return _createVNode(Input, _objectSpread(_objectSpread({
        "ref": inputRef
      }, omittedProps), {}, {
        "allowClear": showClear.value,
        "onPressEnter": clickAction,
        "onChange": changeAction
      }), slots);
    };
    return function () {
      return renderSearchInput();
    };
  }
});