acud
Version:
acg react 组件库
337 lines (335 loc) • 15.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.resolveTargetValue = exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _MultiToneClear = _interopRequireDefault(require("acud-icon/lib/icons/MultiToneClear"));
var _popover = _interopRequireDefault(require("../popover"));
var _configProvider = require("../config-provider");
var _SizeContext = _interopRequireDefault(require("../config-provider/SizeContext"));
var _LocaleReceiver = require("../locale-provider/LocaleReceiver");
var _useCombinedRefs = _interopRequireDefault(require("../_util/hooks/useCombinedRefs"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var __rest = void 0 && (void 0).__rest || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
/**
* @file Group component
* @author liyanan
*/
var resolveTargetValue = exports.resolveTargetValue = function resolveTargetValue(event, value) {
var newEvent = (0, _extends2["default"])((0, _extends2["default"])({}, event), {
target: (0, _extends2["default"])((0, _extends2["default"])({}, event.target), {
value: value
})
});
return newEvent;
};
var Input = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
var _classNames3;
var _useLocaleReceiver = (0, _LocaleReceiver.useLocaleReceiver)('Input'),
_useLocaleReceiver2 = (0, _slicedToArray2["default"])(_useLocaleReceiver, 1),
locale = _useLocaleReceiver2[0];
var customizePrefixCls = props.prefixCls,
customizeSize = props.size,
_props$placeholder = props.placeholder,
placeholder = _props$placeholder === void 0 ? locale === null || locale === void 0 ? void 0 : locale.placeholder : _props$placeholder,
warning = props.warning,
warningPopover = props.warningPopover,
warningText = props.warningText,
tips = props.tips,
disabled = props.disabled,
readOnly = props.readOnly,
defaultValue = props.defaultValue,
limitLength = props.limitLength,
label = props.label,
prefix = props.prefix,
suffix = props.suffix,
addonBefore = props.addonBefore,
addonAfter = props.addonAfter,
className = props.className,
allowClear = props.allowClear,
onPressEnter = props.onPressEnter,
onKeyDown = props.onKeyDown,
handleClearAll = props.handleClearAll,
onCompositionStart = props.onCompositionStart,
onCompositionEnd = props.onCompositionEnd,
onPaste = props.onPaste,
type = props.type,
style = props.style,
_props$hidden = props.hidden,
hidden = _props$hidden === void 0 ? false : _props$hidden,
_props$forbidIfLimit = props.forbidIfLimit,
forbidIfLimit = _props$forbidIfLimit === void 0 ? false : _props$forbidIfLimit,
rest = __rest(props, ["prefixCls", "size", "placeholder", "warning", "warningPopover", "warningText", "tips", "disabled", "readOnly", "defaultValue", "limitLength", "label", "prefix", "suffix", "addonBefore", "addonAfter", "className", "allowClear", "onPressEnter", "onKeyDown", "handleClearAll", "onCompositionStart", "onCompositionEnd", "onPaste", "type", "style", "hidden", "forbidIfLimit"]);
var _useState = (0, _react.useState)(props.value || defaultValue || ''),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
value = _useState2[0],
setValue = _useState2[1];
var _useState3 = (0, _react.useState)('#D4D6D9'),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
clearIconColor = _useState4[0],
setClearIconColor = _useState4[1];
var _useState5 = (0, _react.useState)(false),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
showClearIcon = _useState6[0],
setShowClearIcon = _useState6[1];
var _useState7 = (0, _react.useState)(''),
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
focusClass = _useState8[0],
setFocusClass = _useState8[1];
// const userTypingRef = React.useRef(false);
var composedRef = _react["default"].useRef(false);
var _useState9 = (0, _react.useState)(''),
_useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
composingValue = _useState0[0],
setComposingValue = _useState0[1];
var innerRef = _react["default"].useRef(null);
var combinedRef = (0, _useCombinedRefs["default"])(ref, innerRef);
(0, _react.useImperativeHandle)(ref, function () {
return {
blur: function blur() {
setFocusClass('');
},
focus: function focus() {
combinedRef.current.focus();
}
};
});
(0, _react.useEffect)(function () {
if ('value' in props && value !== props.value) {
setComposingValue(props.value || '');
setValue(props.value || '');
if (props.value === 0) {
setComposingValue(0);
setValue(0);
}
}
if ('label' in props && props.label) {
if (props.allowClear) {
setShowClearIcon(true);
} else {
setShowClearIcon(false);
}
}
if (!disabled && !readOnly) {
if (value.length && props.allowClear) {
setShowClearIcon(true);
}
}
if (props.allowClear && !value.length) {
setShowClearIcon(false);
}
}, [props, value, disabled, readOnly]);
var handleFocus = function handleFocus(e) {
if (disabled || readOnly) {
return;
}
e.stopPropagation();
setFocusClass('focus');
if (props.onFocus) {
props.onFocus(e);
}
};
var handleBlur = function handleBlur(e) {
if (disabled || readOnly) {
return;
}
setFocusClass('');
if (props.onBlur) {
props.onBlur(e);
}
};
var handleOnKeyDown = function handleOnKeyDown(e) {
// userTypingRef.current = true;
if (onPressEnter && e.key === 'Enter') {
if (composedRef.current) {
return;
}
onPressEnter(e);
}
if (onKeyDown) {
onKeyDown(e);
}
};
var handleOnChange = function handleOnChange(e) {
var _a;
if (composedRef.current) {
setComposingValue(e.target.value);
} else {
if (forbidIfLimit && limitLength && e.target.value.length >= limitLength) {
setComposingValue(e.target.value.slice(0, limitLength));
setValue(e.target.value.slice(0, limitLength));
e.target.value = e.target.value.slice(0, limitLength);
} else {
setComposingValue(e.target.value);
setValue(e.target.value);
}
if (!e.target.value.length) {
setShowClearIcon(false);
}
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, e);
}
};
var handleOuterFocus = function handleOuterFocus() {
setFocusClass('focus');
};
var handleOuterBlur = function handleOuterBlur() {
setFocusClass('');
};
var handleMouseDownClear = (0, _react.useCallback)(function (e) {
e.preventDefault();
}, []);
var clickClear = function clickClear(e) {
if (allowClear) {
setShowClearIcon(false);
// setValue('');
// 强制转换一下类型
handleOnChange(resolveTargetValue(e, ''));
}
if (label) {
setShowClearIcon(false);
}
if (handleClearAll) {
handleClearAll();
}
// console.log('combinedRef', combinedRef);
// combinedRef.current.focus();
};
var hoverClear = function hoverClear() {
setClearIconColor('#84868C');
};
var clearMouseLeave = function clearMouseLeave() {
setClearIconColor('#D4D6D9');
};
var onHandlePaste = function onHandlePaste(e) {
if (onPaste) {
onPaste(e);
}
};
var _React$useContext = _react["default"].useContext(_configProvider.ConfigContext),
getPrefixCls = _React$useContext.getPrefixCls;
var prefixCls = getPrefixCls('input', customizePrefixCls);
var renderPrefix = function renderPrefix() {
if (prefix) {
return /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-prefix"),
"aria-disabled": disabled || readOnly
}, prefix);
}
return null;
};
var renderSuffix = function renderSuffix() {
if (suffix || limitLength) {
return /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-suffix"),
"aria-disabled": disabled || readOnly
}, suffix, (!disabled || !readOnly) && limitLength && /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-suffix-limit-text")
}, /*#__PURE__*/_react["default"].createElement("span", {
className: (0, _classnames["default"])((0, _defineProperty2["default"])({}, "".concat(prefixCls, "-suffix-warning"), value && value.length > limitLength))
}, value && value.length ? value.length : 0, "/", limitLength))));
}
return null;
};
var addonClasses = function addonClasses(addon) {
return (0, _classnames["default"])("".concat(prefixCls, "-addon"), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-addonOnlyText"), typeof addon === 'string'));
};
var renderAddonBefore = function renderAddonBefore() {
if (addonBefore) {
return /*#__PURE__*/_react["default"].createElement("span", {
className: addonClasses(addonBefore),
"aria-disabled": disabled || readOnly
}, addonBefore);
}
return null;
};
var renderAddonAffer = function renderAddonAffer() {
if (addonAfter) {
return /*#__PURE__*/_react["default"].createElement("span", {
className: addonClasses(addonAfter),
"aria-disabled": disabled || readOnly
}, addonAfter);
}
return null;
};
var handleOnCompositionStart = function handleOnCompositionStart(e) {
composedRef.current = true;
onCompositionStart === null || onCompositionStart === void 0 ? void 0 : onCompositionStart(e);
};
var handleOnCompositionEnd = function handleOnCompositionEnd(e) {
if (composedRef.current) {
composedRef.current = false;
handleOnChange(e);
}
onCompositionEnd === null || onCompositionEnd === void 0 ? void 0 : onCompositionEnd(e);
};
var innerValue = composedRef.current ? composingValue : value !== null && value !== void 0 ? value : '';
var size = _react["default"].useContext(_SizeContext["default"]) || customizeSize;
var classes = (0, _classnames["default"])(prefixCls, className, (_classNames3 = {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_classNames3, "".concat(prefixCls, "-sm"), size === 'small'), "".concat(prefixCls, "-lg"), size === 'large'), "".concat(prefixCls, "-warning"), warning || warningPopover || value && value.length > limitLength), "".concat(prefixCls, "-has-prefix"), prefix), "".concat(prefixCls, "-has-suffix"), suffix), "".concat(prefixCls, "-has-addon-before"), addonBefore), "".concat(prefixCls, "-has-addon-after"), addonAfter), "".concat(prefixCls, "-label-input"), label), "".concat(prefixCls, "-span-focus"), focusClass), "".concat(prefixCls, "-real-password"), type === 'password'), (0, _defineProperty2["default"])((0, _defineProperty2["default"])(_classNames3, "".concat(prefixCls, "-has-clear"), (!disabled || !readOnly) && allowClear && !label), "".concat(prefixCls, "-has-limit"), limitLength)));
var inputDom = /*#__PURE__*/_react["default"].createElement("input", (0, _extends2["default"])({}, rest, {
type: type,
ref: combinedRef,
placeholder: placeholder,
value: innerValue,
disabled: disabled,
readOnly: readOnly,
onFocus: handleFocus,
onBlur: handleBlur,
onKeyDown: handleOnKeyDown,
onChange: handleOnChange,
onCompositionStart: handleOnCompositionStart,
onCompositionEnd: handleOnCompositionEnd,
onPaste: onHandlePaste
}));
var renderInner = function renderInner() {
return /*#__PURE__*/_react["default"].createElement("span", {
className: classes,
style: style,
"aria-disabled": disabled || readOnly,
onFocus: handleOuterFocus,
onBlur: handleOuterBlur
}, label, renderAddonBefore(), renderPrefix(), /*#__PURE__*/_react["default"].cloneElement(inputDom, {
value: innerValue
}), (!disabled || !readOnly) && showClearIcon && /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-clear-wrapper"),
onClick: clickClear,
onMouseEnter: hoverClear,
onMouseLeave: clearMouseLeave,
onMouseDown: handleMouseDownClear
}, /*#__PURE__*/_react["default"].createElement(_MultiToneClear["default"], {
width: 16,
color: clearIconColor
})), renderSuffix(), renderAddonAffer());
};
if (!hidden) {
var warningTextContent = (!disabled || !readOnly) && !warningPopover && warningText && /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-warning-text")
}, warningText);
var tipsContent = (!disabled || !readOnly) && !warningPopover && !warningText && tips && /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-tips")
}, tips);
return warningText ? /*#__PURE__*/_react["default"].createElement(_popover["default"], (0, _extends2["default"])({
content: /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-warning-popover-text")
}, warningText),
placement: "bottomLeft"
}, warningPopover && !!warningText ? {} : {
visible: false
}), renderInner(), warningTextContent, tipsContent) : /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, renderInner(), warningTextContent, tipsContent);
}
return null;
});
var _default = exports["default"] = Input;