@rdkmaster/jigsaw-labs
Version:
Jigsaw, the next generation component set for RDK
450 lines (387 loc) • 16.8 kB
text/typescript
import {AfterViewInit, Component, EventEmitter, Input, NgModule, OnDestroy, Output} from '@angular/core';
import {AbstractJigsawComponent} from "../common";
import {InternalUtils} from "../../core/utils/internal-utils";
import {CallbackRemoval, CommonUtils} from "../../core/utils/common-utils";
import {ZTreeSettingSetting} from "./ztree-types";
import {TreeData} from "../../core/data/tree-data";
export class TreeEventData {
treeId: string;
treeNodes: object;
event?: Event;
extraInfo?: object;
}
export class JigsawTreeExt extends AbstractJigsawComponent implements AfterViewInit, OnDestroy {
constructor() {
super();
}
/**
* @internal
*/
private _customCallback;
/**
* @internal
*/
public _$uniqueId: string = InternalUtils.createUniqueId();
/**
* @internal
*/
private _setting: ZTreeSettingSetting = this._defaultSetting();
public get setting(): ZTreeSettingSetting {
return this._setting;
}
public set setting(setting: ZTreeSettingSetting) {
if (!CommonUtils.isDefined(setting) || CommonUtils.isEmptyObject(setting)) {
this._setting = this._defaultSetting();
} else {
this._customCallback = setting.callback;
setting.callback = this._defaultSetting().callback;
this._setting = setting;
}
this._updateTree();
}
private _removeRefreshCallback: CallbackRemoval;
private _data: TreeData;
public get data(): TreeData {
return this._data;
}
public set data(data: TreeData) {
if (!(data instanceof TreeData)) return;
this._data = data;
if (this._removeRefreshCallback) {
this._removeRefreshCallback();
}
this._removeRefreshCallback = data.onRefresh(() => {
this._updateTree();
});
}
public beforeAsync = new EventEmitter<TreeEventData>();
public beforeCheck = new EventEmitter<TreeEventData>();
public beforeClick = new EventEmitter<TreeEventData>();
public beforeCollapse = new EventEmitter<TreeEventData>();
public beforeDblClick = new EventEmitter<TreeEventData>();
public beforeDrag = new EventEmitter<TreeEventData>();
public beforeDragOpen = new EventEmitter<TreeEventData>();
public beforeDrop = new EventEmitter<TreeEventData>();
public beforeEditName = new EventEmitter<TreeEventData>();
public beforeExpand = new EventEmitter<TreeEventData>();
public beforeMouseDown = new EventEmitter<TreeEventData>();
public beforeMouseUp = new EventEmitter<TreeEventData>();
public beforeRemove = new EventEmitter<TreeEventData>();
public beforeRename = new EventEmitter<TreeEventData>();
public beforeRightClick = new EventEmitter<TreeEventData>();
public onAsyncError = new EventEmitter<TreeEventData>();
public onAsyncSuccess = new EventEmitter<TreeEventData>();
public onCheck = new EventEmitter<TreeEventData>();
public onClick = new EventEmitter<TreeEventData>();
public onCollapse = new EventEmitter<TreeEventData>();
public onDblClick = new EventEmitter<TreeEventData>();
public onDrag = new EventEmitter<TreeEventData>();
public onDragMove = new EventEmitter<TreeEventData>();
public onDrop = new EventEmitter<TreeEventData>();
public onExpand = new EventEmitter<TreeEventData>();
public onMouseDown = new EventEmitter<TreeEventData>();
public onMouseUp = new EventEmitter<TreeEventData>();
public onNodeCreated = new EventEmitter<TreeEventData>();
public onRemove = new EventEmitter<TreeEventData>();
public onRename = new EventEmitter<TreeEventData>();
public onRightClick = new EventEmitter<TreeEventData>();
ngAfterViewInit() {
this._updateTree();
}
ngOnDestroy() {
this.ztree.destroy();
}
public ztree: any;
private _updateTree() {
if (!this._setting || !this._data) return;
this.ztree = $.fn.zTree.init($('#' + this._$uniqueId), this._setting, this._data.nodes);
}
public selectNodes(key: string, value: any, parentNode: any) {
if (!this.ztree) return;
let nodes = this.ztree.getNodesByParam(key, value, parentNode);
if(nodes.length > 0) {
this.ztree.selectNode(nodes[0]);
}
}
callCustomCallbackEvent(eventName, event, ...para) {
if (CommonUtils.isDefined(this._customCallback) && CommonUtils.isDefined(this._customCallback[eventName])) {
if (event) {
this._customCallback[eventName](event, ...para);
} else {
return this._customCallback[eventName](...para);
}
} else {
if (!event) {
return true;
}
}
}
private _defaultSetting() {
let that = this;
let setObj: ZTreeSettingSetting = {
data: {
key: {
children: 'nodes',
name: 'label'
}
},
check: {
enable: true
},
callback: {
beforeAsync: before_async,
beforeCheck: before_check,
beforeClick: before_click,
beforeCollapse: before_collapse,
beforeDblClick: before_dblClick,
beforeDrag: before_drag,
beforeDragOpen: before_drag_open,
beforeDrop: before_drop,
beforeEditName: before_editName,
beforeExpand: before_expand,
beforeMouseDown: before_mouseDown,
beforeMouseUp: before_mouseUp,
beforeRemove: before_remove,
beforeRename: before_rename,
beforeRightClick: before_rightClick,
//
onAsyncError: on_asyncError,
onAsyncSuccess: on_asyncSuccess,
onCheck: on_check,
onClick: on_click,
onCollapse: on_collapse,
onDblClick: on_dblclick,
onDrag: on_drag,
onDragMove: on_dragMove,
onDrop: on_drop,
onExpand: on_expand,
onMouseDown: on_mouseDown,
onMouseUp: on_mouseUp,
onNodeCreated: on_nodeCreated,
onRemove: on_remove,
onRename: on_rename,
onRightClick: on_rightClick
},
edit: {
enable: true,
removeTitle: '',
renameTitle: ''
},
view: {
fontCss: undefined,
showLine: false
}
};
function before_async(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeAsync", treeId, treeNode);
return that.callCustomCallbackEvent("beforeAsync", undefined, treeId, treeNode);
}
function before_check(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeCheck", treeId, treeNode);
return that.callCustomCallbackEvent("beforeCheck", undefined, treeId, treeNode);
}
function before_click(treeId, treeNode, clickFlag) {
that.setTreeEvent.call(that, "beforeClick", treeId, treeNode, undefined, {"clickFlag": clickFlag});
return that.callCustomCallbackEvent("beforeClick", undefined, treeId, treeNode, clickFlag);
}
function before_collapse(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeCollapse", treeId, treeNode);
return that.callCustomCallbackEvent("beforeCollapse", undefined, treeId, treeNode);
}
function before_dblClick(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeDblClick", treeId, treeNode);
return that.callCustomCallbackEvent("beforeDblClick", undefined, treeId, treeNode);
}
function before_drag(treeId, treeNodes) {
that.setTreeEvent.call(that, "beforeDrag", treeId, treeNodes);
return that.callCustomCallbackEvent("beforeDrag", undefined, treeId, treeNodes);
}
function before_drag_open(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeDragOpen", treeId, treeNode);
return that.callCustomCallbackEvent("beforeDragOpen", undefined, treeId, treeNode);
}
function before_drop(treeId, treeNodes, targetNode, moveType, isCopy) {
let extraInfo = {"targetNode": targetNode, "moveType": moveType, "isCopy": isCopy};
that.setTreeEvent.call(that, "beforeDrop", treeId, treeNodes, undefined, extraInfo);
return that.callCustomCallbackEvent("beforeDrop", undefined, treeId, treeNodes, targetNode, moveType, isCopy);
}
function before_editName(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeEditName", treeId, treeNode);
return that.callCustomCallbackEvent("beforeEditName", undefined, treeId, treeNode);
}
function before_expand(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeExpand", treeId, treeNode);
return that.callCustomCallbackEvent("beforeExpand", undefined, treeId, treeNode);
}
function before_mouseDown(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeMouseDown", treeId, treeNode);
return that.callCustomCallbackEvent("beforeMouseDown", undefined, treeId, treeNode);
}
function before_mouseUp(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeMouseUp", treeId, treeNode);
return that.callCustomCallbackEvent("beforeMouseUp", undefined, treeId, treeNode);
}
function before_remove(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeRemove", treeId, treeNode);
return that.callCustomCallbackEvent("beforeRemove", undefined, treeId, treeNode);
}
//todo tree before_rename事件的isCancel属性传不出来
function before_rename(treeId, treeNode, newName, isCancel) {
if (newName.length == 0) {
alert("Node name can not be empty.");
return false;
} else {
let extraInfo = {"newName": newName, "isCancel": isCancel};
that.setTreeEvent.call(that, "beforeRename", treeId, treeNode, undefined, extraInfo);
return that.callCustomCallbackEvent("beforeRename", undefined, treeId, treeNode, newName, isCancel);
}
}
function before_rightClick(treeId, treeNode) {
that.setTreeEvent.call(that, "beforeRightClick", treeId, treeNode);
return that.callCustomCallbackEvent("beforeRightClick", undefined, treeId, treeNode);
}
function on_asyncError(event, treeId, treeNode, _XMLHttpRequest, textStatus, errorThrown) {
event.stopPropagation();
that.setTreeEvent.call(that, "onAsyncError", treeId, treeNode, event, {
XMLHttpRequest: _XMLHttpRequest,
textStatus: textStatus,
errorThrown: errorThrown
});
that.callCustomCallbackEvent("onAsyncError", event, treeId, treeNode, _XMLHttpRequest, textStatus, errorThrown);
}
function on_asyncSuccess(event, treeId, treeNode, msg) {
event.stopPropagation();
that.setTreeEvent.call(that, "onAsyncSuccess", treeId, treeNode, event, {msg: msg});
that.callCustomCallbackEvent("onAsyncSuccess", event, treeId, treeNode, msg);
}
function on_check(event, treeId, treeNode) {
event.stopPropagation();
that.setTreeEvent.call(that, "onCheck", treeId, treeNode, event);
that.callCustomCallbackEvent("onCheck", event, treeId, treeNode);
}
function on_click(event, treeId, treeNode, clickFlag) {
event.stopPropagation();
that.setTreeEvent.call(that, "onClick", treeId, treeNode, event, {clickFlag: clickFlag});
that.callCustomCallbackEvent("onClick", event, treeId, treeNode, clickFlag);
}
function on_collapse(event, treeId, treeNode) {
event.stopPropagation();
that.setTreeEvent.call(that, "onCollapse", treeId, treeNode, event);
that.callCustomCallbackEvent("onCollapse", event, treeId, treeNode);
}
function on_dblclick(event, treeId, treeNode) {
event.stopPropagation();
that.setTreeEvent.call(that, "onDblClick", treeId, treeNode, event);
that.callCustomCallbackEvent("onDblClick", event, treeId, treeNode);
}
function on_drag(event, treeId, treeNodes) {
event.stopPropagation();
that.setTreeEvent.call(that, "onDrag", treeId, treeNodes, event);
that.callCustomCallbackEvent("onDrag", event, treeId, treeNodes);
}
function on_dragMove(event, treeId, treeNodes) {
event.stopPropagation();
that.setTreeEvent.call(that, "onDragMove", treeId, treeNodes, event);
that.callCustomCallbackEvent("onDragMove", event, treeId, treeNodes);
}
function on_drop(event, treeId, treeNodes, targetNode, moveType, isCopy) {
event.stopPropagation();
that.setTreeEvent.call(that, "onDrop", treeId, treeNodes, event, {targetNode: targetNode, moveType: moveType, isCopy: isCopy});
that.callCustomCallbackEvent("onDrop", event, treeId, treeNodes, targetNode, moveType, isCopy);
}
function on_expand(event, treeId, treeNode) {
event.stopPropagation();
that.setTreeEvent.call(that, "onExpand", treeId, treeNode, event);
that.callCustomCallbackEvent("onExpand", event, treeId, treeNode);
}
function on_mouseDown(event, treeId, treeNode) {
// event.stopPropagation();
that.setTreeEvent.call(that, "onMouseDown", treeId, treeNode, event);
that.callCustomCallbackEvent("onMouseDown", event, treeId, treeNode);
}
function on_mouseUp(event, treeId, treeNode) {
// event.stopPropagation();
that.setTreeEvent.call(that, "onMouseUp", treeId, treeNode, event);
that.callCustomCallbackEvent("onMouseUp", event, treeId, treeNode);
}
function on_nodeCreated(event, treeId, treeNode) {
event.stopPropagation();
that.setTreeEvent.call(that, "onNodeCreated", treeId, treeNode, event);
that.callCustomCallbackEvent("onNodeCreated", event, treeId, treeNode);
}
function on_remove(event, treeId, treeNode) {
event.stopPropagation();
that.setTreeEvent.call(that, "onRemove", treeId, treeNode, event);
that.callCustomCallbackEvent("onRemove", event, treeId, treeNode);
}
function on_rename(event, treeId, treeNode, isCancel) {
that.setTreeEvent.call(that, "onRename", treeId, treeNode, event, {isCancel: isCancel});
that.callCustomCallbackEvent("onRename", event, treeId, treeNode, isCancel);
}
function on_rightClick(event, treeId, treeNode) {
event.stopPropagation();
that.setTreeEvent.call(that, "onRightClick", treeId, treeNode, event);
that.callCustomCallbackEvent("onRightClick", event, treeId, treeNode);
}
return setObj;
}
public setTreeEvent(type: string, treeId: string, treeNodes: object, event?: Event, extraInfo?: object) {
let treeEventData = new TreeEventData();
treeEventData.event = event;
treeEventData.treeId = treeId;
treeEventData.treeNodes = treeNodes;
treeEventData.extraInfo = extraInfo;
this[type].emit(treeEventData);
}
}
export class JigsawTreeExtModule {
}