zp-bee
Version:
zp-bee,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。
131 lines (114 loc) • 4.68 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
require("antd/es/tree-select/style");
var _treeSelect = _interopRequireDefault(require("antd/es/tree-select"));
var _react = _interopRequireWildcard(require("react"));
var _reactDom = require("react-dom");
var _utils = require("../_utils");
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;
};
var TreeNode = _treeSelect.default.TreeNode;
var InternalTreeMultiSelect = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
var label = props.label,
className = props.className,
injectLabel = props.injectLabel,
onChange = props.onChange,
others = __rest(props, ["label", "className", "injectLabel", "onChange"]);
var _useState = (0, _react.useState)(1),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
maxTagCount = _useState2[0],
setMaxTagCount = _useState2[1];
var _useState3 = (0, _react.useState)(false),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
showLabelPop = _useState4[0],
setShowLabelPop = _useState4[1];
var container = (0, _react.useRef)(null);
var selectRef = (0, _react.useRef)({});
var injectRef = (0, _react.useRef)(null);
var positionRef = (0, _react.useRef)({});
(0, _react.useEffect)(function () {
var _a;
var parent = (_a = container.current) === null || _a === void 0 ? void 0 : _a.previousSibling;
var dom = parent.querySelector('.ant-select-selector');
var input = dom.querySelector('.ant-select-selection-search-input');
var span = document.createElement('span');
span.innerHTML = label;
span.classList.add('bee-label');
dom.prepend(span);
var left = span.getBoundingClientRect().width + 10;
dom.style.paddingLeft = "".concat(left, "px");
input.style.textIndent = "".concat(left - 10, "px");
positionRef.current = dom.getBoundingClientRect();
}, []);
(0, _react.useImperativeHandle)(ref, function () {
return {
handleChange: onSelfChange,
onChange: onSelfChange,
onFocus: onFocus,
onBlur: onBlur
};
});
var onFocus = (0, _react.useCallback)(function () {
setMaxTagCount(undefined);
setShowLabelPop(false);
}, []);
var onBlur = (0, _react.useCallback)(function () {
setMaxTagCount(1);
}, []);
var onMouseEnter = (0, _react.useCallback)(function () {
setShowLabelPop(true);
}, []);
var onMouseLeave = (0, _react.useCallback)(function () {
setShowLabelPop(false);
}, []);
var onSelfChange = (0, _react.useCallback)(function (value, label, extra) {
onChange && onChange(value, label, extra);
selectRef.current = label;
}, []);
var _positionRef$current = positionRef.current,
top = _positionRef$current.top,
left = _positionRef$current.left,
width = _positionRef$current.width;
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_treeSelect.default, Object.assign({
ref: injectRef,
multiple: true,
className: className ? className : '',
maxTagCount: maxTagCount,
onFocus: onFocus,
onBlur: onBlur,
onMouseEnter: onMouseEnter,
onMouseLeave: onMouseLeave,
onChange: onSelfChange
}, others)), /*#__PURE__*/_react.default.createElement("noscript", {
ref: container
}), showLabelPop && selectRef.current && selectRef.current.length > 0 && /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react.default.createElement("div", {
className: "bee-hover",
style: {
top: top + 36,
left: left + 40,
width: width
}
}, selectRef.current.map(function (item) {
return /*#__PURE__*/_react.default.createElement("span", {
className: "bee-span"
}, item, ";");
})), (0, _utils.getPopContainer)()));
});
var BeeTreeMultiSelect = InternalTreeMultiSelect;
BeeTreeMultiSelect.MultiTreeNode = TreeNode;
var _default = BeeTreeMultiSelect;
exports.default = _default;