UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

828 lines (827 loc) 45.3 kB
"use strict"; /** * @file Tree * @description 树形组件 * @author fex */ Object.defineProperty(exports, "__esModule", { value: true }); exports.TreeSelector = void 0; var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var helper_1 = require("../utils/helper"); var Select_1 = require("./Select"); var theme_1 = require("../theme"); var Options_1 = require("../renderers/Form/Options"); var icons_1 = require("./icons"); var Checkbox_1 = (0, tslib_1.__importDefault)(require("./Checkbox")); var locale_1 = require("../locale"); var Spinner_1 = (0, tslib_1.__importDefault)(require("./Spinner")); var react_dom_1 = require("react-dom"); var utils_1 = require("../renderers/Lion/utils/utils"); var TreeSelector = /** @class */ (function (_super) { (0, tslib_1.__extends)(TreeSelector, _super); function TreeSelector(props) { var _a, _b, _c, _d, _e, _f, _g; var _this = _super.call(this, props) || this; _this.unfolded = new WeakMap(); _this.startPoint = { x: 0, y: 0 }; _this.root = react_1.default.createRef(); // 原始的展开状态存储地址---停用 // Aug _this.spreadList = {}; _this.repeatCount = 0; _this.state = { value: (0, Select_1.value2array)(props.value, { multiple: props.multiple, delimiter: props.delimiter, valueField: props.valueField, labelField: props.labelField, options: props.options, pathSeparator: props.pathSeparator }, props.enableNodePath), inputValue: '', addingParent: null, isAdding: false, isEditing: false, editingItem: null, dropIndicator: undefined, height: ((_c = (_b = (_a = document === null || document === void 0 ? void 0 : document.querySelector('.antd-Tree')) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement) === null || _c === void 0 ? void 0 : _c.clientHeight) - ((_g = (_f = (_e = (_d = document === null || document === void 0 ? void 0 : document.querySelector('.antd-Tree')) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.parentElement) === null || _f === void 0 ? void 0 : _f.querySelector('label')) === null || _g === void 0 ? void 0 : _g.clientHeight) - 12 }; // Aug if (_this.props.spread) { _this.spreadList = _this.props.spread; } _this.syncUnFolded(props); return _this; } TreeSelector.prototype.componentDidMount = function () { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; var enableNodePath = this.props.enableNodePath; var _thisDom = (0, react_dom_1.findDOMNode)(this); var height = (((_c = (_b = (_a = (0, react_dom_1.findDOMNode)(this)) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement) === null || _c === void 0 ? void 0 : _c.clientHeight) - ((_g = (_f = (_e = (_d = (0, react_dom_1.findDOMNode)(this)) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.parentElement) === null || _f === void 0 ? void 0 : _f.querySelector('label')) === null || _g === void 0 ? void 0 : _g.clientHeight)) || (((_k = (_j = (_h = document === null || document === void 0 ? void 0 : document.querySelector('.antd-Tree')) === null || _h === void 0 ? void 0 : _h.parentElement) === null || _j === void 0 ? void 0 : _j.parentElement) === null || _k === void 0 ? void 0 : _k.clientHeight) - ((_p = (_o = (_m = (_l = document === null || document === void 0 ? void 0 : document.querySelector('.antd-Tree')) === null || _l === void 0 ? void 0 : _l.parentElement) === null || _m === void 0 ? void 0 : _m.parentElement) === null || _o === void 0 ? void 0 : _o.querySelector('label')) === null || _p === void 0 ? void 0 : _p.clientHeight) - 12); this.setState({ height: height }); enableNodePath && this.expandLazyLoadNodes(); }; TreeSelector.prototype.handleSelectFirst = function (option) { var _this = this; if (this.repeatCount < 20) { this.handleSelect(option, undefined, function (find) { if (!find) { _this.repeatCount++; setTimeout(function () { _this.handleSelectFirst(option); }, 500); } }); } }; TreeSelector.prototype.componentDidUpdate = function (prevProps) { var props = this.props; if (prevProps.options !== props.options) { this.syncUnFolded(props); if (props.loadFirst && props.options.length > 0) { this.handleSelectFirst(props.options[0]); } } if (prevProps.value !== props.value || prevProps.options !== props.options) { this.setState({ value: (0, Select_1.value2array)(props.value, { multiple: props.multiple, delimiter: props.delimiter, valueField: props.valueField, options: props.options }, props.enableNodePath) }); } }; TreeSelector.prototype.componentWillUnmount = function () { // Aug var onKeepSqread = this.props.onKeepSqread; onKeepSqread && onKeepSqread(this.spreadList); }; /** * 展开懒加载节点的父节点 */ TreeSelector.prototype.expandLazyLoadNodes = function () { var _a = this.props, pathSeparator = _a.pathSeparator, onExpandTree = _a.onExpandTree, _b = _a.nodePath, nodePath = _b === void 0 ? [] : _b; var nodePathArr = nodePath.map(function (path) { return path ? path.toString().split(pathSeparator) : []; }); onExpandTree === null || onExpandTree === void 0 ? void 0 : onExpandTree(nodePathArr); }; TreeSelector.prototype.syncUnFolded = function (props) { var _this = this; // 初始化树节点的展开状态 var unfolded = this.unfolded; var _a = this.props, foldedField = _a.foldedField, unfoldedField = _a.unfoldedField, valueField = _a.valueField; (0, helper_1.eachTree)(props.options, function (node, index, level) { // Aug unfolded改为spreadList if (node[valueField] in _this.spreadList) { return; } // if (unfolded.has(node)) { // return; // } if (node.children && node.children.length) { var ret = true; if (node.defer && node.loaded) { ret = true; } else if (unfoldedField && typeof node[unfoldedField] !== 'undefined') { ret = !!node[unfoldedField]; } else if (foldedField && typeof node[foldedField] !== 'undefined') { ret = !node[foldedField]; } else { ret = !!props.initiallyOpen; if (!ret && level <= (props === null || props === void 0 ? void 0 : props.unfoldedLevel)) { ret = true; } } // 停用 // unfolded.set(node, ret); // Aug _this.spreadList[node[valueField]] = ret; } }); return unfolded; }; TreeSelector.prototype.toggleUnfolded = function (node) { // const unfolded = this.unfolded; var _a = this.props, onDeferLoad = _a.onDeferLoad, valueField = _a.valueField; if (node.defer && !node.loaded) { onDeferLoad === null || onDeferLoad === void 0 ? void 0 : onDeferLoad(node); return; } // 停用 // unfolded.set(node, !unfolded.get(node)); // Aug unfolded改为spreadList var key = node[valueField]; this.spreadList[key] = !this.spreadList[key]; this.forceUpdate(); }; TreeSelector.prototype.isUnfolded = function (node) { // 停用 // const unfolded = this.unfolded; // return unfolded.get(node); // Aug var key = node[this.props.valueField]; return this.spreadList[key]; }; TreeSelector.prototype.clearSelect = function () { var _this = this; this.setState({ value: [] }, function () { var _a = _this.props, joinValues = _a.joinValues, rootValue = _a.rootValue, onChange = _a.onChange; onChange(joinValues ? rootValue : []); }); }; /** * enableNodePath为true时,将label和value转换成node path格式 */ TreeSelector.prototype.transform2NodePath = function (value) { var _a = this.props, multiple = _a.multiple, options = _a.options, valueField = _a.valueField, labelField = _a.labelField, joinValues = _a.joinValues, extractValue = _a.extractValue, pathSeparator = _a.pathSeparator, delimiter = _a.delimiter; var nodesValuePath = []; var selectedNodes = Array.isArray(value) ? value.concat() : [value]; var selectedNodesPath = selectedNodes.map(function (node) { var _a, _b; var _c; var nodePath = (_c = (0, helper_1.getTreeAncestors)(options, node, true)) === null || _c === void 0 ? void 0 : _c.reduce(function (acc, node) { acc[labelField].push(node[labelField]); acc[valueField].push(node[valueField]); return acc; }, (_a = {}, _a[labelField] = [], _a[valueField] = [], _a)); var nodeValuePath = nodePath[valueField].join(pathSeparator); nodesValuePath.push(nodeValuePath); return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, node), (_b = {}, _b[labelField] = nodePath[labelField].join(pathSeparator), _b[valueField] = nodeValuePath, _b)); }); if (multiple) { return joinValues ? nodesValuePath.join(delimiter) : extractValue ? nodesValuePath : selectedNodesPath; } else { return joinValues || extractValue ? selectedNodesPath[0][valueField] : selectedNodesPath[0]; } }; TreeSelector.prototype.handleSelect = function (node, value, callback) { var _this = this; var _a = this.props, joinValues = _a.joinValues, valueField = _a.valueField, onChange = _a.onChange, enableNodePath = _a.enableNodePath, onlyLeaf = _a.onlyLeaf; if (node[valueField] === undefined) { if (node.defer && !node.loaded) { this.toggleUnfolded(node); } return; } if (onlyLeaf && node.children) { return; } this.setState({ value: [node] }, function () { callback ? callback(onChange(enableNodePath ? _this.transform2NodePath(node) : joinValues ? node[valueField] : node, node // Aug 将所有数据传出去,以便灵活处理 )) : onChange(enableNodePath ? _this.transform2NodePath(node) : joinValues ? node[valueField] : node, node // Aug 将所有数据传出去,以便灵活处理 ); }); }; TreeSelector.prototype.handleCheck = function (item, checked) { var _this = this; var props = this.props; var value = this.state.value.concat(); var idx = value.indexOf(item); var onlyChildren = props.onlyChildren; if (checked) { ~idx || value.push(item); // cascade 为 true 表示父节点跟子节点没有级联关系。 if (!props.cascade) { var children = item.children ? item.children.concat([]) : []; if (onlyChildren) { // 父级选中的时候,子节点也都选中,但是自己不选中 !~idx && children.length && value.pop(); while (children.length) { var child = children.shift(); var index = value.indexOf(child); if (child.children && child.children.length) { children.push.apply(children, child.children); } else if (!~index && child.value !== 'undefined') { value.push(child); } } } else { // 只要父节点选择了,子节点就不需要了,全部去掉勾选. withChildren时相反 while (children.length) { var child = children.shift(); var index = value.indexOf(child); if (~index) { value.splice(index, 1); } if (props.withChildren) { value.push(child); } if (child.children && child.children.length) { children.push.apply(children, child.children); } } var toCheck = item; while (true) { var parent = (0, helper_1.getTreeParent)(props.options, toCheck); if (parent === null || parent === void 0 ? void 0 : parent.value) { // 如果所有孩子节点都勾选了,应该自动勾选父级。 if (parent.children.every(function (child) { return ~value.indexOf(child); })) { if (!props.withChildren) { parent.children.forEach(function (child) { var index = value.indexOf(child); if (~index) { value.splice(index, 1); } }); } value.push(parent); toCheck = parent; continue; } } break; } } } } else { ~idx && value.splice(idx, 1); if (!props.cascade && (props.withChildren || onlyChildren)) { var children = item.children ? item.children.concat([]) : []; while (children.length) { var child = children.shift(); var index = value.indexOf(child); if (~index) { value.splice(index, 1); } if (child.children && child.children.length) { children.push.apply(children, child.children); } } } } this.setState({ value: value }, function () { var joinValues = props.joinValues, extractValue = props.extractValue, valueField = props.valueField, delimiter = props.delimiter, onChange = props.onChange, enableNodePath = props.enableNodePath; onChange(enableNodePath ? _this.transform2NodePath(value) : joinValues ? value.map(function (item) { return item[valueField]; }).join(delimiter) : extractValue ? value.map(function (item) { return item[valueField]; }) : value, value // Aug 将所有数据传出去,以便灵活处理 ); }); }; TreeSelector.prototype.handleAdd = function (parent) { if (parent === void 0) { parent = null; } var _a = this.props, bultinCUD = _a.bultinCUD, onAdd = _a.onAdd, options = _a.options; if (!bultinCUD) { var idxes = (0, helper_1.findTreeIndex)(options, function (item) { return item === parent; }) || []; return onAdd && onAdd(idxes.concat(0)); } else { this.setState({ isEditing: false, isAdding: true, addingParent: parent }); } }; TreeSelector.prototype.handleEdit = function (item) { var _a = this.props, bultinCUD = _a.bultinCUD, onEdit = _a.onEdit, labelField = _a.labelField, options = _a.options; if (!bultinCUD) { onEdit === null || onEdit === void 0 ? void 0 : onEdit(item); } else { this.setState({ isEditing: true, isAdding: false, editingItem: item, inputValue: item[labelField] }); } }; TreeSelector.prototype.handleRemove = function (item) { var onDelete = this.props.onDelete; onDelete && onDelete(item); }; TreeSelector.prototype.handleInputChange = function (e) { this.setState({ inputValue: e.currentTarget.value }); }; TreeSelector.prototype.handleConfirm = function () { var _a = this.state, value = _a.inputValue, isAdding = _a.isAdding, addingParent = _a.addingParent, editingItem = _a.editingItem, isEditing = _a.isEditing; if (!value) { return; } var _b = this.props, labelField = _b.labelField, onAdd = _b.onAdd, options = _b.options, onEdit = _b.onEdit; this.setState({ inputValue: '', isAdding: false, isEditing: false }, function () { var _a, _b; if (isAdding && onAdd) { var idxes = (addingParent && (0, helper_1.findTreeIndex)(options, function (item) { return item === addingParent; })) || []; onAdd(idxes.concat(0), (_a = {}, _a[labelField] = value, _a), true); } else if (isEditing && onEdit) { onEdit((0, tslib_1.__assign)((0, tslib_1.__assign)({}, editingItem), (_b = {}, _b[labelField] = value, _b)), editingItem, true); } }); }; TreeSelector.prototype.handleCancel = function () { this.setState({ inputValue: '', isAdding: false, isEditing: false }); }; TreeSelector.prototype.renderInput = function (prfix) { if (prfix === void 0) { prfix = null; } var _a = this.props, cx = _a.classnames, __ = _a.translate; var inputValue = this.state.inputValue; return (react_1.default.createElement("div", { className: cx('Tree-itemLabel') }, react_1.default.createElement("div", { className: cx('Tree-itemInput') }, prfix, react_1.default.createElement("input", { onChange: this.handleInputChange, value: inputValue, placeholder: __('placeholder.enter') }), react_1.default.createElement("a", { "data-tooltip": __('cancel'), onClick: this.handleCancel }, react_1.default.createElement(icons_1.Icon, { icon: "close", className: "icon" })), react_1.default.createElement("a", { "data-tooltip": __('confirm'), onClick: this.handleConfirm }, react_1.default.createElement(icons_1.Icon, { icon: "check", className: "icon" }))))); }; TreeSelector.prototype.getOffsetPosition = function (element) { var left = 0; var top = 0; while (element.offsetParent) { left += element.offsetLeft; top += element.offsetTop; element = element.offsetParent; } return { left: left, top: top }; }; TreeSelector.prototype.getDropInfo = function (e, node) { var _a; var rect = e.currentTarget.getBoundingClientRect(); var dragNode = this.dragNode; var deltaX = Math.min(50, rect.width * 0.3); var gap = ((_a = node === null || node === void 0 ? void 0 : node.children) === null || _a === void 0 ? void 0 : _a.length) ? 0 : 16; // 计算相对位置 var offset = this.getOffsetPosition(this.root.current); var targetOffset = this.getOffsetPosition(e.currentTarget); var left = targetOffset.left - offset.left; var top = targetOffset.top - offset.top; var clientX = e.clientX, clientY = e.clientY; var position = clientY >= rect.top + rect.height / 2 ? 'bottom' : 'top'; var indicator; if (position === 'bottom' && clientX >= this.startPoint.x + deltaX) { position = 'self'; indicator = { top: top, left: left, width: rect.width, height: rect.height }; } else { indicator = { top: position === 'bottom' ? top + rect.height : top, left: left + gap, width: rect.width - gap }; } return { node: node, dragNode: dragNode, position: position, indicator: indicator }; }; TreeSelector.prototype.updateDropIndicator = function (e, node) { var _a; var gap = ((_a = node === null || node === void 0 ? void 0 : node.children) === null || _a === void 0 ? void 0 : _a.length) ? 0 : 16; this.dropInfo = this.getDropInfo(e, node); var _b = this.dropInfo, dragNode = _b.dragNode, indicator = _b.indicator; if (node === dragNode) { this.setState({ dropIndicator: undefined }); return; } this.setState({ dropIndicator: indicator }); }; TreeSelector.prototype.onDragStart = function (node) { var _this = this; var draggable = this.props.draggable; return function (e) { var _a; if (draggable) { e.dataTransfer.effectAllowed = 'copyMove'; _this.dragNode = node; _this.dropInfo = null; _this.startPoint = { x: e.clientX, y: e.clientY }; if ((_a = node === null || node === void 0 ? void 0 : node.children) === null || _a === void 0 ? void 0 : _a.length) { _this.unfolded.set(node, false); _this.forceUpdate(); } } else { _this.dragNode = null; _this.dropInfo = null; } e.stopPropagation(); }; }; TreeSelector.prototype.onDragOver = function (node) { var _this = this; return function (e) { if (!_this.dragNode) { return; } _this.updateDropIndicator(e, node); e.preventDefault(); }; }; TreeSelector.prototype.onDragEnd = function (dragNode) { var _this = this; return function (e) { var _a, _b, _c; _this.setState({ dropIndicator: undefined }); var node = (_a = _this.dropInfo) === null || _a === void 0 ? void 0 : _a.node; if (!_this.dropInfo || !node || dragNode === node) { return; } (_c = (_b = _this.props).onMove) === null || _c === void 0 ? void 0 : _c.call(_b, _this.dropInfo); _this.dragNode = null; _this.dropInfo = null; e.preventDefault(); }; }; TreeSelector.prototype.renderList = function (list, value, uncheckable) { var _this = this; var _a = this.props, itemClassName = _a.itemClassName, showIcon = _a.showIcon, showRadio = _a.showRadio, multiple = _a.multiple, disabled = _a.disabled, labelField = _a.labelField, valueField = _a.valueField, iconField = _a.iconField, disabledField = _a.disabledField, cascade = _a.cascade, selfDisabledAffectChildren = _a.selfDisabledAffectChildren, onlyChildren = _a.onlyChildren, cx = _a.classnames, highlightTxt = _a.highlightTxt, options = _a.options, maxLength = _a.maxLength, minLength = _a.minLength, creatable = _a.creatable, editable = _a.editable, removable = _a.removable, createTip = _a.createTip, editTip = _a.editTip, removeTip = _a.removeTip, __ = _a.translate, draggable = _a.draggable; var _b = this.state, stateValue = _b.value, isAdding = _b.isAdding, addingParent = _b.addingParent, editingItem = _b.editingItem, isEditing = _b.isEditing; var childrenChecked = 0; var ret = list.map(function (item, key) { if (!(0, helper_1.isVisible)(item, options)) { return null; } var checked = !!~value.indexOf(item); var selfDisabled = item[disabledField]; var selfChecked = !!uncheckable || checked; var childrenItems = null; var selfChildrenChecked = false; if (item.children && item.children.length) { childrenItems = _this.renderList(item.children, value, cascade ? false : uncheckable || (selfDisabledAffectChildren ? selfDisabled : false) || (multiple && checked)); selfChildrenChecked = !!childrenItems.childrenChecked; if (!selfChecked && onlyChildren && item.children.length === childrenItems.childrenChecked) { selfChecked = true; } childrenItems = childrenItems.dom; } if ((onlyChildren ? selfChecked : selfChildrenChecked) || checked) { childrenChecked++; } var nodeDisabled = !!uncheckable || !!disabled || selfDisabled; if (!nodeDisabled && ((maxLength && !selfChecked && stateValue.length >= maxLength) || (minLength && selfChecked && stateValue.length <= minLength))) { nodeDisabled = true; } var checkbox = multiple ? (react_1.default.createElement(Checkbox_1.default, { size: "sm", disabled: nodeDisabled, checked: selfChecked || (!cascade && selfChildrenChecked), partial: !selfChecked, onChange: _this.handleCheck.bind(_this, item, !selfChecked) })) : showRadio ? (react_1.default.createElement(Checkbox_1.default, { size: "sm", disabled: nodeDisabled, checked: checked, onChange: _this.handleSelect.bind(_this, item) })) : null; var isLeaf = (!item.children || !item.children.length) && !item.placeholder; var iconValue = item[iconField] || (childrenItems ? 'folder' : 'file'); return (react_1.default.createElement("li", { key: key, className: cx("Tree-item " + (itemClassName || ''), { 'Tree-item--isLeaf': isLeaf }) }, isEditing && editingItem === item ? (_this.renderInput(checkbox)) : (react_1.default.createElement("div", { className: cx('Tree-itemLabel', { 'is-children-checked': multiple && !cascade && selfChildrenChecked && !nodeDisabled, 'is-checked': checked, 'is-disabled': nodeDisabled }), draggable: draggable, onDragStart: _this.onDragStart(item), onDragOver: _this.onDragOver(item), onDragEnd: _this.onDragEnd(item) }, draggable && (react_1.default.createElement("a", { className: cx('Tree-itemDrager drag-bar') }, react_1.default.createElement(icons_1.Icon, { icon: "drag-bar", className: "icon" }))), item.loading ? (react_1.default.createElement(Spinner_1.default, { size: "sm", show: true, icon: "reload", spinnerClassName: cx('Tree-spinner') })) : !isLeaf || (item.defer && !item.loaded) ? (react_1.default.createElement("div", { onClick: function () { return _this.toggleUnfolded(item); }, className: cx('Tree-itemArrow', { 'is-folded': !_this.isUnfolded(item) }) }, react_1.default.createElement(icons_1.Icon, { icon: "right-arrow-bold", className: "icon" }))) : (react_1.default.createElement("span", { className: cx('Tree-itemArrowPlaceholder') })), checkbox, showIcon ? (react_1.default.createElement("i", { className: cx("Tree-itemIcon " + (childrenItems ? 'Tree-folderIcon' : 'Tree-leafIcon')), // onClick={() => // !nodeDisabled && // (multiple // ? this.handleCheck(item, !selfChecked) // : this.handleSelect(item)) // } // Aug 增加双击展开 onClick: function () { return (0, utils_1.singleAndDoubleClick)({ singleClick: function () { !nodeDisabled && (multiple ? _this.handleCheck(item, !selfChecked) : _this.handleSelect(item)); }, doubleClick: function () { return _this.toggleUnfolded(item); }, }); } }, (0, icons_1.getIcon)(iconValue) ? (react_1.default.createElement(icons_1.Icon, { icon: iconValue, className: "icon" })) : (react_1.default.createElement("i", { className: iconValue })))) : null, react_1.default.createElement("span", { className: cx('Tree-itemText'), // onClick={() => // !nodeDisabled && // (multiple // ? this.handleCheck(item, !selfChecked) // : this.handleSelect(item)) // } // Aug 增加双击展开 onClick: function () { return (0, utils_1.singleAndDoubleClick)({ singleClick: function () { !nodeDisabled && (multiple ? _this.handleCheck(item, !selfChecked) : _this.handleSelect(item)); }, doubleClick: function () { return _this.toggleUnfolded(item); }, }); } }, highlightTxt ? (0, Options_1.highlight)("" + item[labelField], highlightTxt) : "" + item[labelField]), !nodeDisabled && !isAdding && !isEditing && !(item.defer && !item.loaded) ? (react_1.default.createElement("div", { className: cx('Tree-item-icons') }, creatable && (0, helper_1.hasAbility)(item, 'creatable') ? (react_1.default.createElement("a", { onClick: _this.handleAdd.bind(_this, item), "data-tooltip": __(createTip), "data-position": "left" }, react_1.default.createElement(icons_1.Icon, { icon: "plus", className: "icon" }))) : null, removable && (0, helper_1.hasAbility)(item, 'removable') ? (react_1.default.createElement("a", { onClick: _this.handleRemove.bind(_this, item), "data-tooltip": __(removeTip), "data-position": "left" }, react_1.default.createElement(icons_1.Icon, { icon: "minus", className: "icon" }))) : null, editable && (0, helper_1.hasAbility)(item, 'editable') ? (react_1.default.createElement("a", { onClick: _this.handleEdit.bind(_this, item), "data-tooltip": __(editTip), "data-position": "left" }, react_1.default.createElement(icons_1.Icon, { icon: "pencil", className: "icon" }))) : null)) : null)), (childrenItems && _this.isUnfolded(item)) || (isAdding && addingParent === item) ? (react_1.default.createElement("ul", { className: cx('Tree-sublist') }, isAdding && addingParent === item ? (react_1.default.createElement("li", { className: cx('Tree-item') }, _this.renderInput(checkbox ? react_1.default.cloneElement(checkbox, { checked: false, disabled: true }) : null))) : null, childrenItems)) : !childrenItems && item.placeholder && _this.isUnfolded(item) ? (react_1.default.createElement("ul", { className: cx('Tree-sublist') }, react_1.default.createElement("li", { className: cx('Tree-item') }, react_1.default.createElement("div", { className: cx('Tree-placeholder') }, item.placeholder)))) : null)); }); return { dom: ret, childrenChecked: childrenChecked }; }; TreeSelector.prototype.render = function () { var _a = this.props, className = _a.className, placeholder = _a.placeholder, hideRoot = _a.hideRoot, rootLabel = _a.rootLabel, showOutline = _a.showOutline, showIcon = _a.showIcon, cx = _a.classnames, creatable = _a.creatable, rootCreatable = _a.rootCreatable, rootCreateTip = _a.rootCreateTip, disabled = _a.disabled, draggable = _a.draggable, __ = _a.translate; var options = this.props.options.filter(function (item) { return item.label != '0' && item.label != null; }); var _b = this.state, value = _b.value, isAdding = _b.isAdding, addingParent = _b.addingParent, isEditing = _b.isEditing, inputValue = _b.inputValue, dropIndicator = _b.dropIndicator; var addBtn = null; if (creatable && rootCreatable !== false && hideRoot) { addBtn = (react_1.default.createElement("a", { className: cx('Tree-addTopBtn', { 'is-disabled': isAdding || isEditing }), onClick: this.handleAdd.bind(this, null) }, react_1.default.createElement(icons_1.Icon, { icon: "plus", className: "icon" }), react_1.default.createElement("span", null, __(rootCreateTip)))); } return (react_1.default.createElement("div", { className: cx("Tree " + (className || ''), { 'Tree--outline': showOutline, 'is-disabled': disabled, 'is-draggable': draggable }), ref: this.root }, (options && options.length) || addBtn || hideRoot === false ? (react_1.default.createElement("ul", { className: cx('Tree-list') }, hideRoot ? (react_1.default.createElement(react_1.default.Fragment, null, addBtn, isAdding && !addingParent ? (react_1.default.createElement("li", { className: cx('Tree-item') }, this.renderInput())) : null, this.renderList(options, value, false).dom)) : (react_1.default.createElement("li", { className: cx('Tree-rootItem', { 'is-checked': !value || !value.length }) }, react_1.default.createElement("div", { className: cx('Tree-itemLabel') }, react_1.default.createElement("span", { className: cx('Tree-itemText'), onClick: this.clearSelect }, showIcon ? (react_1.default.createElement("i", { className: cx('Tree-itemIcon Tree-rootIcon') }, react_1.default.createElement(icons_1.Icon, { icon: "home", className: "icon" }))) : null, rootLabel), !disabled && creatable && rootCreatable !== false && !isAdding && !isEditing ? (react_1.default.createElement("div", { className: cx('Tree-item-icons') }, creatable ? (react_1.default.createElement("a", { onClick: this.handleAdd.bind(this, null), "data-tooltip": rootCreateTip, "data-position": "left" }, react_1.default.createElement(icons_1.Icon, { icon: "plus", className: "icon" }))) : null)) : null), react_1.default.createElement("ul", { className: cx('Tree-sublist') }, isAdding && !addingParent ? (react_1.default.createElement("li", { className: cx('Tree-item') }, this.renderInput())) : null, this.renderList(options, value, false).dom))))) : (react_1.default.createElement("div", { className: cx('Tree-placeholder') }, placeholder)), dropIndicator && (react_1.default.createElement("div", { className: cx('Tree-dropIndicator', { 'Tree-dropIndicator--hover': !!dropIndicator.height }), style: dropIndicator })))); }; var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; TreeSelector.defaultProps = { showIcon: true, showOutline: false, initiallyOpen: true, unfoldedLevel: 0, showRadio: false, multiple: false, disabled: false, withChildren: false, onlyChildren: false, labelField: 'label', valueField: 'value', iconField: 'icon', unfoldedField: 'unfolded', foldedField: 'foled', disabledField: 'disabled', joinValues: true, extractValue: false, delimiter: ',', hideRoot: true, rootLabel: 'Tree.root', rootValue: 0, cascade: false, selfDisabledAffectChildren: true, rootCreateTip: 'Tree.addRoot', createTip: 'Tree.addChild', editTip: 'Tree.editNode', removeTip: 'Tree.removeNode', enableNodePath: false, pathSeparator: '/', nodePath: [] }; (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "toggleUnfolded", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", []), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "clearSelect", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object, Object, Function]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "handleSelect", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object, Boolean]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "handleCheck", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_a = typeof Select_1.Option !== "undefined" && Select_1.Option) === "function" ? _a : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "handleAdd", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_b = typeof Select_1.Option !== "undefined" && Select_1.Option) === "function" ? _b : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "handleEdit", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_c = typeof Select_1.Option !== "undefined" && Select_1.Option) === "function" ? _c : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "handleRemove", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_d = typeof react_1.default !== "undefined" && react_1.default.ChangeEvent) === "function" ? _d : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "handleInputChange", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", []), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "handleConfirm", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", []), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "handleCancel", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_e = typeof react_1.default !== "undefined" && react_1.default.DragEvent) === "function" ? _e : Object, typeof (_f = typeof Select_1.Option !== "undefined" && Select_1.Option) === "function" ? _f : Object]), (0, tslib_1.__metadata)("design:returntype", Object) ], TreeSelector.prototype, "getDropInfo", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_g = typeof react_1.default !== "undefined" && react_1.default.DragEvent) === "function" ? _g : Object, typeof (_h = typeof Select_1.Option !== "undefined" && Select_1.Option) === "function" ? _h : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "updateDropIndicator", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_j = typeof Select_1.Option !== "undefined" && Select_1.Option) === "function" ? _j : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "onDragStart", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_k = typeof Select_1.Option !== "undefined" && Select_1.Option) === "function" ? _k : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "onDragOver", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_l = typeof Select_1.Option !== "undefined" && Select_1.Option) === "function" ? _l : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], TreeSelector.prototype, "onDragEnd", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_m = typeof Select_1.Options !== "undefined" && Select_1.Options) === "function" ? _m : Object, Array, Boolean]), (0, tslib_1.__metadata)("design:returntype", Object) ], TreeSelector.prototype, "renderList", null); return TreeSelector; }(react_1.default.Component)); exports.TreeSelector = TreeSelector; exports.default = (0, theme_1.themeable)((0, locale_1.localeable)(TreeSelector)); //# sourceMappingURL=./components/Tree.js.map