@ngutil/data 0.0.102 → 0.0.104

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +0,0 @@
1
- export { DataProvider } from "./provider";
2
- export { LocalProvider } from "./local";
3
- export { ArrayProvider } from "./array";
4
- export { ObservableProvider } from "./observable";
@@ -1,16 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from "../model";
3
- import { QueryExecutor, QueryResult, QueryWithSlice, Slice } from "../query";
4
- import { DataProvider } from "./provider";
5
- export declare abstract class LocalProvider<T extends Model> extends DataProvider<T> {
6
- #private;
7
- readonly isAsync = false;
8
- readonly meta: ModelMeta<T>;
9
- abstract readonly items$: Observable<readonly T[]>;
10
- constructor(meta: ModelMetaInput<T>);
11
- executor(request: QueryWithSlice<T>): QueryExecutor<T>;
12
- queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>>;
13
- queryItem(ref: ModelRefNorm, request?: QueryWithSlice<T>): Observable<T | undefined>;
14
- queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined>;
15
- clampSlice(slice: Slice): Observable<Slice>;
16
- }
@@ -1,7 +0,0 @@
1
- import { type Observable } from "rxjs";
2
- import type { Model, ModelMetaInput } from "../model";
3
- import { LocalProvider } from "./local";
4
- export declare class ObservableProvider<T extends Model> extends LocalProvider<T> {
5
- readonly items$: Observable<readonly T[]>;
6
- constructor(meta: ModelMetaInput<T>, src: Observable<readonly T[]>);
7
- }
@@ -1,50 +0,0 @@
1
- import type { Observable } from "rxjs";
2
- import type { Model, ModelMeta, ModelRefNorm } from "../model";
3
- import { type FilterNormalized, type QueryResult, type QueryWithSlice, type Slice, type SorterNormalized } from "../query";
4
- import { type GrouperNormalized } from "../query/grouper";
5
- import { type SlimerNormalized } from "../query/slimer";
6
- import { DataSource } from "../source";
7
- import type { CollectionStore } from "../store";
8
- export declare abstract class DataProvider<T extends Model> {
9
- /**
10
- * `true` when the provider is making async requests
11
- */
12
- abstract readonly isAsync: boolean;
13
- /**
14
- * Metadata of model
15
- */
16
- abstract readonly meta: ModelMeta<T>;
17
- /**
18
- * Emit event when data is changed
19
- */
20
- get changed$(): Observable<any>;
21
- protected _changed: Observable<any>;
22
- /**
23
- * Query items by the given request
24
- */
25
- abstract queryList(request: QueryWithSlice<T>): Observable<QueryResult<T>>;
26
- /**
27
- * Query exactly one item by the given request
28
- */
29
- abstract queryItem(ref: ModelRefNorm, request?: QueryWithSlice<T>): Observable<T | undefined>;
30
- /**
31
- * Query item position in the list that matching by the given request
32
- */
33
- abstract queryPosition(ref: ModelRefNorm, request: QueryWithSlice<T>): Observable<number | undefined>;
34
- /**
35
- * Froce Slice boundaries, useful in array, or obeservable providers
36
- */
37
- clampSlice(slice: Slice): Observable<Slice>;
38
- filterNormalize(filter: any): FilterNormalized | undefined;
39
- filterMerge(...filters: any[]): FilterNormalized | undefined;
40
- sorterNormalize(sorter: any): SorterNormalized;
41
- sorterMerge(...sorters: any[]): SorterNormalized | undefined;
42
- grouperNormalize(grouper: any): GrouperNormalized;
43
- grouperMerge(...groupers: any[]): GrouperNormalized | undefined;
44
- slimerNormalize(slimer: any): SlimerNormalized;
45
- slimerMerge(...slimers: any[]): SlimerNormalized | undefined;
46
- /**
47
- * @returns New data source instance
48
- */
49
- toDataSource(store?: CollectionStore<T>): DataSource<T>;
50
- }
package/query/common.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare function readonlyProp(o: unknown, n: string | symbol, v: unknown): void;
2
- export declare function normalize(obj: any, normalizer: (v: any) => any): any;
@@ -1,30 +0,0 @@
1
- import { Primitive } from "utility-types";
2
- import { Model } from "../model";
3
- import { QueryResult, QueryWithSlice } from "./query";
4
- declare const INPUT: unique symbol;
5
- interface PartialExecutor {
6
- [INPUT]: any;
7
- }
8
- export interface QueryExecutors<T extends Model> {
9
- readonly filterFn?: FilterExecutor<T>;
10
- readonly sorterFn?: SorterExecutor<T>;
11
- readonly grouperFn?: GrouperExecutor<T>;
12
- readonly slicerFn?: SliceExecutor<T>;
13
- }
14
- export interface QueryExecutor<T extends Model> extends QueryExecutors<T> {
15
- (items: readonly T[]): QueryResult<T>;
16
- }
17
- export declare function queryExecutor<T extends Model>(query: QueryWithSlice<T>, previous?: QueryExecutor<T>): QueryExecutor<T>;
18
- interface FilterExecutor<T extends Model> extends PartialExecutor {
19
- (item: T): boolean;
20
- }
21
- interface SorterExecutor<T extends Model> extends PartialExecutor {
22
- (a: T, b: T): number;
23
- }
24
- interface GrouperExecutor<T extends Model> extends PartialExecutor {
25
- (item: T): Primitive;
26
- }
27
- interface SliceExecutor<T extends Model> extends PartialExecutor {
28
- (items: readonly T[]): T[];
29
- }
30
- export {};
package/query/filter.d.ts DELETED
@@ -1,118 +0,0 @@
1
- import { AsPrimitive, MaxRecursion } from "@ngutil/common";
2
- import { Model } from "../model";
3
- import { QueryProperty, QueryPropertySet } from "./query-property";
4
- export declare enum FilterOp {
5
- Eq = "==",
6
- EqStrict = "===",
7
- EqInsesitive = "==*",
8
- Neq = "!=",
9
- NeqStrict = "!==",
10
- NeqInsesitive = "!=*",
11
- Gt = ">",
12
- GtInsesitive = ">*",
13
- Gte = ">=",
14
- GteInsesitive = ">=*",
15
- Lt = "<",
16
- LtInsesitive = "<*",
17
- Lte = "<=",
18
- LteInsesitive = "<=*",
19
- Contains = "%",
20
- ContainsInsesitive = "%*",
21
- StartsWith = "^",
22
- StartsWithInsesitive = "^*",
23
- EndsWith = "$",
24
- EndsWithInsesitive = "$*",
25
- Similarity = "**",
26
- Regexp = "~",
27
- RegexpInsesitive = "~*",
28
- Or = "|",
29
- And = "&",
30
- Not = "!"
31
- }
32
- export declare const OPERATORS: Array<string>;
33
- export type FilterCustom<T = any> = {
34
- custom: string;
35
- matcher?: FilterCustomMatcher<T>;
36
- };
37
- export type FilterCustomMatcher<T = any> = (item: T | null | undefined, value: any) => boolean;
38
- export type FilterOpMap = Record<string, FilterOp | FilterCustom>;
39
- export declare function asOperators(value: any): Array<{
40
- op: FilterOp;
41
- value: any;
42
- }>;
43
- export type Filter<T extends Model> = {
44
- [key: string]: any;
45
- };
46
- export type Operators<T, P extends number[], D extends number = MaxRecursion> = P["length"] extends D ? never : SimpleOperators<T>;
47
- type SimpleOperators<T> = EqStrict<T> | NeqStrict<T> | Eq<T> | Neq<T> | Gt<T> | Gte<T> | Lt<T> | Lte<T> | Contains<T> | StartsWith<T> | Similarity<T> | EndsWith<T> | Regexp<T> | T | undefined | null;
48
- type EqStrict<T> = Operator<T, T, FilterOp.EqStrict, never, null>;
49
- type NeqStrict<T> = Operator<T, T, FilterOp.NeqStrict, never, null>;
50
- type Eq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Eq, FilterOp.EqInsesitive, null>;
51
- type Neq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Neq, FilterOp.NeqInsesitive, null>;
52
- type Gt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gt, FilterOp.GtInsesitive>;
53
- type Gte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gte, FilterOp.GteInsesitive>;
54
- type Lt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lt, FilterOp.LtInsesitive>;
55
- type Lte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lte, FilterOp.LteInsesitive>;
56
- type Contains<T> = Operator<T, string, FilterOp.Contains, FilterOp.ContainsInsesitive>;
57
- type StartsWith<T> = Operator<T, string, FilterOp.StartsWith, FilterOp.StartsWithInsesitive>;
58
- type Similarity<T> = Operator<T, string, FilterOp.Similarity, never, null>;
59
- type EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>;
60
- type Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>;
61
- type Operator<T, R, OP extends string, OPI extends string = never, ET = never> = (T extends R ? {
62
- [k in OP]: T | ET | R;
63
- } : never) | (T extends string ? (OPI extends never ? never : {
64
- [k in OPI]: string;
65
- }) : never);
66
- export type FilterFn<T = any> = (item: T) => boolean;
67
- /**
68
- * @example
69
- * ```ts
70
- * items.filter(filterBy({id: 42}))
71
- * ```
72
- */
73
- export declare function filterBy<T extends Model>(filters: Filter<T>, opmap?: FilterOpMap): FilterFn<T>;
74
- type NormPath = {
75
- path: string;
76
- op: Exclude<FilterOp, FilterOp.Or | FilterOp.And | FilterOp.Not>;
77
- value: any;
78
- };
79
- type NormOr = {
80
- op: FilterOp.Or;
81
- value: Array<NormEntry>;
82
- };
83
- type NormAnd = {
84
- op: FilterOp.And;
85
- value: Array<NormEntry>;
86
- };
87
- type NormNot = {
88
- op: FilterOp.Not;
89
- value: Array<NormEntry>;
90
- };
91
- type NormCustom = {
92
- path: string;
93
- op: FilterCustom;
94
- value: any;
95
- };
96
- type NormEmpty = Record<string, never>;
97
- type NormEntry = NormPath | NormOr | NormAnd | NormNot | NormCustom | NormEmpty;
98
- export type FilterNormalized = NormEntry;
99
- /**
100
- * @example
101
- * ```ts
102
- * filterNormalize({id: {">": 0, "<": 10}})
103
- * {op: "&", value: [{path: "id", op: ">", value: 0}, {path: "id", op: "<", value: 10}]}
104
- * ```
105
- */
106
- export declare function filterNormalize<T extends Model>(filters: Filter<T> | null | undefined, opmap?: FilterOpMap): FilterNormalized | undefined;
107
- export declare function filterIsNormnalized(filters: any): filters is FilterNormalized;
108
- export declare function filterMerge(...filters: Array<FilterNormalized | null | undefined>): any | undefined;
109
- export declare class FilterProperty<T extends Model> extends QueryProperty<Filter<T>, FilterNormalized> {
110
- protected merge(a?: FilterNormalized | undefined, b?: FilterNormalized | undefined): FilterNormalized | undefined;
111
- protected norm(a: FilterNormalized | Filter<T>): FilterNormalized | undefined;
112
- }
113
- export declare class FilterPropertySet<T extends Model> extends QueryPropertySet<Filter<T>> {
114
- protected newProperty(): FilterProperty<Model>;
115
- protected merge(...args: any[]): NormEntry | undefined;
116
- }
117
- export declare function filterSimplify(filters: any): object | null;
118
- export {};
@@ -1,17 +0,0 @@
1
- import { Flatten, Primitive } from "@ngutil/common";
2
- import { Model } from "../model";
3
- import { QueryProperty, QueryPropertySet } from "./query-property";
4
- export type GrouperFn<T = any> = (item: any) => Primitive;
5
- export type Grouper<T extends Model, F = Flatten<T>> = any;
6
- export type GrouperNormalized = any;
7
- export declare function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T>;
8
- export declare function grouperMerge<T extends Model, F = Flatten<T>>(...groupers: Array<Grouper<T, F> | undefined | null>): Grouper<T, F> | undefined;
9
- export declare function grouperNormalize<T extends Model>(grouper: Grouper<T>): GrouperNormalized;
10
- export declare class GrouperProperty<T extends Model> extends QueryProperty<Grouper<T>, GrouperNormalized> {
11
- protected norm(a: any): any;
12
- protected merge(a?: any, b?: any): any;
13
- }
14
- export declare class GrouperPropertySet<T extends Model> extends QueryPropertySet<Grouper<T>> {
15
- protected newProperty(): GrouperProperty<Model>;
16
- protected merge(...args: any[]): any;
17
- }
package/query/index.d.ts DELETED
@@ -1,8 +0,0 @@
1
- export { Filter, FilterNormalized, filterBy, filterMerge, filterNormalize, filterIsNormnalized, FilterOp, FilterOpMap, FilterCustom, FilterCustomMatcher, filterSimplify } from "./filter";
2
- export { Grouper, groupBy, grouperMerge } from "./grouper";
3
- export { Sorter, SorterNormalized, sortBy, sorterMerge, sorterNormalize, SortDir, SortDirection, SortDirExtra } from "./sorter";
4
- export { Slimer, slimBy, slimerMerge } from "./slimer";
5
- export { Slice, sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq } from "./slice";
6
- export { pathGetterCompile } from "./path";
7
- export { Query, QueryWithSlice, QueryResult, querySubject, QuerySubject } from "./query";
8
- export { queryExecutor, QueryExecutor } from "./executor";
package/query/path.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export type PathGetter<T = any, R = any> = (obj: T) => R[];
2
- export declare function pathGetterCompile(path: string): PathGetter;
@@ -1,25 +0,0 @@
1
- import { BehaviorSubject, Observable } from "rxjs";
2
- import type { DataProvider } from "../provider";
3
- export declare abstract class QueryProperty<I, O> extends BehaviorSubject<O | undefined> {
4
- #private;
5
- protected readonly provider: DataProvider<any>;
6
- constructor(provider: DataProvider<any>);
7
- set(value?: I | O): void;
8
- update(value?: I | O): void;
9
- del(): void;
10
- /**
11
- * Merge values and emit when changed (dont change original values)
12
- */
13
- protected abstract merge(a?: O, b?: O): O | undefined;
14
- protected abstract norm(a: I | O): O | undefined;
15
- }
16
- export declare abstract class QueryPropertySet<O> extends Observable<O> {
17
- #private;
18
- protected readonly provider: DataProvider<any>;
19
- constructor(provider: DataProvider<any>, ...names: string[]);
20
- protected abstract newProperty(): QueryProperty<any, any>;
21
- protected abstract merge(...args: any[]): any | undefined;
22
- }
23
- export type QueryPropertySetOf<T, P, N extends string[]> = T & {
24
- [K in N[number]]: P;
25
- };
package/query/query.d.ts DELETED
@@ -1,31 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { type DeepReadonly } from "@ngutil/common";
3
- import { type Model } from "../model";
4
- import type { DataProvider } from "../provider";
5
- import { type FilterNormalized, FilterProperty, FilterPropertySet } from "./filter";
6
- import { type GrouperNormalized, GrouperProperty, GrouperPropertySet } from "./grouper";
7
- import { type QueryPropertySetOf } from "./query-property";
8
- import { type Slice } from "./slice";
9
- import { type SlimerNormalized, SlimerProperty, SlimerPropertySet } from "./slimer";
10
- import { type SorterNormalized, SorterProperty, SorterPropertySet } from "./sorter";
11
- export interface Query {
12
- filter?: DeepReadonly<FilterNormalized>;
13
- sorter?: DeepReadonly<SorterNormalized>;
14
- slimer?: DeepReadonly<SlimerNormalized>;
15
- grouper?: DeepReadonly<GrouperNormalized>;
16
- }
17
- export interface QueryWithSlice<T extends Model> extends Query {
18
- slice: DeepReadonly<Slice>;
19
- }
20
- export interface QueryResult<T extends Model> {
21
- items: readonly T[];
22
- total?: number;
23
- groups?: any[];
24
- }
25
- export interface QuerySubject<T extends Model, N extends string[]> extends Observable<Query> {
26
- readonly filter: QueryPropertySetOf<FilterPropertySet<T>, FilterProperty<T>, N>;
27
- readonly sorter: QueryPropertySetOf<SorterPropertySet, SorterProperty<T>, N>;
28
- readonly slimer: QueryPropertySetOf<SlimerPropertySet<T>, SlimerProperty<T>, N>;
29
- readonly grouper: QueryPropertySetOf<GrouperPropertySet<T>, GrouperProperty<T>, N>;
30
- }
31
- export declare function querySubject<T extends Model, N extends string[]>(provider: DataProvider<T>, ...names: N): QuerySubject<T, N>;
package/query/slice.d.ts DELETED
@@ -1,32 +0,0 @@
1
- import { ListRange } from "@angular/cdk/collections";
2
- /**
3
- * @example
4
- * ```ts
5
- * {start: 0, end: 0} // empty range
6
- * {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]
7
- * ```
8
- */
9
- export interface Slice extends ListRange {
10
- /**
11
- * Start of slice, exact index of item in list
12
- */
13
- readonly start: number;
14
- /**
15
- * End of slice, not include end index of item in list
16
- */
17
- readonly end: number;
18
- readonly pageSize?: number;
19
- }
20
- export declare function sliceMerge(...slices: Slice[]): Slice | undefined;
21
- /**
22
- * Apply slice to array, and force the result length to equal with Slice length,
23
- * so fill array with undefined if not enought elements
24
- */
25
- export declare function sliceApply(slice: Slice, array: readonly any[]): any[];
26
- /**
27
- * @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`
28
- */
29
- export declare function sliceToPages(slice: Slice): number[];
30
- export declare function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[];
31
- export declare function sliceClamp(slice: Slice, constraint: Slice): Slice;
32
- export declare function sliceEq(a: Slice, b: Slice): boolean;
package/query/slimer.d.ts DELETED
@@ -1,28 +0,0 @@
1
- import { Model } from "../model";
2
- import { QueryProperty, QueryPropertySet } from "./query-property";
3
- /**
4
- * @exmaple
5
- * ```ts
6
- * [
7
- * "field_name",
8
- * {"child_name": ["child_field_name"]},
9
- * {"children": ["children_field_name", {"$type": Article, slimer: ["id", "title"]}]},
10
- * {"$type": Employee, slimer: ["name"]}.
11
- * {"$filter": Filter<T, F>}
12
- * ]
13
- * ```
14
- */
15
- export type Slimer<T extends Model> = any;
16
- export type SlimerNormalized = any;
17
- export type SlimerFn<T> = (item: T) => T;
18
- export declare function slimBy<T extends Model>(slimer: Slimer<T>): void;
19
- export declare function slimerNormalize<T extends Model>(slimer: Slimer<T>): SlimerNormalized;
20
- export declare function slimerMerge<T extends Model>(...slimers: Slimer<T>): any;
21
- export declare class SlimerProperty<T extends Model> extends QueryProperty<Slimer<T>, SlimerNormalized> {
22
- protected norm(a: any): any;
23
- protected merge(a?: any, b?: any): any;
24
- }
25
- export declare class SlimerPropertySet<T extends Model> extends QueryPropertySet<Slimer<T>> {
26
- protected newProperty(): SlimerProperty<Model>;
27
- protected merge(...args: any[]): any;
28
- }
package/query/sorter.d.ts DELETED
@@ -1,55 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { Model } from "../model";
3
- import { QueryProperty, QueryPropertySet } from "./query-property";
4
- export type SorterFn<T = any> = (a: T, b: T) => number;
5
- export declare const enum SortDirection {
6
- Asc = "asc",
7
- Desc = "desc"
8
- }
9
- export type SortDir = SortDirection.Asc | SortDirection.Desc | "asc" | "desc";
10
- export type SortDirExtra = {
11
- dir: SortDir;
12
- emptyFirst: boolean;
13
- };
14
- export type Sorter<T extends Model> = Array<{
15
- [key: string]: SortDir | SortDirExtra | NormalizedEntry | undefined;
16
- }>;
17
- type NormalizedEntry = {
18
- path: string;
19
- isAsc: boolean;
20
- emptyFirst: boolean;
21
- remove?: boolean;
22
- };
23
- export type SorterNormalized = Array<NormalizedEntry>;
24
- /**
25
- * @example
26
- *```ts
27
- * items.toSorted(sortBy([{"author.name": "asc"}]))
28
- * ```
29
- */
30
- export declare function sortBy<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterFn<T>;
31
- /**
32
- * Normalize sorter definition
33
- *
34
- * @example
35
- * ```ts
36
- * normalizeSorter([{id: "asc"}]) -> [{path: "id", isAsc: true, emptyFirst: true}]
37
- * normalizeSorter([{id: {dir: "desc", emptyFirst: false}}]) -> [{path: "id", isAsc: false, emptyFirst: false}]
38
- * ```
39
- */
40
- export declare function sorterNormalize<T extends Model>(sorters: Sorter<T> | SorterNormalized): SorterNormalized;
41
- export declare function sorterIsNormalized(sorter: any): sorter is SorterNormalized;
42
- export declare function compare(a: any, b: any, emptyFirst: boolean): number;
43
- export declare function sorterMerge(...sorters: (SorterNormalized | undefined | null)[]): SorterNormalized | undefined;
44
- export declare class SorterProperty<T extends Model> extends QueryProperty<Sorter<T>, SorterNormalized> {
45
- protected norm(a: Sorter<T>): SorterNormalized | undefined;
46
- protected merge(a?: SorterNormalized, b?: SorterNormalized): SorterNormalized | undefined;
47
- }
48
- export declare class SorterPropertySet extends QueryPropertySet<SorterNormalized> {
49
- of(name: string): Observable<NormalizedEntry | undefined>;
50
- isAsc(name: string): Observable<boolean | undefined>;
51
- isDesc(name: string): Observable<boolean | undefined>;
52
- protected newProperty(): SorterProperty<Model>;
53
- protected merge(...args: any[]): SorterNormalized | undefined;
54
- }
55
- export {};
package/source/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export { DataSource } from "./source";
2
- export { DataSourceProxy, DataSourceProxyBusy, DataSourceProxyFilter, DataSourceProxyGrouper, DataSourceProxySlimer, DataSourceProxySorter, DataSourceProxyInput } from "./proxy.directive";
@@ -1,92 +0,0 @@
1
- import { DataSource as CdkDataSource, CollectionViewer } from "@angular/cdk/collections";
2
- import { OnDestroy } from "@angular/core";
3
- import { Observable } from "rxjs";
4
- import { ConnectProtocol } from "@ngutil/common";
5
- import { Model } from "../model";
6
- import { DataProvider } from "../provider/provider";
7
- import { Filter, Grouper, Slimer, Sorter } from "../query";
8
- import { DataSource } from "./source";
9
- import * as i0 from "@angular/core";
10
- export type DataSourceProxyInput<T extends Model> = DataSourceProxy<T> | DataSource<T> | DataProvider<T>;
11
- /**
12
- * @example
13
- * ```html
14
- * <table [nuDataSource]="..." [filter]="{isActive: true}" [sorter]="[{name: 'asc'}]"></table>
15
- * ```
16
- *
17
- * ```ts
18
- * @Component({
19
- * template: `<table [nuDataSource]="users$"></table>`
20
- * })
21
- * class UserTable {
22
- * readonly userService = inject(UserService)
23
- * readonly users$ = UserService.all()
24
- * }
25
- * ```
26
- *
27
- * ```ts
28
- * @Component({
29
- * selector: "table.my-table",
30
- * template: `
31
- * <cdk-virtual-scroll-viewport itemSize="50" class="example-viewport">
32
- * <div *cdkVirtualFor="let item of dataSource" class="example-item">{{item}}</div>
33
- * </cdk-virtual-scroll-viewport>
34
- * `
35
- * })
36
- * class TableComponent {
37
- * readonly dataSource = inject(DataSourceProxy)
38
- * }
39
- * ```
40
- */
41
- export declare class DataSourceProxy<T extends Model> extends CdkDataSource<T | undefined> implements OnDestroy, ConnectProtocol {
42
- #private;
43
- set value(value: DataSourceProxyInput<T>);
44
- readonly value$: Observable<DataSource<T>>;
45
- readonly query$: Observable<import("../query").QuerySubject<T, ["normal", "forced"]>>;
46
- readonly items$: Observable<import("@ngutil/data").PartialCollection<T>>;
47
- readonly isBusy$: Observable<boolean>;
48
- readonly isEmpty$: Observable<boolean>;
49
- connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]>;
50
- disconnect(collectionViewer: CollectionViewer): void;
51
- ngOnDestroy(): void;
52
- static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxy<any>, never>;
53
- static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxy<any>, "[nuDataSource]", ["nuDataSource"], { "value": { "alias": "nuDataSource"; "required": true; }; }, {}, never, never, true, never>;
54
- }
55
- export declare class DataSourceProxyFilter<T extends Model, F extends Filter<T>> {
56
- #private;
57
- readonly filter: import("@angular/core").InputSignal<F>;
58
- readonly filter$: Observable<F>;
59
- constructor();
60
- static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxyFilter<any, any>, never>;
61
- static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxyFilter<any, any>, "[nuDataSource][filter]", never, { "filter": { "alias": "filter"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
62
- }
63
- export declare class DataSourceProxySorter<T extends Model, S extends Sorter<T>> {
64
- #private;
65
- readonly sorter: import("@angular/core").InputSignal<S>;
66
- readonly sorter$: Observable<S>;
67
- constructor();
68
- static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxySorter<any, any>, never>;
69
- static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxySorter<any, any>, "[nuDataSource][sorter]", never, { "sorter": { "alias": "sorter"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
70
- }
71
- export declare class DataSourceProxySlimer<T extends Model, S extends Slimer<T>> {
72
- #private;
73
- readonly slimer: import("@angular/core").InputSignal<S>;
74
- readonly slimer$: Observable<S>;
75
- constructor();
76
- static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxySlimer<any, any>, never>;
77
- static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxySlimer<any, any>, "[nuDataSource][slimer]", never, { "slimer": { "alias": "slimer"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
78
- }
79
- export declare class DataSourceProxyGrouper<T extends Model, G extends Grouper<T>> {
80
- #private;
81
- readonly grouper: import("@angular/core").InputSignal<G>;
82
- readonly grouper$: Observable<G>;
83
- constructor();
84
- static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxyGrouper<any, any>, never>;
85
- static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxyGrouper<any, any>, "[nuDataSource][grouper]", never, { "grouper": { "alias": "grouper"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
86
- }
87
- export declare class DataSourceProxyBusy {
88
- #private;
89
- constructor();
90
- static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxyBusy, never>;
91
- static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxyBusy, "[nuDataSource][nuBusy]", never, {}, {}, never, never, true, never>;
92
- }
@@ -1,32 +0,0 @@
1
- import { DataSource as CdkDataSource, CollectionViewer } from "@angular/cdk/collections";
2
- import { BehaviorSubject, Observable } from "rxjs";
3
- import { ConnectProtocol } from "@ngutil/common";
4
- import type { Model, ModelRef } from "../model";
5
- import type { DataProvider } from "../provider/provider";
6
- import type { Filter, Slice } from "../query";
7
- import { type CollectionStore, type PartialCollection } from "../store";
8
- export declare class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {
9
- #private;
10
- readonly provider: DataProvider<T>;
11
- readonly store: CollectionStore<T>;
12
- readonly query$: import("../query").QuerySubject<T, ["normal", "forced"]>;
13
- readonly isBusy$: BehaviorSubject<boolean>;
14
- readonly total$: BehaviorSubject<number | undefined>;
15
- readonly slice$: Observable<Slice>;
16
- readonly reset$: Observable<void>;
17
- readonly items$: Observable<PartialCollection<T>>;
18
- readonly isEmpty$: Observable<boolean>;
19
- constructor(provider: DataProvider<T>, store?: CollectionStore<T>, query$?: import("../query").QuerySubject<T, ["normal", "forced"]>);
20
- setSlice(slice: Slice): this;
21
- setFilter(filter: Partial<Record<"normal" | "forced", Filter<T>>>): this;
22
- updateFilter(filter: Partial<Record<"normal" | "forced", Filter<T>>>): this;
23
- all(): this;
24
- reload(): void;
25
- getItem(ref: ModelRef): Observable<T | undefined>;
26
- watchItem(ref: ModelRef): Observable<T | undefined>;
27
- getItemPosition(ref: ModelRef): Observable<number | undefined>;
28
- watchItemPosition(ref: ModelRef): Observable<number | undefined>;
29
- realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined>;
30
- connect(collectionViewer: CollectionViewer): Observable<PartialCollection<T>>;
31
- disconnect(collectionViewer: CollectionViewer): void;
32
- }
@@ -1,49 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { DeepReadonly } from "@ngutil/common";
3
- import { Model, ModelRefNorm } from "../model";
4
- import { Slice } from "../query";
5
- export type PartialCollection<T> = readonly (T | undefined)[];
6
- export declare abstract class CollectionStore<T extends Model> {
7
- /**
8
- * Update the given slice, and return all items observable
9
- */
10
- abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>;
11
- /**
12
- * @returns `true` when the given slice is available in the cache
13
- */
14
- abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>;
15
- /**
16
- * @returns items by the given slice
17
- */
18
- abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>;
19
- /**
20
- * Get item from collection
21
- */
22
- abstract get(ref: ModelRefNorm): Observable<T | undefined>;
23
- /**
24
- * Get index of item in collection, -1 if not found
25
- */
26
- abstract indexOf(ref: ModelRefNorm): Observable<number>;
27
- /**
28
- * Update item in collection
29
- *
30
- * @returns the updated index, or -1 if not found
31
- */
32
- abstract update(ref: ModelRefNorm, item: T): Observable<number>;
33
- /**
34
- * Update item if exists in collection, or insert at the given position
35
- *
36
- * @param position If positon is negative, insert at the end of collection
37
- * @returns the updated index or index of where to insert
38
- */
39
- abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>;
40
- /**
41
- * Remove item from collection
42
- * @returns the index of deleted item, -1 if not found
43
- */
44
- abstract del(ref: ModelRefNorm): Observable<number>;
45
- /**
46
- * Removes all items from collection
47
- */
48
- abstract clear(): Observable<void>;
49
- }
package/store/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export { CollectionStore, PartialCollection } from "./collection-store";
2
- export { MemoryStore } from "./memory-store";
@@ -1,16 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { Model, ModelRefNorm } from "../model";
3
- import { Slice } from "../query";
4
- import { CollectionStore, PartialCollection } from "./collection-store";
5
- export declare class MemoryStore<T extends Model> extends CollectionStore<T> {
6
- #private;
7
- insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>>;
8
- hasSlice(slice: Slice): Observable<boolean>;
9
- getSlice(slice: Slice): Observable<PartialCollection<T>>;
10
- get(ref: ModelRefNorm): Observable<T | undefined>;
11
- indexOf(ref: ModelRefNorm): Observable<number>;
12
- update(ref: ModelRefNorm, item: T): Observable<number>;
13
- updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>;
14
- del(ref: ModelRefNorm): Observable<number>;
15
- clear(): Observable<void>;
16
- }