acud
Version:
acg react 组件库
193 lines • 6.62 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import React, { useState, useRef, useCallback, useEffect } from 'react';
import OutlinedClose from "acud-icon/es/icons/OutlinedClose";
import MultiToneClear from "acud-icon/es/icons/MultiToneClear";
import Input from './Input';
import Tooltip from '../tooltip';
import classNames from 'classnames';
import { ConfigContext } from '../config-provider';
var Label = function Label(_ref) {
var label = _ref.label,
allowClear = _ref.allowClear,
onPressEnter = _ref.onPressEnter,
customizePrefixCls = _ref.prefixCls,
_ref$placeholder = _ref.placeholder,
placeholder = _ref$placeholder === void 0 ? '' : _ref$placeholder,
disabled = _ref.disabled,
onLabelChange = _ref.onLabelChange;
var _useState = useState(label || []),
_useState2 = _slicedToArray(_useState, 2),
labelList = _useState2[0],
setLabelList = _useState2[1];
var _useState3 = useState(''),
_useState4 = _slicedToArray(_useState3, 2),
inputValue = _useState4[0],
setInputValue = _useState4[1];
var inputEl = useRef(null);
var acudInputEl = useRef(null);
var _useState5 = useState('#D4D6D9'),
_useState6 = _slicedToArray(_useState5, 2),
clearIconColor = _useState6[0],
setClearIconColor = _useState6[1];
var _useState7 = useState(false),
_useState8 = _slicedToArray(_useState7, 2),
compositionStart = _useState8[0],
setCompositionStart = _useState8[1];
useEffect(function () {
setLabelList(label || []);
}, [label]);
var handleClearLabel = function handleClearLabel(index) {
if (disabled) {
return;
}
labelList.splice(index, 1);
setLabelList(_toConsumableArray(labelList));
if (onLabelChange) {
onLabelChange(_toConsumableArray(labelList));
}
};
var handleClearAll = function handleClearAll() {
setLabelList([]);
if (onLabelChange) {
onLabelChange([]);
}
if (inputEl.current) {
inputEl.current.focus();
}
};
var handleOnchange = function handleOnchange(e) {
if (disabled) {
return;
}
setInputValue(e.target.value);
};
var handleOnKeyDown = function handleOnKeyDown(e) {
var _a;
var value = (_a = inputEl.current) === null || _a === void 0 ? void 0 : _a.value;
if (e.key === 'Enter' && inputValue) {
if (!compositionStart) {
if (onPressEnter) {
onPressEnter(e);
}
value && setLabelList([].concat(_toConsumableArray(labelList), [value]));
setInputValue('');
if (onLabelChange) {
onLabelChange([].concat(_toConsumableArray(labelList), [value]));
}
} else {
if (onPressEnter) {
onPressEnter(e);
}
}
}
if (e.key === 'Backspace' && !value) {
var labels = _toConsumableArray(labelList);
labels.pop();
setLabelList(labels);
if (onLabelChange) {
onLabelChange(_toConsumableArray(labels));
}
}
};
var handleClick = function handleClick() {
if (disabled) {
return;
}
if (inputEl.current) {
inputEl.current.focus();
}
};
var handleMouseDown = function handleMouseDown(e) {
e.preventDefault();
};
var handleInputBlur = function handleInputBlur() {
acudInputEl.current.blur();
if (inputValue) {
setLabelList([].concat(_toConsumableArray(labelList), [inputValue]));
setInputValue('');
if (onLabelChange) {
onLabelChange([].concat(_toConsumableArray(labelList), [inputValue]));
}
}
};
var handleMouseUp = function handleMouseUp(e) {
e.preventDefault();
};
var clickClear = function clickClear() {
handleClearAll();
};
var hoverClear = function hoverClear() {
setClearIconColor('#84868C');
};
var clearMouseLeave = function clearMouseLeave() {
setClearIconColor('#D4D6D9');
};
var handleMouseDownClear = useCallback(function (e) {
e.preventDefault();
}, []);
var _React$useContext = React.useContext(ConfigContext),
getPrefixCls = _React$useContext.getPrefixCls;
var prefixCls = getPrefixCls('input-label', customizePrefixCls);
var inputBoxClassNames = classNames("".concat(prefixCls, "-input-box"), _defineProperty({}, "".concat(prefixCls, "-input-box-placeholder"), !labelList.length && placeholder));
var renderLabel = function renderLabel() {
return /*#__PURE__*/React.createElement("ul", {
className: "".concat(prefixCls, "-wrapper"),
onClick: handleClick
}, labelList.map(function (item, index) {
return /*#__PURE__*/React.createElement("li", {
key: index,
className: "".concat(prefixCls, "-item"),
"aria-disabled": disabled
}, /*#__PURE__*/React.createElement(Tooltip, {
placement: "top",
title: item
}, /*#__PURE__*/React.createElement("span", {
className: "".concat(prefixCls, "-text")
}, item)), /*#__PURE__*/React.createElement(OutlinedClose, {
className: "".concat(prefixCls, "-clear-icon"),
disabled: disabled,
onClick: function onClick() {
return handleClearLabel(index);
},
onMouseDown: handleMouseDown,
onMouseUp: handleMouseUp
}));
}), /*#__PURE__*/React.createElement("div", {
className: inputBoxClassNames
}, /*#__PURE__*/React.createElement("input", {
className: "label-input",
ref: inputEl,
disabled: disabled,
value: inputValue,
onChange: handleOnchange,
onKeyDown: handleOnKeyDown,
onBlur: handleInputBlur,
onCompositionStart: function onCompositionStart() {
return setCompositionStart(true);
},
onCompositionEnd: function onCompositionEnd() {
return setCompositionStart(false);
},
placeholder: labelList.length ? '' : placeholder
})), allowClear && !disabled && !!labelList.length && /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-clear-wrapper"),
onClick: clickClear,
onMouseEnter: hoverClear,
onMouseLeave: clearMouseLeave,
onMouseDown: handleMouseDownClear
}, /*#__PURE__*/React.createElement(MultiToneClear, {
width: 16,
color: clearIconColor
})));
};
return /*#__PURE__*/React.createElement(Input, {
label: renderLabel(),
disabled: disabled,
ref: acudInputEl,
handleClearAll: handleClearAll,
allowClear: !!labelList.length
});
};
export default Label;