@oneteme/jquery-organizer 0.0.5 → 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,9 +1,10 @@
1
+ import { OrganizerTemplate } from './organizer-config.interface';
1
2
  import { OrganizerChartItem, OrganizerChartSection } from './organizer-chart-adapter';
2
3
  export interface OrganizerChartConfig {
3
4
  groups?: OrganizerChartSection;
4
5
  indicators?: OrganizerChartSection;
5
6
  filters?: OrganizerChartSection;
6
- templates?: any[];
7
+ templates?: OrganizerTemplate[];
7
8
  }
8
9
  export declare enum SyntheticItemKeys {
9
10
  EMPTY = "__empty__",
@@ -24,6 +25,7 @@ export declare enum OrganizerButtonEventType {
24
25
  GROUP_BY_SELECTED = "groupBySelected",
25
26
  TEMPLATE_SELECTED = "templateSelected",
26
27
  SLICE_SELECTED = "sliceSelected",
28
+ CHART_TYPE_SELECTED = "chartTypeSelected",
27
29
  VIEW_SWITCHED = "viewSwitched"
28
30
  }
29
31
  export declare function getGroupItems(config: OrganizerChartConfig | null | undefined): OrganizerChartItem[];
@@ -34,9 +34,16 @@ export interface OrganizerViewSlice {
34
34
  label: string;
35
35
  icon?: string;
36
36
  }
37
+ export interface OrganizerChartType {
38
+ id: string;
39
+ label: string;
40
+ icon?: string;
41
+ disabled?: boolean;
42
+ }
37
43
  export interface OrganizerTemplate {
38
44
  id: string;
39
45
  label: string;
46
+ description?: string;
40
47
  icon?: string;
41
48
  xField?: string;
42
49
  yField?: string;
@@ -61,6 +68,7 @@ export interface OrganizerConfig {
61
68
  groups?: OrganizerViewGroup[];
62
69
  slices?: OrganizerViewSlice[];
63
70
  templates?: OrganizerTemplate[];
71
+ chartTypes?: OrganizerChartType[];
64
72
  onFetchFieldData?: (fieldId: string) => Promise<string[] | Record<string, any>[]>;
65
73
  onFetchSliceData?: (filterKey: string) => Observable<any[]> | Promise<any[]>;
66
74
  onSliceClick?: () => void;
@@ -98,6 +106,7 @@ export interface OrganizerSliceState {
98
106
  export interface OrganizerState {
99
107
  viewMode?: 'chart' | 'table';
100
108
  visibleFields?: string[];
109
+ selectedChartType?: string;
101
110
  selectedX?: string;
102
111
  selectedY?: string;
103
112
  selectedYAggregate?: string;
@@ -106,7 +115,7 @@ export interface OrganizerState {
106
115
  selectedTemplate?: string;
107
116
  }
108
117
  export interface OrganizerButtonEvent {
109
- type: 'fieldToggled' | 'xSelected' | 'ySelected' | 'groupBySelected' | 'templateSelected' | 'sliceSelected' | 'reset' | 'viewSwitched';
118
+ type: 'fieldToggled' | 'xSelected' | 'ySelected' | 'groupBySelected' | 'templateSelected' | 'sliceSelected' | 'chartTypeSelected' | 'reset' | 'viewSwitched';
110
119
  state: OrganizerState;
111
120
  source?: 'user' | 'api';
112
121
  resolvedYUnit?: string | UnitConfig;
@@ -1,4 +1,5 @@
1
1
  import { OrganizerConfig, OrganizerState, OrganizerTemplate, OrganizerYField } from './organizer-config.interface';
2
+ type OrganizerStateConfig = Pick<OrganizerConfig, 'xFields' | 'yFields' | 'groups' | 'slices' | 'templates' | 'chartTypes'>;
2
3
  export interface OrganizerYIndicator {
3
4
  id: string;
4
5
  label: string;
@@ -6,6 +7,7 @@ export interface OrganizerYIndicator {
6
7
  }
7
8
  export declare function buildYFields(indicators: OrganizerYIndicator[]): OrganizerYField[];
8
9
  export declare function resolveYKey(selectedY: string | undefined, selectedYAggregate: string | undefined): string | undefined;
9
- export declare function normalizeOrganizerState(state: OrganizerState | undefined, config: Pick<OrganizerConfig, 'xFields' | 'yFields' | 'groups' | 'slices' | 'templates'>): OrganizerState;
10
- export declare function normalizeTemplateToState(template: OrganizerTemplate, currentState: OrganizerState | undefined, config: Pick<OrganizerConfig, 'xFields' | 'yFields' | 'groups' | 'slices' | 'templates'>): OrganizerState;
11
- export declare function resolveMatchingTemplateId(templates: OrganizerTemplate[] | undefined, state: OrganizerState | undefined, config: Pick<OrganizerConfig, 'xFields' | 'yFields' | 'groups' | 'slices' | 'templates'>): string | undefined;
10
+ export declare function normalizeOrganizerState(state: OrganizerState | undefined, config: OrganizerStateConfig): OrganizerState;
11
+ export declare function normalizeTemplateToState(template: OrganizerTemplate, currentState: OrganizerState | undefined, config: OrganizerStateConfig): OrganizerState;
12
+ export declare function resolveMatchingTemplateId(templates: OrganizerTemplate[] | undefined, state: OrganizerState | undefined, config: OrganizerStateConfig): string | undefined;
13
+ export {};
@@ -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;
@@ -12,9 +12,11 @@ export declare class OrganizerButtonComponent implements OnInit, OnDestroy {
12
12
  loadingFieldId?: string;
13
13
  private fieldDataCache;
14
14
  private destroy$;
15
+ private destroyed;
16
+ private sliceRequestId;
17
+ private sliceSubscription?;
15
18
  mainMenuTrigger?: MatMenuTrigger;
16
19
  constructor(cdr: ChangeDetectorRef);
17
- ngOnInit(): void;
18
20
  ngOnDestroy(): void;
19
21
  isFieldVisible(fieldId: string): boolean;
20
22
  fieldsSummary(): string;
@@ -23,6 +25,7 @@ export declare class OrganizerButtonComponent implements OnInit, OnDestroy {
23
25
  onYFieldSelect(fieldId: string): void;
24
26
  onYAggregateSelect(yFieldId: string, aggregateId: string): void;
25
27
  onGroupBySelect(groupId: string): void;
28
+ onChartTypeSelect(chartType: string): void;
26
29
  onTemplateSelect(templateId: string): void;
27
30
  onSliceClick(sliceId?: string): void;
28
31
  private syncSliceState;
@@ -48,12 +51,15 @@ export declare class OrganizerButtonComponent implements OnInit, OnDestroy {
48
51
  activeXLabel(): string;
49
52
  activeYLabel(): string;
50
53
  activeGroupByLabel(): string;
54
+ activeChartTypeLabel(): string;
51
55
  activeSlicesLabel(): string;
52
56
  activeTemplateLabel(): string;
53
57
  hasChartFields(): boolean;
58
+ hasChartTypes(): boolean;
54
59
  hasTableFields(): boolean;
55
60
  isYActive(yFieldId: string): boolean;
56
61
  isYAggregateActive(yFieldId: string, aggregateId: string): boolean;
62
+ isChartTypeActive(chartType: string): boolean;
57
63
  private emitChange;
58
64
  static ɵfac: i0.ɵɵFactoryDeclaration<OrganizerButtonComponent, never>;
59
65
  static ɵcmp: i0.ɵɵComponentDeclaration<OrganizerButtonComponent, "organizer-button", never, { "config": { "alias": "config"; "required": false; }; "state": { "alias": "state"; "required": false; }; "hideMenuValues": { "alias": "hideMenuValues"; "required": false; }; }, { "viewChange": "viewChange"; "sliceStateChange": "sliceStateChange"; }, never, never, true, never>;
@@ -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.5",
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.36"
16
+ "@oneteme/jquery-core": "^0.0.38"
17
17
  },
18
18
  "dependencies": {
19
19
  "tslib": "^2.3.0"
package/public-api.d.ts CHANGED
@@ -4,9 +4,9 @@ export * from './lib/slice-panel/slice-panel.component';
4
4
  export * from './lib/slice-panel/slice-panel.model';
5
5
  export * from './lib/models/organizer-config.interface';
6
6
  export * from './lib/models/organizer-menu.model';
7
+ export { OrganizerButtonEventType } from './lib/models/organizer-chart-config';
7
8
  export { buildYFields, resolveYKey, OrganizerYIndicator } from './lib/models/organizer-utils';
8
9
  export { buildOrganizerChartBinding, chartConfigToOrganizer, chartConfigToState, chartConfigToUnifiedState, applyOrganizerEventToChart, handleOrganizerChartEvent, resolveYUnit, OrganizerChartItem, OrganizerChartSection, OrganizerChartConfig, OrganizerChartBridgeOptions, OrganizerChartBinding, OrganizerChartEventResult, } from './lib/models/organizer-chart-adapter';
9
10
  export { OrganizerFacade, humanizeKey } from './lib/organizer-facade/organizer-facade';
10
11
  export { OrganizerFieldDef, OrganizerPanelConfig, OrganizerFieldsState, OrganizerGroupByState, OrganizerSliceByState, } from './lib/organizer-facade/organizer-facade.types';
11
12
  export { GroupByManager } from './lib/group-by-manager/group-by-manager';
12
- 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
- }