import { Component, OnInit, Input, Output, EventEmitter, ViewChild, Directive, ElementRef, Injector } from '@angular/core';
import { TreeNode, TreeTableComponent } from '@farris/ui-treetable';
import { FarrisTemplateDirective, CommonUtils, } from '@farris/ui-common';
@Component({
selector: 'farris-tree',
template: `
|
{{ appendText }}
|
`
})
export class TreeComponent implements OnInit {
@ViewChild(TreeTableComponent) treeTable: TreeTableComponent;
@Input() showTips = true;
/** 宽度 */
@Input() width = 500;
/** 高度 */
@Input() height = 400;
@Input() showFilterBar = false;
/** 是否启用多选 */
@Input() singleSelect = true;
/** 启用多选后,是否显示checkbox */
@Input() showCheckbox = true;
/** 主键字段 */
@Input() idField: string;
/** 文本字段 */
@Input() displayText: string;
/** 显示图标 */
@Input() showIcon = false;
/** 显示边框线 */
@Input() showBorder = false;
/** 禁用。 禁用时不允许选中行 */
@Input() disabled = false;
/** 数据加载方式
* - all: 全部加载
* - async: 分层加载
*/
@Input() loadDataType: 'all' | 'async' = 'all';
/** 当多选时,选中当前行并钩选 */
@Input() checkOnSelect = false;
/** 当多选时,钩选并选中当前行 */
@Input() selectOnCheck = false;
/**
* 启用多选时,此属性为true 时,仅当前行选中
*/
@Input() onlySelectSelf = false;
/** 设置为true时自适应父容的尺寸 */
@Input() fit = false;
/** 启用级联选中功能 */
@Input() cascadeCheck = true;
/** 向下级联选中 */
@Input() cascadeDown = true;
/** 向上级联选中 */
@Input() cascadeUp = true;
/** 空数据时,显示的提示文本 */
@Input() emptyMessage = '暂无数据';
/**
* 单击行选中后,在次点击不会被取消选中状态;
*/
@Input() keepSelect = true;
/** 虚拟加载 */
@Input() virtualized = false;
/**
* 仅允许选择叶子节点
* - default: 应用服务器端传回的设置,如果服务器端没有设置,则与 no 保持一至;
* - yes: 如果客户端设置为 `yes`, 服务器端的设置失效;
* - no: 允许选择所有节点;服务器端设置失效
*/
@Input() onlySelectLeaf: boolean | 'default' | 'yes' | 'no' = 'default';
/** 叶子节点图标 */
@Input() leafIcon = 'file';
/** 节点展开图标 */
@Input() expandIcon = 'folder-open';
/** 节点折叠图标 */
@Input() collapseIcon = 'folder';
/** 启用远端排序 */
@Input() remoteSort = true;
/** 排序方式 asc | desc */
@Input() sortOrder: string;
@Input() data: TreeNode[] = [];
/** 附加按钮TXT */
@Input() appendText = '';
/** 附加按钮点击事件 */
@Output() appendBtnClick: EventEmitter = new EventEmitter();
/** 选中事件 */
@Output() nodeSelected: EventEmitter = new EventEmitter();
/** 取消选中事件 */
@Output() nodeUnSelect: EventEmitter = new EventEmitter();
/** 钩选 */
@Output() nodeChecked: EventEmitter = new EventEmitter();
/** 取消钩选 */
@Output() nodeUnChecked: EventEmitter = new EventEmitter();
/** 查询 */
@Output() search: EventEmitter = new EventEmitter();
@Output() dblClick: EventEmitter = new EventEmitter();
@Output() loadedData: EventEmitter = new EventEmitter();
constructor( public utils: CommonUtils) {}
ngOnInit() {}
onMouseEnter($event: MouseEvent) {
if (this.appendText) {
($event.target as any).querySelector('.rbtn').style.display = 'inline-block';
}
}
onMouseLeave($event: MouseEvent) {
if (this.appendText) {
($event.target as any).querySelector('.rbtn').style.display = 'none';
}
}
onClickAppendBtn($event: MouseEvent) {
this.appendBtnClick.emit();
$event.stopPropagation();
}
}