1 | import _extends from "@babel/runtime/helpers/esm/extends";
|
2 | import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
3 | import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
4 | import _typeof from "@babel/runtime/helpers/esm/typeof";
|
5 | import clsx from 'classnames';
|
6 | import React, { cloneElement, useRef } from 'react';
|
7 | import { hasAddon, hasPrefixSuffix } from "./utils/commonUtils";
|
8 | var 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 |
|
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 React.createElement("span", {
|
53 | onClick: handleReset
|
54 |
|
55 |
|
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 = 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 |
|
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) && 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 = 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 && 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), cloneElement(inputElement, {
|
92 | value: value,
|
93 | hidden: null
|
94 | }), suffixNode);
|
95 | }
|
96 |
|
97 |
|
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 |
|
105 |
|
106 | return React.createElement(GroupWrapperComponent, {
|
107 | className: mergedGroupClassName,
|
108 | style: style,
|
109 | hidden: hidden
|
110 | }, React.createElement(WrapperComponent, {
|
111 | className: mergedWrapperClassName
|
112 | }, addonBefore && React.createElement(GroupAddonComponent, {
|
113 | className: addonCls
|
114 | }, addonBefore), cloneElement(element, {
|
115 | hidden: null
|
116 | }), addonAfter && React.createElement(GroupAddonComponent, {
|
117 | className: addonCls
|
118 | }, addonAfter)));
|
119 | }
|
120 | return element;
|
121 | };
|
122 | export default BaseInput; |
\ | No newline at end of file |