UNPKG

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