UNPKG

@rdkmaster/jigsaw-labs

Version:

Jigsaw, the next generation component set for RDK

235 lines (234 loc) 7.22 kB
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); }