UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

1,689 lines (1,679 loc) 47.3 kB
import { warnDeprecation } from 'ng-zorro-antd/core/logger'; import { Injectable, InjectionToken } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; /** * @fileoverview added by tsickle * Generated from: nz-tree-base-node.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @record */ function FlattenNode() { } if (false) { /** @type {?} */ FlattenNode.prototype.parent; /** @type {?} */ FlattenNode.prototype.children; /** @type {?} */ FlattenNode.prototype.pos; /** @type {?} */ FlattenNode.prototype.data; /** @type {?} */ FlattenNode.prototype.isStart; /** @type {?} */ FlattenNode.prototype.isEnd; } /** * @record */ function NzTreeNodeOptions() { } if (false) { /** @type {?} */ NzTreeNodeOptions.prototype.title; /** @type {?} */ NzTreeNodeOptions.prototype.key; /** @type {?|undefined} */ NzTreeNodeOptions.prototype.icon; /** @type {?|undefined} */ NzTreeNodeOptions.prototype.isLeaf; /** @type {?|undefined} */ NzTreeNodeOptions.prototype.checked; /** @type {?|undefined} */ NzTreeNodeOptions.prototype.selected; /** @type {?|undefined} */ NzTreeNodeOptions.prototype.selectable; /** @type {?|undefined} */ NzTreeNodeOptions.prototype.disabled; /** @type {?|undefined} */ NzTreeNodeOptions.prototype.disableCheckbox; /** @type {?|undefined} */ NzTreeNodeOptions.prototype.expanded; /** @type {?|undefined} */ NzTreeNodeOptions.prototype.children; /* Skipping unhandled member: [key: string]: NzSafeAny;*/ } class NzTreeNode { /** * Init nzTreeNode * @param {?} option * @param {?=} parent * @param {?=} service */ constructor(option, parent = null, service = null) { this.level = 0; if (option instanceof NzTreeNode) { return option; } this.service = service || null; this.origin = option; this.key = option.key; this.parentNode = parent; this._title = option.title || '---'; this._icon = option.icon || ''; this._isLeaf = option.isLeaf || false; this._children = []; // option params this._isChecked = option.checked || false; this._isSelectable = option.disabled || option.selectable !== false; this._isDisabled = option.disabled || false; this._isDisableCheckbox = option.disableCheckbox || false; this._isExpanded = option.isLeaf ? false : option.expanded || false; this._isHalfChecked = false; this._isSelected = (!option.disabled && option.selected) || false; this._isLoading = false; this.isMatched = false; /** * parent's checked status will affect children while initializing */ if (parent) { this.level = parent.level + 1; } else { this.level = 0; } if (typeof option.children !== 'undefined' && option.children !== null) { option.children.forEach((/** * @param {?} nodeOptions * @return {?} */ nodeOptions => { /** @type {?} */ const s = this.treeService; if (s && !s.isCheckStrictly && option.checked && !option.disabled && !nodeOptions.disabled && !nodeOptions.disableCheckbox) { nodeOptions.checked = option.checked; } this._children.push(new NzTreeNode(nodeOptions, this)); })); } } /** * @return {?} */ get treeService() { return this.service || (this.parentNode && this.parentNode.treeService); } /** * auto generate * get * set * @return {?} */ get title() { return this._title; } /** * @param {?} value * @return {?} */ set title(value) { this._title = value; this.update(); } /** * @return {?} */ get icon() { return this._icon; } /** * @param {?} value * @return {?} */ set icon(value) { this._icon = value; this.update(); } /** * @return {?} */ get children() { return this._children; } /** * @param {?} value * @return {?} */ set children(value) { this._children = value; this.update(); } /** * @return {?} */ get isLeaf() { return this._isLeaf; } /** * @param {?} value * @return {?} */ set isLeaf(value) { this._isLeaf = value; this.update(); } /** * @return {?} */ get isChecked() { return this._isChecked; } /** * @param {?} value * @return {?} */ set isChecked(value) { this._isChecked = value; this._isAllChecked = value; this.origin.checked = value; this.afterValueChange('isChecked'); } /** * @return {?} */ get isAllChecked() { return this._isAllChecked; } /** * @deprecated Maybe removed in next major version, use `isChecked` instead. * @param {?} value * @return {?} */ set isAllChecked(value) { warnDeprecation(`'isAllChecked' is going to be removed in 9.0.0. Please use 'isChecked' instead.`); this._isAllChecked = value; } /** * @return {?} */ get isHalfChecked() { return this._isHalfChecked; } /** * @param {?} value * @return {?} */ set isHalfChecked(value) { this._isHalfChecked = value; this.afterValueChange('isHalfChecked'); } /** * @return {?} */ get isSelectable() { return this._isSelectable; } /** * @param {?} value * @return {?} */ set isSelectable(value) { this._isSelectable = value; this.update(); } /** * @return {?} */ get isDisabled() { return this._isDisabled; } /** * @param {?} value * @return {?} */ set isDisabled(value) { this._isDisabled = value; this.update(); } /** * @return {?} */ get isDisableCheckbox() { return this._isDisableCheckbox; } /** * @param {?} value * @return {?} */ set isDisableCheckbox(value) { this._isDisableCheckbox = value; this.update(); } /** * @return {?} */ get isExpanded() { return this._isExpanded; } /** * @param {?} value * @return {?} */ set isExpanded(value) { this._isExpanded = value; this.origin.expanded = value; this.afterValueChange('isExpanded'); this.afterValueChange('reRender'); } /** * @return {?} */ get isSelected() { return this._isSelected; } /** * @param {?} value * @return {?} */ set isSelected(value) { this._isSelected = value; this.origin.selected = value; this.afterValueChange('isSelected'); } /** * @return {?} */ get isLoading() { return this._isLoading; } /** * @param {?} value * @return {?} */ set isLoading(value) { this._isLoading = value; this.update(); } /** * @param {?=} checked * @param {?=} halfChecked * @return {?} */ setSyncChecked(checked = false, halfChecked = false) { this.setChecked(checked, halfChecked); if (this.treeService && !this.treeService.isCheckStrictly) { this.treeService.conduct(this); } } /** * @deprecated Maybe removed in next major version, use `isChecked` instead. * @param {?=} checked * @param {?=} halfChecked * @return {?} */ setChecked(checked = false, halfChecked = false) { warnDeprecation(`'setChecked' is going to be removed in 9.0.0. Please use 'isChecked' instead.`); this.origin.checked = checked; this.isChecked = checked; this.isAllChecked = checked; this.isHalfChecked = halfChecked; } /** * \@not-deprecated Maybe removed in next major version, use `isExpanded` instead. * We need it until tree refactoring is finished * @param {?} value * @return {?} */ setExpanded(value) { this._isExpanded = value; this.origin.expanded = value; this.afterValueChange('isExpanded'); } /** * @deprecated Maybe removed in next major version, use `isSelected` instead. * @param {?} value * @return {?} */ setSelected(value) { warnDeprecation(`'setSelected' is going to be removed in 9.0.0. Please use 'isExpanded' isSelected.`); if (this.isDisabled) { return; } this.isSelected = value; } /** * @return {?} */ getParentNode() { return this.parentNode; } /** * @return {?} */ getChildren() { return this.children; } /** * Support appending child nodes by position. Leaf node cannot be appended. * @param {?} children * @param {?=} childPos * @return {?} */ addChildren(children, childPos = -1) { if (!this.isLeaf) { children.forEach((/** * @param {?} node * @return {?} */ node => { /** @type {?} */ const refreshLevel = (/** * @param {?} n * @return {?} */ (n) => { n.getChildren().forEach((/** * @param {?} c * @return {?} */ c => { c.level = (/** @type {?} */ (c.getParentNode())).level + 1; // flush origin c.origin.level = c.level; refreshLevel(c); })); }); /** @type {?} */ let child = node; if (child instanceof NzTreeNode) { child.parentNode = this; } else { child = new NzTreeNode(node, this); } child.level = this.level + 1; child.origin.level = child.level; refreshLevel(child); try { childPos === -1 ? this.children.push(child) : this.children.splice(childPos, 0, child); // flush origin } catch (e) { } })); this.origin.children = this.getChildren().map((/** * @param {?} v * @return {?} */ v => v.origin)); // remove loading state this.isLoading = false; } this.afterValueChange('addChildren'); this.afterValueChange('reRender'); } /** * @return {?} */ clearChildren() { // refresh checked state this.afterValueChange('clearChildren'); this.children = []; this.origin.children = []; this.afterValueChange('reRender'); } /** * @return {?} */ remove() { /** @type {?} */ const parentNode = this.getParentNode(); if (parentNode) { parentNode.children = parentNode.getChildren().filter((/** * @param {?} v * @return {?} */ v => v.key !== this.key)); parentNode.origin.children = (/** @type {?} */ (parentNode.origin.children)).filter((/** * @param {?} v * @return {?} */ v => v.key !== this.key)); this.afterValueChange('remove'); this.afterValueChange('reRender'); } } /** * @param {?} key * @return {?} */ afterValueChange(key) { if (this.treeService) { switch (key) { case 'isChecked': this.treeService.setCheckedNodeList(this); break; case 'isHalfChecked': this.treeService.setHalfCheckedNodeList(this); break; case 'isExpanded': this.treeService.setExpandedNodeList(this); break; case 'isSelected': this.treeService.setNodeActive(this); break; case 'clearChildren': this.treeService.afterRemove(this.getChildren()); break; case 'remove': this.treeService.afterRemove([this]); break; case 'reRender': this.treeService.flattenTreeData(this.treeService.rootNodes, this.treeService.getExpandedNodeList().map((/** * @param {?} v * @return {?} */ v => v.key))); break; } } this.update(); } /** * @return {?} */ update() { if (this.component) { this.component.markForCheck(); } } } if (false) { /** * @type {?} * @private */ NzTreeNode.prototype._title; /** @type {?} */ NzTreeNode.prototype.key; /** @type {?} */ NzTreeNode.prototype.level; /** @type {?} */ NzTreeNode.prototype.origin; /** @type {?} */ NzTreeNode.prototype.parentNode; /** * @type {?} * @private */ NzTreeNode.prototype._icon; /** * @type {?} * @private */ NzTreeNode.prototype._children; /** * @type {?} * @private */ NzTreeNode.prototype._isLeaf; /** * @type {?} * @private */ NzTreeNode.prototype._isChecked; /** * @deprecated Maybe removed in next major version, use isChecked instead * @type {?} * @private */ NzTreeNode.prototype._isAllChecked; /** * @type {?} * @private */ NzTreeNode.prototype._isSelectable; /** * @type {?} * @private */ NzTreeNode.prototype._isDisabled; /** * @type {?} * @private */ NzTreeNode.prototype._isDisableCheckbox; /** * @type {?} * @private */ NzTreeNode.prototype._isExpanded; /** * @type {?} * @private */ NzTreeNode.prototype._isHalfChecked; /** * @type {?} * @private */ NzTreeNode.prototype._isSelected; /** * @type {?} * @private */ NzTreeNode.prototype._isLoading; /** @type {?} */ NzTreeNode.prototype.canHide; /** @type {?} */ NzTreeNode.prototype.isMatched; /** @type {?} */ NzTreeNode.prototype.service; /** @type {?} */ NzTreeNode.prototype.component; /** * New added in Tree for easy data access * @type {?} */ NzTreeNode.prototype.isStart; /** @type {?} */ NzTreeNode.prototype.isEnd; } /** * @fileoverview added by tsickle * Generated from: nz-tree-base.definitions.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @license * Copyright Alibaba.com All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ /** * @record */ function NzFormatEmitEvent() { } if (false) { /** @type {?} */ NzFormatEmitEvent.prototype.eventName; /** @type {?|undefined} */ NzFormatEmitEvent.prototype.node; /** @type {?|undefined} */ NzFormatEmitEvent.prototype.event; /** @type {?|undefined} */ NzFormatEmitEvent.prototype.dragNode; /** @type {?|undefined} */ NzFormatEmitEvent.prototype.selectedKeys; /** @type {?|undefined} */ NzFormatEmitEvent.prototype.checkedKeys; /** @type {?|undefined} */ NzFormatEmitEvent.prototype.matchedKeys; /** @type {?|undefined} */ NzFormatEmitEvent.prototype.nodes; /** @type {?|undefined} */ NzFormatEmitEvent.prototype.keys; } /** * @record */ function NzFormatBeforeDropEvent() { } if (false) { /** @type {?} */ NzFormatBeforeDropEvent.prototype.dragNode; /** @type {?} */ NzFormatBeforeDropEvent.prototype.node; /** @type {?} */ NzFormatBeforeDropEvent.prototype.pos; } /** * @record */ function NzTreeNodeBaseComponent() { } if (false) { /** * @return {?} */ NzTreeNodeBaseComponent.prototype.markForCheck = function () { }; } /** * @fileoverview added by tsickle * Generated from: nz-tree-base-util.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @license * Copyright Alibaba.com All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ /** * @param {?} node * @return {?} */ function isCheckDisabled(node) { const { isDisabled, isDisableCheckbox } = node; return !!(isDisabled || isDisableCheckbox); } /** * @param {?} needle * @param {?} haystack * @return {?} */ function isInArray(needle, haystack) { return haystack.length > 0 && haystack.indexOf(needle) > -1; } /** * @param {?} level * @param {?} index * @return {?} */ function getPosition(level, index) { return `${level}-${index}`; } /** * @param {?} key * @param {?} pos * @return {?} */ function getKey(key, pos) { if (key !== null && key !== undefined) { return key; } return pos; } /** * Flat nest tree data into flatten list. This is used for virtual list render. * @param {?=} treeNodeList Origin data node list * @param {?=} expandedKeys * need expanded keys, provides `true` means all expanded (used in `rc-tree-select`). * @return {?} */ function flattenTreeData(treeNodeList = [], expandedKeys = []) { /** @type {?} */ const expandedKeySet = new Set(expandedKeys === true ? [] : expandedKeys); /** @type {?} */ const flattenList = []; /** * @param {?} list * @param {?=} parent * @return {?} */ function dig(list, parent = null) { return list.map((/** * @param {?} treeNode * @param {?} index * @return {?} */ (treeNode, index) => { /** @type {?} */ const pos = getPosition(parent ? parent.pos : '0', index); /** @type {?} */ const mergedKey = getKey(treeNode.key, pos); treeNode.isStart = [...(parent ? parent.isStart : []), index === 0]; treeNode.isEnd = [...(parent ? parent.isEnd : []), index === list.length - 1]; // Add FlattenDataNode into list // TODO: only need data here. /** @type {?} */ const flattenNode = { parent, pos, children: [], data: treeNode, isStart: [...(parent ? parent.isStart : []), index === 0], isEnd: [...(parent ? parent.isEnd : []), index === list.length - 1] }; flattenList.push(flattenNode); // Loop treeNode children if (expandedKeys === true || expandedKeySet.has(mergedKey) || treeNode.isExpanded) { flattenNode.children = dig(treeNode.children || [], flattenNode); } else { flattenNode.children = []; } return flattenNode; })); } dig(treeNodeList); return flattenList; } /** * @fileoverview added by tsickle * Generated from: nz-tree-base.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class NzTreeBaseService { constructor() { this.DRAG_SIDE_RANGE = 0.25; this.DRAG_MIN_GAP = 2; this.isCheckStrictly = false; this.isMultiple = false; this.rootNodes = []; this.flattenNodes$ = new BehaviorSubject([]); this.selectedNodeList = []; this.expandedNodeList = []; this.checkedNodeList = []; this.halfCheckedNodeList = []; this.matchedNodeList = []; } /** * reset tree nodes will clear default node list * @param {?} nzNodes * @return {?} */ initTree(nzNodes) { this.rootNodes = nzNodes; this.expandedNodeList = []; this.selectedNodeList = []; this.halfCheckedNodeList = []; this.checkedNodeList = []; this.matchedNodeList = []; } /** * @param {?} nzNodes * @param {?=} expandedKeys * @return {?} */ flattenTreeData(nzNodes, expandedKeys = []) { this.flattenNodes$.next(flattenTreeData(nzNodes, expandedKeys).map((/** * @param {?} item * @return {?} */ item => item.data))); } /** * @return {?} */ getSelectedNode() { return this.selectedNode; } /** * get some list * @return {?} */ getSelectedNodeList() { return this.conductNodeState('select'); } /** * return checked nodes * @return {?} */ getCheckedNodeList() { return this.conductNodeState('check'); } /** * @return {?} */ getHalfCheckedNodeList() { return this.conductNodeState('halfCheck'); } /** * return expanded nodes * @return {?} */ getExpandedNodeList() { return this.conductNodeState('expand'); } /** * return search matched nodes * @return {?} */ getMatchedNodeList() { return this.conductNodeState('match'); } /** * @param {?} value * @return {?} */ isArrayOfNzTreeNode(value) { return value.every((/** * @param {?} item * @return {?} */ item => item instanceof NzTreeNode)); } /** * set drag node * @param {?} node * @return {?} */ setSelectedNode(node) { this.selectedNode = node; } /** * set node selected status * @param {?} node * @return {?} */ setNodeActive(node) { if (!this.isMultiple && node.isSelected) { this.selectedNodeList.forEach((/** * @param {?} n * @return {?} */ n => { if (node.key !== n.key) { // reset other nodes n.isSelected = false; } })); // single mode: remove pre node this.selectedNodeList = []; } this.setSelectedNodeList(node, this.isMultiple); } /** * add or remove node to selectedNodeList * @param {?} node * @param {?=} isMultiple * @return {?} */ setSelectedNodeList(node, isMultiple = false) { /** @type {?} */ const index = this.getIndexOfArray(this.selectedNodeList, node.key); if (isMultiple) { if (node.isSelected && index === -1) { this.selectedNodeList.push(node); } } else { if (node.isSelected && index === -1) { this.selectedNodeList = [node]; } } if (!node.isSelected) { this.selectedNodeList = this.selectedNodeList.filter((/** * @param {?} n * @return {?} */ n => n.key !== node.key)); } } /** * merge checked nodes * @param {?} node * @return {?} */ setHalfCheckedNodeList(node) { /** @type {?} */ const index = this.getIndexOfArray(this.halfCheckedNodeList, node.key); if (node.isHalfChecked && index === -1) { this.halfCheckedNodeList.push(node); } else if (!node.isHalfChecked && index > -1) { this.halfCheckedNodeList = this.halfCheckedNodeList.filter((/** * @param {?} n * @return {?} */ n => node.key !== n.key)); } } /** * @param {?} node * @return {?} */ setCheckedNodeList(node) { /** @type {?} */ const index = this.getIndexOfArray(this.checkedNodeList, node.key); if (node.isChecked && index === -1) { this.checkedNodeList.push(node); } else if (!node.isChecked && index > -1) { this.checkedNodeList = this.checkedNodeList.filter((/** * @param {?} n * @return {?} */ n => node.key !== n.key)); } } /** * conduct checked/selected/expanded keys * @param {?=} type * @return {?} */ conductNodeState(type = 'check') { /** @type {?} */ let resultNodesList = []; switch (type) { case 'select': resultNodesList = this.selectedNodeList; break; case 'expand': resultNodesList = this.expandedNodeList; break; case 'match': resultNodesList = this.matchedNodeList; break; case 'check': resultNodesList = this.checkedNodeList; /** @type {?} */ const isIgnore = (/** * @param {?} node * @return {?} */ (node) => { /** @type {?} */ const parentNode = node.getParentNode(); if (parentNode) { if (this.checkedNodeList.findIndex((/** * @param {?} n * @return {?} */ n => n.key === parentNode.key)) > -1) { return true; } else { return isIgnore(parentNode); } } return false; }); // merge checked if (!this.isCheckStrictly) { resultNodesList = this.checkedNodeList.filter((/** * @param {?} n * @return {?} */ n => !isIgnore(n))); } break; case 'halfCheck': if (!this.isCheckStrictly) { resultNodesList = this.halfCheckedNodeList; } break; } return resultNodesList; } /** * set expanded nodes * @param {?} node * @return {?} */ setExpandedNodeList(node) { if (node.isLeaf) { return; } /** @type {?} */ const index = this.getIndexOfArray(this.expandedNodeList, node.key); if (node.isExpanded && index === -1) { this.expandedNodeList.push(node); } else if (!node.isExpanded && index > -1) { this.expandedNodeList.splice(index, 1); } } /** * @param {?} node * @return {?} */ setMatchedNodeList(node) { /** @type {?} */ const index = this.getIndexOfArray(this.matchedNodeList, node.key); if (node.isMatched && index === -1) { this.matchedNodeList.push(node); } else if (!node.isMatched && index > -1) { this.matchedNodeList.splice(index, 1); } } /** * check state * @param {?=} isCheckStrictly * @return {?} */ refreshCheckState(isCheckStrictly = false) { if (isCheckStrictly) { return; } this.checkedNodeList.forEach((/** * @param {?} node * @return {?} */ node => { this.conduct(node); })); } // reset other node checked state based current node /** * @param {?} node * @return {?} */ conduct(node) { /** @type {?} */ const isChecked = node.isChecked; if (node) { this.conductUp(node); this.conductDown(node, isChecked); } } /** * 1、children half checked * 2、children all checked, parent checked * 3、no children checked * @param {?} node * @return {?} */ conductUp(node) { /** @type {?} */ const parentNode = node.getParentNode(); if (parentNode) { if (!isCheckDisabled(parentNode)) { if (parentNode.children.every((/** * @param {?} child * @return {?} */ child => isCheckDisabled(child) || (!child.isHalfChecked && child.isChecked)))) { parentNode.isChecked = true; parentNode.isHalfChecked = false; } else if (parentNode.children.some((/** * @param {?} child * @return {?} */ child => child.isHalfChecked || child.isChecked))) { parentNode.isChecked = false; parentNode.isHalfChecked = true; } else { parentNode.isChecked = false; parentNode.isHalfChecked = false; } } this.setCheckedNodeList(parentNode); this.setHalfCheckedNodeList(parentNode); this.conductUp(parentNode); } } /** * reset child check state * @param {?} node * @param {?} value * @return {?} */ conductDown(node, value) { if (!isCheckDisabled(node)) { node.isChecked = value; node.isHalfChecked = false; this.setCheckedNodeList(node); this.setHalfCheckedNodeList(node); node.children.forEach((/** * @param {?} n * @return {?} */ n => { this.conductDown(n, value); })); } } /** * flush after delete node * @param {?} nodes * @return {?} */ afterRemove(nodes) { // to reset selectedNodeList & expandedNodeList /** @type {?} */ const loopNode = (/** * @param {?} node * @return {?} */ (node) => { // remove selected node this.selectedNodeList = this.selectedNodeList.filter((/** * @param {?} n * @return {?} */ n => n.key !== node.key)); // remove expanded node this.expandedNodeList = this.expandedNodeList.filter((/** * @param {?} n * @return {?} */ n => n.key !== node.key)); // remove checked node this.checkedNodeList = this.checkedNodeList.filter((/** * @param {?} n * @return {?} */ n => n.key !== node.key)); if (node.children) { node.children.forEach((/** * @param {?} child * @return {?} */ child => { loopNode(child); })); } }); nodes.forEach((/** * @param {?} n * @return {?} */ n => { loopNode(n); })); this.refreshCheckState(this.isCheckStrictly); } /** * drag event * @param {?} node * @return {?} */ refreshDragNode(node) { if (node.children.length === 0) { // until root this.conductUp(node); } else { node.children.forEach((/** * @param {?} child * @return {?} */ child => { this.refreshDragNode(child); })); } } // reset node level /** * @param {?} node * @return {?} */ resetNodeLevel(node) { /** @type {?} */ const parentNode = node.getParentNode(); if (parentNode) { node.level = parentNode.level + 1; } else { node.level = 0; } for (const child of node.children) { this.resetNodeLevel(child); } } /** * @param {?} event * @return {?} */ calcDropPosition(event) { const { clientY } = event; // to fix firefox undefined const { top, bottom, height } = event.srcElement ? ((/** @type {?} */ (event.srcElement))).getBoundingClientRect() : ((/** @type {?} */ (event.target))).getBoundingClientRect(); /** @type {?} */ const des = Math.max(height * this.DRAG_SIDE_RANGE, this.DRAG_MIN_GAP); if (clientY <= top + des) { return -1; } else if (clientY >= bottom - des) { return 1; } return 0; } /** * drop * 0: inner -1: pre 1: next * @param {?} targetNode * @param {?=} dragPos * @return {?} */ dropAndApply(targetNode, dragPos = -1) { if (!targetNode || dragPos > 1) { return; } /** @type {?} */ const treeService = targetNode.treeService; /** @type {?} */ const targetParent = targetNode.getParentNode(); /** @type {?} */ const isSelectedRootNode = this.selectedNode.getParentNode(); // remove the dragNode if (isSelectedRootNode) { isSelectedRootNode.children = isSelectedRootNode.children.filter((/** * @param {?} n * @return {?} */ n => n.key !== this.selectedNode.key)); } else { this.rootNodes = this.rootNodes.filter((/** * @param {?} n * @return {?} */ n => n.key !== this.selectedNode.key)); } switch (dragPos) { case 0: targetNode.addChildren([this.selectedNode]); this.resetNodeLevel(targetNode); break; case -1: case 1: /** @type {?} */ const tIndex = dragPos === 1 ? 1 : 0; if (targetParent) { targetParent.addChildren([this.selectedNode], targetParent.children.indexOf(targetNode) + tIndex); /** @type {?} */ const parentNode = this.selectedNode.getParentNode(); if (parentNode) { this.resetNodeLevel(parentNode); } } else { /** @type {?} */ const targetIndex = this.rootNodes.indexOf(targetNode) + tIndex; // Insert root node. this.rootNodes.splice(targetIndex, 0, this.selectedNode); this.rootNodes[targetIndex].parentNode = null; this.resetNodeLevel(this.rootNodes[targetIndex]); } break; } // flush all nodes this.rootNodes.forEach((/** * @param {?} child * @return {?} */ child => { if (!child.treeService) { child.service = treeService; } this.refreshDragNode(child); })); } /** * emit Structure * eventName * node * event: MouseEvent / DragEvent * dragNode * @param {?} eventName * @param {?} node * @param {?} event * @return {?} */ formatEvent(eventName, node, event) { /** @type {?} */ const emitStructure = { eventName: eventName, node: node, event: event }; switch (eventName) { case 'dragstart': case 'dragenter': case 'dragover': case 'dragleave': case 'drop': case 'dragend': Object.assign(emitStructure, { dragNode: this.getSelectedNode() }); break; case 'click': case 'dblclick': Object.assign(emitStructure, { selectedKeys: this.selectedNodeList }); Object.assign(emitStructure, { nodes: this.selectedNodeList }); Object.assign(emitStructure, { keys: this.selectedNodeList.map((/** * @param {?} n * @return {?} */ n => n.key)) }); break; case 'check': /** @type {?} */ const checkedNodeList = this.getCheckedNodeList(); Object.assign(emitStructure, { checkedKeys: checkedNodeList }); Object.assign(emitStructure, { nodes: checkedNodeList }); Object.assign(emitStructure, { keys: checkedNodeList.map((/** * @param {?} n * @return {?} */ n => n.key)) }); break; case 'search': Object.assign(emitStructure, { matchedKeys: this.getMatchedNodeList() }); Object.assign(emitStructure, { nodes: this.getMatchedNodeList() }); Object.assign(emitStructure, { keys: this.getMatchedNodeList().map((/** * @param {?} n * @return {?} */ n => n.key)) }); break; case 'expand': Object.assign(emitStructure, { nodes: this.expandedNodeList }); Object.assign(emitStructure, { keys: this.expandedNodeList.map((/** * @param {?} n * @return {?} */ n => n.key)) }); break; } return emitStructure; } /** * New functions for flatten nodes * @param {?} list * @param {?} key * @return {?} */ getIndexOfArray(list, key) { return list.findIndex((/** * @param {?} v * @return {?} */ v => v.key === key)); } /** * Render by nzCheckedKeys * @param {?} keys * @param {?} checkStrictly * @return {?} */ conductCheck(keys, checkStrictly) { this.checkedNodeList = []; this.halfCheckedNodeList = []; /** @type {?} */ const calc = (/** * @param {?} nodes * @return {?} */ (nodes) => { nodes.forEach((/** * @param {?} node * @return {?} */ node => { if (isInArray(node.key, keys)) { node.isChecked = true; node.isHalfChecked = false; } else { node.isChecked = false; node.isHalfChecked = false; } if (node.children.length > 0) { calc(node.children); } })); }); calc(this.rootNodes); this.refreshCheckState(checkStrictly); } /** * @param {?=} keys * @return {?} */ conductExpandedKeys(keys = []) { /** @type {?} */ const expandedKeySet = new Set(keys === true ? [] : keys); this.expandedNodeList = []; /** @type {?} */ const calc = (/** * @param {?} nodes * @return {?} */ (nodes) => { nodes.forEach((/** * @param {?} node * @return {?} */ node => { node.setExpanded(keys === true || expandedKeySet.has(node.key) || node.isExpanded === true); if (node.isExpanded) { this.setExpandedNodeList(node); } if (node.children.length > 0) { calc(node.children); } })); }); calc(this.rootNodes); } /** * @param {?} keys * @param {?} isMulti * @return {?} */ conductSelectedKeys(keys, isMulti) { this.selectedNodeList = []; /** @type {?} */ const calc = (/** * @param {?} nodes * @return {?} */ (nodes) => { return nodes.every((/** * @param {?} node * @return {?} */ node => { if (isInArray(node.key, keys)) { node.isSelected = true; this.setSelectedNodeList(node); if (!isMulti) { // if not support multi select return false; } } else { node.isSelected = false; } if (node.children.length > 0) { // Recursion return calc(node.children); } return true; })); }); calc(this.rootNodes); } /** * Expand parent nodes by child node * @param {?} node * @return {?} */ expandNodeAllParentBySearch(node) { /** @type {?} */ const calc = (/** * @param {?} n * @return {?} */ (n) => { if (n) { n.canHide = false; n.setExpanded(true); this.setExpandedNodeList(n); if (n.getParentNode()) { return calc(n.getParentNode()); } } }); calc(node.getParentNode()); } } NzTreeBaseService.decorators = [ { type: Injectable } ]; if (false) { /** @type {?} */ NzTreeBaseService.prototype.DRAG_SIDE_RANGE; /** @type {?} */ NzTreeBaseService.prototype.DRAG_MIN_GAP; /** @type {?} */ NzTreeBaseService.prototype.isCheckStrictly; /** @type {?} */ NzTreeBaseService.prototype.isMultiple; /** @type {?} */ NzTreeBaseService.prototype.selectedNode; /** @type {?} */ NzTreeBaseService.prototype.rootNodes; /** @type {?} */ NzTreeBaseService.prototype.flattenNodes$; /** @type {?} */ NzTreeBaseService.prototype.selectedNodeList; /** @type {?} */ NzTreeBaseService.prototype.expandedNodeList; /** @type {?} */ NzTreeBaseService.prototype.checkedNodeList; /** @type {?} */ NzTreeBaseService.prototype.halfCheckedNodeList; /** @type {?} */ NzTreeBaseService.prototype.matchedNodeList; } /** * @fileoverview added by tsickle * Generated from: nz-tree-service.resolver.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ const NzTreeHigherOrderServiceToken = new InjectionToken('NzTreeHigherOrder'); /** * @fileoverview added by tsickle * Generated from: nz-tree-base.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class NzTreeBase { /** * @param {?} nzTreeService */ constructor(nzTreeService) { this.nzTreeService = nzTreeService; } /** * Coerces a value({\@link any[]}) to a TreeNodes({\@link NzTreeNode[]}) * @param {?} value * @return {?} */ coerceTreeNodes(value) { /** @type {?} */ let nodes = []; if (!this.nzTreeService.isArrayOfNzTreeNode(value)) { // has not been new NzTreeNode nodes = value.map((/** * @param {?} item * @return {?} */ item => new NzTreeNode(item, null, this.nzTreeService))); } else { nodes = value.map((/** * @param {?} item * @return {?} */ (item) => { item.service = this.nzTreeService; return item; })); } return nodes; } /** * Get all nodes({\@link NzTreeNode}) * @return {?} */ getTreeNodes() { return this.nzTreeService.rootNodes; } /** * Get {\@link NzTreeNode} with key * @param {?} key * @return {?} */ getTreeNodeByKey(key) { // flat tree nodes /** @type {?} */ const nodes = []; /** @type {?} */ const getNode = (/** * @param {?} node * @return {?} */ (node) => { nodes.push(node); node.getChildren().forEach((/** * @param {?} n * @return {?} */ n => { getNode(n); })); }); this.getTreeNodes().forEach((/** * @param {?} n * @return {?} */ n => { getNode(n); })); return nodes.find((/** * @param {?} n * @return {?} */ n => n.key === key)) || null; } /** * Get checked nodes(merged) * @return {?} */ getCheckedNodeList() { return this.nzTreeService.getCheckedNodeList(); } /** * Get selected nodes * @return {?} */ getSelectedNodeList() { return this.nzTreeService.getSelectedNodeList(); } /** * Get half checked nodes * @return {?} */ getHalfCheckedNodeList() { return this.nzTreeService.getHalfCheckedNodeList(); } /** * Get expanded nodes * @return {?} */ getExpandedNodeList() { return this.nzTreeService.getExpandedNodeList(); } /** * Get matched nodes(if nzSearchValue is not null) * @return {?} */ getMatchedNodeList() { return this.nzTreeService.getMatchedNodeList(); } } if (false) { /** @type {?} */ NzTreeBase.prototype.nzTreeService; } /** * @fileoverview added by tsickle * Generated from: public-api.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * Generated from: ng-zorro-antd-core-tree.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { NzTreeBase, NzTreeBaseService, NzTreeHigherOrderServiceToken, NzTreeNode, flattenTreeData, getKey, getPosition, isCheckDisabled, isInArray }; //# sourceMappingURL=ng-zorro-antd-core-tree.js.map