|
|
|
import {
|
|
|
|
shortcut,
|
|
|
|
extend,
|
|
|
|
i18nText,
|
|
|
|
each,
|
|
|
|
createWidget,
|
|
|
|
Controller,
|
|
|
|
isArray, isNotEmptyArray, UUID, defaults, Tree, VerticalLayout
|
|
|
|
} from "@/core";
|
|
|
|
import { Pane } from "@/base";
|
|
|
|
import { BasicTreeItem, BasicTreeNode, LevelTree, TreeExpander } from "@/case";
|
|
|
|
|
|
|
|
@shortcut()
|
|
|
|
export class SelectTreePopup extends Pane {
|
|
|
|
static xtype = "bi.select_level_tree";
|
|
|
|
|
|
|
|
static EVENT_CHANGE = "EVENT_CHANGE";
|
|
|
|
|
|
|
|
_defaultConfig() {
|
|
|
|
return extend(super._defaultConfig(...arguments), {
|
|
|
|
baseCls: "bi-select-level-tree",
|
|
|
|
tipText: i18nText("BI-No_Selected_Item"),
|
|
|
|
items: [],
|
|
|
|
value: "",
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
_formatItems(nodes, layer, pNode) {
|
|
|
|
const self = this;
|
|
|
|
each(nodes, (i, node) => {
|
|
|
|
const extend = {
|
|
|
|
layer,
|
|
|
|
isFirstNode: i === 0,
|
|
|
|
isLastNode: i === nodes.length - 1,
|
|
|
|
height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT,
|
|
|
|
pNode,
|
|
|
|
};
|
|
|
|
node.id = node.id || UUID();
|
|
|
|
|
|
|
|
if (
|
|
|
|
node.isParent === true ||
|
|
|
|
node.parent === true ||
|
|
|
|
isNotEmptyArray(node.children)
|
|
|
|
) {
|
|
|
|
extend.type = BasicTreeNode.xtype;
|
|
|
|
extend.selectable = true;
|
|
|
|
defaults(node, extend);
|
|
|
|
self._formatItems(node.children, layer + 1, node);
|
|
|
|
} else {
|
|
|
|
extend.type = BasicTreeItem.xtype;
|
|
|
|
defaults(node, extend);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return nodes;
|
|
|
|
}
|
|
|
|
|
|
|
|
_init() {
|
|
|
|
super._init(...arguments);
|
|
|
|
|
|
|
|
const self = this,
|
|
|
|
o = this.options;
|
|
|
|
|
|
|
|
this.tree = createWidget({
|
|
|
|
type: LevelTree.xtype,
|
|
|
|
expander: {
|
|
|
|
type: TreeExpander.xtype,
|
|
|
|
// isDefaultInit: true,
|
|
|
|
selectable: true,
|
|
|
|
},
|
|
|
|
items: this._formatItems(Tree.transformToTreeFormat(o.items), 0),
|
|
|
|
value: o.value,
|
|
|
|
chooseType: Selection.Single,
|
|
|
|
});
|
|
|
|
|
|
|
|
createWidget({
|
|
|
|
type: VerticalLayout.xtype,
|
|
|
|
element: this,
|
|
|
|
vgap: 5,
|
|
|
|
items: [this.tree],
|
|
|
|
});
|
|
|
|
|
|
|
|
this.tree.on(Controller.EVENT_CHANGE, function () {
|
|
|
|
self.fireEvent(Controller.EVENT_CHANGE, arguments);
|
|
|
|
});
|
|
|
|
|
|
|
|
this.tree.on(LevelTree.EVENT_CHANGE, () => {
|
|
|
|
self.fireEvent(SelectTreePopup.EVENT_CHANGE);
|
|
|
|
});
|
|
|
|
|
|
|
|
this.check();
|
|
|
|
}
|
|
|
|
|
|
|
|
getValue() {
|
|
|
|
return this.tree.getValue();
|
|
|
|
}
|
|
|
|
|
|
|
|
setValue(v) {
|
|
|
|
v = isArray(v) ? v : [v];
|
|
|
|
this.tree.setValue(v);
|
|
|
|
}
|
|
|
|
|
|
|
|
populate(items) {
|
|
|
|
super.populate(...arguments);
|
|
|
|
this.tree.populate(
|
|
|
|
this._formatItems(Tree.transformToTreeFormat(items))
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|