linkmore-design
Version:
π πlmη»δ»ΆεΊγπ
238 lines (226 loc) β’ 8.35 kB
JavaScript
;
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;