UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

93 lines (92 loc) 6.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); var antd_1 = require("antd"); var rc_virtual_list_1 = (0, tslib_1.__importDefault)(require("rc-virtual-list")); var lodash_1 = require("lodash"); require("./index.scss"); var PcContacts = function (props) { var mode = props.mode, height = props.height, contacts = props.contacts, checkedKeys = props.checkedKeys, onCheckedKeysChange = props.onCheckedKeysChange, onListChecked = props.onListChecked, onTreeChecked = props.onTreeChecked, onSelected = props.onSelected, _a = props.defaultCheckedKeys, defaultCheckedKeys = _a === void 0 ? [] : _a, _b = props.className, className = _b === void 0 ? '' : _b; var _c = (0, react_1.useState)(), selectedId = _c[0], setSelectedId = _c[1]; var _d = (0, react_1.useState)([]), expandedKeys = _d[0], setExpandedKeys = _d[1]; var _e = (0, react_1.useState)(), searchDatas = _e[0], setSearchDatas = _e[1]; var _f = (0, react_1.useState)([]), dataSource = _f[0], setDataSource = _f[1]; (0, react_1.useEffect)(function () { var topNodes = getTopNodes(contacts); setDataSource(topNodes); }, [contacts]); var getTopNodes = function (contacts) { return contacts.flatMap(function (data) { if (data.nodeType === 0 && (data.parId == undefined || data.parId === 'top')) { return [{ key: data.id, title: data.name, isLeaf: false, checkable: false, selectable: mode == 'view' }]; } return []; }); }; var handleSearch = (0, lodash_1.debounce)(function (value) { if (value.length === 0) { setSearchDatas(undefined); } else { setSearchDatas(contacts.filter(function (data) { return data.name.includes(value) || data.id.includes(value); })); } }, 600); var getTreeData = function (id) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var children, tempData; return (0, tslib_1.__generator)(this, function (_a) { children = getNodeChildren(id); tempData = children.filter(function (data) { return defaultCheckedKeys.includes(data.key); }).map(function (data) { return data.key; }); onCheckedKeysChange((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], checkedKeys, true), tempData, true)); setDataSource(function (datas) { return buildTreeData(id, datas, (0, tslib_1.__spreadArray)([], children, true)); }); return [2 /*return*/]; }); }); }; var getNodeChildren = function (id) { return contacts.flatMap(function (data) { if (data.parId == id) { return [{ key: data.id, selectable: mode == 'view', checkable: true, title: data.nodeType == 1 ? data.name + " (" + data.id + ")" : data.name, isLeaf: data.nodeType == 1, disabled: defaultCheckedKeys.includes(data.id) }]; } return []; }); }; var buildTreeData = function (key, datas, children) { return datas.map(function (node) { if (node.key === key) { return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, node), { children: children }); } if (node.children) { return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, node), { children: buildTreeData(key, node.children, children) }); } return node; }); }; return (react_1.default.createElement("div", { className: "pc-contacts " + className }, react_1.default.createElement(antd_1.Input, { className: 'pc-contacts-search', placeholder: '\u7528\u6237\u540D\u3001\u5DE5\u53F7', allowClear: true, onChange: function (e) { return handleSearch(e.target.value); } }), react_1.default.createElement("div", { className: 'pc-contacts-tree-wrapper' }, searchDatas ? react_1.default.createElement(antd_1.List, { size: 'small' }, react_1.default.createElement(rc_virtual_list_1.default, { data: searchDatas, itemKey: 'id', itemHeight: 38, height: height }, function (data) { return (react_1.default.createElement(antd_1.List.Item, { key: data.id, className: data.id == selectedId ? 'list-item-selected' : '', onClick: mode == 'view' ? function () { return setSelectedId(data.id); } : undefined }, mode == 'select' && react_1.default.createElement(antd_1.Checkbox, { disabled: defaultCheckedKeys.includes(data.id), checked: checkedKeys.includes(data.id) || defaultCheckedKeys.includes(data.id), onChange: function (e) { return onListChecked(e.target.checked, data); } }, data.name, "(", data.id, ")"), mode == 'view' && react_1.default.createElement("span", null, data.name, "(", data.id, ")"))); })) : react_1.default.createElement(antd_1.Tree, { style: { fontSize: 13 }, checkable: mode == 'select', checkStrictly: true, height: height, expandedKeys: expandedKeys, checkedKeys: checkedKeys, treeData: dataSource, defaultCheckedKeys: defaultCheckedKeys, onExpand: function (keys) { return setExpandedKeys(keys); }, loadData: function (data) { return getTreeData(data.key); }, onCheck: function (_keys, info) { var node = info.node; var data = contacts.find(function (contact) { return contact.id === node.key; }); data && onTreeChecked(info.checked, data); }, onSelect: function (_keys, info) { var node = info.node; var data = contacts.find(function (contact) { return contact.id === node.key; }); data && (onSelected === null || onSelected === void 0 ? void 0 : onSelected(data)); } })))); }; exports.default = PcContacts; //# sourceMappingURL=./components/Communication/PcContacts/index.js.map