UNPKG

6.73 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/esm/extends";
2import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4import _typeof from "@babel/runtime/helpers/esm/typeof";
5import clsx from 'classnames';
6import React, { cloneElement, useRef } from 'react';
7import { hasAddon, hasPrefixSuffix } from "./utils/commonUtils";
8var BaseInput = function BaseInput(props) {
9 var _inputElement$props, _inputElement$props2;
10 var inputElement = props.inputElement,
11 prefixCls = props.prefixCls,
12 prefix = props.prefix,
13 suffix = props.suffix,
14 addonBefore = props.addonBefore,
15 addonAfter = props.addonAfter,
16 className = props.className,
17 style = props.style,
18 disabled = props.disabled,
19 readOnly = props.readOnly,
20 focused = props.focused,
21 triggerFocus = props.triggerFocus,
22 allowClear = props.allowClear,
23 value = props.value,
24 handleReset = props.handleReset,
25 hidden = props.hidden,
26 classes = props.classes,
27 classNames = props.classNames,
28 dataAttrs = props.dataAttrs,
29 styles = props.styles,
30 components = props.components;
31 var AffixWrapperComponent = (components === null || components === void 0 ? void 0 : components.affixWrapper) || 'span';
32 var GroupWrapperComponent = (components === null || components === void 0 ? void 0 : components.groupWrapper) || 'span';
33 var WrapperComponent = (components === null || components === void 0 ? void 0 : components.wrapper) || 'span';
34 var GroupAddonComponent = (components === null || components === void 0 ? void 0 : components.groupAddon) || 'span';
35 var containerRef = useRef(null);
36 var onInputClick = function onInputClick(e) {
37 var _containerRef$current;
38 if ((_containerRef$current = containerRef.current) !== null && _containerRef$current !== void 0 && _containerRef$current.contains(e.target)) {
39 triggerFocus === null || triggerFocus === void 0 ? void 0 : triggerFocus();
40 }
41 };
42
43 // ================== Clear Icon ================== //
44 var getClearIcon = function getClearIcon() {
45 var _clsx;
46 if (!allowClear) {
47 return null;
48 }
49 var needClear = !disabled && !readOnly && value;
50 var clearIconCls = "".concat(prefixCls, "-clear-icon");
51 var iconNode = _typeof(allowClear) === 'object' && allowClear !== null && allowClear !== void 0 && allowClear.clearIcon ? allowClear.clearIcon : '✖';
52 return /*#__PURE__*/React.createElement("span", {
53 onClick: handleReset
54 // Do not trigger onBlur when clear input
55 // https://github.com/ant-design/ant-design/issues/31200
56 ,
57 onMouseDown: function onMouseDown(e) {
58 return e.preventDefault();
59 },
60 className: clsx(clearIconCls, (_clsx = {}, _defineProperty(_clsx, "".concat(clearIconCls, "-hidden"), !needClear), _defineProperty(_clsx, "".concat(clearIconCls, "-has-suffix"), !!suffix), _clsx)),
61 role: "button",
62 tabIndex: -1
63 }, iconNode);
64 };
65 var element = /*#__PURE__*/cloneElement(inputElement, {
66 value: value,
67 hidden: hidden,
68 className: clsx((_inputElement$props = inputElement.props) === null || _inputElement$props === void 0 ? void 0 : _inputElement$props.className, !hasPrefixSuffix(props) && !hasAddon(props) && className) || null,
69 style: _objectSpread(_objectSpread({}, (_inputElement$props2 = inputElement.props) === null || _inputElement$props2 === void 0 ? void 0 : _inputElement$props2.style), !hasPrefixSuffix(props) && !hasAddon(props) ? style : {})
70 });
71
72 // ================== Prefix & Suffix ================== //
73 if (hasPrefixSuffix(props)) {
74 var _clsx2;
75 var affixWrapperPrefixCls = "".concat(prefixCls, "-affix-wrapper");
76 var affixWrapperCls = clsx(affixWrapperPrefixCls, (_clsx2 = {}, _defineProperty(_clsx2, "".concat(affixWrapperPrefixCls, "-disabled"), disabled), _defineProperty(_clsx2, "".concat(affixWrapperPrefixCls, "-focused"), focused), _defineProperty(_clsx2, "".concat(affixWrapperPrefixCls, "-readonly"), readOnly), _defineProperty(_clsx2, "".concat(affixWrapperPrefixCls, "-input-with-clear-btn"), suffix && allowClear && value), _clsx2), !hasAddon(props) && className, classes === null || classes === void 0 ? void 0 : classes.affixWrapper, classNames === null || classNames === void 0 ? void 0 : classNames.affixWrapper);
77 var suffixNode = (suffix || allowClear) && /*#__PURE__*/React.createElement("span", {
78 className: clsx("".concat(prefixCls, "-suffix"), classNames === null || classNames === void 0 ? void 0 : classNames.suffix),
79 style: styles === null || styles === void 0 ? void 0 : styles.suffix
80 }, getClearIcon(), suffix);
81 element = /*#__PURE__*/React.createElement(AffixWrapperComponent, _extends({
82 className: affixWrapperCls,
83 style: _objectSpread(_objectSpread({}, !hasAddon(props) ? style : undefined), styles === null || styles === void 0 ? void 0 : styles.affixWrapper),
84 hidden: !hasAddon(props) && hidden,
85 onClick: onInputClick
86 }, dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.affixWrapper, {
87 ref: containerRef
88 }), prefix && /*#__PURE__*/React.createElement("span", {
89 className: clsx("".concat(prefixCls, "-prefix"), classNames === null || classNames === void 0 ? void 0 : classNames.prefix),
90 style: styles === null || styles === void 0 ? void 0 : styles.prefix
91 }, prefix), /*#__PURE__*/cloneElement(inputElement, {
92 value: value,
93 hidden: null
94 }), suffixNode);
95 }
96
97 // ================== Addon ================== //
98 if (hasAddon(props)) {
99 var wrapperCls = "".concat(prefixCls, "-group");
100 var addonCls = "".concat(wrapperCls, "-addon");
101 var mergedWrapperClassName = clsx("".concat(prefixCls, "-wrapper"), wrapperCls, classes === null || classes === void 0 ? void 0 : classes.wrapper);
102 var mergedGroupClassName = clsx("".concat(prefixCls, "-group-wrapper"), className, classes === null || classes === void 0 ? void 0 : classes.group);
103
104 // Need another wrapper for changing display:table to display:inline-block
105 // and put style prop in wrapper
106 return /*#__PURE__*/React.createElement(GroupWrapperComponent, {
107 className: mergedGroupClassName,
108 style: style,
109 hidden: hidden
110 }, /*#__PURE__*/React.createElement(WrapperComponent, {
111 className: mergedWrapperClassName
112 }, addonBefore && /*#__PURE__*/React.createElement(GroupAddonComponent, {
113 className: addonCls
114 }, addonBefore), /*#__PURE__*/cloneElement(element, {
115 hidden: null
116 }), addonAfter && /*#__PURE__*/React.createElement(GroupAddonComponent, {
117 className: addonCls
118 }, addonAfter)));
119 }
120 return element;
121};
122export default BaseInput;
\No newline at end of file