UNPKG

linkmore-design

Version:

🌈 πŸš€lmη»„δ»ΆεΊ“γ€‚πŸš€

238 lines (226 loc) β€’ 8.35 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; exports.fixControlledValue = fixControlledValue; exports.resolveOnChange = resolveOnChange; exports.triggerFocus = triggerFocus; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classnames = _interopRequireDefault(require("classnames")); var _rcInput = _interopRequireDefault(require("rc-input")); var _ref = require("rc-util/lib/ref"); var _react = _interopRequireWildcard(require("react")); var _configProvider = require("../config-provider"); var _DisabledContext = _interopRequireDefault(require("../config-provider/DisabledContext")); var _SizeContext = _interopRequireDefault(require("../config-provider/SizeContext")); var _context = require("../form/context"); var _iconFont = _interopRequireDefault(require("../icon-font")); var _Compact = require("../space/Compact"); var _statusUtils = require("../_util/statusUtils"); var _warning = _interopRequireDefault(require("../_util/warning")); var _useRemovePasswordTimeout = _interopRequireDefault(require("./hooks/useRemovePasswordTimeout")); var _utils = require("./utils"); function fixControlledValue(value) { if (typeof value === 'undefined' || value === null) { return ''; } return String(value); } function resolveOnChange(target, e, onChange, targetValue) { if (!onChange) { return; } let event = e; if (e.type === 'click') { // Clone a new target for event. // Avoid the following usage, the setQuery method gets the original value. // // const [query, setQuery] = React.useState(''); // <Input // allowClear // value={query} // onChange={(e)=> { // setQuery((prevStatus) => e.target.value); // }} // /> const currentTarget = target.cloneNode(true); // click clear icon event = Object.create(e, { target: { value: currentTarget }, currentTarget: { value: currentTarget } }); currentTarget.value = ''; onChange(event); return; } // Trigger by composition event, this means we need force change the input value if (targetValue !== undefined) { event = Object.create(e, { target: { value: target }, currentTarget: { value: target } }); target.value = targetValue; onChange(event); return; } onChange(event); } function triggerFocus(element, option) { if (!element) { return; } element.focus(option); // Selection content const { cursor } = option || {}; if (cursor) { const len = element.value.length; switch (cursor) { case 'start': element.setSelectionRange(0, 0); break; case 'end': element.setSelectionRange(len, len); break; default: element.setSelectionRange(0, len); break; } } } const Input = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => { const { prefixCls: customizePrefixCls, bordered = true, status: customStatus, size: customSize, disabled: customDisabled, onBlur, onFocus, suffix, allowClear = true, addonAfter, addonBefore, className, onChange, ...rest } = props; const { getPrefixCls, direction, input } = _react.default.useContext(_configProvider.ConfigContext); const prefixCls = getPrefixCls('input', customizePrefixCls); const inputRef = (0, _react.useRef)(null); // ===================== Compact Item ===================== const { compactSize, compactItemClassnames } = (0, _Compact.useCompactItemContext)(prefixCls, direction); // ===================== Size ===================== const size = _react.default.useContext(_SizeContext.default); const mergedSize = compactSize || customSize || size; // ===================== Disabled ===================== const disabled = _react.default.useContext(_DisabledContext.default); const mergedDisabled = customDisabled ?? disabled; // ===================== Status ===================== const { status: contextStatus, hasFeedback, feedbackIcon } = (0, _react.useContext)(_context.FormItemInputContext); const mergedStatus = (0, _statusUtils.getMergedStatus)(contextStatus, customStatus); // ===================== Focus warning ===================== const inputHasPrefixSuffix = (0, _utils.hasPrefixSuffix)(props) || !!hasFeedback; const prevHasPrefixSuffix = (0, _react.useRef)(inputHasPrefixSuffix); (0, _react.useEffect)(() => { if (inputHasPrefixSuffix && !prevHasPrefixSuffix.current) { (0, _warning.default)(document.activeElement === inputRef.current?.input, 'Input', `When Input is focused, dynamic add or remove prefix / suffix will make it lose focus caused by dom structure change. Read more: https://ant.design/components/input/#FAQ`); } prevHasPrefixSuffix.current = inputHasPrefixSuffix; }, [inputHasPrefixSuffix]); // ===================== Remove Password value ===================== const removePasswordTimeout = (0, _useRemovePasswordTimeout.default)(inputRef, true); const handleBlur = e => { removePasswordTimeout(); onBlur?.(e); }; const handleFocus = e => { removePasswordTimeout(); onFocus?.(e); }; const handleChange = e => { removePasswordTimeout(); onChange?.(e); }; const suffixNode = (hasFeedback || suffix) && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, suffix, hasFeedback && feedbackIcon); // Allow clear const mergedAllowClear = (0, _react.useMemo)(() => { if (typeof allowClear === 'object' && allowClear?.clearIcon) { return allowClear; } if (allowClear) { return { clearIcon: /*#__PURE__*/_react.default.createElement(_iconFont.default, { type: "icon-a-shidia0shanchu" }) }; } return undefined; }, [allowClear]); return /*#__PURE__*/_react.default.createElement(_rcInput.default, (0, _extends2.default)({ ref: (0, _ref.composeRef)(ref, inputRef), prefixCls: prefixCls, autoComplete: input?.autoComplete }, rest, { disabled: mergedDisabled ?? undefined, onBlur: handleBlur, onFocus: handleFocus, suffix: suffixNode, allowClear: mergedAllowClear, className: (0, _classnames.default)(className, compactItemClassnames, 'lm_input'), onChange: handleChange, addonAfter: addonAfter && /*#__PURE__*/_react.default.createElement(_Compact.NoCompactStyle, null, /*#__PURE__*/_react.default.createElement(_context.NoFormStyle, { override: true, status: true }, addonAfter)), addonBefore: addonBefore && /*#__PURE__*/_react.default.createElement(_Compact.NoCompactStyle, null, /*#__PURE__*/_react.default.createElement(_context.NoFormStyle, { override: true, status: true }, addonBefore)), inputClassName: (0, _classnames.default)({ [`${prefixCls}-sm`]: mergedSize === 'small', [`${prefixCls}-lg`]: mergedSize === 'large', [`${prefixCls}-rtl`]: direction === 'rtl', [`${prefixCls}-borderless`]: !bordered }, !inputHasPrefixSuffix && (0, _statusUtils.getStatusClassNames)(prefixCls, mergedStatus)), affixWrapperClassName: (0, _classnames.default)({ [`${prefixCls}-affix-wrapper-sm`]: mergedSize === 'small', [`${prefixCls}-affix-wrapper-lg`]: mergedSize === 'large', [`${prefixCls}-affix-wrapper-rtl`]: direction === 'rtl', [`${prefixCls}-affix-wrapper-borderless`]: !bordered }, (0, _statusUtils.getStatusClassNames)(`${prefixCls}-affix-wrapper`, mergedStatus, hasFeedback)), wrapperClassName: (0, _classnames.default)({ [`${prefixCls}-group-rtl`]: direction === 'rtl' }), groupClassName: (0, _classnames.default)({ [`${prefixCls}-group-wrapper-sm`]: mergedSize === 'small', [`${prefixCls}-group-wrapper-lg`]: mergedSize === 'large', [`${prefixCls}-group-wrapper-rtl`]: direction === 'rtl' }, (0, _statusUtils.getStatusClassNames)(`${prefixCls}-group-wrapper`, mergedStatus, hasFeedback)) })); }); var _default = Input; exports.default = _default;