UNPKG

@rdkmaster/jigsaw-labs

Version:

Jigsaw, the next generation component set for RDK

409 lines (408 loc) 16.2 kB
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; }