linkmore-design
Version:
π πlmη»δ»ΆεΊγπ
105 lines (103 loc) β’ 3.88 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;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _CloseOutlined = _interopRequireDefault(require("@ant-design/icons/CloseOutlined"));
var _classnames = _interopRequireDefault(require("classnames"));
var _omit = _interopRequireDefault(require("rc-util/lib/omit"));
var React = _interopRequireWildcard(require("react"));
var _configProvider = require("../config-provider");
var _colors = require("../_util/colors");
var _wave = _interopRequireDefault(require("../_util/wave"));
var _warning = _interopRequireDefault(require("../_util/warning"));
var _CheckableTag = _interopRequireDefault(require("./CheckableTag"));
const PresetColorRegex = new RegExp(`^(${_colors.PresetColorTypes.join('|')})(-inverse)?$`);
const PresetStatusColorRegex = new RegExp(`^(${_colors.PresetStatusColorTypes.join('|')})$`);
const InternalTag = ({
prefixCls: customizePrefixCls,
className,
style,
children,
icon,
color,
onClose,
closeIcon,
closable = false,
...props
}, ref) => {
const {
getPrefixCls,
direction
} = React.useContext(_configProvider.ConfigContext);
const [visible, setVisible] = React.useState(true);
// Warning for deprecated usage
if (process.env.NODE_ENV !== 'production') {
(0, _warning.default)(!('visible' in props), 'Tag', '`visible` will be removed in next major version, please use `visible && <Tag />` instead.');
}
React.useEffect(() => {
if ('visible' in props) {
setVisible(props.visible);
}
}, [props.visible]);
const isPresetColor = () => {
if (!color) {
return false;
}
return PresetColorRegex.test(color) || PresetStatusColorRegex.test(color);
};
const tagStyle = {
backgroundColor: color && !isPresetColor() ? color : undefined,
...style
};
const presetColor = isPresetColor();
const prefixCls = getPrefixCls('tag', customizePrefixCls);
const tagClassName = (0, _classnames.default)(prefixCls, {
[`${prefixCls}-${color}`]: presetColor,
[`${prefixCls}-has-color`]: color && !presetColor,
[`${prefixCls}-hidden`]: !visible,
[`${prefixCls}-rtl`]: direction === 'rtl'
}, className);
const handleCloseClick = e => {
e.stopPropagation();
onClose?.(e);
if (e.defaultPrevented) {
return;
}
if (!('visible' in props)) {
setVisible(false);
}
};
const renderCloseIcon = () => {
if (closable) {
return closeIcon ? /*#__PURE__*/React.createElement("span", {
className: `${prefixCls}-close-icon`,
onClick: handleCloseClick
}, closeIcon) : /*#__PURE__*/React.createElement(_CloseOutlined.default, {
className: `${prefixCls}-close-icon`,
onClick: handleCloseClick
});
}
return null;
};
const isNeedWave = 'onClick' in props || children && children.type === 'a';
const tagProps = (0, _omit.default)(props, ['visible']);
const iconNode = icon || null;
const kids = iconNode ? /*#__PURE__*/React.createElement(React.Fragment, null, iconNode, /*#__PURE__*/React.createElement("span", null, children)) : children;
const tagNode = /*#__PURE__*/React.createElement("span", (0, _extends2.default)({}, tagProps, {
ref: ref,
className: tagClassName,
style: tagStyle
}), kids, renderCloseIcon());
return isNeedWave ? /*#__PURE__*/React.createElement(_wave.default, null, tagNode) : tagNode;
};
const Tag = /*#__PURE__*/React.forwardRef(InternalTag);
if (process.env.NODE_ENV !== 'production') {
Tag.displayName = 'Tag';
}
Tag.CheckableTag = _CheckableTag.default;
var _default = Tag;
exports.default = _default;
;