@rdkmaster/jigsaw-labs
Version:
Jigsaw, the next generation component set for RDK
409 lines (408 loc) • 16.2 kB
TypeScript
import { HttpClient } from "@angular/common/http";
import "rxjs/add/operator/map";
import 'rxjs/add/operator/debounceTime';
import { Subscription } from "rxjs/Subscription";
import { ComponentDataHelper, DataFilterInfo, DataReviser, DataSortInfo, HttpClientOptions, IAjaxComponentData, IEmittable, IFilterable, IPageable, IServerSidePageable, ISortable, PagingInfo, SortAs, SortOrder } from "./component-data";
import { CallbackRemoval } from "../utils/common-utils";
/**
* we have to implement the `Array<T>` interface due to this breaking change:
* <https://github.com/Microsoft/TypeScript/wiki/FAQ#why-doesnt-extending-built-ins-like-error-array-and-map-work>
* <https://github.com/Microsoft/TypeScript/issues/14869>
*/
export declare class JigsawArray<T> implements Array<T> {
private _agent;
/**
* 将位置`index`处的数据更新为`value`。`JigsawArray`不支持采用方括号表达式设置一个值,因此必须通过这个方法来替代。
*
* ```
* const a = new ArrayCollection<any>();
* a[0] = 123; // compile error!
* a.set(0, 123); // everything is fine.
* ```
*
* @param {number} index
* @param {T} value
*/
set(index: number, value: T): void;
/**
* 获取`index`位置处的数据,和数组的方括号表达式的作用一样。
*
* ```
* const a = new ArrayCollection<any>([{}]);
* a.get(0) === a[0] // true
* ```
*
* @param {number} index
* @returns {T}
*/
get(index: number): T;
private _length;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/length>
* @return {number}
*/
length: number;
readonly [n: number]: T;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes>
*
* @param {T} searchElement
* @param {number} fromIndex
* @return {boolean}
*/
includes(searchElement: T, fromIndex?: number): boolean;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/toString>
* @return {string}
*/
toString(): string;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/toLocaleString>
* @return {string}
*/
toLocaleString(): string;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/push>
* @param {T} items
* @return {number}
*/
push(...items: T[]): number;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/pop>
* @return {T}
*/
pop(): T;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/concat>
* @param items
* @return {any}
*/
concat(...items: any[]): any;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/join>
* @param {string} separator
* @return {string}
*/
join(separator?: string): string;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse>
* @return {T[]}
*/
reverse(): T[];
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/shift>
* @return {T}
*/
shift(): T;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/slice>
* @param {number} start
* @param {number} end
* @return {T[]}
*/
slice(start?: number, end?: number): T[];
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort>
* @param {(a: T, b: T) => number} compareFn
* @return {any}
*/
sort(compareFn?: (a: T, b: T) => number): any;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice>
* @param start
* @param deleteCount
* @param rest
* @return {T[]}
*/
splice(start: any, deleteCount?: any, ...rest: any[]): T[];
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift>
* @param {T} items
* @return {number}
*/
unshift(...items: T[]): number;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf>
* @param {T} searchElement
* @param {number} fromIndex
* @return {number}
*/
indexOf(searchElement: T, fromIndex?: number): number;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf>
* @param {T} searchElement
* @param {number} fromIndex
* @return {number}
*/
lastIndexOf(searchElement: T, fromIndex?: number): number;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/every>
* @param {(value: T, index: number, array: T[]) => boolean} callbackfn
* @param thisArg
* @return {boolean}
*/
every(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/some>
* @param {(value: T, index: number, array: T[]) => boolean} callbackfn
* @param thisArg
* @return {boolean}
*/
some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach>
* @param {(value: T, index: number, array: T[]) => void} callbackfn
* @param thisArg
*/
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map>
* @param callbackfn
* @param thisArg
* @return {[any , any , any , any , any]}
*/
map(callbackfn: any, thisArg?: any): [any, any, any, any, any];
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter>
* @param {(value: T, index: number, array: T[]) => any} callbackfn
* @param thisArg
* @return {T[]}
*/
filter(callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): T[];
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce>
* @param callbackfn
* @param initialValue
* @return {T}
*/
reduce(callbackfn: any, initialValue?: any): T;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight>
* @param callbackfn
* @param initialValue
* @return {T}
*/
reduceRight(callbackfn: any, initialValue?: any): T;
/**
* @internal
*/
[Symbol.unscopables](): {
copyWithin: boolean;
entries: boolean;
fill: boolean;
find: boolean;
findIndex: boolean;
keys: boolean;
values: boolean;
};
/**
* @internal
*/
[Symbol.iterator](): IterableIterator<T>;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/entries>
* @return {IterableIterator<[number , T]>}
*/
entries(): IterableIterator<[number, T]>;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/keys>
* @return {IterableIterator<number>}
*/
keys(): IterableIterator<number>;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/values>
* @return {IterableIterator<T>}
*/
values(): IterableIterator<T>;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/find>
* @param {(value: T, index: number, obj: T[]) => boolean} predicate
* @param thisArg
* @return {T}
*/
find(predicate: (value: T, index: number, obj: T[]) => boolean, thisArg?: any): T;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex>
* @param {(value: T, index: number, obj: T[]) => boolean} predicate
* @param thisArg
* @return {number}
*/
findIndex(predicate: (value: T, index: number, obj: T[]) => boolean, thisArg?: any): number;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/fill>
* @param {T} value
* @param {number} start
* @param {number} end
* @return {any}
*/
fill(value: T, start?: number, end?: number): any;
/**
* 参考这里 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin>
* @param {number} target
* @param {number} start
* @param {number} end
* @return {any}
*/
copyWithin(target: number, start: number, end?: number): any;
}
/**
* 这是Jigsaw数据体系中两大分支之一:数组类型的基类。
*
* 关于Jigsaw数据体系详细介绍,请参考`IComponentData`的说明
*/
export declare class ArrayCollection<T> extends JigsawArray<T> implements IAjaxComponentData, IEmittable {
/**
* 用于发起网络请求,在调用`fromAjax()`之前必须设置好此值。
*/
http: HttpClient;
dataReviser: DataReviser;
concat(...items: any[]): ArrayCollection<T>;
slice(start?: number, end?: number): ArrayCollection<T>;
constructor(source?: T[]);
protected _busy: boolean;
readonly busy: boolean;
/**
* 调用在`onAjaxStart`里注册的所有回调函数。
*/
protected ajaxStartHandler(): void;
/**
* 调用在`onAjaxSuccess`里注册的所有回调函数。
*/
protected ajaxSuccessHandler(data: T[]): void;
/**
* 调用在`onAjaxError`里注册的所有回调函数。
*/
protected ajaxErrorHandler(error: Response): void;
/**
* 调用在`onAjaxComplete`里注册的所有回调函数。
*/
protected ajaxCompleteHandler(): void;
/**
* 安全地调用`dataReviser`函数。
*
* @param originData
* @return {any}
*/
protected reviseData(originData: any): any;
fromAjax(url?: string): void;
fromAjax(options?: HttpClientOptions): void;
/**
* 将一个普通数组对象`source`的所有元素浅拷贝到当前数据对象中。
*
* ```
* const ac = new ArrayCollection<number>();
* ac.fromArray([1, 2, 3]);
* console.log(ac); // [1, 2, 3]
* ```
*
* @param {T[]} source 源数据
* @returns {ArrayCollection<T>} 返回当前数据对象的引用
*/
fromArray(source: T[]): ArrayCollection<T>;
private _fromArray(source);
protected componentDataHelper: ComponentDataHelper;
refresh(): void;
onRefresh(callback: (thisData: ArrayCollection<T>) => void, context?: any): CallbackRemoval;
onAjaxStart(callback: () => void, context?: any): CallbackRemoval;
onAjaxSuccess(callback: (data: any) => void, context?: any): CallbackRemoval;
onAjaxError(callback: (error: Response) => void, context?: any): CallbackRemoval;
onAjaxComplete(callback: () => void, context?: any): CallbackRemoval;
destroy(): void;
private _emitter;
emit(value?: any): void;
subscribe(callback?: (value: any) => void): Subscription;
unsubscribe(): void;
}
/**
* 这是实际使用时最常用的数组对象,具备服务端分页、服务端排序、服务端过滤能力。
* 注意:需要有一个统一的具备服务端分页、服务端排序、服务端过滤能力的REST服务配合使用,
* 更多信息请参考`PagingInfo.pagingServerUrl`
*
* 实际用法请参考[这个demo]($demo=data-encapsulation/array-ssp)
*
* 关于Jigsaw数据体系详细介绍,请参考`IComponentData`的说明
*/
export declare class PageableArray extends ArrayCollection<any> implements IServerSidePageable, ISortable, IFilterable {
http: HttpClient;
pagingInfo: PagingInfo;
filterInfo: DataFilterInfo;
sortInfo: DataSortInfo;
/**
* 参考`PageableTableData.sourceRequestOptions`的说明
*/
sourceRequestOptions: HttpClientOptions;
private _filterSubject;
private _sortSubject;
constructor(http: HttpClient, requestOptionsOrUrl: HttpClientOptions | string);
private _initSubjects();
updateDataSource(options: HttpClientOptions): void;
updateDataSource(url: string): void;
fromAjax(url?: string): void;
fromAjax(options?: HttpClientOptions): void;
private _ajax();
private _updatePagingInfo(data);
protected ajaxSuccessHandler(data: any): void;
filter(callbackfn: (value: any, index: number, array: any[]) => any, thisArg?: any): any;
filter(term: string, fields?: string[] | number[]): void;
filter(term: DataFilterInfo): void;
sort(compareFn?: (a: any, b: any) => number): any;
sort(as: SortAs, order: SortOrder, field: string | number): void;
sort(sort: DataSortInfo): void;
changePage(currentPage: number, pageSize?: number): void;
changePage(info: PagingInfo): void;
firstPage(): void;
previousPage(): void;
nextPage(): void;
lastPage(): void;
destroy(): void;
}
/**
* 如果你没有统一的服务端分页、过滤、排序服务,则需要使用这个数据对象,并且请求的提供数据的服务需要自行处理分页、过滤、排序等。
*
* Jigsaw暂未实现此功能,如有需要,请给我们[提issue](https://github.com/rdkmaster/jigsaw/issues/new)。
*
* 关于Jigsaw数据体系详细介绍,请参考`IComponentData`的说明
*/
export declare class DirectPageableArray extends PageableArray {
http: HttpClient;
sourceRequestOptions: HttpClientOptions;
constructor(http: HttpClient, sourceRequestOptions: HttpClientOptions);
}
/**
* 在本地分页、排序、过滤的数组。
*
* 关于Jigsaw数据体系详细介绍,请参考`IComponentData`的说明
*/
export declare class LocalPageableArray<T> extends ArrayCollection<T> implements IPageable {
pagingInfo: PagingInfo;
private _bakData;
private _filterSubject;
private _sortSubject;
private _filteredData;
filteredData: T[];
constructor(source?: T[]);
fromArray(source: T[]): ArrayCollection<T>;
/**
* @internal
* @param item
* @param {string} keyword
* @param {any[]} fields
* @returns {boolean}
*/
static filterItemByKeyword(item: any, keyword: string, fields: any[]): boolean;
private _initSubjects();
filter(callbackfn: (value: any, index: number, array: any[]) => any, context?: any): any;
filter(term: string, fields?: string[] | number[]): void;
filter(term: DataFilterInfo): void;
sort(compareFn?: (a: any, b: any) => number): any;
sort(as: SortAs, order: SortOrder, field?: string | number): void;
sort(sort: DataSortInfo): void;
changePage(currentPage: number, pageSize?: number): void;
changePage(info: PagingInfo): void;
private _setDataByPageInfo();
firstPage(): void;
previousPage(): void;
nextPage(): void;
lastPage(): void;
destroy(): void;
}