Search.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
  2. import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
  3. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  4. var _excluded = ["disabled", "loading", "addonAfter", "suffix"];
  5. import { resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
  6. import { computed, ref, defineComponent } from 'vue';
  7. import classNames from '../_util/classNames';
  8. import Input from './Input';
  9. import SearchOutlined from "@ant-design/icons-vue/es/icons/SearchOutlined";
  10. import inputProps from './inputProps';
  11. import Button from '../button';
  12. import { cloneElement } from '../_util/vnode';
  13. import PropTypes from '../_util/vue-types';
  14. import isPlainObject from 'lodash-es/isPlainObject';
  15. import useConfigInject from '../_util/hooks/useConfigInject';
  16. import omit from '../_util/omit';
  17. import isMobile from '../_util/isMobile';
  18. export default defineComponent({
  19. compatConfig: {
  20. MODE: 3
  21. },
  22. name: 'AInputSearch',
  23. inheritAttrs: false,
  24. props: _objectSpread(_objectSpread({}, inputProps()), {}, {
  25. inputPrefixCls: String,
  26. // 不能设置默认值 https://github.com/vueComponent/ant-design-vue/issues/1916
  27. enterButton: PropTypes.any,
  28. onSearch: {
  29. type: Function
  30. }
  31. }),
  32. setup: function setup(props, _ref) {
  33. var slots = _ref.slots,
  34. attrs = _ref.attrs,
  35. expose = _ref.expose,
  36. emit = _ref.emit;
  37. var inputRef = ref();
  38. var focus = function focus() {
  39. var _inputRef$value;
  40. (_inputRef$value = inputRef.value) === null || _inputRef$value === void 0 ? void 0 : _inputRef$value.focus();
  41. };
  42. var blur = function blur() {
  43. var _inputRef$value2;
  44. (_inputRef$value2 = inputRef.value) === null || _inputRef$value2 === void 0 ? void 0 : _inputRef$value2.blur();
  45. };
  46. expose({
  47. focus: focus,
  48. blur: blur
  49. });
  50. var onChange = function onChange(e) {
  51. emit('update:value', e.target.value);
  52. if (e && e.target && e.type === 'click') {
  53. emit('search', e.target.value, e);
  54. }
  55. emit('change', e);
  56. };
  57. var onMousedown = function onMousedown(e) {
  58. var _inputRef$value3;
  59. if (document.activeElement === ((_inputRef$value3 = inputRef.value) === null || _inputRef$value3 === void 0 ? void 0 : _inputRef$value3.input)) {
  60. e.preventDefault();
  61. }
  62. };
  63. var onSearch = function onSearch(e) {
  64. var _inputRef$value4;
  65. emit('search', (_inputRef$value4 = inputRef.value) === null || _inputRef$value4 === void 0 ? void 0 : _inputRef$value4.stateValue, e);
  66. if (!isMobile.tablet) {
  67. inputRef.value.focus();
  68. }
  69. };
  70. var _useConfigInject = useConfigInject('input-search', props),
  71. prefixCls = _useConfigInject.prefixCls,
  72. getPrefixCls = _useConfigInject.getPrefixCls,
  73. direction = _useConfigInject.direction,
  74. size = _useConfigInject.size;
  75. var inputPrefixCls = computed(function () {
  76. return getPrefixCls('input', props.inputPrefixCls);
  77. });
  78. return function () {
  79. var _slots$addonAfter, _slots$suffix, _slots$enterButton, _slots$enterButton2, _classNames;
  80. var disabled = props.disabled,
  81. loading = props.loading,
  82. _props$addonAfter = props.addonAfter,
  83. addonAfter = _props$addonAfter === void 0 ? (_slots$addonAfter = slots.addonAfter) === null || _slots$addonAfter === void 0 ? void 0 : _slots$addonAfter.call(slots) : _props$addonAfter,
  84. _props$suffix = props.suffix,
  85. suffix = _props$suffix === void 0 ? (_slots$suffix = slots.suffix) === null || _slots$suffix === void 0 ? void 0 : _slots$suffix.call(slots) : _props$suffix,
  86. restProps = _objectWithoutProperties(props, _excluded);
  87. var _props$enterButton = props.enterButton,
  88. enterButton = _props$enterButton === void 0 ? (_slots$enterButton = (_slots$enterButton2 = slots.enterButton) === null || _slots$enterButton2 === void 0 ? void 0 : _slots$enterButton2.call(slots)) !== null && _slots$enterButton !== void 0 ? _slots$enterButton : false : _props$enterButton;
  89. enterButton = enterButton || enterButton === '';
  90. var searchIcon = typeof enterButton === 'boolean' ? _createVNode(SearchOutlined, null, null) : null;
  91. var btnClassName = "".concat(prefixCls.value, "-button");
  92. var enterButtonAsElement = Array.isArray(enterButton) ? enterButton[0] : enterButton;
  93. var button;
  94. var isAntdButton = enterButtonAsElement.type && isPlainObject(enterButtonAsElement.type) && enterButtonAsElement.type.__ANT_BUTTON;
  95. if (isAntdButton || enterButtonAsElement.tagName === 'button') {
  96. button = cloneElement(enterButtonAsElement, _objectSpread({
  97. onMousedown: onMousedown,
  98. onClick: onSearch,
  99. key: 'enterButton'
  100. }, isAntdButton ? {
  101. class: btnClassName,
  102. size: size.value
  103. } : {}), false);
  104. } else {
  105. var iconOnly = searchIcon && !enterButton;
  106. button = _createVNode(Button, {
  107. "class": btnClassName,
  108. "type": enterButton ? 'primary' : undefined,
  109. "size": size.value,
  110. "disabled": disabled,
  111. "key": "enterButton",
  112. "onMousedown": onMousedown,
  113. "onClick": onSearch,
  114. "loading": loading,
  115. "icon": iconOnly ? searchIcon : null
  116. }, {
  117. default: function _default() {
  118. return [iconOnly ? null : searchIcon || enterButton];
  119. }
  120. });
  121. }
  122. if (addonAfter) {
  123. button = [button, addonAfter];
  124. }
  125. var cls = classNames(prefixCls.value, (_classNames = {}, _defineProperty(_classNames, "".concat(prefixCls.value, "-rtl"), direction.value === 'rtl'), _defineProperty(_classNames, "".concat(prefixCls.value, "-").concat(size.value), !!size.value), _defineProperty(_classNames, "".concat(prefixCls.value, "-with-button"), !!enterButton), _classNames), attrs.class);
  126. return _createVNode(Input, _objectSpread(_objectSpread(_objectSpread({
  127. "ref": inputRef
  128. }, omit(restProps, ['onUpdate:value', 'onSearch', 'enterButton'])), attrs), {}, {
  129. "onPressEnter": onSearch,
  130. "size": size.value,
  131. "prefixCls": inputPrefixCls.value,
  132. "addonAfter": button,
  133. "suffix": suffix,
  134. "onChange": onChange,
  135. "class": cls,
  136. "disabled": disabled
  137. }), slots);
  138. };
  139. }
  140. });