@oneteme/jquery-organizer 0.0.6 → 0.0.7

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,8 +1,8 @@
1
- import { EventEmitter, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
1
+ import { EventEmitter, ChangeDetectorRef, OnDestroy } from '@angular/core';
2
2
  import { MatMenuTrigger } from '@angular/material/menu';
3
3
  import { OrganizerConfig, OrganizerButtonEvent, OrganizerSliceState, OrganizerState } from '../models';
4
4
  import * as i0 from "@angular/core";
5
- export declare class OrganizerButtonComponent implements OnInit, OnDestroy {
5
+ export declare class OrganizerButtonComponent implements OnDestroy {
6
6
  private cdr;
7
7
  config: OrganizerConfig;
8
8
  state?: OrganizerState;
@@ -13,9 +13,10 @@ export declare class OrganizerButtonComponent implements OnInit, OnDestroy {
13
13
  private fieldDataCache;
14
14
  private destroy$;
15
15
  private destroyed;
16
+ private sliceRequestId;
17
+ private sliceSubscription?;
16
18
  mainMenuTrigger?: MatMenuTrigger;
17
19
  constructor(cdr: ChangeDetectorRef);
18
- ngOnInit(): void;
19
20
  ngOnDestroy(): void;
20
21
  isFieldVisible(fieldId: string): boolean;
21
22
  fieldsSummary(): string;
@@ -1,4 +1,4 @@
1
- import { OrganizerEvent, OrganizerState } from '@oneteme/jquery-core';
1
+ import { ChartOrganizerEvent, ChartOrganizerState } from '@oneteme/jquery-core';
2
2
  import { OrganizerFieldDef, OrganizerFieldsState, OrganizerGroupByState, OrganizerPanelConfig, OrganizerSliceByState } from './organizer-facade.types';
3
3
  export declare function humanizeKey(key: string): string;
4
4
  export declare class OrganizerFacade<TField extends OrganizerFieldDef = OrganizerFieldDef> {
@@ -8,7 +8,7 @@ export declare class OrganizerFacade<TField extends OrganizerFieldDef = Organize
8
8
  private _panelConfig;
9
9
  private _hiddenStaticKeys;
10
10
  private readonly _events$;
11
- readonly events$: import("rxjs").Observable<OrganizerEvent>;
11
+ readonly events$: import("rxjs").Observable<ChartOrganizerEvent>;
12
12
  get enabled(): boolean;
13
13
  get showFields(): boolean;
14
14
  get showGroupBySection(): boolean;
@@ -41,10 +41,15 @@ export declare class OrganizerFacade<TField extends OrganizerFieldDef = Organize
41
41
  setGroupBy(key: string | null): void;
42
42
  onDynamicSliceKeysChange(keys: string[]): void;
43
43
  isDynamicSliceActive(key: string): boolean;
44
- toOrganizerState(): OrganizerState;
44
+ toOrganizerState(): ChartOrganizerState;
45
45
  destroy(): void;
46
46
  updateHiddenStaticKeys(keys: Set<string>): void;
47
47
  private _refreshDefaultFields;
48
+ /** Première définition de chaque clé dans la config courante. */
49
+ private _definitionsByKey;
50
+ private _staticSliceKeys;
51
+ /** Champs proposables en slice dynamique, hors slices statiques et slices déjà actifs. */
52
+ private _availableForDynamic;
48
53
  private _refreshDynamicSliceMeta;
49
54
  private _computeSliceLabel;
50
55
  private _uniqueByKey;
@@ -1,5 +1,5 @@
1
1
  import { SliceConfig } from '../slice-panel/slice-panel.model';
2
- import { OrganizerConfig } from '@oneteme/jquery-core';
2
+ import { ChartOrganizerConfig } from '@oneteme/jquery-core';
3
3
  export interface OrganizerFieldDef {
4
4
  key: string;
5
5
  header?: string;
@@ -9,7 +9,7 @@ export interface OrganizerFieldDef {
9
9
  sliceable?: boolean;
10
10
  }
11
11
  export interface OrganizerPanelConfig<TField extends OrganizerFieldDef = OrganizerFieldDef> {
12
- config?: OrganizerConfig;
12
+ config?: ChartOrganizerConfig;
13
13
  fields: TField[];
14
14
  sliceConfigs: SliceConfig<any>[];
15
15
  noneLabel?: string;
@@ -6,7 +6,6 @@ export declare class SlicePanelComponent<T = any> implements OnChanges, OnInit {
6
6
  sliceConfigs: SliceConfig<T>[];
7
7
  columns: SliceColumnDef<T>[];
8
8
  data: T[];
9
- lazyData: Map<string, Map<any, any>>;
10
9
  lazyStatus: Map<string, 'idle' | 'loading' | 'loaded' | 'error'>;
11
10
  showToggle: boolean;
12
11
  showCounts: boolean;
@@ -39,6 +38,7 @@ export declare class SlicePanelComponent<T = any> implements OnChanges, OnInit {
39
38
  readonly trackByCategoryKey: (_: number, cat: any) => string;
40
39
  ngOnInit(): void;
41
40
  ngOnChanges(changes: SimpleChanges): void;
41
+ private _hasActiveFilters;
42
42
  get showPanel(): boolean;
43
43
  get slices(): SliceConfig<T>[];
44
44
  get staticSliceCount(): number;
@@ -71,12 +71,17 @@ export declare class SlicePanelComponent<T = any> implements OnChanges, OnInit {
71
71
  private _getPersistentSliceKey;
72
72
  private _getSliceIdentity;
73
73
  private _materializeSlice;
74
+ private _buildCategories;
74
75
  private _buildCategoryFromValue;
76
+ /** Valeurs distinctes (triées, « vide » en dernier) et effectifs, calculés en un seul passage. */
75
77
  private _computeDistinctValues;
78
+ private _columnsRef?;
79
+ private _columnIndex;
80
+ private _column;
76
81
  private _getLazyAwareValue;
77
82
  private _rebuildCache;
78
83
  private _refreshDynamicSlices;
79
84
  private _scrollSliceTitleIntoView;
80
85
  static ɵfac: i0.ɵɵFactoryDeclaration<SlicePanelComponent<any>, never>;
81
- static ɵcmp: i0.ɵɵComponentDeclaration<SlicePanelComponent<any>, "slice-panel", never, { "sliceConfigs": { "alias": "sliceConfigs"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "data": { "alias": "data"; "required": false; }; "lazyData": { "alias": "lazyData"; "required": false; }; "lazyStatus": { "alias": "lazyStatus"; "required": false; }; "showToggle": { "alias": "showToggle"; "required": false; }; "showCounts": { "alias": "showCounts"; "required": false; }; "collapsedByDefault": { "alias": "collapsedByDefault"; "required": false; }; "alwaysShow": { "alias": "alwaysShow"; "required": false; }; }, { "filterChange": "filterChange"; "activeKeysChange": "activeKeysChange"; "dynamicSliceKeysChange": "dynamicSliceKeysChange"; "collapsedChange": "collapsedChange"; }, never, never, true, never>;
86
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlicePanelComponent<any>, "slice-panel", never, { "sliceConfigs": { "alias": "sliceConfigs"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "data": { "alias": "data"; "required": false; }; "lazyStatus": { "alias": "lazyStatus"; "required": false; }; "showToggle": { "alias": "showToggle"; "required": false; }; "showCounts": { "alias": "showCounts"; "required": false; }; "collapsedByDefault": { "alias": "collapsedByDefault"; "required": false; }; "alwaysShow": { "alias": "alwaysShow"; "required": false; }; }, { "filterChange": "filterChange"; "activeKeysChange": "activeKeysChange"; "dynamicSliceKeysChange": "dynamicSliceKeysChange"; "collapsedChange": "collapsedChange"; }, never, never, true, never>;
82
87
  }
@@ -1,9 +1,10 @@
1
1
  import { DataProvider } from '@oneteme/jquery-core';
2
- import { Observable } from 'rxjs';
3
2
  export interface SliceCategory<T = any> {
4
3
  key: string;
5
4
  label: string;
6
5
  filter?: (row: T) => boolean;
6
+ /** Effectif précalculé (rempli par le panneau pour les catégories dérivées d'une colonne). */
7
+ count?: number;
7
8
  }
8
9
  export interface SliceConfig<T = any> {
9
10
  title?: string;
@@ -19,7 +20,6 @@ export interface SliceColumnDef<T = any> {
19
20
  header?: string;
20
21
  icon?: string;
21
22
  value?: DataProvider<any>;
22
- lazy?: {
23
- fetchFn: () => Observable<any[]>;
24
- };
23
+ /** Colonne absente de la requête de base : ses valeurs sont dans les lignes une fois chargée (`lazyStatus`). */
24
+ lazy?: true;
25
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneteme/jquery-organizer",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Independent Organizer Button component library - decentralized organizer management for charts, tables",
5
5
  "homepage": "https://github.com/oneteme/jquery-charts",
6
6
  "bugs": "https://github.com/oneteme/jquery-charts/issues",
@@ -13,7 +13,7 @@
13
13
  "@angular/core": ">=16.1.0",
14
14
  "@angular/material": "^16.1.0",
15
15
  "@angular/cdk": "^16.1.0",
16
- "@oneteme/jquery-core": "^0.0.37"
16
+ "@oneteme/jquery-core": "^0.0.38"
17
17
  },
18
18
  "dependencies": {
19
19
  "tslib": "^2.3.0"
package/public-api.d.ts CHANGED
@@ -10,4 +10,3 @@ export { buildOrganizerChartBinding, chartConfigToOrganizer, chartConfigToState,
10
10
  export { OrganizerFacade, humanizeKey } from './lib/organizer-facade/organizer-facade';
11
11
  export { OrganizerFieldDef, OrganizerPanelConfig, OrganizerFieldsState, OrganizerGroupByState, OrganizerSliceByState, } from './lib/organizer-facade/organizer-facade.types';
12
12
  export { GroupByManager } from './lib/group-by-manager/group-by-manager';
13
- export { LazyFieldManager, LazyFieldDef, LazyFieldCallbacks, LAZY_FIELD_LOADING_VALUE, LAZY_FIELD_ERROR_VALUE, } from './lib/lazy-field-manager/lazy-field-manager';
@@ -1,91 +0,0 @@
1
- import { Subject, take, takeUntil } from 'rxjs';
2
- export const LAZY_FIELD_LOADING_VALUE = '__lazy_loading__';
3
- export const LAZY_FIELD_ERROR_VALUE = '__lazy_error__';
4
- export class LazyFieldManager {
5
- constructor() {
6
- this._status = new Map();
7
- this._data = new Map();
8
- this._cancels = new Map();
9
- }
10
- get status() {
11
- return this._status;
12
- }
13
- get data() {
14
- return this._data;
15
- }
16
- getStatus(key) {
17
- return this._status.get(key) ?? 'idle';
18
- }
19
- getRenderType(rowValue) {
20
- if (rowValue === LAZY_FIELD_LOADING_VALUE)
21
- return 'loading';
22
- if (rowValue === LAZY_FIELD_ERROR_VALUE)
23
- return 'error';
24
- return 'value';
25
- }
26
- cancelAll() {
27
- this._cancels.forEach(s => { s.next(); s.complete(); });
28
- this._cancels.clear();
29
- this._status = new Map();
30
- this._data = new Map();
31
- }
32
- retry(field, resolvedData, callbacks) {
33
- const k = field.key;
34
- const prev = this._cancels.get(k);
35
- if (prev) {
36
- prev.next();
37
- prev.complete();
38
- }
39
- this._cancels.delete(k);
40
- const newStatus = new Map(this._status);
41
- newStatus.delete(k);
42
- this._status = newStatus;
43
- const newData = new Map(this._data);
44
- newData.delete(k);
45
- this._data = newData;
46
- this.fetch(field, resolvedData, callbacks);
47
- }
48
- fetch(field, resolvedData, callbacks) {
49
- if (!field.lazy)
50
- return;
51
- const k = field.key;
52
- if (this._status.get(k) === 'loading')
53
- return;
54
- const prev = this._cancels.get(k);
55
- if (prev) {
56
- prev.next();
57
- prev.complete();
58
- }
59
- const cancel$ = new Subject();
60
- this._cancels.set(k, cancel$);
61
- const newStatus = new Map(this._status);
62
- newStatus.set(k, 'loading');
63
- this._status = newStatus;
64
- callbacks.onRefresh();
65
- field.lazy.fetchFn().pipe(take(1), takeUntil(cancel$)).subscribe({
66
- next: (values) => {
67
- const rowMap = new Map();
68
- values.forEach((value, i) => {
69
- if (i < resolvedData.length)
70
- rowMap.set(resolvedData[i], value);
71
- });
72
- const newData = new Map(this._data);
73
- newData.set(k, rowMap);
74
- this._data = newData;
75
- const newStatus2 = new Map(this._status);
76
- newStatus2.set(k, 'loaded');
77
- this._status = newStatus2;
78
- callbacks.onRefresh();
79
- callbacks.onMarkForCheck();
80
- },
81
- error: () => {
82
- const newStatusErr = new Map(this._status);
83
- newStatusErr.set(k, 'error');
84
- this._status = newStatusErr;
85
- callbacks.onRefresh();
86
- callbacks.onMarkForCheck();
87
- },
88
- });
89
- }
90
- }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1maWVsZC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvbGF6eS1maWVsZC1tYW5hZ2VyL2xhenktZmllbGQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFhNUQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsa0JBQWtCLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUVVLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBbUQsQ0FBQztRQUNyRSxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7UUFDekMsYUFBUSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBeUZ0RCxDQUFDO0lBdkZDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWE7UUFDekIsSUFBSSxRQUFRLEtBQUssd0JBQXdCO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDNUQsSUFBSSxRQUFRLEtBQUssc0JBQXNCO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDeEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FB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QU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNsRSxDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztnQkFFckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7Z0JBRTFCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEIsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzdCLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNWLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO2dCQUU1QixTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF6eUZpZWxkRGVmIHtcbiAga2V5OiBzdHJpbmc7XG4gIGxhenk/OiB7XG4gICAgZmV0Y2hGbjogKCkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XG4gIH07XG59XG5leHBvcnQgaW50ZXJmYWNlIExhenlGaWVsZENhbGxiYWNrcyB7XG4gIG9uUmVmcmVzaCgpOiB2b2lkO1xuICBvbk1hcmtGb3JDaGVjaygpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTEFaWV9GSUVMRF9MT0FESU5HX1ZBTFVFID0gJ19fbGF6eV9sb2FkaW5nX18nO1xuZXhwb3J0IGNvbnN0IExBWllfRklFTERfRVJST1JfVkFMVUUgPSAnX19sYXp5X2Vycm9yX18nO1xuXG5leHBvcnQgY2xhc3MgTGF6eUZpZWxkTWFuYWdlcjxURmllbGQgZXh0ZW5kcyBMYXp5RmllbGREZWYgPSBMYXp5RmllbGREZWY+IHtcblxuICBwcml2YXRlIF9zdGF0dXMgPSBuZXcgTWFwPHN0cmluZywgJ2lkbGUnIHwgJ2xvYWRpbmcnIHwgJ2xvYWRlZCcgfCAnZXJyb3InPigpO1xuICBwcml2YXRlIF9kYXRhID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxhbnksIGFueT4+KCk7XG4gIHByaXZhdGUgX2NhbmNlbHMgPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDx2b2lkPj4oKTtcblxuICBnZXQgc3RhdHVzKCk6IE1hcDxzdHJpbmcsICdpZGxlJyB8ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgJ2Vycm9yJz4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XG4gIH1cblxuICBnZXQgZGF0YSgpOiBNYXA8c3RyaW5nLCBNYXA8YW55LCBhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBnZXRTdGF0dXMoa2V5OiBzdHJpbmcpOiAnaWRsZScgfCAnbG9hZGluZycgfCAnbG9hZGVkJyB8ICdlcnJvcicge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXMuZ2V0KGtleSkgPz8gJ2lkbGUnO1xuICB9XG5cbiAgZ2V0UmVuZGVyVHlwZShyb3dWYWx1ZTogYW55KTogJ2xvYWRpbmcnIHwgJ2Vycm9yJyB8ICd2YWx1ZScge1xuICAgIGlmIChyb3dWYWx1ZSA9PT0gTEFaWV9GSUVMRF9MT0FESU5HX1ZBTFVFKSByZXR1cm4gJ2xvYWRpbmcnO1xuICAgIGlmIChyb3dWYWx1ZSA9PT0gTEFaWV9GSUVMRF9FUlJPUl9WQUxVRSkgcmV0dXJuICdlcnJvcic7XG4gICAgcmV0dXJuICd2YWx1ZSc7XG4gIH1cblxuICBjYW5jZWxBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FuY2Vscy5mb3JFYWNoKHMgPT4geyBzLm5leHQoKTsgcy5jb21wbGV0ZSgpOyB9KTtcbiAgICB0aGlzLl9jYW5jZWxzLmNsZWFyKCk7XG4gICAgdGhpcy5fc3RhdHVzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgTWFwKCk7XG4gIH1cblxuICByZXRyeTxUUm93PihmaWVsZDogVEZpZWxkLCByZXNvbHZlZERhdGE6IFRSb3dbXSwgY2FsbGJhY2tzOiBMYXp5RmllbGRDYWxsYmFja3MpOiB2b2lkIHtcbiAgICBjb25zdCBrID0gZmllbGQua2V5O1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLl9jYW5jZWxzLmdldChrKTtcbiAgICBpZiAocHJldikgeyBwcmV2Lm5leHQoKTsgcHJldi5jb21wbGV0ZSgpOyB9XG4gICAgdGhpcy5fY2FuY2Vscy5kZWxldGUoayk7XG5cbiAgICBjb25zdCBuZXdTdGF0dXMgPSBuZXcgTWFwKHRoaXMuX3N0YXR1cyk7XG4gICAgbmV3U3RhdHVzLmRlbGV0ZShrKTtcbiAgICB0aGlzLl9zdGF0dXMgPSBuZXdTdGF0dXM7XG5cbiAgICBjb25zdCBuZXdEYXRhID0gbmV3IE1hcCh0aGlzLl9kYXRhKTtcbiAgICBuZXdEYXRhLmRlbGV0ZShrKTtcbiAgICB0aGlzLl9kYXRhID0gbmV3RGF0YTtcblxuICAgIHRoaXMuZmV0Y2goZmllbGQsIHJlc29sdmVkRGF0YSwgY2FsbGJhY2tzKTtcbiAgfVxuXG4gIGZldGNoPFRSb3c+KGZpZWxkOiBURmllbGQsIHJlc29sdmVkRGF0YTogVFJvd1tdLCBjYWxsYmFja3M6IExhenlGaWVsZENhbGxiYWNrcyk6IHZvaWQge1xuICAgIGlmICghZmllbGQubGF6eSkgcmV0dXJuO1xuICAgIGNvbnN0IGsgPSBmaWVsZC5rZXk7XG4gICAgaWYgKHRoaXMuX3N0YXR1cy5nZXQoaykgPT09ICdsb2FkaW5nJykgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJldiA9IHRoaXMuX2NhbmNlbHMuZ2V0KGspO1xuICAgIGlmIChwcmV2KSB7IHByZXYubmV4dCgpOyBwcmV2LmNvbXBsZXRlKCk7IH1cbiAgICBjb25zdCBjYW5jZWwkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICB0aGlzLl9jYW5jZWxzLnNldChrLCBjYW5jZWwkKTtcblxuICAgIGNvbnN0IG5ld1N0YXR1cyA9IG5ldyBNYXAodGhpcy5fc3RhdHVzKTtcbiAgICBuZXdTdGF0dXMuc2V0KGssICdsb2FkaW5nJyk7XG4gICAgdGhpcy5fc3RhdHVzID0gbmV3U3RhdHVzO1xuICAgIGNhbGxiYWNrcy5vblJlZnJlc2goKTtcblxuICAgIGZpZWxkLmxhenkuZmV0Y2hGbigpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgdGFrZVVudGlsKGNhbmNlbCQpLFxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICh2YWx1ZXM6IGFueVtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvd01hcCA9IG5ldyBNYXA8YW55LCBhbnk+KCk7XG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgaSkgPT4ge1xuICAgICAgICAgIGlmIChpIDwgcmVzb2x2ZWREYXRhLmxlbmd0aCkgcm93TWFwLnNldChyZXNvbHZlZERhdGFbaV0sIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgTWFwKHRoaXMuX2RhdGEpO1xuICAgICAgICBuZXdEYXRhLnNldChrLCByb3dNYXApO1xuICAgICAgICB0aGlzLl9kYXRhID0gbmV3RGF0YTtcblxuICAgICAgICBjb25zdCBuZXdTdGF0dXMyID0gbmV3IE1hcCh0aGlzLl9zdGF0dXMpO1xuICAgICAgICBuZXdTdGF0dXMyLnNldChrLCAnbG9hZGVkJyk7XG4gICAgICAgIHRoaXMuX3N0YXR1cyA9IG5ld1N0YXR1czI7XG5cbiAgICAgICAgY2FsbGJhY2tzLm9uUmVmcmVzaCgpO1xuICAgICAgICBjYWxsYmFja3Mub25NYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXNFcnIgPSBuZXcgTWFwKHRoaXMuX3N0YXR1cyk7XG4gICAgICAgIG5ld1N0YXR1c0Vyci5zZXQoaywgJ2Vycm9yJyk7XG4gICAgICAgIHRoaXMuX3N0YXR1cyA9IG5ld1N0YXR1c0VycjtcblxuICAgICAgICBjYWxsYmFja3Mub25SZWZyZXNoKCk7XG4gICAgICAgIGNhbGxiYWNrcy5vbk1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,25 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- export interface LazyFieldDef {
3
- key: string;
4
- lazy?: {
5
- fetchFn: () => Observable<any[]>;
6
- };
7
- }
8
- export interface LazyFieldCallbacks {
9
- onRefresh(): void;
10
- onMarkForCheck(): void;
11
- }
12
- export declare const LAZY_FIELD_LOADING_VALUE = "__lazy_loading__";
13
- export declare const LAZY_FIELD_ERROR_VALUE = "__lazy_error__";
14
- export declare class LazyFieldManager<TField extends LazyFieldDef = LazyFieldDef> {
15
- private _status;
16
- private _data;
17
- private _cancels;
18
- get status(): Map<string, 'idle' | 'loading' | 'loaded' | 'error'>;
19
- get data(): Map<string, Map<any, any>>;
20
- getStatus(key: string): 'idle' | 'loading' | 'loaded' | 'error';
21
- getRenderType(rowValue: any): 'loading' | 'error' | 'value';
22
- cancelAll(): void;
23
- retry<TRow>(field: TField, resolvedData: TRow[], callbacks: LazyFieldCallbacks): void;
24
- fetch<TRow>(field: TField, resolvedData: TRow[], callbacks: LazyFieldCallbacks): void;
25
- }