@rdkmaster/jigsaw-labs
Version:
Jigsaw, the next generation component set for RDK
235 lines (234 loc) • 7.22 kB
TypeScript
import { AfterViewInit, ChangeDetectorRef, EventEmitter, OnInit, OnDestroy } from "@angular/core";
import { TranslateService } from "@ngx-translate/core";
import { Observable } from "rxjs/Observable";
import { JigsawTab } from "../tabs/tab";
import { AbstractJigsawComponent, IDynamicInstantiatable } from "../common";
import { ArrayCollection, LocalPageableArray } from "../../core/data/array-collection";
import { TreeData } from "../../core/data/tree-data";
export declare class CascadeData {
/**
* 用于级联组件在未选中任何条目时的标题文本,一般使用当前列表所有条目所归属的类作为标题。
*/
title: string;
/**
* 级联选项的数据集,支持静态和异步数据
*/
list: any[] | Observable<any[]>;
/**
* 是否级联结束,不设置默认为不结束
*/
noMore?: boolean;
/**
* 是否显示“全部”按钮,不设置默认为不显示,“全部”按钮单击后的效果等于选择了其父级tab页上对应的条目。
*/
showAll?: boolean;
/**
* 标签字段名,用于设置`list`中条目显示在界面上的字段。
* 省略此值的话,级联组件会使用`JigsawCascade.labelField`属性值。
*/
labelField?: string;
/**
* 用于指明可唯一确定一个条目的字段(或者字段列表),备选的条目往往有id/key等字段,
* 用于标识一个条目的唯一性,提供这字段可帮助级联组件更好的区分同名条目。
*
* 省略此值的话,级联组件会使用`JigsawCascade.trackItemBy`属性值。
*/
trackItemBy?: string | string[];
}
/**
* 生成级联数据的函数类型
* @params selectedItem: 上一级选中的item,可作为查询这一级数据的条件
* selectedItems: 已有的所有级items
* data: 已有的所有级的数据集合
* level: 当前tab的下标索引值,从0开始
* @returns {CascadeData}
*/
export declare type CascadeDateGenerator = (selectedItem: any, selectedItems: any[], data: any[], level: number) => CascadeData;
export declare class CascadeTabContentInitData {
level: number;
list: any[] | Observable<Object>;
noMore: boolean;
multipleSelect: boolean;
showAll: boolean;
}
/**
* 一种通用的级联选择组件,
* - 支持静态数据和异步数据
* - 支持单选和多选
* - 支持选择全部
*/
export declare class JigsawCascade extends AbstractJigsawComponent implements AfterViewInit, OnInit {
private _changeDetectorRef;
constructor(_changeDetectorRef: ChangeDetectorRef);
/**
* @internal
*/
_tabs: JigsawTab;
/**
* @internal
*/
_cascadeDataList: CascadeData[];
/**
* 生成级联数据的函数,一般用于需要异步加载的数据的生产
*
* $demo = cascade/lazy-load
* $demo = cascade/selected-items
*/
dataGenerator: CascadeDateGenerator;
/**
* 一般配合`dataGenerator`使用,用于指明`dataGenerator`函数执行的上下文对象,
* 忽略此值时,`dataGenerator`函数中的`this`将指向一个空对象。
*
* 注意,如果`data`属性的值是一个函数,则该函数的执行上下文也是此属性指定的对象。
*
* $demo = cascade/lazy-load
* $demo = cascade/selected-items
*/
generatorContext: any;
private _data;
/**
* 级联数据
* - 可以是一个生产数据的函数,参考`dataGenerator`
* - 也可以是一个有层级关系的静态数据,参考`TreeData`
*
* $demo = cascade/basic
* $demo = cascade/lazy-load
*/
data: CascadeDateGenerator | TreeData;
private _treeDataGenerator(selectedItem);
private _selectedItems;
/**
* 级联选择的数据
* @type {Array}
*
* $demo = cascade/selected-items
*/
selectedItems: any[];
/**
* 级联选择数据发生变化时发送的事件
* @type {EventEmitter<any[]>}
*
* $demo = cascade/basic
* $demo = cascade/lazy-load
* $demo = cascade/multiple-select
* $demo = cascade/show-all
*/
selectedItemsChange: EventEmitter<any[]>;
/**
* 数据要显示的文本key
* @type {string}
*
* $demo = cascade/lazy-load
* $demo = cascade/selected-items
*/
labelField: string;
private _trackItemBy;
/**
* 数据的标识,用于判断是否为同一个数据,默认是`labelField`的值
*
* $demo = cascade/track-item-by
*/
trackItemBy: string | string[];
/**
* 配置叶子节点是否可多选
*
* $demo = cascade/multiple-select
*/
multipleSelect: boolean;
/**
* 是否可以跨分支多选
*
* @internal
*
* $demo = cascade/cross-select
* $demo = cascade/preset-multi-dimensional-data
*/
allowCrossSelect: boolean;
/**
* 是否可搜索
*/
searchable: boolean;
/**
* 设置数据分页存储数,默认不分页
* @type {number}
*/
pageSize: number;
/**
* @internal
*/
_handleMultipleSelect(selectedItems: any[], level: number): void;
/**
* @internal
*/
_handleSelect(selectedItem: any, level: number): void;
/**
* @internal
*/
_selectAll(level: number): void;
private _addCascadingTab(level, lazy);
private _removeCascadingTabs(level);
private _updateTabTitle(selectedItem, level);
private _cascading(level, selectedItem?, lazy?);
private _fillBack();
ngOnInit(): void;
ngAfterViewInit(): void;
}
/**
* @internal
*/
export declare class InternalTabContent extends AbstractJigsawComponent implements IDynamicInstantiatable, OnInit, OnDestroy {
_$cascade: JigsawCascade;
constructor(_$cascade: JigsawCascade);
private _removeListRefreshListener;
initData: CascadeTabContentInitData;
/**
* @internal
* 当前tab总选择
*/
_$selectedItems: any[];
/**
* @internal
* 当前page选择
*/
_$currentPageSelectedItems: any[];
/**
* @internal
*/
_$searchKey: string;
/**
* @internal
*/
_$showLoading: boolean;
private _list;
/**
* @internal
*/
_$list: any[] | ArrayCollection<any> | LocalPageableArray<any>;
/**
* @internal
*/
readonly _$trackByFn: (index: number, item: any) => any;
/**
* @internal
*/
_$handleSelect(): void;
/**
* @internal
*/
_$handleOptionClick(): void;
/**
* @internal
*/
_$handleSearching(filterKey?: string): void;
private _updateSelectedItemsByCurrent();
/**
* @internal
*/
_$updateCurrentPageSelectedItems(): void;
private _init(data, allSelectedData);
ngOnInit(): void;
ngOnDestroy(): void;
}
export declare class JigsawCascadeModule {
constructor(ts: TranslateService);
}