@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 @@
1
+ {"version":3,"file":"oneteme-jquery-organizer.mjs","sources":["../../../../projects/oneteme/jquery-organizer/src/lib/organizer-button/organizer-button.component.ts","../../../../projects/oneteme/jquery-organizer/src/lib/organizer-button/organizer-button.component.html","../../../../projects/oneteme/jquery-organizer/src/lib/slice-panel/slice-panel.component.ts","../../../../projects/oneteme/jquery-organizer/src/lib/slice-panel/slice-panel.component.html","../../../../projects/oneteme/jquery-organizer/src/lib/organizer-button/organizer-button.module.ts","../../../../projects/oneteme/jquery-organizer/src/lib/models/organizer-menu.model.ts","../../../../projects/oneteme/jquery-organizer/src/lib/models/organizer-utils.ts","../../../../projects/oneteme/jquery-organizer/src/lib/models/organizer-chart-adapter.ts","../../../../projects/oneteme/jquery-organizer/src/lib/organizer-facade/organizer-facade.ts","../../../../projects/oneteme/jquery-organizer/src/lib/group-by-manager/group-by-manager.ts","../../../../projects/oneteme/jquery-organizer/src/lib/lazy-field-manager/lazy-field-manager.ts","../../../../projects/oneteme/jquery-organizer/src/oneteme-jquery-organizer.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, ChangeDetectionStrategy, ChangeDetectorRef, OnDestroy, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { Subject, isObservable } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { OrganizerConfig, OrganizerButtonEvent, OrganizerSliceState, OrganizerState } from '../models';\n\n@Component({\n standalone: true,\n imports: [ CommonModule, MatButtonModule, MatIconModule, MatMenuModule, MatDividerModule ],\n selector: 'organizer-button',\n templateUrl: './organizer-button.component.html',\n styleUrls: ['./organizer-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OrganizerButtonComponent implements OnInit, OnDestroy {\n @Input() config!: OrganizerConfig;\n @Input() state?: OrganizerState;\n @Input() hideMenuValues = false;\n @Output() viewChange = new EventEmitter<OrganizerButtonEvent>();\n @Output() sliceStateChange = new EventEmitter<OrganizerSliceState | null>();\n\n loadingFieldId?: string;\n\n private fieldDataCache = new Map<string, any[]>();\n private destroy$ = new Subject<void>();\n\n @ViewChild('mainMenuTrigger') mainMenuTrigger?: MatMenuTrigger;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n isFieldVisible(fieldId: string): boolean {\n const visible = this.state?.visibleFields;\n if (!visible) {\n return this.config.fields?.find(f => f.id === fieldId)?.visible !== false;\n }\n return visible.includes(fieldId);\n }\n\n fieldsSummary(): string {\n const total = this.config.fields?.length ?? 0;\n const visible = this.state?.visibleFields?.length ?? total;\n return `${visible}/${total}`;\n }\n\n onFieldToggle(fieldId: string, visible: boolean): void {\n const visibleFields = this.state?.visibleFields || [];\n const updated = visible\n ? [...visibleFields, fieldId]\n : visibleFields.filter(f => f !== fieldId);\n this.emitChange('fieldToggled', { visibleFields: updated });\n }\n\n onXFieldSelect(fieldId: string): void {\n this.emitChange('xSelected', { selectedX: fieldId });\n }\n\n onYFieldSelect(fieldId: string): void {\n this.emitChange('ySelected', {\n selectedY: fieldId,\n selectedYAggregate: undefined\n });\n }\n\n onYAggregateSelect(yFieldId: string, aggregateId: string): void {\n this.emitChange('ySelected', {\n selectedY: yFieldId,\n selectedYAggregate: aggregateId\n });\n }\n\n onGroupBySelect(groupId: string): void {\n const current = this.state.selectedGroupBy;\n this.emitChange('groupBySelected', { selectedGroupBy: current === groupId ? undefined : groupId });\n }\n\n onTemplateSelect(templateId: string): void {\n const t = this.config.templates?.find(tmpl => tmpl.id === templateId);\n if (!t) return;\n this.emitChange('templateSelected', {\n selectedTemplate: templateId,\n selectedX: t.xField,\n selectedY: t.yField,\n selectedYAggregate: t.yAggregate,\n selectedGroupBy: t.groupBy\n });\n }\n\n onSliceClick(sliceId?: string): void {\n if (this.config.onSliceClick) {\n this.config.onSliceClick();\n }\n\n const selectedSlices = this.state?.selectedSlices || [];\n let updated: string[];\n if (sliceId) {\n updated = selectedSlices.includes(sliceId) ? [] : [sliceId];\n } else {\n updated = selectedSlices;\n }\n\n if (updated.length === 0 || !sliceId || !this.config.onFetchSliceData) {\n if (this.config.onFetchSliceData) {\n this.sliceStateChange.emit(null);\n }\n this.emitChange('sliceSelected', { selectedSlices: updated });\n return;\n }\n\n const slice = this.config.slices?.find(s => s.id === sliceId);\n const result = this.config.onFetchSliceData(sliceId);\n const handleData = (tasks: any[]) => {\n this.sliceStateChange.emit({\n sliceConfigs: [{ title: slice?.label ?? sliceId, columnKey: sliceId }],\n tasks\n });\n this.emitChange('sliceSelected', { selectedSlices: updated });\n };\n if (isObservable(result)) {\n result.pipe(takeUntil(this.destroy$)).subscribe({ next: handleData });\n } else {\n result.then(handleData);\n }\n }\n\n async loadFieldData(fieldId: string): Promise<void> {\n if (this.fieldDataCache.has(fieldId)) return;\n if (!this.config.onFetchFieldData) return;\n\n const field = this.config.fields?.find(f => f.id === fieldId);\n if (!field) return;\n\n this.loadingFieldId = fieldId;\n this.cdr.markForCheck();\n\n try {\n const data = await this.config.onFetchFieldData(fieldId);\n this.fieldDataCache.set(fieldId, data);\n } finally {\n this.loadingFieldId = undefined;\n this.cdr.markForCheck();\n }\n }\n\n onExport(): void {\n if (this.config.onExport) this.config.onExport();\n this.mainMenuTrigger?.closeMenu();\n }\n\n onExportVisual(): void {\n if (this.config.onExportVisual) this.config.onExportVisual();\n this.mainMenuTrigger?.closeMenu();\n }\n\n onExportData(): void {\n if (this.config.onExportData) this.config.onExportData();\n this.mainMenuTrigger?.closeMenu();\n }\n\n hasExportSubMenu(): boolean {\n return !!(this.config.onExportVisual || this.config.onExportData);\n }\n\n hasSwitchView(): boolean {\n return !!this.config.switchView;\n }\n\n onSwitchView(): void {\n const sv = this.config.switchView;\n if (!sv) return;\n const newView: 'chart' | 'table' = sv.currentView === 'chart' ? 'table' : 'chart';\n sv.onSwitch(newView);\n this.emitChange('viewSwitched', { viewMode: newView });\n this.mainMenuTrigger?.closeMenu();\n }\n\n onPreferencesEdit(): void {\n if (this.config.onPreferencesEdit) this.config.onPreferencesEdit();\n this.mainMenuTrigger?.closeMenu();\n }\n\n onPreferencesSave(): void {\n if (this.config.onPreferencesSave) this.config.onPreferencesSave();\n this.mainMenuTrigger?.closeMenu();\n }\n\n onPreferencesClear(): void {\n if (this.config.onPreferencesClear) this.config.onPreferencesClear();\n this.mainMenuTrigger?.closeMenu();\n }\n\n onReset(): void {\n this.emitChange('reset', {\n visibleFields: [],\n selectedX: undefined,\n selectedY: undefined,\n selectedYAggregate: undefined,\n selectedGroupBy: undefined,\n selectedSlices: []\n });\n }\n\n activeXLabel(): string {\n const id = this.state?.selectedX;\n if (!id) return '';\n return this.config.xFields?.find(f => f.id === id)?.label ?? id;\n }\n\n activeYLabel(): string {\n const yId = this.state?.selectedY;\n if (!yId) return '';\n const yField = this.config.yFields?.find(f => f.id === yId);\n const base = yField?.label ?? yId;\n\n if (this.state?.selectedYAggregate) {\n const agg = yField?.aggregates?.find(a => a.id === this.state!.selectedYAggregate);\n return agg ? `${base} · ${agg.label}` : base;\n }\n return base;\n }\n\n activeGroupByLabel(): string {\n const id = this.state?.selectedGroupBy;\n if (!id) return '';\n return this.config.groups?.find(g => g.id === id)?.label ?? id;\n }\n\n activeSlicesLabel(): string {\n const ids = this.state?.selectedSlices;\n if (!ids?.length) return '';\n if (ids.length === 1) {\n return this.config.slices?.find(s => s.id === ids[0])?.label ?? ids[0];\n }\n return `${ids.length} sélectionnés`;\n }\n\n activeTemplateLabel(): string {\n const id = this.state?.selectedTemplate;\n if (!id) return '';\n return this.config.templates?.find(t => t.id === id)?.label ?? id;\n }\n\n hasChartFields(): boolean {\n return (this.config.xFields?.length ?? 0) > 0 || (this.config.yFields?.length ?? 0) > 0;\n }\n\n hasTableFields(): boolean {\n return (this.config.fields?.length ?? 0) > 0;\n }\n\n isYActive(yFieldId: string): boolean {\n return this.state?.selectedY === yFieldId;\n }\n\n isYAggregateActive(yFieldId: string, aggregateId: string): boolean {\n return this.state?.selectedY === yFieldId && this.state?.selectedYAggregate === aggregateId;\n }\n\n private emitChange(type: OrganizerButtonEvent['type'], stateUpdate: Partial<OrganizerState>): void {\n const event: OrganizerButtonEvent = {\n type,\n state: { ...this.state, ...stateUpdate },\n source: 'user'\n };\n this.viewChange.emit(event);\n }\n}\n","<button type=\"button\" class=\"organizer-btn\" [matMenuTriggerFor]=\"viewMenu\" #mainMenuTrigger=\"matMenuTrigger\" [attr.aria-label]=\"'View'\">\n <mat-icon class=\"organizer-btn-icon\">{{ config.buttonIcon || 'settings' }}</mat-icon>\n</button>\n\n<mat-menu #viewMenu=\"matMenu\" panelClass=\"organizer-menu-panel\">\n\n <!-- Champs : mode chart (X + Y) -->\n <button *ngIf=\"hasChartFields()\" mat-menu-item [matMenuTriggerFor]=\"champsSubMenu\" class=\"organizer-menu-trigger\">\n <span class=\"organizer-menu-label\">Champs</span>\n <span class=\"organizer-menu-value\" *ngIf=\"!hideMenuValues && (activeXLabel() || activeYLabel())\">\n {{ activeXLabel() }}<ng-container *ngIf=\"activeXLabel() && activeYLabel()\"> / </ng-container>{{ activeYLabel() }}\n </span>\n </button>\n\n <!-- Champs : mode table (toggle colonnes) -->\n <button *ngIf=\"hasTableFields()\" mat-menu-item [matMenuTriggerFor]=\"fieldsSubMenu\" class=\"organizer-menu-trigger\">\n <span class=\"organizer-menu-label\">Champs</span>\n <span class=\"organizer-menu-value\" *ngIf=\"!hideMenuValues\">{{ fieldsSummary() }}</span>\n </button>\n\n <!-- Grouper par -->\n <button *ngIf=\"config.groups?.length\" mat-menu-item [matMenuTriggerFor]=\"groupsSubMenu\" class=\"organizer-menu-trigger\">\n <span class=\"organizer-menu-label\">Grouper par</span>\n <span class=\"organizer-menu-value\" *ngIf=\"!hideMenuValues && activeGroupByLabel()\">{{ activeGroupByLabel() }}</span>\n </button>\n\n <!-- Filtrer par -->\n <button *ngIf=\"config.slices?.length\" mat-menu-item [matMenuTriggerFor]=\"slicesSubMenu\" class=\"organizer-menu-trigger\">\n <span class=\"organizer-menu-label\">Filtrer par</span>\n <span class=\"organizer-menu-value\" *ngIf=\"!hideMenuValues && activeSlicesLabel()\">{{ activeSlicesLabel() }}</span>\n </button>\n\n <!-- Template -->\n <button *ngIf=\"config.templates?.length\" mat-menu-item [matMenuTriggerFor]=\"templateSubMenu\" class=\"organizer-menu-trigger\">\n <span class=\"organizer-menu-label\">Template</span>\n <span class=\"organizer-menu-value\" *ngIf=\"!hideMenuValues && activeTemplateLabel()\">{{ activeTemplateLabel() }}</span>\n </button>\n\n <!-- Export direct (mode table) -->\n <mat-divider *ngIf=\"config.showExport\" class=\"organizer-divider\"></mat-divider>\n <button *ngIf=\"config.showExport && !hasExportSubMenu()\" mat-menu-item type=\"button\" class=\"organizer-menu-export\" (click)=\"onExport()\">\n <mat-icon class=\"organizer-menu-export-icon\">download</mat-icon>\n <span class=\"organizer-menu-label\">Exporter</span>\n </button>\n\n <!-- Export graphique (mode chart) — ouvre un sous-menu -->\n <button *ngIf=\"config.showExport && hasExportSubMenu()\" mat-menu-item [matMenuTriggerFor]=\"exportSubMenu\" class=\"organizer-menu-trigger organizer-menu-export\">\n <mat-icon class=\"organizer-menu-export-icon\">download</mat-icon>\n <span class=\"organizer-menu-label\">Exporter</span>\n </button>\n\n <!-- Préférences -->\n <mat-divider *ngIf=\"config.showPreferences\" class=\"organizer-divider\"></mat-divider>\n <button *ngIf=\"config.showPreferences\" mat-menu-item [matMenuTriggerFor]=\"preferencesSubMenu\" class=\"organizer-menu-trigger\">\n <span class=\"organizer-menu-label\">Préférences</span>\n </button>\n\n <!-- Switch chart / table -->\n <mat-divider *ngIf=\"hasSwitchView()\" class=\"organizer-divider\"></mat-divider>\n <button *ngIf=\"hasSwitchView()\" mat-menu-item type=\"button\" class=\"organizer-menu-trigger\" (click)=\"onSwitchView()\">\n <mat-icon class=\"organizer-menu-export-icon\">{{ config.switchView?.currentView === 'chart' ? 'table_chart' : 'bar_chart' }}</mat-icon>\n <span class=\"organizer-menu-label\">{{ config.switchView?.currentView === 'chart' ? 'Tableau' : 'Graphique' }}</span>\n </button>\n\n</mat-menu>\n\n<!-- Sous-menu : Export graphique -->\n<mat-menu #exportSubMenu=\"matMenu\" panelClass=\"organizer-submenu-panel\">\n <div class=\"organizer-submenu\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <button *ngIf=\"config.onExportVisual\" type=\"button\" class=\"organizer-submenu-item\"\n (mousedown)=\"onExportVisual()\">\n <span class=\"organizer-submenu-check\"></span>\n <mat-icon class=\"organizer-submenu-icon\">image</mat-icon>\n Visuel\n </button>\n <button *ngIf=\"config.onExportData\" type=\"button\" class=\"organizer-submenu-item\"\n (mousedown)=\"onExportData()\">\n <span class=\"organizer-submenu-check\"></span>\n <mat-icon class=\"organizer-submenu-icon\">table_chart</mat-icon>\n Données\n </button>\n </div>\n</mat-menu>\n\n<!-- Sous-menu : Champs chart (X + Y) -->\n<mat-menu #champsSubMenu=\"matMenu\" panelClass=\"organizer-champs-panel\">\n <div class=\"organizer-champs-wrapper\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n\n <!-- Bloc X -->\n <div class=\"organizer-champs-block\" *ngIf=\"config.xFields?.length\">\n <span class=\"organizer-champs-block-title\">X — Axe horizontal</span>\n <button type=\"button\" class=\"organizer-submenu-item\"\n *ngFor=\"let xField of config.xFields\"\n [class.active]=\"state?.selectedX === xField.id\"\n [disabled]=\"xField.disabled\"\n (mousedown)=\"onXFieldSelect(xField.id)\">\n <span class=\"organizer-submenu-check\">{{ state?.selectedX === xField.id ? '✓' : '' }}</span>\n {{ xField.label }}\n </button>\n </div>\n\n <mat-divider *ngIf=\"config.xFields?.length && config.yFields?.length\" class=\"organizer-champs-divider\"></mat-divider>\n\n <!-- Bloc Y -->\n <div class=\"organizer-champs-block\" *ngIf=\"config.yFields?.length\">\n <span class=\"organizer-champs-block-title\">Y — Axe vertical</span>\n <ng-container *ngFor=\"let yField of config.yFields\">\n\n <!-- Y simple (Count sans agrégat ni stack) -->\n <!-- Y simple (Count ou métrique directe) -->\n <button *ngIf=\"!yField.aggregates?.length\"\n type=\"button\" class=\"organizer-submenu-item\"\n [class.active]=\"isYActive(yField.id)\"\n [disabled]=\"yField.disabled\"\n (mousedown)=\"onYFieldSelect(yField.id)\">\n <span class=\"organizer-submenu-check\">{{ isYActive(yField.id) ? '✓' : '' }}</span>\n {{ yField.label }}\n </button>\n\n <!-- Y avec agrégats → sous-menu -->\n <button *ngIf=\"yField.aggregates?.length\"\n type=\"button\" class=\"organizer-submenu-item organizer-submenu-item--has-children\"\n [class.active]=\"isYActive(yField.id)\"\n [disabled]=\"yField.disabled\"\n [matMenuTriggerFor]=\"yAggSubMenu\"\n [matMenuTriggerData]=\"{ yField: yField }\"\n (mousedown)=\"$event.stopPropagation()\">\n <span class=\"organizer-submenu-check\">{{ isYActive(yField.id) ? '✓' : '' }}</span>\n {{ yField.label }}\n <mat-icon class=\"organizer-submenu-arrow\">chevron_right</mat-icon>\n </button>\n\n </ng-container>\n </div>\n\n </div>\n</mat-menu>\n\n<!-- Sous-menu dynamique : agrégats d'un champ Y -->\n<mat-menu #yAggSubMenu=\"matMenu\" panelClass=\"organizer-submenu-panel\">\n <ng-template matMenuContent let-yField=\"yField\">\n <div class=\"organizer-submenu\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"organizer-submenu-item\"\n *ngFor=\"let agg of yField.aggregates\"\n [class.active]=\"isYAggregateActive(yField.id, agg.id)\"\n (mousedown)=\"onYAggregateSelect(yField.id, agg.id)\">\n <span class=\"organizer-submenu-check\">{{ isYAggregateActive(yField.id, agg.id) ? '✓' : '' }}</span>\n {{ agg.label }}\n </button>\n </div>\n </ng-template>\n</mat-menu>\n\n<!-- Sous-menu : Champs table (toggle colonnes) -->\n<mat-menu #fieldsSubMenu=\"matMenu\" panelClass=\"organizer-submenu-panel\">\n <div class=\"organizer-submenu\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"organizer-submenu-item\"\n *ngFor=\"let field of config.fields\"\n [class.active]=\"isFieldVisible(field.id)\"\n (mousedown)=\"onFieldToggle(field.id, !isFieldVisible(field.id))\">\n <span class=\"organizer-submenu-check\">{{ isFieldVisible(field.id) ? '✓' : '' }}</span> <mat-icon *ngIf=\"field.icon\" class=\"organizer-submenu-icon\">{{ field.icon }}</mat-icon> {{ field.label }}\n </button>\n </div>\n</mat-menu>\n\n<!-- Sous-menu : Grouper par -->\n<mat-menu #groupsSubMenu=\"matMenu\" panelClass=\"organizer-submenu-panel\">\n <div class=\"organizer-submenu\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"organizer-submenu-item\"\n *ngFor=\"let group of config.groups\"\n [class.active]=\"state?.selectedGroupBy === group.id\"\n (mousedown)=\"onGroupBySelect(group.id)\">\n <span class=\"organizer-submenu-check\">{{ state?.selectedGroupBy === group.id ? '✓' : '' }}</span> <mat-icon *ngIf=\"group.icon\" class=\"organizer-submenu-icon\">{{ group.icon }}</mat-icon> {{ group.label }}\n </button>\n </div>\n</mat-menu>\n\n<!-- Sous-menu : Filtrer par -->\n<mat-menu #slicesSubMenu=\"matMenu\" panelClass=\"organizer-submenu-panel\">\n <div class=\"organizer-submenu\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"organizer-submenu-item\"\n *ngFor=\"let slice of config.slices\"\n [class.active]=\"state?.selectedSlices?.includes(slice.id)\"\n (mousedown)=\"onSliceClick(slice.id)\">\n <span class=\"organizer-submenu-check\">{{ state?.selectedSlices?.includes(slice.id) ? '✓' : '' }}</span> <mat-icon *ngIf=\"slice.icon\" class=\"organizer-submenu-icon\">{{ slice.icon }}</mat-icon> {{ slice.label }}\n </button>\n </div>\n</mat-menu>\n\n<!-- Sous-menu : Template -->\n<mat-menu #templateSubMenu=\"matMenu\" panelClass=\"organizer-submenu-panel\">\n <div class=\"organizer-submenu\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"organizer-submenu-item\"\n *ngFor=\"let tmpl of config.templates\"\n [class.active]=\"state?.selectedTemplate === tmpl.id\"\n (mousedown)=\"onTemplateSelect(tmpl.id)\">\n <span class=\"organizer-submenu-check\">{{ state?.selectedTemplate === tmpl.id ? '✓' : '' }}</span>\n <mat-icon *ngIf=\"tmpl.icon\" class=\"organizer-submenu-icon\">{{ tmpl.icon }}</mat-icon>\n {{ tmpl.label }}\n </button>\n </div>\n</mat-menu>\n\n<!-- Sous-menu : Préférences -->\n<mat-menu #preferencesSubMenu=\"matMenu\" panelClass=\"organizer-submenu-panel\">\n <div class=\"organizer-submenu\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"organizer-submenu-item\" (mousedown)=\"onPreferencesEdit()\">\n <span class=\"organizer-submenu-check\"></span>\n <mat-icon class=\"organizer-submenu-icon\">edit</mat-icon>Éditer\n </button>\n <button type=\"button\" class=\"organizer-submenu-item\" (mousedown)=\"onPreferencesSave()\">\n <span class=\"organizer-submenu-check\"></span>\n <mat-icon class=\"organizer-submenu-icon\">save</mat-icon>Sauvegarder\n </button>\n <button type=\"button\" class=\"organizer-submenu-item\" [disabled]=\"!config.hasSavedPreferences\" (mousedown)=\"onPreferencesClear()\">\n <span class=\"organizer-submenu-check\"></span>\n <mat-icon class=\"organizer-submenu-icon\">delete_outline</mat-icon>Réinitialiser\n </button>\n </div>\n</mat-menu>\n\n","import { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport { SliceColumnDef, SliceConfig } from './slice-panel.model';\n\nconst EMPTY_CATEGORY_KEY = '__empty__';\nconst EMPTY_CATEGORY_LABEL = 'Vide';\n\nconst I18N = {\n expandFilterTitle: 'Déplier le filtre',\n collapseFilterTitle: 'Replier le filtre',\n filterPanelTitle: (count: number) => count > 1 ? 'Filtres' : 'Filtre',\n filterBlockDefaultTitle: 'Filtrer',\n filterEmptyState: 'Aucune donnée',\n};\n\n@Component({\n standalone: true,\n selector: 'slice-panel',\n imports: [CommonModule, MatIconModule],\n templateUrl: './slice-panel.component.html',\n styleUrls: ['./slice-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SlicePanelComponent<T = any> implements OnChanges, OnInit {\n\n @Input() sliceConfigs: SliceConfig<T>[] = [];\n @Input() columns: SliceColumnDef<T>[] = [];\n @Input() data: T[] = [];\n @Input() lazyData: Map<string, Map<any, any>> = new Map();\n @Input() lazyStatus: Map<string, 'idle' | 'loading' | 'loaded' | 'error'> = new Map();\n @Input() showToggle = true;\n @Input() showCounts = true;\n @Input() collapsedByDefault = false;\n @Input() alwaysShow = false;\n\n @Output() filterChange = new EventEmitter<(row: T) => boolean>();\n @Output() activeKeysChange = new EventEmitter<string[][]>();\n @Output() dynamicSliceKeysChange = new EventEmitter<string[]>();\n @Output() collapsedChange = new EventEmitter<boolean>();\n\n @ViewChild('slicePanelBody') slicePanelBodyRef?: ElementRef<HTMLElement>;\n\n private _cdr = inject(ChangeDetectorRef);\n\n readonly i18n = I18N;\n\n isCollapsed = false;\n\n @HostBinding('class.collapsed') get hostCollapsed(): boolean { return this.isCollapsed; }\n activeKeysBySlice: Map<number, Set<string>> = new Map();\n private _expandedSlices = new Set<number>();\n _dynamicSlices: Array<{ key: string; slice: SliceConfig<T> }> = [];\n\n _cachedSlices: SliceConfig<T>[] = [];\n private _countCache = new Map<string, number>();\n\n readonly trackBySliceIndex = (index: number, _: any): number => index;\n readonly trackByCategoryKey = (_: number, cat: any): string => cat.key;\n\n ngOnInit(): void {\n this.isCollapsed = this.collapsedByDefault;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['sliceConfigs'] || changes['data'] || changes['columns'] || changes['lazyData'] || changes['lazyStatus']) {\n this._refreshDynamicSlices();\n this._rebuildCache();\n const shouldReemitFilter = !!(changes['data'] || changes['columns'] || changes['lazyData'] || changes['lazyStatus']);\n const hasActiveFilters = [...this.activeKeysBySlice.values()].some(s => s.size > 0);\n if (hasActiveFilters && shouldReemitFilter) {\n this._emitFilter();\n }\n this._cdr.markForCheck();\n }\n }\n\n get showPanel(): boolean {\n const hasCfg = (this.sliceConfigs || []).length > 0 || this._dynamicSlices.length > 0;\n if (this.alwaysShow) return hasCfg;\n return hasCfg && (this.data?.length ?? 0) > 0;\n }\n\n get slices(): SliceConfig<T>[] {\n return this._cachedSlices;\n }\n\n get staticSliceCount(): number {\n return (this.sliceConfigs || []).length;\n }\n\n get staticSlicesForMenu(): Array<{ key: string; title: string }> {\n return (this.sliceConfigs || [])\n .filter((s) => !!s.columnKey)\n .map((s) => ({ key: s.columnKey!, title: s.title || s.columnKey! }));\n }\n\n get activeDynamicSliceColumns(): SliceColumnDef<T>[] {\n return this._dynamicSlices\n .map((d) => (this.columns || []).find((c) => c.key === d.key))\n .filter((c): c is SliceColumnDef<T> => !!c);\n }\n\n get availableColumnsForDynamicSlice(): SliceColumnDef<T>[] {\n const dynamicKeys = new Set(this._dynamicSlices.map((d) => d.key));\n const staticKeys = new Set(\n (this.sliceConfigs || []).map((s) => s.columnKey).filter((k): k is string => !!k)\n );\n const existingKeys = new Set([...dynamicKeys, ...staticKeys]);\n const seen = new Set<string>();\n return (this.columns || []).filter((c) => {\n if (existingKeys.has(c.key) || seen.has(c.key)) return false;\n seen.add(c.key);\n return true;\n });\n }\n\n isSliceCollapsed(sliceIndex: number): boolean {\n if (this._cachedSlices.length === 1) {\n return this._expandedSlices.has(-1 - sliceIndex);\n }\n return !this._expandedSlices.has(sliceIndex);\n }\n\n toggleSliceCollapse(sliceIndex: number): void {\n if (this.slices.length === 1) {\n const closedKey = -1 - sliceIndex;\n if (this._expandedSlices.has(closedKey)) {\n this._expandedSlices.delete(closedKey);\n } else {\n this._expandedSlices.add(closedKey);\n this._scrollSliceTitleIntoView(sliceIndex);\n }\n } else {\n if (this._expandedSlices.has(sliceIndex)) {\n this._expandedSlices.delete(sliceIndex);\n } else {\n this._expandedSlices.clear();\n this._expandedSlices.add(sliceIndex);\n this._scrollSliceTitleIntoView(sliceIndex);\n }\n }\n this._cdr.markForCheck();\n }\n\n togglePanel(): void {\n this.isCollapsed = !this.isCollapsed;\n this.collapsedChange.emit(this.isCollapsed);\n this._cdr.markForCheck();\n }\n\n isSliceDynamic(sliceIndex: number): boolean {\n return sliceIndex >= this.staticSliceCount;\n }\n\n isSliceLoading(sliceIndex: number): boolean {\n const staticSlice = (this.sliceConfigs || [])[sliceIndex];\n if (staticSlice?.columnKey) {\n const colDef = (this.columns || []).find(c => c.key === staticSlice.columnKey);\n if (colDef?.lazy) {\n const status = this.lazyStatus.get(staticSlice.columnKey!) ?? 'idle';\n return status === 'loading' || status === 'idle';\n }\n return false;\n }\n const key = this._getDynamicSliceColumnKey(sliceIndex);\n if (!key) return false;\n const colDef = (this.columns || []).find(c => c.key === key);\n if (!colDef?.lazy) return false;\n const status = this.lazyStatus.get(key) ?? 'idle';\n return status === 'loading' || status === 'idle';\n }\n\n isStaticSliceVisible(_columnKey: string): boolean {\n return true;\n }\n\n getSliceIcon(slice: SliceConfig<T>): string | undefined {\n if (slice.icon) return slice.icon;\n if (slice.columnKey) {\n return (this.columns || []).find(c => c.key === slice.columnKey)?.icon;\n }\n return undefined;\n }\n\n isSliceCategoryActive(sliceIndex: number, categoryKey: string): boolean {\n return this.activeKeysBySlice.get(sliceIndex)?.has(categoryKey) ?? false;\n }\n\n isSliceAllActive(sliceIndex: number): boolean {\n return !this.activeKeysBySlice.has(sliceIndex) || this.activeKeysBySlice.get(sliceIndex)!.size === 0;\n }\n\n sliceCategoryCount(sliceIndex: number, categoryKey: string): number {\n const cacheKey = `${sliceIndex}:${categoryKey}`;\n if (this._countCache.has(cacheKey)) {\n return this._countCache.get(cacheKey)!;\n }\n const slice = this._cachedSlices[sliceIndex];\n if (!slice) return 0;\n const category = (slice.categories || []).find((c) => c.key === categoryKey);\n const count = category ? (this.data || []).filter((row) => category.filter ? category.filter(row) : true).length : 0;\n this._countCache.set(cacheKey, count);\n return count;\n }\n\n isSliceEmpty(sliceIndex: number): boolean {\n const slice = this._cachedSlices[sliceIndex];\n if (!slice) return true;\n return (slice.categories || []).every(c => this.sliceCategoryCount(sliceIndex, c.key) === 0);\n }\n\n onSliceCategorySelected(sliceIndex: number, categoryKey: string): void {\n const slice = this.slices[sliceIndex];\n if (!slice) return;\n if (!this.activeKeysBySlice.has(sliceIndex)) {\n this.activeKeysBySlice.set(sliceIndex, new Set());\n }\n const activeKeys = this.activeKeysBySlice.get(sliceIndex)!;\n if (slice.multiSelect === false) {\n if (activeKeys.has(categoryKey)) {\n activeKeys.clear();\n } else {\n activeKeys.clear();\n activeKeys.add(categoryKey);\n }\n } else {\n if (activeKeys.has(categoryKey)) {\n activeKeys.delete(categoryKey);\n } else {\n activeKeys.add(categoryKey);\n }\n }\n this._emitFilter();\n this._cdr.markForCheck();\n }\n\n onSliceAllSelected(sliceIndex: number): void {\n if (this.activeKeysBySlice.has(sliceIndex)) {\n this.activeKeysBySlice.get(sliceIndex)!.clear();\n }\n this._emitFilter();\n this._cdr.markForCheck();\n }\n\n getActiveFilters(): Record<number, string[]> {\n const result: Record<number, string[]> = {};\n this._cachedSlices.forEach((_, idx) => {\n const keys = this.activeKeysBySlice.get(idx);\n result[idx] = keys ? [...keys] : [];\n });\n return result;\n }\n\n restoreFilters(filters: Record<number, string[]>): void {\n this.activeKeysBySlice = new Map(\n Object.entries(filters).map(([idx, keys]) => [Number(idx), new Set(keys)])\n );\n this._emitFilter();\n this._cdr.markForCheck();\n }\n\n addDynamicSlice(column: SliceColumnDef<T>): void {\n const distinctValues = this._computeDistinctValues(column.key);\n const newSlice: SliceConfig<T> = {\n title: column.header,\n columnKey: column.key,\n categories: distinctValues.map((v) => this._buildCategoryFromValue(column.key, v)),\n };\n this._dynamicSlices = [...this._dynamicSlices, { key: column.key, slice: newSlice }];\n this._rebuildCache();\n this.dynamicSliceKeysChange.emit(this._dynamicSlices.map(d => d.key));\n this._emitFilter();\n this._cdr.markForCheck();\n }\n\n removeDynamicSlice(sliceIndex: number): void {\n const dynamicIndex = sliceIndex - this.staticSliceCount;\n if (dynamicIndex < 0) return;\n const newActiveKeys = new Map<number, Set<string>>();\n this.activeKeysBySlice.forEach((keys, idx) => {\n if (idx < sliceIndex) newActiveKeys.set(idx, keys);\n else if (idx > sliceIndex) newActiveKeys.set(idx - 1, keys);\n });\n this.activeKeysBySlice = newActiveKeys;\n this._dynamicSlices = this._dynamicSlices.filter((_, i) => i !== dynamicIndex);\n this._rebuildCache();\n this.dynamicSliceKeysChange.emit(this._dynamicSlices.map(d => d.key));\n this._emitFilter();\n this._cdr.markForCheck();\n }\n\n removeDynamicSliceByKey(key: string): void {\n const dynamicIndex = this._dynamicSlices.findIndex((d) => d.key === key);\n if (dynamicIndex < 0) return;\n const sliceIndex = this.staticSliceCount + dynamicIndex;\n this.removeDynamicSlice(sliceIndex);\n }\n\n private _emitFilter(): void {\n const slices = this.slices;\n const activeKeysBySlice = this.activeKeysBySlice;\n\n this.activeKeysChange.emit(\n slices.map((_, i) => {\n const keys = activeKeysBySlice.get(i);\n return keys ? [...keys] : [];\n })\n );\n\n const pred = (row: T): boolean =>\n slices.every((slice, sliceIndex) => {\n const activeKeys = activeKeysBySlice.get(sliceIndex);\n if (!activeKeys || activeKeys.size === 0) return true;\n if (!slice.categories || slice.categories.length === 0) return true;\n return [...activeKeys].some((key) => {\n const category = (slice.categories || []).find((c) => c.key === key);\n if (!category) return false;\n if (!category?.filter) return true;\n return category.filter(row);\n });\n });\n this.filterChange.emit(pred);\n }\n\n private _getDynamicSliceColumnKey(sliceIndex: number): string | null {\n const dynamicIndex = sliceIndex - this.staticSliceCount;\n return this._dynamicSlices[dynamicIndex]?.key ?? null;\n }\n\n private _getSliceIdentity(slice: SliceConfig<T>, fallbackIndex: number): string {\n if (slice.columnKey) return `column:${slice.columnKey}`;\n if (slice.title) return `title:${slice.title}`;\n const categoryKeys = (slice.categories || []).map((c) => c.key).join('|');\n return `index:${fallbackIndex}|categories:${categoryKeys}`;\n }\n\n private _materializeSlice(slice: SliceConfig<T>): SliceConfig<T> {\n if (!slice.columnKey || (slice.categories && slice.categories.length > 0)) {\n return slice;\n }\n const col = (this.columns || []).find(c => c.key === slice.columnKey);\n const isLazy = !!col?.lazy;\n if (isLazy && this.lazyStatus.get(slice.columnKey!) !== 'loaded') {\n return { ...slice, categories: [] };\n }\n if (slice.bucket) {\n const distinctValues = [...new Set((this.data || []).map(slice.bucket))].sort();\n return {\n ...slice,\n categories: distinctValues.map((v) => ({\n key: v, label: v,\n filter: (row: T) => slice.bucket!(row) === v,\n })),\n };\n }\n const distinctValues = this._computeDistinctValues(slice.columnKey!);\n return {\n ...slice,\n categories: distinctValues.map((v) => this._buildCategoryFromValue(slice.columnKey!, v)),\n };\n }\n\n private _buildCategoryFromValue(columnKey: string, v: string): { key: string; label: string; filter: (row: T) => boolean } {\n if (v === EMPTY_CATEGORY_KEY) {\n return {\n key: EMPTY_CATEGORY_KEY,\n label: EMPTY_CATEGORY_LABEL,\n filter: (row: T) => {\n const val = this._getLazyAwareValue(columnKey, row);\n return val == null || val === '';\n },\n };\n }\n return {\n key: v, label: v,\n filter: (row: T) => String(this._getLazyAwareValue(columnKey, row) ?? '') === v,\n };\n }\n\n private _computeDistinctValues(columnKey: string): string[] {\n const rawValues = (this.data || []).map((row) => {\n const val = this._getLazyAwareValue(columnKey, row);\n return val != null && val !== '' ? String(val) : null;\n });\n const distinct = [...new Set(rawValues.filter((v): v is string => v !== null))].sort();\n if (rawValues.some(v => v === null)) distinct.push(EMPTY_CATEGORY_KEY);\n return distinct;\n }\n\n private _getLazyAwareValue(columnKey: string, row: T): any {\n const colDef = (this.columns || []).find(c => c.key === columnKey);\n if (colDef?.lazy) {\n return this.lazyData.get(columnKey)?.get(row) ?? null;\n }\n if (colDef?.value) {\n return (colDef.value as any)(row, 0);\n }\n return (row as any)[columnKey];\n }\n\n private _rebuildCache(): void {\n const previousSlices = this._cachedSlices;\n const previousActiveKeys = this.activeKeysBySlice;\n const allSlices = [...(this.sliceConfigs || []), ...this._dynamicSlices.map((d) => d.slice)];\n this._cachedSlices = allSlices.map((slice) => this._materializeSlice(slice));\n\n const previousKeysByIdentity = new Map<string, Set<string>>();\n previousSlices.forEach((slice, index) => {\n const activeKeys = previousActiveKeys.get(index);\n if (!activeKeys || activeKeys.size === 0) return;\n previousKeysByIdentity.set(this._getSliceIdentity(slice, index), new Set(activeKeys));\n });\n\n const nextActiveKeys = new Map<number, Set<string>>();\n this._cachedSlices.forEach((slice, index) => {\n const previousKeys = previousKeysByIdentity.get(this._getSliceIdentity(slice, index));\n if (!previousKeys || previousKeys.size === 0) return;\n const availableKeys = new Set((slice.categories || []).map((c) => c.key));\n const matchingKeys = [...previousKeys].filter((key) => availableKeys.has(key));\n if (matchingKeys.length > 0) nextActiveKeys.set(index, new Set(matchingKeys));\n });\n this.activeKeysBySlice = nextActiveKeys;\n this._countCache.clear();\n }\n\n private _refreshDynamicSlices(): void {\n this._dynamicSlices = this._dynamicSlices.map(({ key, slice }) => {\n const distinctValues = this._computeDistinctValues(key);\n return {\n key,\n slice: {\n ...slice,\n categories: distinctValues.map((v) => this._buildCategoryFromValue(key, v)),\n },\n };\n });\n }\n\n private _scrollSliceTitleIntoView(sliceIndex: number): void {\n setTimeout(() => {\n const body = this.slicePanelBodyRef?.nativeElement;\n if (!body) return;\n const el = body.querySelector(`[data-slice-index=\"${sliceIndex}\"]`) as HTMLElement | null;\n el?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }, 50);\n }\n}\n","<div class=\"slice-panel-wrapper\" [class.collapsed]=\"isCollapsed\">\n <aside class=\"slice-panel\" [class.collapsed]=\"isCollapsed\">\n <div class=\"slice-panel-header\">\n <span *ngIf=\"!isCollapsed\" class=\"slice-panel-title\">\n {{ i18n.filterPanelTitle(slices.length) }}\n </span>\n <button\n *ngIf=\"showToggle\"\n type=\"button\"\n class=\"slice-toggle\"\n [attr.aria-label]=\"isCollapsed ? i18n.expandFilterTitle : i18n.collapseFilterTitle\"\n (click)=\"togglePanel()\"\n >\n <mat-icon class=\"slice-toggle-mat-icon\">{{ isCollapsed ? 'filter_list' : 'filter_list_off' }}</mat-icon>\n </button>\n </div>\n\n <div class=\"slice-panel-body\" *ngIf=\"!isCollapsed\" #slicePanelBody>\n <ng-container *ngFor=\"let slice of slices; let si = index; trackBy: trackBySliceIndex\">\n <div class=\"slice-title-row\" [attr.data-slice-index]=\"si\" (click)=\"toggleSliceCollapse(si)\">\n <span class=\"slice-title-chevron\" [class.expanded]=\"!isSliceCollapsed(si)\">›</span>\n <mat-icon *ngIf=\"getSliceIcon(slice)\" class=\"slice-title-icon\">{{ getSliceIcon(slice) }}</mat-icon>\n <p class=\"slice-title\">{{ slice.title || i18n.filterBlockDefaultTitle }}</p>\n <button\n *ngIf=\"isSliceDynamic(si)\"\n type=\"button\"\n class=\"slice-remove-btn\"\n (click)=\"$event.stopPropagation(); removeDynamicSlice(si)\"\n >×</button>\n </div>\n\n <div class=\"slice-section-items\" *ngIf=\"!isSliceCollapsed(si)\">\n <ng-container *ngIf=\"isSliceLoading(si); else sliceContent\">\n <div class=\"slice-lazy-loading\">\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n </div>\n </ng-container>\n <ng-template #sliceContent>\n <ng-container *ngFor=\"let category of slice.categories; trackBy: trackByCategoryKey\">\n <button\n *ngIf=\"sliceCategoryCount(si, category.key) > 0\"\n class=\"slice-item\"\n type=\"button\"\n [class.active]=\"isSliceCategoryActive(si, category.key)\"\n [attr.data-category-key]=\"category.key\"\n [title]=\"category.label\"\n (click)=\"onSliceCategorySelected(si, category.key)\"\n >\n <span>{{ category.label }}</span>\n <span *ngIf=\"showCounts\">{{ sliceCategoryCount(si, category.key) }}</span>\n </button>\n </ng-container>\n <div *ngIf=\"isSliceEmpty(si)\" class=\"slice-empty-state\">{{ i18n.filterEmptyState }}</div>\n </ng-template>\n </div>\n\n <hr *ngIf=\"si < slices.length - 1\" class=\"slice-divider\" />\n </ng-container>\n </div>\n </aside>\n</div>\n","import { NgModule } from '@angular/core';\nimport { OrganizerButtonComponent } from './organizer-button.component';\nimport { SlicePanelComponent } from '../slice-panel/slice-panel.component';\n\n@NgModule({\n imports: [OrganizerButtonComponent, SlicePanelComponent],\n exports: [OrganizerButtonComponent, SlicePanelComponent]\n})\nexport class OrganizerButtonModule {}\n","export type MenuSection = 'fields' | 'champs' | 'groups' | 'slices' | 'templates' | 'custom';\n\nexport const DEFAULT_MENU_LABELS: { [key in MenuSection]: string } = {\n 'fields': 'Champs',\n 'champs': 'Champs',\n 'groups': 'Grouper par',\n 'slices': 'Filtrer par',\n 'templates': 'Template',\n 'custom': 'Options'\n};\n\nexport const DEFAULT_MENU_ICONS: { [key in MenuSection]: string } = {\n 'fields': 'visibility',\n 'champs': 'bar_chart',\n 'groups': 'category',\n 'slices': 'filter_list',\n 'templates': 'dashboard_customize',\n 'custom': 'settings'\n};\n","import { OrganizerYField } from './organizer-config.interface';\n\nexport interface OrganizerYIndicator {\n id: string;\n label: string;\n group?: string;\n}\n\nexport function buildYFields(indicators: OrganizerYIndicator[]): OrganizerYField[] {\n const ordered: string[] = [];\n const map = new Map<string, OrganizerYField>();\n\n for (const indicator of indicators) {\n const groupKey = indicator.group;\n if (groupKey) {\n if (!map.has(groupKey)) {\n ordered.push(groupKey);\n map.set(groupKey, { id: groupKey, label: groupKey, aggregates: [] });\n }\n const parent = map.get(groupKey);\n if (parent?.aggregates) {\n parent.aggregates.push({ id: indicator.id, label: indicator.label });\n }\n } else {\n ordered.push(indicator.id);\n map.set(indicator.id, { id: indicator.id, label: indicator.label });\n }\n }\n\n return ordered.map(k => map.get(k)).filter((f): f is OrganizerYField => !!f);\n}\n\nexport function resolveYKey(\n selectedY: string | undefined,\n selectedYAggregate: string | undefined\n): string | undefined {\n return selectedYAggregate ?? selectedY;\n}\n","import { OrganizerButtonEvent, OrganizerConfig, OrganizerState, OrganizerUnifiedState, OrganizerViewSlice, OrganizerXField } from './organizer-config.interface';\nimport { buildYFields, resolveYKey } from './organizer-utils';\nimport { UnitConfig } from '@oneteme/jquery-core';\n\nexport interface OrganizerChartItem {\n key: string;\n selected: boolean;\n menu: { label: string };\n unit?: string | UnitConfig;\n jquery?: {\n value: (s?: string) => string;\n buildAlias: (s?: string) => string;\n buildName?: (item: any, value?: string) => string;\n buildColor?: (value?: string) => string;\n };\n group?: string;\n extra?: {\n stacks?: { optional: boolean; items: OrganizerChartItem[] };\n [key: string]: any;\n };\n}\n\nexport interface OrganizerChartSection {\n optional: boolean;\n items: OrganizerChartItem[];\n}\n\nexport interface OrganizerChartConfig {\n groups: OrganizerChartSection;\n indicators: OrganizerChartSection;\n filters?: OrganizerChartSection;\n}\n\nexport interface OrganizerChartBridgeOptions {\n onFetchSliceData?: OrganizerConfig['onFetchSliceData'];\n onExportVisual?: () => void;\n onExportData?: () => void;\n switchView?: OrganizerConfig['switchView'];\n}\n\nexport function chartConfigToOrganizer(\n chartConfig: any,\n options: OrganizerChartBridgeOptions = {}\n): OrganizerConfig {\n if (!chartConfig) return {};\n const { onFetchSliceData, onExportVisual, onExportData, switchView } = options;\n const activeIndicator = chartConfig.indicators?.items?.find(i => i.selected);\n\n const baseXFields: OrganizerXField[] = (chartConfig.groups?.items || [])\n .filter(g => !_isSynthetic(g))\n .map(g => ({ id: g.key, label: g.menu.label || g.key }));\n\n const yFields = buildYFields(\n (chartConfig.indicators?.items || []).map(i => ({ id: i.key, label: i.menu.label || i.key, group: i.group }))\n );\n\n const stackFields = (activeIndicator?.extra?.stacks?.items || [])\n .filter((s: OrganizerChartItem) => !_isSynthetic(s))\n .map((s: OrganizerChartItem) => ({ id: s.key, label: s.menu.label || s.key }));\n\n const seenKeys = new Set<string>();\n const mergedGroupFields = [...baseXFields, ...stackFields].filter(f => {\n if (seenKeys.has(f.id)) return false;\n seenKeys.add(f.id);\n return true;\n });\n\n return {\n xFields: mergedGroupFields,\n yFields,\n groups: mergedGroupFields,\n slices: (chartConfig.filters?.items || []).map(f => ({ id: f.key, label: f.menu.label || f.key }) as OrganizerViewSlice),\n showReset: false,\n onFetchSliceData,\n showExport: !!(onExportVisual || onExportData),\n onExportVisual,\n onExportData,\n switchView,\n };\n}\n\nexport function chartConfigToState(chartConfig: any): OrganizerState {\n if (!chartConfig) return {};\n const activeIndicator = chartConfig.indicators?.items?.find(i => i.selected);\n const activeStack = (activeIndicator?.extra?.stacks?.items || []).find((s: OrganizerChartItem) => s.selected);\n const activeGroup = chartConfig.groups?.items?.find(g => g.selected);\n const activeSlices = (chartConfig.filters?.items || []).filter(f => f.selected);\n const indicatorGroup = activeIndicator?.group;\n return {\n selectedX: activeGroup?.key,\n selectedY: indicatorGroup ?? activeIndicator?.key,\n selectedYAggregate: indicatorGroup ? activeIndicator?.key : undefined,\n selectedGroupBy: activeStack?.key,\n selectedSlices: activeSlices.map(f => f.key),\n };\n}\n\nexport function chartConfigToUnifiedState(\n chartConfig: any,\n viewMode: 'chart' | 'table' = 'chart'\n): OrganizerUnifiedState {\n const state = chartConfigToState(chartConfig);\n return {\n viewMode,\n dimension: state.selectedX,\n metric: resolveYKey(state.selectedY, state.selectedYAggregate),\n metricAggregate: state.selectedYAggregate,\n breakdown: state.selectedGroupBy,\n filters: state.selectedSlices,\n };\n}\n\nexport function applyOrganizerEventToChart(\n event: OrganizerButtonEvent,\n chartConfig: any\n): void {\n if (!chartConfig) return;\n const state = event.state;\n _cleanSynthetics(chartConfig);\n if (state.selectedX !== undefined) _applyXSelection(state.selectedX, chartConfig);\n if (state.selectedY !== undefined) _applyYSelection(state.selectedY, state.selectedYAggregate, chartConfig);\n const effectiveGroupBy = state.selectedGroupBy !== state.selectedX ? state.selectedGroupBy : undefined;\n _applyGroupBySelection(effectiveGroupBy, chartConfig);\n if (state.selectedSlices !== undefined) _applySliceSelection(state.selectedSlices, chartConfig);\n event.resolvedYUnit = resolveYUnit(chartConfig, event.state.selectedY, event.state.selectedYAggregate);\n}\n\nexport function resolveYUnit(\n chartConfig: any,\n selectedY: string | undefined,\n selectedYAggregate: string | undefined\n): string | UnitConfig | undefined {\n if (!chartConfig || !selectedY) return undefined;\n const actualKey = resolveYKey(selectedY, selectedYAggregate);\n return chartConfig.indicators?.items?.find(i => i.key === actualKey)?.unit;\n}\n\nconst _syntheticItems = new WeakSet<OrganizerChartItem>();\n\nfunction _makeSynthetic(item: OrganizerChartItem): OrganizerChartItem {\n _syntheticItems.add(item);\n return item;\n}\n\nfunction _isSynthetic(item: OrganizerChartItem): boolean {\n return _syntheticItems.has(item);\n}\n\nfunction _cleanSynthetics(chartConfig: OrganizerChartConfig): void {\n chartConfig.groups.items = chartConfig.groups.items.filter(g => !_isSynthetic(g));\n chartConfig.indicators.items.forEach(ind => {\n if (ind.extra?.stacks?.items) {\n ind.extra.stacks.items = ind.extra.stacks.items.filter((s: OrganizerChartItem) => !_isSynthetic(s));\n }\n });\n}\n\nfunction _applyXSelection(selectedX: string, chartConfig: OrganizerChartConfig): void {\n const isGroupItem = chartConfig.groups.items.some(g => g.key === selectedX);\n if (isGroupItem) {\n chartConfig.groups.items.forEach(g => { g.selected = g.key === selectedX; });\n return;\n }\n const allStacks: OrganizerChartItem[] = chartConfig.indicators.items.flatMap(i => i.extra?.stacks?.items ?? []);\n const stackItem = allStacks.find(s => s.key === selectedX);\n if (stackItem) {\n chartConfig.groups.items.forEach(g => { g.selected = false; });\n chartConfig.groups.items.push(_makeSynthetic({\n key: stackItem.key,\n selected: true,\n menu: stackItem.menu,\n jquery: stackItem.jquery\n ? { value: () => stackItem.jquery!.value(), buildAlias: () => stackItem.jquery!.buildAlias() }\n : undefined,\n }));\n }\n}\n\nfunction _applyYSelection(selectedY: string, selectedYAggregate: string | undefined, chartConfig: OrganizerChartConfig): void {\n const actualKey = resolveYKey(selectedY, selectedYAggregate);\n chartConfig.indicators.items.forEach(i => { i.selected = i.key === actualKey; });\n chartConfig.indicators.items.forEach(i => {\n i.extra?.stacks?.items?.forEach((s: OrganizerChartItem) => { s.selected = false; });\n });\n}\n\nfunction _applyGroupBySelection(effectiveGroupBy: string | undefined, chartConfig: OrganizerChartConfig): void {\n const activeIndicator = chartConfig.indicators.items.find(i => i.selected);\n const stackItems: OrganizerChartItem[] = activeIndicator?.extra?.stacks?.items ?? [];\n if (effectiveGroupBy === undefined) {\n stackItems.forEach(s => { s.selected = false; });\n return;\n }\n const isStackItem = stackItems.some(s => s.key === effectiveGroupBy);\n if (isStackItem) {\n stackItems.forEach(s => { s.selected = s.key === effectiveGroupBy; });\n return;\n }\n const groupItem = chartConfig.groups.items.find(g => g.key === effectiveGroupBy);\n if (groupItem && activeIndicator) {\n stackItems.forEach(s => { s.selected = false; });\n if (!activeIndicator.extra) {\n activeIndicator.extra = { stacks: { optional: true, items: [] } };\n } else if (!activeIndicator.extra.stacks) {\n activeIndicator.extra.stacks = { optional: true, items: [] };\n }\n activeIndicator.extra.stacks.items.push(_makeSynthetic({\n key: groupItem.key,\n selected: true,\n menu: groupItem.menu,\n jquery: groupItem.jquery ? {\n value: () => groupItem.jquery!.value(),\n buildAlias: () => groupItem.jquery!.buildAlias(),\n buildName: (_item: any, value: string) => String(value),\n } : undefined,\n }));\n } else {\n stackItems.forEach(s => { s.selected = false; });\n }\n}\n\nfunction _applySliceSelection(selectedSlices: string[], chartConfig: OrganizerChartConfig): void {\n chartConfig.filters?.items?.forEach(f => { f.selected = selectedSlices.includes(f.key); });\n}\n","import { Subject } from 'rxjs';\nimport { OrganizerEvent, OrganizerState } from '@oneteme/jquery-core';\nimport { OrganizerFieldDef, OrganizerFieldsState, OrganizerGroupByState, OrganizerPanelConfig, OrganizerSliceByState } from './organizer-facade.types';\n\nexport function humanizeKey(key: string): string {\n return key\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .replace(/^./, (v) => v.toUpperCase());\n}\n\nexport class OrganizerFacade<TField extends OrganizerFieldDef = OrganizerFieldDef> {\n\n readonly fields: OrganizerFieldsState<TField> = {\n activeFields: [],\n userCustomized: false,\n };\n\n readonly groupBy: OrganizerGroupByState = {\n activeKey: null,\n userCustomized: false,\n };\n\n readonly sliceBy: OrganizerSliceByState<TField> = {\n activeDynamicFields: [],\n availableForDynamic: [],\n allDynamicFields: [],\n activeLabel: 'Aucun',\n };\n\n private _panelConfig: OrganizerPanelConfig<TField> = { fields: [], sliceConfigs: [] };\n private _hiddenStaticKeys = new Set<string>();\n\n private readonly _events$ = new Subject<OrganizerEvent>();\n readonly events$ = this._events$.asObservable();\n\n get enabled(): boolean {\n return this._panelConfig.config?.enabled === true;\n }\n\n get showFields(): boolean {\n return this.enabled;\n }\n\n get showGroupBySection(): boolean {\n return this.enabled && this.groupByFields.length > 0;\n }\n\n get showSliceBySection(): boolean {\n return this.enabled && (\n (this._panelConfig.sliceConfigs?.length ?? 0) > 0 ||\n this.sliceBy.allDynamicFields.length > 0\n );\n }\n\n get allowFieldRemoval(): boolean {\n return this._panelConfig.config?.enableFieldRemoval !== false;\n }\n\n get isFieldDragDropEnabled(): boolean {\n return this._panelConfig.config?.enableFieldDragDrop === true;\n }\n\n get menuBaseFields(): TField[] {\n return this._uniqueByKey((this._panelConfig.fields || []).filter(c => !c.optional));\n }\n\n get menuOptionalFields(): TField[] {\n return this._uniqueByKey((this._panelConfig.fields || []).filter(c => c.optional));\n }\n\n get totalFieldCount(): number {\n return new Set((this._panelConfig.fields || []).map(c => c.key)).size;\n }\n\n get groupByFields(): TField[] {\n const seen = new Set<string>();\n return (this._panelConfig.fields || []).filter(c => {\n if (c.groupable === false || seen.has(c.key)) return false;\n if (!c.header && c.groupable !== true) return false;\n seen.add(c.key);\n return true;\n });\n }\n\n get activeGroupByLabel(): string {\n if (!this.groupBy.activeKey) return this._panelConfig.noneLabel ?? 'Aucun';\n const field = this.groupByFields.find(c => c.key === this.groupBy.activeKey);\n return field?.header || this.groupBy.activeKey;\n }\n\n get staticSlicesForMenu(): Array<{ key: string; title: string; icon?: string }> {\n return (this._panelConfig.sliceConfigs ?? [])\n .filter(s => !!s.columnKey)\n .map(s => {\n const fieldIcon = (this._panelConfig.fields ?? []).find(c => c.key === s.columnKey)?.icon;\n return { key: s.columnKey!, title: s.title || humanizeKey(s.columnKey!), icon: s.icon ?? fieldIcon };\n });\n }\n\n fieldLabel(field: { key: string; header?: string }): string {\n return field.header || humanizeKey(field.key);\n }\n\n update(panelConfig: OrganizerPanelConfig<TField>): void {\n this._panelConfig = panelConfig;\n this._refreshDefaultFields();\n this._refreshDynamicSliceMeta();\n if (!this.groupBy.userCustomized) {\n this.groupBy.activeKey = panelConfig.defaultGroupBy ?? null;\n }\n }\n\n setActiveFields(fields: TField[]): void {\n this.fields.activeFields = fields;\n this.fields.userCustomized = true;\n }\n\n setUserCustomized(value: boolean): void {\n this.fields.userCustomized = value;\n }\n\n resetToDefaults(): void {\n this.fields.userCustomized = false;\n this.groupBy.userCustomized = false;\n this._refreshDefaultFields();\n this.groupBy.activeKey = this._panelConfig.defaultGroupBy ?? null;\n this.sliceBy.activeDynamicFields = [];\n this._refreshDynamicSliceMeta();\n }\n\n addField(field: TField): void {\n const configFields = this._panelConfig.fields ?? [];\n const configIndex = configFields.findIndex(c => c.key === field.key);\n if (configIndex === -1) {\n this.fields.activeFields = [...this.fields.activeFields, field];\n } else {\n const insertBefore = this.fields.activeFields.findIndex(c => {\n const ci = configFields.findIndex(cc => cc.key === c.key);\n return ci !== -1 && ci > configIndex;\n });\n if (insertBefore === -1) {\n this.fields.activeFields = [...this.fields.activeFields, field];\n } else {\n const copy = [...this.fields.activeFields];\n copy.splice(insertBefore, 0, field);\n this.fields.activeFields = copy;\n }\n }\n this.fields.userCustomized = true;\n this._events$.next({ type: 'fieldsChanged', fieldIds: this.fields.activeFields.map(c => c.key) });\n }\n\n removeField(fieldKey: string): boolean {\n const field = this.fields.activeFields.find(c => c.key === fieldKey);\n if (!field) return false;\n if (!field.optional && !this.allowFieldRemoval) return false;\n if (this.fields.activeFields.length <= 1) return false;\n this.fields.activeFields = this.fields.activeFields.filter(c => c.key !== fieldKey);\n this.fields.userCustomized = true;\n this._events$.next({ type: 'fieldsChanged', fieldIds: this.fields.activeFields.map(c => c.key) });\n return true;\n }\n\n toggleFieldVisibility(field: TField, visible: boolean): void {\n const isVisible = this.isFieldVisible(field.key);\n if (visible && !isVisible) {\n this.addField(field);\n } else if (!visible && isVisible) {\n this.removeField(field.key);\n }\n }\n\n reorderFields(fromKey: string, toKey: string): boolean {\n const prev = this.fields.activeFields.findIndex(c => c.key === fromKey);\n const curr = this.fields.activeFields.findIndex(c => c.key === toKey);\n if (prev === -1 || curr === -1 || prev === curr) return false;\n const reordered = [...this.fields.activeFields];\n const [moved] = reordered.splice(prev, 1);\n reordered.splice(curr, 0, moved);\n this.fields.activeFields = reordered;\n this.fields.userCustomized = true;\n this._events$.next({ type: 'fieldsChanged', fieldIds: this.fields.activeFields.map(c => c.key) });\n return true;\n }\n\n isFieldVisible(key: string): boolean {\n return this.fields.activeFields.some(c => c.key === key);\n }\n\n setGroupBy(key: string | null): void {\n this.groupBy.activeKey = key;\n this.groupBy.userCustomized = true;\n this._events$.next({ type: 'groupByChanged', key });\n }\n\n onDynamicSliceKeysChange(keys: string[]): void {\n const allFields = this._panelConfig.fields ?? [];\n const staticKeys = new Set(\n (this._panelConfig.sliceConfigs ?? []).map(s => s.columnKey).filter((k): k is string => !!k)\n );\n const dynamicKeySet = new Set(keys);\n const existingKeys = new Set([...staticKeys, ...dynamicKeySet]);\n\n this.sliceBy.activeDynamicFields = keys\n .map(k => allFields.find(c => c.key === k))\n .filter((c): c is TField => !!c);\n\n const seen = new Set<string>();\n this.sliceBy.availableForDynamic = allFields.filter(c => {\n if (c.sliceable === false || existingKeys.has(c.key) || seen.has(c.key)) return false;\n seen.add(c.key);\n return true;\n });\n\n this._computeSliceLabel();\n this._events$.next({ type: 'dynamicSlicesChanged', keys });\n }\n\n isDynamicSliceActive(key: string): boolean {\n return this.sliceBy.activeDynamicFields.some(c => c.key === key);\n }\n\n toOrganizerState(): OrganizerState {\n return {\n selectedFieldIds: this.fields.activeFields.map(c => c.key),\n groupByKey: this.groupBy.activeKey,\n dynamicSliceKeys: this.sliceBy.activeDynamicFields.map(c => c.key),\n };\n }\n destroy(): void { this._events$.complete() }\n\n updateHiddenStaticKeys(keys: Set<string>): void {\n this._hiddenStaticKeys = keys;\n this._computeSliceLabel();\n }\n\n private _refreshDefaultFields(): void {\n const defaultFields = (this._panelConfig.fields || []).filter(c => !c.optional);\n if (!this.fields.userCustomized || this.fields.activeFields.length === 0) {\n this.fields.activeFields = [...defaultFields];\n } else {\n const allowedKeys = new Set((this._panelConfig.fields || []).map(c => c.key));\n this.fields.activeFields = this.fields.activeFields.filter(c => allowedKeys.has(c.key));\n }\n }\n\n private _refreshDynamicSliceMeta(): void {\n const allFields = this._panelConfig.fields ?? [];\n const staticKeys = new Set(\n (this._panelConfig.sliceConfigs ?? []).map(s => s.columnKey).filter((k): k is string => !!k)\n );\n const activeDynKeys = new Set(this.sliceBy.activeDynamicFields.map(c => c.key));\n\n const seen1 = new Set<string>();\n this.sliceBy.availableForDynamic = allFields.filter(c => {\n if (c.sliceable === false || staticKeys.has(c.key) || activeDynKeys.has(c.key) || seen1.has(c.key)) return false;\n if (!c.header && c.sliceable !== true) return false;\n seen1.add(c.key);\n return true;\n });\n\n const seen2 = new Set<string>();\n this.sliceBy.allDynamicFields = allFields.filter(c => {\n if (c.sliceable === false || staticKeys.has(c.key) || seen2.has(c.key)) return false;\n if (!c.header && c.sliceable !== true) return false;\n seen2.add(c.key);\n return true;\n });\n this._computeSliceLabel();\n }\n\n private _computeSliceLabel(): void {\n const visibleStatics = (this._panelConfig.sliceConfigs ?? []).filter(\n s => !s.columnKey || !this._hiddenStaticKeys.has(s.columnKey)\n );\n const total = visibleStatics.length + this.sliceBy.activeDynamicFields.length;\n if (total === 0) { this.sliceBy.activeLabel = this._panelConfig.noneLabel ?? 'Aucun'; return; }\n if (total === 1) {\n if (visibleStatics.length === 1) {\n const first = visibleStatics[0];\n this.sliceBy.activeLabel = first?.title || first?.columnKey || '1';\n return;\n }\n this.sliceBy.activeLabel = this.sliceBy.activeDynamicFields[0]?.header || '1';\n return;\n }\n this.sliceBy.activeLabel = `${total} actifs`;\n }\n\n private _uniqueByKey(fields: TField[]): TField[] {\n const seen = new Set<string>();\n return fields.filter(c => {\n if (seen.has(c.key)) return false;\n seen.add(c.key);\n return true;\n });\n }\n}\n","export class GroupByManager {\n private readonly _collapsedGroups = new Set<string>();\n private readonly _groupPages = new Map<string, number>();\n\n groupPageSize = 5;\n groupSortOrder: 'asc' | 'desc' = 'asc';\n\n private _defaultGroupCollapsed = false;\n\n constructor(\n private readonly onNeedProjection: () => void,\n private readonly onNeedRender: () => void,\n ) {}\n\n setDefaultCollapsed(collapsed: boolean): void {\n this._defaultGroupCollapsed = collapsed;\n }\n\n reset(): void {\n this._collapsedGroups.clear();\n this._groupPages.clear();\n }\n\n isGroupCollapsed(groupKey: string): boolean {\n return this._defaultGroupCollapsed\n ? !this._collapsedGroups.has(groupKey)\n : this._collapsedGroups.has(groupKey);\n }\n\n toggleGroupCollapse(groupKey: string, scrollTo: (key: string) => void): void {\n if (this._collapsedGroups.has(groupKey)) {\n this._collapsedGroups.delete(groupKey);\n } else {\n this._collapsedGroups.clear();\n this._collapsedGroups.add(groupKey);\n scrollTo(groupKey);\n }\n this.onNeedProjection();\n }\n\n getSingleOpenGroup(): string | null {\n return this._defaultGroupCollapsed && this._collapsedGroups.size === 1\n ? [...this._collapsedGroups][0]\n : null;\n }\n\n getPage(groupKey: string): number {\n return this._groupPages.get(groupKey) ?? 0;\n }\n\n groupPageBack(groupKey: string): void {\n const current = this._groupPages.get(groupKey) ?? 0;\n if (current > 0) {\n this._groupPages.set(groupKey, current - 1);\n this.onNeedProjection();\n }\n }\n\n groupPageForward(groupKey: string, totalCount: number): void {\n const maxPage = Math.ceil(totalCount / this.groupPageSize) - 1;\n const current = this._groupPages.get(groupKey) ?? 0;\n if (current < maxPage) {\n this._groupPages.set(groupKey, current + 1);\n this.onNeedProjection();\n }\n }\n\n onGroupPageSizeChange(size: number): void {\n this.groupPageSize = size;\n this._groupPages.clear();\n this.onNeedRender();\n }\n\n onGroupSortToggle(dir: 'asc' | 'desc', scrollTo: (key: string) => void): void {\n if (this.groupSortOrder === dir) return;\n this.groupSortOrder = dir;\n this._groupPages.clear();\n this.onNeedRender();\n const openGroup = this.getSingleOpenGroup();\n if (openGroup) scrollTo(openGroup);\n }\n}\n","import { Observable, Subject, take, takeUntil } from 'rxjs';\n\nexport interface LazyFieldDef {\n key: string;\n lazy?: {\n fetchFn: () => Observable<any[]>;\n };\n}\nexport interface LazyFieldCallbacks {\n onRefresh(): void;\n onMarkForCheck(): void;\n}\n\nexport const LAZY_FIELD_LOADING_VALUE = '__lazy_loading__';\nexport const LAZY_FIELD_ERROR_VALUE = '__lazy_error__';\n\nexport class LazyFieldManager<TField extends LazyFieldDef = LazyFieldDef> {\n\n private _status = new Map<string, 'idle' | 'loading' | 'loaded' | 'error'>();\n private _data = new Map<string, Map<any, any>>();\n private _cancels = new Map<string, Subject<void>>();\n\n get status(): Map<string, 'idle' | 'loading' | 'loaded' | 'error'> {\n return this._status;\n }\n\n get data(): Map<string, Map<any, any>> {\n return this._data;\n }\n\n getStatus(key: string): 'idle' | 'loading' | 'loaded' | 'error' {\n return this._status.get(key) ?? 'idle';\n }\n\n getRenderType(rowValue: any): 'loading' | 'error' | 'value' {\n if (rowValue === LAZY_FIELD_LOADING_VALUE) return 'loading';\n if (rowValue === LAZY_FIELD_ERROR_VALUE) return 'error';\n return 'value';\n }\n\n cancelAll(): void {\n this._cancels.forEach(s => { s.next(); s.complete(); });\n this._cancels.clear();\n this._status = new Map();\n this._data = new Map();\n }\n\n retry<TRow>(field: TField, resolvedData: TRow[], callbacks: LazyFieldCallbacks): void {\n const k = field.key;\n const prev = this._cancels.get(k);\n if (prev) { prev.next(); prev.complete(); }\n this._cancels.delete(k);\n\n const newStatus = new Map(this._status);\n newStatus.delete(k);\n this._status = newStatus;\n\n const newData = new Map(this._data);\n newData.delete(k);\n this._data = newData;\n\n this.fetch(field, resolvedData, callbacks);\n }\n\n fetch<TRow>(field: TField, resolvedData: TRow[], callbacks: LazyFieldCallbacks): void {\n if (!field.lazy) return;\n const k = field.key;\n if (this._status.get(k) === 'loading') return;\n\n const prev = this._cancels.get(k);\n if (prev) { prev.next(); prev.complete(); }\n const cancel$ = new Subject<void>();\n this._cancels.set(k, cancel$);\n\n const newStatus = new Map(this._status);\n newStatus.set(k, 'loading');\n this._status = newStatus;\n callbacks.onRefresh();\n\n field.lazy.fetchFn().pipe(\n take(1),\n takeUntil(cancel$),\n ).subscribe({\n next: (values: any[]) => {\n const rowMap = new Map<any, any>();\n values.forEach((value, i) => {\n if (i < resolvedData.length) rowMap.set(resolvedData[i], value);\n });\n const newData = new Map(this._data);\n newData.set(k, rowMap);\n this._data = newData;\n\n const newStatus2 = new Map(this._status);\n newStatus2.set(k, 'loaded');\n this._status = newStatus2;\n\n callbacks.onRefresh();\n callbacks.onMarkForCheck();\n },\n error: () => {\n const newStatusErr = new Map(this._status);\n newStatusErr.set(k, 'error');\n this._status = newStatusErr;\n\n callbacks.onRefresh();\n callbacks.onMarkForCheck();\n },\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["takeUntil"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@oneteme/jquery-organizer" />
5
+ export * from './public-api';
@@ -0,0 +1,20 @@
1
+ export declare class GroupByManager {
2
+ private readonly onNeedProjection;
3
+ private readonly onNeedRender;
4
+ private readonly _collapsedGroups;
5
+ private readonly _groupPages;
6
+ groupPageSize: number;
7
+ groupSortOrder: 'asc' | 'desc';
8
+ private _defaultGroupCollapsed;
9
+ constructor(onNeedProjection: () => void, onNeedRender: () => void);
10
+ setDefaultCollapsed(collapsed: boolean): void;
11
+ reset(): void;
12
+ isGroupCollapsed(groupKey: string): boolean;
13
+ toggleGroupCollapse(groupKey: string, scrollTo: (key: string) => void): void;
14
+ getSingleOpenGroup(): string | null;
15
+ getPage(groupKey: string): number;
16
+ groupPageBack(groupKey: string): void;
17
+ groupPageForward(groupKey: string, totalCount: number): void;
18
+ onGroupPageSizeChange(size: number): void;
19
+ onGroupSortToggle(dir: 'asc' | 'desc', scrollTo: (key: string) => void): void;
20
+ }
@@ -0,0 +1,25 @@
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
+ }
@@ -0,0 +1,2 @@
1
+ export * from './organizer-config.interface';
2
+ export * from './organizer-menu.model';
@@ -0,0 +1,44 @@
1
+ import { OrganizerButtonEvent, OrganizerConfig, OrganizerState, OrganizerUnifiedState } from './organizer-config.interface';
2
+ import { UnitConfig } from '@oneteme/jquery-core';
3
+ export interface OrganizerChartItem {
4
+ key: string;
5
+ selected: boolean;
6
+ menu: {
7
+ label: string;
8
+ };
9
+ unit?: string | UnitConfig;
10
+ jquery?: {
11
+ value: (s?: string) => string;
12
+ buildAlias: (s?: string) => string;
13
+ buildName?: (item: any, value?: string) => string;
14
+ buildColor?: (value?: string) => string;
15
+ };
16
+ group?: string;
17
+ extra?: {
18
+ stacks?: {
19
+ optional: boolean;
20
+ items: OrganizerChartItem[];
21
+ };
22
+ [key: string]: any;
23
+ };
24
+ }
25
+ export interface OrganizerChartSection {
26
+ optional: boolean;
27
+ items: OrganizerChartItem[];
28
+ }
29
+ export interface OrganizerChartConfig {
30
+ groups: OrganizerChartSection;
31
+ indicators: OrganizerChartSection;
32
+ filters?: OrganizerChartSection;
33
+ }
34
+ export interface OrganizerChartBridgeOptions {
35
+ onFetchSliceData?: OrganizerConfig['onFetchSliceData'];
36
+ onExportVisual?: () => void;
37
+ onExportData?: () => void;
38
+ switchView?: OrganizerConfig['switchView'];
39
+ }
40
+ export declare function chartConfigToOrganizer(chartConfig: any, options?: OrganizerChartBridgeOptions): OrganizerConfig;
41
+ export declare function chartConfigToState(chartConfig: any): OrganizerState;
42
+ export declare function chartConfigToUnifiedState(chartConfig: any, viewMode?: 'chart' | 'table'): OrganizerUnifiedState;
43
+ export declare function applyOrganizerEventToChart(event: OrganizerButtonEvent, chartConfig: any): void;
44
+ export declare function resolveYUnit(chartConfig: any, selectedY: string | undefined, selectedYAggregate: string | undefined): string | UnitConfig | undefined;
@@ -0,0 +1,103 @@
1
+ import { Observable } from 'rxjs';
2
+ import { SliceConfig } from '../slice-panel/slice-panel.model';
3
+ import { UnitConfig } from '@oneteme/jquery-core';
4
+ export type FieldState = 'ready' | 'loading' | 'error';
5
+ export interface OrganizerViewField {
6
+ id: string;
7
+ label: string;
8
+ icon?: string;
9
+ visible?: boolean;
10
+ state?: FieldState;
11
+ }
12
+ export interface OrganizerXField {
13
+ id: string;
14
+ label: string;
15
+ disabled?: boolean;
16
+ }
17
+ export interface OrganizerYAggregate {
18
+ id: string;
19
+ label: string;
20
+ }
21
+ export interface OrganizerYField {
22
+ id: string;
23
+ label: string;
24
+ aggregates?: OrganizerYAggregate[];
25
+ disabled?: boolean;
26
+ }
27
+ export interface OrganizerViewGroup {
28
+ id: string;
29
+ label: string;
30
+ icon?: string;
31
+ }
32
+ export interface OrganizerViewSlice {
33
+ id: string;
34
+ label: string;
35
+ icon?: string;
36
+ }
37
+ export interface OrganizerTemplate {
38
+ id: string;
39
+ label: string;
40
+ icon?: string;
41
+ xField?: string;
42
+ yField?: string;
43
+ yAggregate?: string;
44
+ groupBy?: string;
45
+ }
46
+ export interface OrganizerConfig {
47
+ fields?: OrganizerViewField[];
48
+ xFields?: OrganizerXField[];
49
+ yFields?: OrganizerYField[];
50
+ groups?: OrganizerViewGroup[];
51
+ slices?: OrganizerViewSlice[];
52
+ templates?: OrganizerTemplate[];
53
+ onFetchFieldData?: (fieldId: string) => Promise<string[] | Record<string, any>[]>;
54
+ onFetchSliceData?: (filterKey: string) => Observable<any[]> | Promise<any[]>;
55
+ onSliceClick?: () => void;
56
+ showExport?: boolean;
57
+ onExport?: () => void;
58
+ onExportVisual?: () => void;
59
+ onExportData?: () => void;
60
+ showPreferences?: boolean;
61
+ hasSavedPreferences?: boolean;
62
+ onPreferencesEdit?: () => void;
63
+ onPreferencesSave?: () => void;
64
+ onPreferencesClear?: () => void;
65
+ showReset?: boolean;
66
+ menuPosition?: 'above' | 'below';
67
+ menuClass?: string;
68
+ buttonLabel?: string;
69
+ buttonIcon?: string;
70
+ showButtonIcon?: boolean;
71
+ switchView?: {
72
+ currentView: 'chart' | 'table';
73
+ onSwitch: (newView: 'chart' | 'table') => void;
74
+ };
75
+ }
76
+ export interface OrganizerSliceState {
77
+ sliceConfigs: SliceConfig<any>[];
78
+ tasks: any[];
79
+ }
80
+ export interface OrganizerState {
81
+ viewMode?: 'chart' | 'table';
82
+ visibleFields?: string[];
83
+ selectedX?: string;
84
+ selectedY?: string;
85
+ selectedYAggregate?: string;
86
+ selectedGroupBy?: string;
87
+ selectedSlices?: string[];
88
+ selectedTemplate?: string;
89
+ }
90
+ export interface OrganizerButtonEvent {
91
+ type: 'fieldToggled' | 'xSelected' | 'ySelected' | 'groupBySelected' | 'templateSelected' | 'sliceSelected' | 'reset' | 'viewSwitched';
92
+ state: OrganizerState;
93
+ source?: 'user' | 'api';
94
+ resolvedYUnit?: string | UnitConfig;
95
+ }
96
+ export interface OrganizerUnifiedState {
97
+ viewMode: 'chart' | 'table';
98
+ dimension?: string;
99
+ metric?: string;
100
+ metricAggregate?: string;
101
+ breakdown?: string;
102
+ filters?: string[];
103
+ }
@@ -0,0 +1,7 @@
1
+ export type MenuSection = 'fields' | 'champs' | 'groups' | 'slices' | 'templates' | 'custom';
2
+ export declare const DEFAULT_MENU_LABELS: {
3
+ [key in MenuSection]: string;
4
+ };
5
+ export declare const DEFAULT_MENU_ICONS: {
6
+ [key in MenuSection]: string;
7
+ };
@@ -0,0 +1,8 @@
1
+ import { OrganizerYField } from './organizer-config.interface';
2
+ export interface OrganizerYIndicator {
3
+ id: string;
4
+ label: string;
5
+ group?: string;
6
+ }
7
+ export declare function buildYFields(indicators: OrganizerYIndicator[]): OrganizerYField[];
8
+ export declare function resolveYKey(selectedY: string | undefined, selectedYAggregate: string | undefined): string | undefined;
@@ -0,0 +1,51 @@
1
+ import { EventEmitter, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
2
+ import { MatMenuTrigger } from '@angular/material/menu';
3
+ import { OrganizerConfig, OrganizerButtonEvent, OrganizerSliceState, OrganizerState } from '../models';
4
+ import * as i0 from "@angular/core";
5
+ export declare class OrganizerButtonComponent implements OnInit, OnDestroy {
6
+ private cdr;
7
+ config: OrganizerConfig;
8
+ state?: OrganizerState;
9
+ hideMenuValues: boolean;
10
+ viewChange: EventEmitter<OrganizerButtonEvent>;
11
+ sliceStateChange: EventEmitter<OrganizerSliceState>;
12
+ loadingFieldId?: string;
13
+ private fieldDataCache;
14
+ private destroy$;
15
+ mainMenuTrigger?: MatMenuTrigger;
16
+ constructor(cdr: ChangeDetectorRef);
17
+ ngOnInit(): void;
18
+ ngOnDestroy(): void;
19
+ isFieldVisible(fieldId: string): boolean;
20
+ fieldsSummary(): string;
21
+ onFieldToggle(fieldId: string, visible: boolean): void;
22
+ onXFieldSelect(fieldId: string): void;
23
+ onYFieldSelect(fieldId: string): void;
24
+ onYAggregateSelect(yFieldId: string, aggregateId: string): void;
25
+ onGroupBySelect(groupId: string): void;
26
+ onTemplateSelect(templateId: string): void;
27
+ onSliceClick(sliceId?: string): void;
28
+ loadFieldData(fieldId: string): Promise<void>;
29
+ onExport(): void;
30
+ onExportVisual(): void;
31
+ onExportData(): void;
32
+ hasExportSubMenu(): boolean;
33
+ hasSwitchView(): boolean;
34
+ onSwitchView(): void;
35
+ onPreferencesEdit(): void;
36
+ onPreferencesSave(): void;
37
+ onPreferencesClear(): void;
38
+ onReset(): void;
39
+ activeXLabel(): string;
40
+ activeYLabel(): string;
41
+ activeGroupByLabel(): string;
42
+ activeSlicesLabel(): string;
43
+ activeTemplateLabel(): string;
44
+ hasChartFields(): boolean;
45
+ hasTableFields(): boolean;
46
+ isYActive(yFieldId: string): boolean;
47
+ isYAggregateActive(yFieldId: string, aggregateId: string): boolean;
48
+ private emitChange;
49
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrganizerButtonComponent, never>;
50
+ 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>;
51
+ }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./organizer-button.component";
3
+ import * as i2 from "../slice-panel/slice-panel.component";
4
+ export declare class OrganizerButtonModule {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrganizerButtonModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<OrganizerButtonModule, never, [typeof i1.OrganizerButtonComponent, typeof i2.SlicePanelComponent], [typeof i1.OrganizerButtonComponent, typeof i2.SlicePanelComponent]>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<OrganizerButtonModule>;
8
+ }