@oneteme/jquery-organizer 0.0.1

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.
Files changed (34) hide show
  1. package/README.md +441 -0
  2. package/esm2022/lib/group-by-manager/group-by-manager.mjs +73 -0
  3. package/esm2022/lib/lazy-field-manager/lazy-field-manager.mjs +91 -0
  4. package/esm2022/lib/models/index.mjs +3 -0
  5. package/esm2022/lib/models/organizer-chart-adapter.mjs +164 -0
  6. package/esm2022/lib/models/organizer-config.interface.mjs +2 -0
  7. package/esm2022/lib/models/organizer-menu.model.mjs +17 -0
  8. package/esm2022/lib/models/organizer-utils.mjs +26 -0
  9. package/esm2022/lib/organizer-button/organizer-button.component.mjs +266 -0
  10. package/esm2022/lib/organizer-button/organizer-button.module.mjs +17 -0
  11. package/esm2022/lib/organizer-facade/organizer-facade.mjs +269 -0
  12. package/esm2022/lib/organizer-facade/organizer-facade.types.mjs +2 -0
  13. package/esm2022/lib/slice-panel/slice-panel.component.mjs +452 -0
  14. package/esm2022/lib/slice-panel/slice-panel.model.mjs +2 -0
  15. package/esm2022/oneteme-jquery-organizer.mjs +5 -0
  16. package/esm2022/public-api.mjs +12 -0
  17. package/fesm2022/oneteme-jquery-organizer.mjs +1369 -0
  18. package/fesm2022/oneteme-jquery-organizer.mjs.map +1 -0
  19. package/index.d.ts +5 -0
  20. package/lib/group-by-manager/group-by-manager.d.ts +20 -0
  21. package/lib/lazy-field-manager/lazy-field-manager.d.ts +25 -0
  22. package/lib/models/index.d.ts +2 -0
  23. package/lib/models/organizer-chart-adapter.d.ts +44 -0
  24. package/lib/models/organizer-config.interface.d.ts +103 -0
  25. package/lib/models/organizer-menu.model.d.ts +7 -0
  26. package/lib/models/organizer-utils.d.ts +8 -0
  27. package/lib/organizer-button/organizer-button.component.d.ts +51 -0
  28. package/lib/organizer-button/organizer-button.module.d.ts +8 -0
  29. package/lib/organizer-facade/organizer-facade.d.ts +51 -0
  30. package/lib/organizer-facade/organizer-facade.types.d.ts +31 -0
  31. package/lib/slice-panel/slice-panel.component.d.ts +80 -0
  32. package/lib/slice-panel/slice-panel.model.d.ts +25 -0
  33. package/package.json +35 -0
  34. package/public-api.d.ts +12 -0
@@ -0,0 +1,51 @@
1
+ import { OrganizerEvent, OrganizerState } from '@oneteme/jquery-core';
2
+ import { OrganizerFieldDef, OrganizerFieldsState, OrganizerGroupByState, OrganizerPanelConfig, OrganizerSliceByState } from './organizer-facade.types';
3
+ export declare function humanizeKey(key: string): string;
4
+ export declare class OrganizerFacade<TField extends OrganizerFieldDef = OrganizerFieldDef> {
5
+ readonly fields: OrganizerFieldsState<TField>;
6
+ readonly groupBy: OrganizerGroupByState;
7
+ readonly sliceBy: OrganizerSliceByState<TField>;
8
+ private _panelConfig;
9
+ private _hiddenStaticKeys;
10
+ private readonly _events$;
11
+ readonly events$: import("rxjs").Observable<OrganizerEvent>;
12
+ get enabled(): boolean;
13
+ get showFields(): boolean;
14
+ get showGroupBySection(): boolean;
15
+ get showSliceBySection(): boolean;
16
+ get allowFieldRemoval(): boolean;
17
+ get isFieldDragDropEnabled(): boolean;
18
+ get menuBaseFields(): TField[];
19
+ get menuOptionalFields(): TField[];
20
+ get totalFieldCount(): number;
21
+ get groupByFields(): TField[];
22
+ get activeGroupByLabel(): string;
23
+ get staticSlicesForMenu(): Array<{
24
+ key: string;
25
+ title: string;
26
+ icon?: string;
27
+ }>;
28
+ fieldLabel(field: {
29
+ key: string;
30
+ header?: string;
31
+ }): string;
32
+ update(panelConfig: OrganizerPanelConfig<TField>): void;
33
+ setActiveFields(fields: TField[]): void;
34
+ setUserCustomized(value: boolean): void;
35
+ resetToDefaults(): void;
36
+ addField(field: TField): void;
37
+ removeField(fieldKey: string): boolean;
38
+ toggleFieldVisibility(field: TField, visible: boolean): void;
39
+ reorderFields(fromKey: string, toKey: string): boolean;
40
+ isFieldVisible(key: string): boolean;
41
+ setGroupBy(key: string | null): void;
42
+ onDynamicSliceKeysChange(keys: string[]): void;
43
+ isDynamicSliceActive(key: string): boolean;
44
+ toOrganizerState(): OrganizerState;
45
+ destroy(): void;
46
+ updateHiddenStaticKeys(keys: Set<string>): void;
47
+ private _refreshDefaultFields;
48
+ private _refreshDynamicSliceMeta;
49
+ private _computeSliceLabel;
50
+ private _uniqueByKey;
51
+ }
@@ -0,0 +1,31 @@
1
+ import { SliceConfig } from '../slice-panel/slice-panel.model';
2
+ import { OrganizerConfig } from '@oneteme/jquery-core';
3
+ export interface OrganizerFieldDef {
4
+ key: string;
5
+ header?: string;
6
+ icon?: string;
7
+ optional?: boolean;
8
+ groupable?: boolean;
9
+ sliceable?: boolean;
10
+ }
11
+ export interface OrganizerPanelConfig<TField extends OrganizerFieldDef = OrganizerFieldDef> {
12
+ config?: OrganizerConfig;
13
+ fields: TField[];
14
+ sliceConfigs: SliceConfig<any>[];
15
+ noneLabel?: string;
16
+ defaultGroupBy?: string | null;
17
+ }
18
+ export interface OrganizerFieldsState<TField extends OrganizerFieldDef = OrganizerFieldDef> {
19
+ activeFields: TField[];
20
+ userCustomized: boolean;
21
+ }
22
+ export interface OrganizerGroupByState {
23
+ activeKey: string | null;
24
+ userCustomized: boolean;
25
+ }
26
+ export interface OrganizerSliceByState<TField extends OrganizerFieldDef = OrganizerFieldDef> {
27
+ activeDynamicFields: TField[];
28
+ availableForDynamic: TField[];
29
+ allDynamicFields: TField[];
30
+ activeLabel: string;
31
+ }
@@ -0,0 +1,80 @@
1
+ import { ElementRef, EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
+ import { SliceColumnDef, SliceConfig } from './slice-panel.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class SlicePanelComponent<T = any> implements OnChanges, OnInit {
5
+ sliceConfigs: SliceConfig<T>[];
6
+ columns: SliceColumnDef<T>[];
7
+ data: T[];
8
+ lazyData: Map<string, Map<any, any>>;
9
+ lazyStatus: Map<string, 'idle' | 'loading' | 'loaded' | 'error'>;
10
+ showToggle: boolean;
11
+ showCounts: boolean;
12
+ collapsedByDefault: boolean;
13
+ alwaysShow: boolean;
14
+ filterChange: EventEmitter<(row: T) => boolean>;
15
+ activeKeysChange: EventEmitter<string[][]>;
16
+ dynamicSliceKeysChange: EventEmitter<string[]>;
17
+ collapsedChange: EventEmitter<boolean>;
18
+ slicePanelBodyRef?: ElementRef<HTMLElement>;
19
+ private _cdr;
20
+ readonly i18n: {
21
+ expandFilterTitle: string;
22
+ collapseFilterTitle: string;
23
+ filterPanelTitle: (count: number) => "Filtres" | "Filtre";
24
+ filterBlockDefaultTitle: string;
25
+ filterEmptyState: string;
26
+ };
27
+ isCollapsed: boolean;
28
+ get hostCollapsed(): boolean;
29
+ activeKeysBySlice: Map<number, Set<string>>;
30
+ private _expandedSlices;
31
+ _dynamicSlices: Array<{
32
+ key: string;
33
+ slice: SliceConfig<T>;
34
+ }>;
35
+ _cachedSlices: SliceConfig<T>[];
36
+ private _countCache;
37
+ readonly trackBySliceIndex: (index: number, _: any) => number;
38
+ readonly trackByCategoryKey: (_: number, cat: any) => string;
39
+ ngOnInit(): void;
40
+ ngOnChanges(changes: SimpleChanges): void;
41
+ get showPanel(): boolean;
42
+ get slices(): SliceConfig<T>[];
43
+ get staticSliceCount(): number;
44
+ get staticSlicesForMenu(): Array<{
45
+ key: string;
46
+ title: string;
47
+ }>;
48
+ get activeDynamicSliceColumns(): SliceColumnDef<T>[];
49
+ get availableColumnsForDynamicSlice(): SliceColumnDef<T>[];
50
+ isSliceCollapsed(sliceIndex: number): boolean;
51
+ toggleSliceCollapse(sliceIndex: number): void;
52
+ togglePanel(): void;
53
+ isSliceDynamic(sliceIndex: number): boolean;
54
+ isSliceLoading(sliceIndex: number): boolean;
55
+ isStaticSliceVisible(_columnKey: string): boolean;
56
+ getSliceIcon(slice: SliceConfig<T>): string | undefined;
57
+ isSliceCategoryActive(sliceIndex: number, categoryKey: string): boolean;
58
+ isSliceAllActive(sliceIndex: number): boolean;
59
+ sliceCategoryCount(sliceIndex: number, categoryKey: string): number;
60
+ isSliceEmpty(sliceIndex: number): boolean;
61
+ onSliceCategorySelected(sliceIndex: number, categoryKey: string): void;
62
+ onSliceAllSelected(sliceIndex: number): void;
63
+ getActiveFilters(): Record<number, string[]>;
64
+ restoreFilters(filters: Record<number, string[]>): void;
65
+ addDynamicSlice(column: SliceColumnDef<T>): void;
66
+ removeDynamicSlice(sliceIndex: number): void;
67
+ removeDynamicSliceByKey(key: string): void;
68
+ private _emitFilter;
69
+ private _getDynamicSliceColumnKey;
70
+ private _getSliceIdentity;
71
+ private _materializeSlice;
72
+ private _buildCategoryFromValue;
73
+ private _computeDistinctValues;
74
+ private _getLazyAwareValue;
75
+ private _rebuildCache;
76
+ private _refreshDynamicSlices;
77
+ private _scrollSliceTitleIntoView;
78
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlicePanelComponent<any>, never>;
79
+ 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>;
80
+ }
@@ -0,0 +1,25 @@
1
+ import { DataProvider } from '@oneteme/jquery-core';
2
+ import { Observable } from 'rxjs';
3
+ export interface SliceCategory<T = any> {
4
+ key: string;
5
+ label: string;
6
+ filter?: (row: T) => boolean;
7
+ }
8
+ export interface SliceConfig<T = any> {
9
+ title?: string;
10
+ icon?: string;
11
+ multiSelect?: boolean;
12
+ columnKey?: string;
13
+ hidden?: boolean;
14
+ bucket?: (row: T) => string;
15
+ categories?: SliceCategory<T>[];
16
+ }
17
+ export interface SliceColumnDef<T = any> {
18
+ key: string;
19
+ header?: string;
20
+ icon?: string;
21
+ value?: DataProvider<any>;
22
+ lazy?: {
23
+ fetchFn: () => Observable<any[]>;
24
+ };
25
+ }
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@oneteme/jquery-organizer",
3
+ "version": "0.0.1",
4
+ "description": "Independent Organizer Button component library - decentralized organizer management for charts, tables",
5
+ "homepage": "https://github.com/oneteme/jquery-charts",
6
+ "bugs": "https://github.com/oneteme/jquery-charts/issues",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/oneteme/jquery-charts.git"
10
+ },
11
+ "peerDependencies": {
12
+ "@angular/common": ">=16.1.0",
13
+ "@angular/core": ">=16.1.0",
14
+ "@angular/material": "^16.1.0",
15
+ "@angular/cdk": "^16.1.0",
16
+ "@oneteme/jquery-core": "^0.0.33"
17
+ },
18
+ "dependencies": {
19
+ "tslib": "^2.3.0"
20
+ },
21
+ "sideEffects": false,
22
+ "module": "fesm2022/oneteme-jquery-organizer.mjs",
23
+ "typings": "index.d.ts",
24
+ "exports": {
25
+ "./package.json": {
26
+ "default": "./package.json"
27
+ },
28
+ ".": {
29
+ "types": "./index.d.ts",
30
+ "esm2022": "./esm2022/oneteme-jquery-organizer.mjs",
31
+ "esm": "./esm2022/oneteme-jquery-organizer.mjs",
32
+ "default": "./fesm2022/oneteme-jquery-organizer.mjs"
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,12 @@
1
+ export * from './lib/organizer-button/organizer-button.component';
2
+ export * from './lib/organizer-button/organizer-button.module';
3
+ export * from './lib/slice-panel/slice-panel.component';
4
+ export * from './lib/slice-panel/slice-panel.model';
5
+ export * from './lib/models/organizer-config.interface';
6
+ export * from './lib/models/organizer-menu.model';
7
+ export { buildYFields, resolveYKey, OrganizerYIndicator } from './lib/models/organizer-utils';
8
+ export { chartConfigToOrganizer, chartConfigToState, chartConfigToUnifiedState, applyOrganizerEventToChart, resolveYUnit, OrganizerChartItem, OrganizerChartSection, OrganizerChartConfig, OrganizerChartBridgeOptions, } from './lib/models/organizer-chart-adapter';
9
+ export { OrganizerFacade, humanizeKey } from './lib/organizer-facade/organizer-facade';
10
+ export { OrganizerFieldDef, OrganizerPanelConfig, OrganizerFieldsState, OrganizerGroupByState, OrganizerSliceByState, } from './lib/organizer-facade/organizer-facade.types';
11
+ 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';