ngssm-ag-grid 20.2.0 → 20.2.2

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.
@@ -17,15 +17,16 @@ var AgGridActionType;
17
17
  (function (AgGridActionType) {
18
18
  AgGridActionType["registerAgGridState"] = "[AgGridActionType] registerAgGridState";
19
19
  AgGridActionType["registerSelectedRows"] = "[AgGridActionType] registerSelectedRows";
20
- AgGridActionType["saveColumnsStateOnDisk"] = "[AgGridActionType] saveColumnsStateOnDisk";
21
- AgGridActionType["resetColumnsStateFromDisk"] = "[AgGridActionType] resetColumnsStateFromDisk";
20
+ AgGridActionType["savecolumnStatesOnDisk"] = "[AgGridActionType] savecolumnStatesOnDisk";
21
+ AgGridActionType["resetcolumnStatesFromDisk"] = "[AgGridActionType] resetcolumnStatesFromDisk";
22
22
  })(AgGridActionType || (AgGridActionType = {}));
23
23
 
24
24
  class RegisterAgGridStateAction {
25
- constructor(gridId, origin, columnStates, filterModel) {
25
+ constructor(gridId, origin, columnStates, columnGroupStates, filterModel) {
26
26
  this.gridId = gridId;
27
27
  this.origin = origin;
28
28
  this.columnStates = columnStates;
29
+ this.columnGroupStates = columnGroupStates;
29
30
  this.filterModel = filterModel;
30
31
  this.type = AgGridActionType.registerAgGridState;
31
32
  }
@@ -216,10 +217,10 @@ class NgssmActionsCellRendererComponent {
216
217
  setupPopupComponent(component, action) {
217
218
  component?.init?.(action.popupRendered, this.cellParams, action.actionConfig.popupParameter);
218
219
  }
219
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NgssmActionsCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
220
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: NgssmActionsCellRendererComponent, isStandalone: true, selector: "ngssm-actions-cell-renderer", ngImport: i0, template: "<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n", dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NgssmActionsCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
221
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.6", type: NgssmActionsCellRendererComponent, isStandalone: true, selector: "ngssm-actions-cell-renderer", ngImport: i0, template: "<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n", dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
221
222
  }
222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NgssmActionsCellRendererComponent, decorators: [{
223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NgssmActionsCellRendererComponent, decorators: [{
223
224
  type: Component,
224
225
  args: [{ selector: 'ngssm-actions-cell-renderer', imports: [MatIconButton, MatIcon, MatTooltip, CdkOverlayOrigin, CdkConnectedOverlay, NgssmComponentDisplayDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n" }]
225
226
  }] });
@@ -238,7 +239,8 @@ const defaultAgGridColumnsEvents = [
238
239
  'columnPinned',
239
240
  'columnResized',
240
241
  'displayedColumnsChanged',
241
- 'filterChanged'
242
+ 'filterChanged',
243
+ 'columnGroupOpened'
242
244
  ];
243
245
 
244
246
  /**
@@ -276,10 +278,10 @@ class NgssmAgGridThemeDirective {
276
278
  this.agGridAngular.defaultColDef = this.options?.defaultColDef;
277
279
  }
278
280
  }
279
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NgssmAgGridThemeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
280
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.4", type: NgssmAgGridThemeDirective, isStandalone: true, selector: "[ngssmAgGridTheme]", host: { properties: { "class": "this.className" } }, ngImport: i0 }); }
281
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NgssmAgGridThemeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
282
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.6", type: NgssmAgGridThemeDirective, isStandalone: true, selector: "[ngssmAgGridTheme]", host: { properties: { "class": "this.className" } }, ngImport: i0 }); }
281
283
  }
282
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NgssmAgGridThemeDirective, decorators: [{
284
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NgssmAgGridThemeDirective, decorators: [{
283
285
  type: Directive,
284
286
  args: [{
285
287
  selector: '[ngssmAgGridTheme]',
@@ -324,9 +326,10 @@ class NgssmAgGridDirective {
324
326
  };
325
327
  }
326
328
  }]));
329
+ this.logger.information(`[NgssmAgGridDirective] Initialization...`);
327
330
  // Setup gridInintialized signal
328
331
  this.agGridAngular.gridReady.pipe(take(1)).subscribe(() => this.gridInitialized.set(true));
329
- // Apply registered grid setup is any and start listening to ag-grid events
332
+ // Apply registered grid setup if any and start listening to ag-grid events
330
333
  const effectRef = effect(() => {
331
334
  if (!this.gridInitialized()) {
332
335
  return;
@@ -334,8 +337,9 @@ class NgssmAgGridDirective {
334
337
  this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' in progress`);
335
338
  const gridState = this.gridStates()[this.config().gridId];
336
339
  if (gridState) {
340
+ this.agGridAngular.api.setColumnGroupState(gridState.columnGroupStates);
337
341
  this.agGridAngular.api.applyColumnState({
338
- state: gridState.columnsState,
342
+ state: gridState.columnStates,
339
343
  applyOrder: true
340
344
  });
341
345
  this.agGridAngular.api.setFilterModel(gridState.filterModel);
@@ -362,8 +366,9 @@ class NgssmAgGridDirective {
362
366
  }
363
367
  const gridState = this.gridStates()[this.config().gridId];
364
368
  if (gridState?.origin === ChangeOrigin.other) {
369
+ this.agGridAngular.api.setColumnGroupState(gridState.columnGroupStates);
365
370
  this.agGridAngular.api.applyColumnState({
366
- state: gridState.columnsState,
371
+ state: gridState.columnStates,
367
372
  applyOrder: true
368
373
  });
369
374
  this.agGridAngular.api.setFilterModel(gridState.filterModel);
@@ -389,6 +394,7 @@ class NgssmAgGridDirective {
389
394
  });
390
395
  });
391
396
  this.agGridAngular.getContextMenuItems = (params) => this.getContextMenuItems(params);
397
+ this.logger.information(`[NgssmAgGridDirective] Initialization done.`);
392
398
  }
393
399
  initSateChangeListener() {
394
400
  (this.config().listenedColumnsEvents ?? defaultAgGridColumnsEvents).forEach((eventType) => {
@@ -399,7 +405,8 @@ class NgssmAgGridDirective {
399
405
  saveGridState() {
400
406
  const state = this.agGridAngular.api.getColumnState();
401
407
  const filterModel = this.agGridAngular.api.getFilterModel();
402
- this.store.dispatchAction(new RegisterAgGridStateAction(this.config().gridId, ChangeOrigin.agGrid, state, filterModel));
408
+ const columnGroupStates = this.agGridAngular.api.getColumnGroupState();
409
+ this.store.dispatchAction(new RegisterAgGridStateAction(this.config().gridId, ChangeOrigin.agGrid, state, columnGroupStates, filterModel));
403
410
  }
404
411
  processSelectionChanged() {
405
412
  if (this.config().keepSelection !== true) {
@@ -421,24 +428,25 @@ class NgssmAgGridDirective {
421
428
  else {
422
429
  menuItems.push(...(params.defaultItems ?? []));
423
430
  }
424
- if (this.config().canSaveOnDiskColumnsState === true) {
431
+ if (this.config().canSaveOnDiskcolumnStates === true) {
425
432
  const gridId = this.config().gridId;
426
433
  menuItems.push(...[
427
434
  'separator',
428
435
  {
429
436
  name: 'Save columns state',
430
- action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.saveColumnsStateOnDisk, gridId)),
437
+ action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.savecolumnStatesOnDisk, gridId)),
431
438
  icon: '<i class="fa-regular fa-floppy-disk"></i>'
432
439
  },
433
440
  {
434
441
  name: 'Restore columns state',
435
- action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.resetColumnsStateFromDisk, gridId)),
442
+ action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.resetcolumnStatesFromDisk, gridId)),
436
443
  icon: '<i class="fa-solid fa-rotate-right"></i>'
437
444
  },
438
445
  {
439
446
  name: 'Reset columns state to default',
440
447
  action: () => {
441
448
  this.agGridAngular.api.resetColumnState();
449
+ this.agGridAngular.api.resetColumnGroupState();
442
450
  this.agGridAngular.api.setFilterModel(null);
443
451
  },
444
452
  icon: '<i class="fa-solid fa-clock-rotate-left"></i>'
@@ -447,10 +455,10 @@ class NgssmAgGridDirective {
447
455
  }
448
456
  return menuItems;
449
457
  }
450
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NgssmAgGridDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
451
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.4", type: NgssmAgGridDirective, isStandalone: true, selector: "[ngssmAgGrid]", inputs: { config: { classPropertyName: "config", publicName: "ngssmAgGrid", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
458
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NgssmAgGridDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
459
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.6", type: NgssmAgGridDirective, isStandalone: true, selector: "[ngssmAgGrid]", inputs: { config: { classPropertyName: "config", publicName: "ngssmAgGrid", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
452
460
  }
453
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NgssmAgGridDirective, decorators: [{
461
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NgssmAgGridDirective, decorators: [{
454
462
  type: Directive,
455
463
  args: [{
456
464
  selector: '[ngssmAgGrid]'
@@ -580,10 +588,10 @@ class ActionConfirmationPopupComponent {
580
588
  this.popupParameter?.confirmAction?.(this.params);
581
589
  this.closePopup();
582
590
  }
583
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ActionConfirmationPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
584
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: ActionConfirmationPopupComponent, isStandalone: true, selector: "ngssm-action-confirmation-popup", ngImport: i0, template: "<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n", dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
591
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ActionConfirmationPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
592
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: ActionConfirmationPopupComponent, isStandalone: true, selector: "ngssm-action-confirmation-popup", ngImport: i0, template: "<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n", dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
585
593
  }
586
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ActionConfirmationPopupComponent, decorators: [{
594
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ActionConfirmationPopupComponent, decorators: [{
587
595
  type: Component,
588
596
  args: [{ selector: 'ngssm-action-confirmation-popup', imports: [MatCard, MatCardHeader, MatCardTitle, MatCardActions, MatButton], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n" }]
589
597
  }] });
@@ -600,30 +608,32 @@ const getColDefForEditableColumn = () => ({
600
608
  class LocalStorageEffect {
601
609
  constructor() {
602
610
  this.logger = inject(Logger);
603
- this.processedActions = [AgGridActionType.saveColumnsStateOnDisk, AgGridActionType.resetColumnsStateFromDisk];
611
+ this.processedActions = [AgGridActionType.savecolumnStatesOnDisk, AgGridActionType.resetcolumnStatesFromDisk];
604
612
  }
605
613
  processAction(actiondispatcher, state, action) {
606
614
  const agGridAction = action;
607
615
  switch (action.type) {
608
- case AgGridActionType.saveColumnsStateOnDisk: {
616
+ case AgGridActionType.savecolumnStatesOnDisk: {
609
617
  const gridState = selectAgGridState(state).gridStates[agGridAction.gridId];
610
618
  if (gridState) {
611
- localStorage.setItem(this.getColumnsStateLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnsState));
619
+ localStorage.setItem(this.getcolumnStatesLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnStates));
620
+ localStorage.setItem(this.getcolumnGroupStatesLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnGroupStates));
612
621
  if (gridState.filterModel) {
613
622
  localStorage.setItem(this.getFilterModelLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.filterModel));
614
623
  }
615
624
  }
616
625
  break;
617
626
  }
618
- case AgGridActionType.resetColumnsStateFromDisk: {
619
- const stored = localStorage.getItem(this.getColumnsStateLocalStorageKey(agGridAction.gridId));
627
+ case AgGridActionType.resetcolumnStatesFromDisk: {
628
+ const stored = localStorage.getItem(this.getcolumnStatesLocalStorageKey(agGridAction.gridId));
629
+ const columnGroupStates = localStorage.getItem(this.getcolumnGroupStatesLocalStorageKey(agGridAction.gridId));
620
630
  const filterModelStored = localStorage.getItem(this.getFilterModelLocalStorageKey(agGridAction.gridId));
621
631
  console.log(stored, filterModelStored);
622
632
  if (stored) {
623
633
  try {
624
- const columnsState = JSON.parse(stored);
625
- if (Array.isArray(columnsState)) {
626
- const action = new RegisterAgGridStateAction(agGridAction.gridId, ChangeOrigin.other, columnsState, filterModelStored ? JSON.parse(filterModelStored) : null);
634
+ const columnStates = JSON.parse(stored);
635
+ if (Array.isArray(columnStates)) {
636
+ const action = new RegisterAgGridStateAction(agGridAction.gridId, ChangeOrigin.other, columnStates, columnGroupStates ? JSON.parse(columnGroupStates) : [], filterModelStored ? JSON.parse(filterModelStored) : null);
627
637
  actiondispatcher.dispatchAction(action);
628
638
  }
629
639
  else {
@@ -638,16 +648,19 @@ class LocalStorageEffect {
638
648
  }
639
649
  }
640
650
  }
641
- getColumnsStateLocalStorageKey(gridId) {
651
+ getcolumnStatesLocalStorageKey(gridId) {
642
652
  return `ngssm-ag-grid_${gridId}`;
643
653
  }
654
+ getcolumnGroupStatesLocalStorageKey(gridId) {
655
+ return `ngssm-ag-grid_groups_${gridId}`;
656
+ }
644
657
  getFilterModelLocalStorageKey(gridId) {
645
658
  return `ngssm-ag-grid_filters_${gridId}`;
646
659
  }
647
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LocalStorageEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
648
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LocalStorageEffect }); }
660
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: LocalStorageEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
661
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: LocalStorageEffect }); }
649
662
  }
650
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LocalStorageEffect, decorators: [{
663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: LocalStorageEffect, decorators: [{
651
664
  type: Injectable
652
665
  }] });
653
666
 
@@ -664,7 +677,8 @@ class GridStatesReducer {
664
677
  [registerAgGridStateAction.gridId]: {
665
678
  $set: {
666
679
  origin: registerAgGridStateAction.origin,
667
- columnsState: registerAgGridStateAction.columnStates,
680
+ columnStates: registerAgGridStateAction.columnStates,
681
+ columnGroupStates: registerAgGridStateAction.columnGroupStates,
668
682
  filterModel: registerAgGridStateAction.filterModel
669
683
  }
670
684
  }
@@ -674,10 +688,10 @@ class GridStatesReducer {
674
688
  }
675
689
  return state;
676
690
  }
677
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GridStatesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
678
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GridStatesReducer }); }
691
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: GridStatesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
692
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: GridStatesReducer }); }
679
693
  }
680
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GridStatesReducer, decorators: [{
694
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: GridStatesReducer, decorators: [{
681
695
  type: Injectable
682
696
  }] });
683
697
 
@@ -703,10 +717,10 @@ class SelectedRowsReducer {
703
717
  }
704
718
  return state;
705
719
  }
706
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SelectedRowsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
707
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SelectedRowsReducer }); }
720
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: SelectedRowsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
721
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: SelectedRowsReducer }); }
708
722
  }
709
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SelectedRowsReducer, decorators: [{
723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: SelectedRowsReducer, decorators: [{
710
724
  type: Injectable
711
725
  }] });
712
726
 
@@ -728,7 +742,7 @@ const loadGridStates = () => {
728
742
  if (key?.startsWith(wantedPrefix)) {
729
743
  const gridId = key.slice(wantedPrefix.length);
730
744
  logger.information(`[ag-grid] Restoring '${gridId}'.`);
731
- store.dispatchAction(new AgGridAction(AgGridActionType.resetColumnsStateFromDisk, gridId));
745
+ store.dispatchAction(new AgGridAction(AgGridActionType.resetcolumnStatesFromDisk, gridId));
732
746
  }
733
747
  }
734
748
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ngssm-ag-grid.mjs","sources":["../../../projects/ngssm-ag-grid/src/lib/actions/ag-grid-action-type.ts","../../../projects/ngssm-ag-grid/src/lib/actions/register-ag-grid-state.action.ts","../../../projects/ngssm-ag-grid/src/lib/actions/register-selected-rows.action.ts","../../../projects/ngssm-ag-grid/src/lib/actions/ag-grid.action.ts","../../../projects/ngssm-ag-grid/src/lib/state/ag-grid.state.ts","../../../projects/ngssm-ag-grid/src/lib/state/change-origin.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer.component.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer.component.html","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer-params.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid-config.ts","../../../projects/ngssm-ag-grid/src/lib/ngssm-ag-grid-options.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid-theme.directive.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid.directive.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-base-cell-editor.ts","../../../projects/ngssm-ag-grid/src/lib/components/action-confirmation-popup/action-confirmation-popup.component.ts","../../../projects/ngssm-ag-grid/src/lib/components/action-confirmation-popup/action-confirmation-popup.component.html","../../../projects/ngssm-ag-grid/src/lib/helpers.ts","../../../projects/ngssm-ag-grid/src/lib/effects/local-storage.effect.ts","../../../projects/ngssm-ag-grid/src/lib/reducers/grid-states.reducer.ts","../../../projects/ngssm-ag-grid/src/lib/reducers/selected-rows.reducer.ts","../../../projects/ngssm-ag-grid/src/lib/provide-ngssm-ag-grid.ts","../../../projects/ngssm-ag-grid/src/public-api.ts","../../../projects/ngssm-ag-grid/src/ngssm-ag-grid.ts"],"sourcesContent":["export enum AgGridActionType {\n registerAgGridState = '[AgGridActionType] registerAgGridState',\n registerSelectedRows = '[AgGridActionType] registerSelectedRows',\n saveColumnsStateOnDisk = '[AgGridActionType] saveColumnsStateOnDisk',\n resetColumnsStateFromDisk = '[AgGridActionType] resetColumnsStateFromDisk'\n}\n","import { ColumnState, FilterModel } from 'ag-grid-community';\n\nimport { Action } from 'ngssm-store';\n\nimport { ChangeOrigin } from '../state';\nimport { AgGridActionType } from './ag-grid-action-type';\n\nexport class RegisterAgGridStateAction implements Action {\n public readonly type: string = AgGridActionType.registerAgGridState;\n\n constructor(\n public readonly gridId: string,\n public readonly origin: ChangeOrigin,\n public readonly columnStates: ColumnState[],\n public readonly filterModel: FilterModel | null\n ) {}\n}\n","import { Action } from 'ngssm-store';\nimport { ChangeOrigin } from '../state';\nimport { AgGridActionType } from './ag-grid-action-type';\n\nexport class RegisterSelectedRowsAction implements Action {\n public readonly type: string = AgGridActionType.registerSelectedRows;\n\n constructor(\n public readonly gridId: string,\n public readonly origin: ChangeOrigin,\n public readonly ids: string[]\n ) {}\n}\n","import { Action } from 'ngssm-store';\n\nexport class AgGridAction implements Action {\n constructor(\n public readonly type: string,\n public readonly gridId: string\n ) {}\n}\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { GridState } from './grid-state';\nimport { SelectedRows } from './selected-rows';\n\nexport const selectAgGridState = (state: State): AgGridState => state[AgGridStateSpecification.featureStateKey] as AgGridState;\n\nexport const updateAgGridState = (state: State, command: Spec<AgGridState, never>): State =>\n update(state, {\n [AgGridStateSpecification.featureStateKey]: command\n });\n\nexport interface AgGridState {\n gridStates: Record<string, GridState>;\n selectedRows: Record<string, SelectedRows>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: AgGridStateSpecification.featureStateKey,\n initialState: AgGridStateSpecification.initialState\n})\nexport class AgGridStateSpecification {\n public static readonly featureStateKey = 'ag-grid-state';\n public static readonly initialState: AgGridState = {\n gridStates: {},\n selectedRows: {}\n };\n}\n","export enum ChangeOrigin {\n agGrid = 'agGrid',\n other = 'other'\n}\n","/**\n * The `NgssmActionsCellRendererComponent` is a custom cell renderer for `ag-grid` that dynamically renders\n * action buttons within a grid cell. It provides flexibility in configuring button behavior, visibility, and state.\n *\n * ### Features:\n * - Dynamically generates action buttons based on the provided configuration.\n * - Supports reactive state management using Angular signals.\n * - Integrates with observables, functions, or signals for `isDisabled` and `isHidden` properties.\n * - Provides customizable tooltips and button styles.\n * - Executes custom actions when buttons are clicked.\n *\n * ### Usage:\n * To use this component, provide it as a cell renderer in your `ag-grid` column definition:\n *\n * ```typescript\n * columnDefs: [\n * {\n * headerName: 'Actions',\n * field: 'actions',\n * cellRenderer: NgssmActionsCellRendererComponent,\n * cellRendererParams: {\n * actions: [\n * {\n * cssClass: 'delete-button',\n * color: 'warn',\n * tooltip: 'Delete Item',\n * isDisabled: (params) => params.data.isLocked,\n * isHidden: (params) => !params.data.canDelete,\n * click: (params) => console.log('Delete action clicked', params)\n * }\n * ]\n * }\n * }\n * ];\n * ```\n *\n * ### Inputs:\n * - `NgssmActionsCellRendererParams`: Configuration object passed to the component via `cellRendererParams`.\n * - `actions`: Array of `ActionConfig` objects defining the buttons to render.\n *\n * ### Outputs:\n * None.\n *\n * ### Dependencies:\n * - Angular Material components: `MatIconButton`, `MatIcon`, `MatTooltip`.\n * - `ag-grid-angular` for integration with `ag-grid`.\n *\n * ### Example ActionConfig:\n * ```typescript\n * interface ActionConfig {\n * cssClass: string; // CSS class for the button.\n * color?: string; // Button color (e.g., 'primary', 'warn').\n * tooltip?: string; // Tooltip text for the button.\n * isDisabled?: boolean | Signal<boolean> | Observable<boolean> | ((params: ICellRendererParams) => boolean);\n * isHidden?: boolean | Signal<boolean> | Observable<boolean> | ((params: ICellRendererParams) => boolean);\n * click?: (params: ICellRendererParams) => void; // Action to execute on button click.\n * }\n * ```\n *\n * ### Methods:\n * - `agInit(params: ICellRendererParams)`: Initializes the component with the provided cell renderer parameters.\n * - `refresh(params: ICellRendererParams)`: Refreshes the component state when the grid updates.\n * - `executeAction(action: ActionButton)`: Executes the action associated with a button.\n *\n * ### Internal Logic:\n * - The `setupActions` method initializes the action buttons based on the provided configuration.\n * - The `setUpActionSignal` method handles the initialization of `isDisabled` and `isHidden` states for each button.\n * - The component uses Angular signals (`WritableSignal` and `Signal`) to manage the state of `isDisabled` and `isHidden`.\n * - Observables are converted to signals using `toSignal` for seamless integration with Angular's reactivity system.\n *\n * ### Change Detection:\n * - The component uses `ChangeDetectionStrategy.OnPush` for improved performance by minimizing unnecessary change detection cycles.\n *\n * ### Notes:\n * - Ensure that the `actions` array in `NgssmActionsCellRendererParams` is properly configured to avoid runtime errors.\n * - The component is designed to work with Angular Material and requires the relevant modules to be imported in your application.\n * - The `isDisabled` and `isHidden` properties can accept multiple input types (boolean, function, signal, or observable), providing flexibility in defining button behavior.\n */\n\nimport {\n Component,\n ChangeDetectionStrategy,\n signal,\n WritableSignal,\n Signal,\n inject,\n EnvironmentInjector,\n runInInjectionContext,\n isSignal\n} from '@angular/core';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIconButton } from '@angular/material/button';\nimport { isObservable } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\nimport { ICellRendererParams } from 'ag-grid-community';\n\nimport { NgssmComponentAction, NgssmComponentDisplayDirective } from 'ngssm-toolkit';\n\nimport { NgssmActionsCellRendererParams } from './ngssm-actions-cell-renderer-params';\nimport { ActionConfig, ActionDisabledFunc, ActionHiddenFunc, ActionPopupComponent } from './action-config';\n\ninterface ActionButton {\n cssClass: string;\n color: string;\n\n isDisabled: WritableSignal<boolean> | Signal<boolean>;\n isHidden: WritableSignal<boolean> | Signal<boolean>;\n\n isDisabledInputAFunction: boolean;\n isHiddenInputAFunction: boolean;\n\n actionConfig: ActionConfig;\n\n tooltip: string;\n\n popupRendered: WritableSignal<boolean>;\n popupAction?: NgssmComponentAction;\n}\n\n@Component({\n selector: 'ngssm-actions-cell-renderer',\n imports: [MatIconButton, MatIcon, MatTooltip, CdkOverlayOrigin, CdkConnectedOverlay, NgssmComponentDisplayDirective],\n templateUrl: './ngssm-actions-cell-renderer.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmActionsCellRendererComponent implements ICellRendererAngularComp {\n private environmentInjector = inject(EnvironmentInjector);\n private cellParams: ICellRendererParams | undefined;\n\n public readonly actionButtons = signal<ActionButton[]>([]);\n\n public agInit(params: ICellRendererParams): void {\n this.cellParams = params;\n this.setupActions(params as unknown as NgssmActionsCellRendererParams);\n }\n\n public refresh(params: ICellRendererParams): boolean {\n this.cellParams = params;\n this.actionButtons().forEach((a) => {\n if (a.isDisabledInputAFunction) {\n (a.isDisabled as WritableSignal<boolean>).set((a.actionConfig.isDisabled as ActionDisabledFunc)(params));\n }\n\n if (a.isHiddenInputAFunction) {\n (a.isHidden as WritableSignal<boolean>).set((a.actionConfig.isHidden as ActionHiddenFunc)(params));\n }\n });\n return true;\n }\n\n public executeAction(action: ActionButton): void {\n const params = this.cellParams;\n if (params) {\n action.actionConfig.click?.(params);\n }\n }\n\n private setupActions(rendererParams: NgssmActionsCellRendererParams): void {\n runInInjectionContext(this.environmentInjector, () => {\n const actionButtons: ActionButton[] = (rendererParams?.actions ?? []).map((a) => {\n const actionButton: ActionButton = {\n cssClass: a.cssClass,\n color: a.color ?? 'primary',\n isDisabled: signal(false),\n isDisabledInputAFunction: false,\n isHidden: signal(false),\n isHiddenInputAFunction: false,\n actionConfig: a,\n tooltip: a.tooltip ?? '',\n popupRendered: signal(false)\n };\n\n if (a.popupComponent) {\n actionButton.popupAction = ((component: ActionPopupComponent) =>\n this.setupPopupComponent(component, actionButton)) as NgssmComponentAction;\n }\n\n this.setUpActionSignal(actionButton, a, rendererParams, 'isDisabled');\n this.setUpActionSignal(actionButton, a, rendererParams, 'isHidden');\n\n return actionButton;\n });\n\n this.actionButtons.set(actionButtons);\n });\n }\n\n private setUpActionSignal(\n actionButton: ActionButton,\n config: ActionConfig,\n rendererParams: NgssmActionsCellRendererParams,\n signalName: 'isDisabled' | 'isHidden'\n ): void {\n const input = config[signalName];\n\n if (isSignal(input)) {\n actionButton[signalName] = input as Signal<boolean>;\n } else if (input instanceof Function) {\n (actionButton[signalName] as WritableSignal<boolean>).set(input(rendererParams as unknown as ICellRendererParams));\n actionButton[`${signalName}InputAFunction`] = true;\n } else if (isObservable(input)) {\n actionButton[signalName] = toSignal(input, { initialValue: false });\n }\n }\n\n private setupPopupComponent(component: ActionPopupComponent, action: ActionButton): void {\n component?.init?.(action.popupRendered, this.cellParams as unknown as ICellRendererParams, action.actionConfig.popupParameter);\n }\n}\n","<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n","import { ColDef } from 'ag-grid-community';\n\nimport { ActionConfig } from './action-config';\nimport { NgssmActionsCellRendererComponent } from './ngssm-actions-cell-renderer.component';\n\n// Parameters of the actions cell renderer\n// For now, an action is rendered as a mat-icon-button with the class passed in ActionConfig\nexport interface NgssmActionsCellRendererParams<TData = unknown, TValue = unknown> {\n actions: ActionConfig<TData, TValue>[];\n}\n\nexport const getNgssmActionsCellColDef = <TData = unknown, TValue = unknown>(\n params: NgssmActionsCellRendererParams<TData, TValue>\n): Partial<ColDef> => ({\n cellRenderer: NgssmActionsCellRendererComponent,\n cellRendererParams: params\n});\n","import { AgPublicEventType, GetContextMenuItems } from 'ag-grid-community';\n\n/**\n * List of default ag-grid events listened by the directive to update the stored state.\n */\nexport const defaultAgGridColumnsEvents: AgPublicEventType[] = [\n 'sortChanged',\n 'filterChanged',\n 'columnPinned',\n 'columnResized',\n 'displayedColumnsChanged',\n 'filterChanged'\n];\n\n/**\n * Configuration parameters of the {@link NgssmAgGridDirective} directive to apply on a\n * {@link https://www.ag-grid.com/ ag-grid instance}\n */\nexport interface NgssmAgGridConfig {\n /**\n * Unique identifier of the grid on which the directive is applied\n */\n gridId: string;\n\n /**\n * If true, the selected rows are stored in the state and restored when the directive is created.\n */\n keepSelection?: boolean;\n\n /**\n * If true, context menus are added to the grid to save the columns state into the local storage\n * and to restore from the local storage.\n *\n * @remarks\n *\n * this functionnality is only available for enterprise version of {@link https://www.ag-grid.com/}.\n */\n canSaveOnDiskColumnsState?: boolean;\n\n /**\n * Used to override default context menu items.\n */\n getContextMenuItems?: GetContextMenuItems;\n\n /**\n * Defines the list of ag-grid events listened to by the directive to update the state of stored columns.\n * By default: defaultAgGridColumnsEvents\n */\n listenedColumnsEvents?: AgPublicEventType[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { ColDef, StatusPanelDef } from 'ag-grid-community';\n\n/**\n * Configuration options for NgssmAgGrid.\n * - theme: The CSS theme to use for the grid.\n * - statusBar: Optional status bar configuration for AG Grid.\n * - defaultColDef: Optional default column definition for all columns.\n * - loadSavedGridStatesAtStartup: If true, grid states saved in local storage are loaded during app initialization.\n */\nexport class NgssmAgGridOptions {\n theme = 'ag-theme-material';\n statusBar:\n | {\n statusPanels: StatusPanelDef[];\n }\n | undefined = undefined;\n defaultColDef: ColDef | undefined = undefined;\n loadSavedGridStatesAtStartup?: boolean = undefined;\n}\n\n/**\n * Injection token for providing NgssmAgGridOptions in Angular DI.\n *\n * Provide options through the provideNgssmAgGrid function instead of using this token.\n */\nexport const NGSSM_AG_GRID_OPTIONS = new InjectionToken<NgssmAgGridOptions>('NGSSM_AG_GRID_OPTIONS');\n","import { Directive, HostBinding, inject } from '@angular/core';\n\nimport { AgGridAngular } from 'ag-grid-angular';\n\nimport { NgssmAgGridOptions, NGSSM_AG_GRID_OPTIONS } from '../ngssm-ag-grid-options';\n\n@Directive({\n selector: '[ngssmAgGridTheme]',\n standalone: true\n})\nexport class NgssmAgGridThemeDirective {\n private readonly options: NgssmAgGridOptions | null = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n private agGridAngular = inject(AgGridAngular);\n\n @HostBinding('class') className = '';\n\n constructor() {\n this.className = (this.options ?? new NgssmAgGridOptions()).theme;\n if (this.agGridAngular.statusBar === undefined) {\n this.agGridAngular.statusBar = this.options?.statusBar;\n }\n\n if (this.agGridAngular.defaultColDef === undefined) {\n this.agGridAngular.defaultColDef = this.options?.defaultColDef;\n }\n }\n}\n","import { Directive, inject, signal, input, effect, runInInjectionContext, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { take } from 'rxjs';\n\nimport { AgGridAngular } from 'ag-grid-angular';\nimport { DefaultMenuItem, GetContextMenuItemsParams, MenuItemDef } from 'ag-grid-community';\n\nimport { createSignal, Logger, Store } from 'ngssm-store';\n\nimport { AgGridAction, AgGridActionType, RegisterAgGridStateAction, RegisterSelectedRowsAction } from '../actions';\nimport { ChangeOrigin, selectAgGridState } from '../state';\nimport { defaultAgGridColumnsEvents, NgssmAgGridConfig } from './ngssm-ag-grid-config';\n\n@Directive({\n selector: '[ngssmAgGrid]'\n})\nexport class NgssmAgGridDirective {\n private readonly logger = inject(Logger);\n private readonly store = inject(Store);\n private readonly agGridAngular = inject(AgGridAngular);\n private readonly injector = inject(Injector);\n\n private readonly gridInitialized = signal(false);\n private readonly gridStates = createSignal((state) => selectAgGridState(state).gridStates);\n private readonly selectedRows = createSignal((state) => selectAgGridState(state).selectedRows);\n\n public readonly config = input.required<NgssmAgGridConfig, string | NgssmAgGridConfig>({\n alias: 'ngssmAgGrid',\n transform: (v) => {\n if (typeof v === 'string') {\n return {\n gridId: v as string\n };\n }\n\n const conf = v as NgssmAgGridConfig;\n return {\n ...conf\n };\n }\n });\n\n constructor() {\n // Setup gridInintialized signal\n this.agGridAngular.gridReady.pipe(take(1)).subscribe(() => this.gridInitialized.set(true));\n\n // Apply registered grid setup is any and start listening to ag-grid events\n const effectRef = effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' in progress`);\n\n const gridState = this.gridStates()[this.config().gridId];\n if (gridState) {\n this.agGridAngular.api.applyColumnState({\n state: gridState.columnsState,\n applyOrder: true\n });\n this.agGridAngular.api.setFilterModel(gridState.filterModel);\n }\n\n if (this.config().keepSelection) {\n const selection = this.selectedRows()[this.config().gridId];\n if (selection) {\n const ids = selection.ids ?? [];\n this.agGridAngular.api.forEachNode((node) => {\n if (node.id) {\n node.setSelected(ids.includes(node.id));\n }\n });\n }\n }\n\n runInInjectionContext(this.injector, () => this.initSateChangeListener());\n\n effectRef.destroy();\n\n this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' done`);\n });\n\n // process changes in columns when not comming from ui\n effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n const gridState = this.gridStates()[this.config().gridId];\n if (gridState?.origin === ChangeOrigin.other) {\n this.agGridAngular.api.applyColumnState({\n state: gridState.columnsState,\n applyOrder: true\n });\n this.agGridAngular.api.setFilterModel(gridState.filterModel);\n }\n });\n\n // process changes in selection when not comming from ui\n effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n if (this.config().keepSelection !== true) {\n return;\n }\n\n const selection = this.selectedRows()[this.config().gridId];\n if (!selection || selection.origin !== ChangeOrigin.other) {\n return;\n }\n\n const ids = selection.ids ?? [];\n this.agGridAngular.api.forEachNode((node) => {\n if (node.id) {\n node.setSelected(ids.includes(node.id));\n }\n });\n });\n\n this.agGridAngular.getContextMenuItems = (params) => this.getContextMenuItems(params);\n }\n\n private initSateChangeListener(): void {\n (this.config().listenedColumnsEvents ?? defaultAgGridColumnsEvents).forEach((eventType) => {\n this.agGridAngular.api.addEventListener(eventType, () => this.saveGridState());\n });\n\n this.agGridAngular.rowSelected.pipe(takeUntilDestroyed()).subscribe(() => this.processSelectionChanged());\n }\n\n private saveGridState(): void {\n const state = this.agGridAngular.api.getColumnState();\n const filterModel = this.agGridAngular.api.getFilterModel();\n this.store.dispatchAction(new RegisterAgGridStateAction(this.config().gridId, ChangeOrigin.agGrid, state, filterModel));\n }\n\n private processSelectionChanged(): void {\n if (this.config().keepSelection !== true) {\n return;\n }\n\n const selectedRows = this.agGridAngular.api\n .getSelectedNodes()\n .map((n) => n.id ?? '')\n .filter((n) => n !== '');\n\n this.store.dispatchAction(new RegisterSelectedRowsAction(this.config().gridId, ChangeOrigin.agGrid, selectedRows));\n }\n\n private getContextMenuItems(params: GetContextMenuItemsParams): (DefaultMenuItem | MenuItemDef)[] {\n this.logger.information('[NgssmAgGridDirective] Generating the context menu...');\n const menuItems: (DefaultMenuItem | MenuItemDef)[] = [];\n const getContextMenuItems = this.config().getContextMenuItems;\n if (getContextMenuItems) {\n menuItems.push(...(getContextMenuItems(params) as (DefaultMenuItem | MenuItemDef)[]));\n } else {\n menuItems.push(...(params.defaultItems ?? []));\n }\n\n if (this.config().canSaveOnDiskColumnsState === true) {\n const gridId = this.config().gridId;\n menuItems.push(\n ...[\n 'separator' as DefaultMenuItem,\n {\n name: 'Save columns state',\n action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.saveColumnsStateOnDisk, gridId)),\n icon: '<i class=\"fa-regular fa-floppy-disk\"></i>'\n },\n {\n name: 'Restore columns state',\n action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.resetColumnsStateFromDisk, gridId)),\n icon: '<i class=\"fa-solid fa-rotate-right\"></i>'\n },\n {\n name: 'Reset columns state to default',\n action: () => {\n this.agGridAngular.api.resetColumnState();\n this.agGridAngular.api.setFilterModel(null);\n },\n icon: '<i class=\"fa-solid fa-clock-rotate-left\"></i>'\n }\n ]\n );\n }\n return menuItems;\n }\n}\n","import { ICellEditorAngularComp } from 'ag-grid-angular';\nimport { ICellEditorParams } from 'ag-grid-community';\n\nexport abstract class NgssmBaseCellEditor implements ICellEditorAngularComp {\n protected params?: ICellEditorParams;\n\n public agInit(params: ICellEditorParams): void {\n this.params = params;\n }\n\n public getValue() {\n return '';\n }\n\n public isPopup(): boolean {\n return true;\n }\n\n public getPopupPosition(): 'over' | 'under' | undefined {\n return 'over';\n }\n\n public isCancelAfterEnd(): boolean {\n return true;\n }\n\n public cancel(): void {\n this.params?.stopEditing();\n }\n}\n","import { ChangeDetectionStrategy, Component, signal, WritableSignal } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatCard, MatCardActions, MatCardTitle, MatCardHeader } from '@angular/material/card';\nimport { ICellRendererParams } from 'ag-grid-community';\n\nimport { ActionConfirmationPopupParameter } from './action-confirmation-popup-parameter';\nimport { ActionPopupComponent } from '../ngssm-actions-cell-renderer';\n\n/**\n * The `ActionConfirmationPopupComponent` is a reusable confirmation popup component designed to work with `ag-grid`.\n * It provides a customizable confirmation dialog for user actions, allowing developers to define messages, button labels,\n * and actions dynamically.\n *\n * ### Features:\n * - Displays a confirmation popup with customizable message, button labels, and color.\n * - Integrates with the `ActionPopupComponent` interface for seamless use with `NgssmActionsCellRendererComponent`.\n * - Uses Angular signals for efficient state management.\n * - Supports dynamic initialization with parameters provided by `ag-grid`.\n * - Provides methods to handle user actions (confirm or cancel) and close the popup.\n *\n * ### Usage:\n * This component is typically used as a popup in conjunction with the `NgssmActionsCellRendererComponent`.\n * To configure it, pass an `ActionConfirmationPopupParameter` object when initializing the popup.\n *\n * Example:\n * ```typescript\n * const popupParameter: ActionConfirmationPopupParameter = {\n * messageBuilder: (params) => `Are you sure you want to delete ${params.data.name}?`,\n * color: 'warn',\n * cancelButtonLabel: 'No',\n * confirmButtonLabel: 'Yes',\n * confirmAction: (params) => console.log('Confirmed action for:', params.data)\n * };\n * ```\n *\n * ### Inputs:\n * - `popupRendered`: A writable signal indicating whether the popup is currently rendered.\n * - `params`: The cell renderer parameters provided by `ag-grid`.\n * - `popupParameter`: An object of type `ActionConfirmationPopupParameter` that defines the popup's behavior and content.\n *\n * ### Outputs:\n * None.\n *\n * ### Dependencies:\n * - Angular Material components: `MatCard`, `MatButton`.\n * - `ag-grid-community` for integration with `ag-grid`.\n *\n * ### Methods:\n * - `init(popupRendered, params, popupParameter)`: Initializes the popup with the provided parameters.\n * - `popupRendered`: A writable signal to track the popup's visibility.\n * - `params`: The cell renderer parameters from `ag-grid`.\n * - `popupParameter`: The configuration object for the popup.\n *\n * - `closePopup()`: Closes the popup by setting the `isOpen` signal to `false`.\n *\n * - `executeAction()`: Executes the confirmation action defined in the `popupParameter` and closes the popup.\n *\n * ### Signals:\n * - `message`: The message displayed in the popup.\n * - `cancelButtonLabel`: The label for the cancel button.\n * - `confirmButtonLabel`: The label for the confirm button.\n * - `color`: The color theme for the confirm button (e.g., 'primary', 'warn').\n * - `isOpen`: Tracks whether the popup is currently open.\n *\n * ### Example Initialization:\n * ```typescript\n * const popup = new ActionConfirmationPopupComponent();\n * popup.init(\n * popupRenderedSignal,\n * cellRendererParams,\n * {\n * messageBuilder: (params) => `Are you sure you want to delete ${params.data.name}?`,\n * color: 'warn',\n * cancelButtonLabel: 'No',\n * confirmButtonLabel: 'Yes',\n * confirmAction: (params) => console.log('Confirmed action for:', params.data)\n * }\n * );\n * ```\n *\n * ### Notes:\n * - Ensure that the `popupParameter` object is properly configured to avoid runtime errors.\n * - The `messageBuilder` function in `popupParameter` allows dynamic message generation based on the `params` object.\n * - The component uses `ChangeDetectionStrategy.OnPush` for performance optimization.\n * - The `isOpen` signal can be used to programmatically control the popup's visibility.\n */\n@Component({\n selector: 'ngssm-action-confirmation-popup',\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardActions, MatButton],\n templateUrl: './action-confirmation-popup.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionConfirmationPopupComponent implements ActionPopupComponent<unknown, unknown, ActionConfirmationPopupParameter> {\n private params?: ICellRendererParams;\n private popupParameter?: ActionConfirmationPopupParameter;\n public readonly message = signal<string>('No message');\n public readonly cancelButtonLabel = signal<string>('No');\n public readonly confirmButtonLabel = signal<string>('Yes');\n public readonly color = signal<string>('primary');\n\n public isOpen = signal<boolean>(false);\n\n public init(\n popupRendered: WritableSignal<boolean>,\n params?: ICellRendererParams<unknown, unknown>,\n popupParameter?: ActionConfirmationPopupParameter\n ): void {\n this.params = params;\n this.popupParameter = popupParameter;\n\n this.message.set(popupParameter?.messageBuilder?.(params) ?? 'No message');\n this.color.set(popupParameter?.color ?? 'primary');\n this.cancelButtonLabel.set(popupParameter?.cancelButtonLabel ?? 'Cancel');\n this.confirmButtonLabel.set(popupParameter?.confirmButtonLabel ?? 'Confirm');\n\n this.isOpen = popupRendered;\n }\n\n public closePopup(): void {\n this.isOpen.set(false);\n }\n\n public executeAction(): void {\n this.popupParameter?.confirmAction?.(this.params);\n this.closePopup();\n }\n}\n","<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n","import { ColDef } from 'ag-grid-community';\n\nexport const getColDefWithNoPadding = (): Partial<ColDef> => ({\n cellClass: ['cell-with-no-padding']\n});\n\nexport const getColDefForEditableColumn = (): Partial<ColDef> => ({\n editable: true,\n headerClass: 'ngssm-ag-editable-cell',\n valueSetter: () => false\n});\n","import { inject, Injectable } from '@angular/core';\n\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport { AgGridAction, AgGridActionType, RegisterAgGridStateAction } from '../actions';\nimport { ChangeOrigin, selectAgGridState } from '../state';\n\n@Injectable()\nexport class LocalStorageEffect implements Effect {\n private readonly logger = inject(Logger);\n\n public readonly processedActions: string[] = [AgGridActionType.saveColumnsStateOnDisk, AgGridActionType.resetColumnsStateFromDisk];\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const agGridAction = action as AgGridAction;\n\n switch (action.type) {\n case AgGridActionType.saveColumnsStateOnDisk: {\n const gridState = selectAgGridState(state).gridStates[agGridAction.gridId];\n if (gridState) {\n localStorage.setItem(this.getColumnsStateLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnsState));\n if (gridState.filterModel) {\n localStorage.setItem(this.getFilterModelLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.filterModel));\n }\n }\n\n break;\n }\n\n case AgGridActionType.resetColumnsStateFromDisk: {\n const stored = localStorage.getItem(this.getColumnsStateLocalStorageKey(agGridAction.gridId));\n const filterModelStored = localStorage.getItem(this.getFilterModelLocalStorageKey(agGridAction.gridId));\n console.log(stored, filterModelStored);\n if (stored) {\n try {\n const columnsState = JSON.parse(stored);\n if (Array.isArray(columnsState)) {\n const action = new RegisterAgGridStateAction(\n agGridAction.gridId,\n ChangeOrigin.other,\n columnsState,\n filterModelStored ? JSON.parse(filterModelStored) : null\n );\n actiondispatcher.dispatchAction(action);\n } else {\n this.logger.error(`Wrong columns state config for grid '${agGridAction.gridId}'`, stored);\n }\n } catch (error) {\n this.logger.error(`Unable to load config for grid '${agGridAction.gridId}'`, error);\n }\n }\n\n break;\n }\n }\n }\n\n private getColumnsStateLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_${gridId}`;\n }\n\n private getFilterModelLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_filters_${gridId}`;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { AgGridActionType, RegisterAgGridStateAction } from '../actions';\nimport { updateAgGridState } from '../state';\n\n@Injectable()\nexport class GridStatesReducer implements Reducer {\n public readonly processedActions: string[] = [AgGridActionType.registerAgGridState];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case AgGridActionType.registerAgGridState: {\n const registerAgGridStateAction = action as RegisterAgGridStateAction;\n return updateAgGridState(state, {\n gridStates: {\n [registerAgGridStateAction.gridId]: {\n $set: {\n origin: registerAgGridStateAction.origin,\n columnsState: registerAgGridStateAction.columnStates,\n filterModel: registerAgGridStateAction.filterModel\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { AgGridActionType, RegisterSelectedRowsAction } from '../actions';\nimport { updateAgGridState } from '../state';\n\n@Injectable()\nexport class SelectedRowsReducer implements Reducer {\n public readonly processedActions: string[] = [AgGridActionType.registerSelectedRows];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case AgGridActionType.registerSelectedRows: {\n const registerSelectedRowsAction = action as RegisterSelectedRowsAction;\n return updateAgGridState(state, {\n selectedRows: {\n [registerSelectedRowsAction.gridId]: {\n $set: {\n origin: registerSelectedRowsAction.origin,\n ids: registerSelectedRowsAction.ids\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core';\n\nimport { Logger, provideEffect, provideReducers, Store } from 'ngssm-store';\n\nimport { LocalStorageEffect } from './effects/local-storage.effect';\nimport { GridStatesReducer } from './reducers/grid-states.reducer';\nimport { SelectedRowsReducer } from './reducers/selected-rows.reducer';\nimport { NGSSM_AG_GRID_OPTIONS, NgssmAgGridOptions } from './ngssm-ag-grid-options';\nimport { AgGridAction, AgGridActionType } from './actions';\n\n/**\n * Loads saved grid states from localStorage at application startup if enabled in options.\n * Dispatches actions to restore grid state for each matching key.\n */\nexport const loadGridStates = () => {\n const logger = inject(Logger);\n const options = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n if (!options?.loadSavedGridStatesAtStartup) {\n logger.information('[ag-grid] No grid state must be loaded at startup.');\n return;\n }\n\n const store = inject(Store);\n const wantedPrefix = 'ngssm-ag-grid_';\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(wantedPrefix)) {\n const gridId = key.slice(wantedPrefix.length);\n logger.information(`[ag-grid] Restoring '${gridId}'.`);\n store.dispatchAction(new AgGridAction(AgGridActionType.resetColumnsStateFromDisk, gridId));\n }\n }\n};\n\n/**\n * Provides all necessary providers for NgssmAgGrid, including reducers, effects, options, and grid state loading.\n * @param options Optional configuration for the grid.\n * @returns EnvironmentProviders for NgssmAgGrid.\n */\nexport const provideNgssmAgGrid = (options?: NgssmAgGridOptions): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideAppInitializer(loadGridStates),\n {\n provide: NGSSM_AG_GRID_OPTIONS,\n useValue: options ?? null\n },\n provideReducers(GridStatesReducer, SelectedRowsReducer),\n provideEffect(LocalStorageEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-ag-grid\n */\n\nexport * from './lib/actions';\nexport * from './lib/state';\nexport * from './lib/components';\nexport * from './lib/ngssm-ag-grid-options';\nexport * from './lib/helpers';\nexport * from './lib/provide-ngssm-ag-grid';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngssm-ag-grid.mjs","sources":["../../../projects/ngssm-ag-grid/src/lib/actions/ag-grid-action-type.ts","../../../projects/ngssm-ag-grid/src/lib/actions/register-ag-grid-state.action.ts","../../../projects/ngssm-ag-grid/src/lib/actions/register-selected-rows.action.ts","../../../projects/ngssm-ag-grid/src/lib/actions/ag-grid.action.ts","../../../projects/ngssm-ag-grid/src/lib/state/ag-grid.state.ts","../../../projects/ngssm-ag-grid/src/lib/state/change-origin.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer.component.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer.component.html","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer-params.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid-config.ts","../../../projects/ngssm-ag-grid/src/lib/ngssm-ag-grid-options.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid-theme.directive.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid.directive.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-base-cell-editor.ts","../../../projects/ngssm-ag-grid/src/lib/components/action-confirmation-popup/action-confirmation-popup.component.ts","../../../projects/ngssm-ag-grid/src/lib/components/action-confirmation-popup/action-confirmation-popup.component.html","../../../projects/ngssm-ag-grid/src/lib/helpers.ts","../../../projects/ngssm-ag-grid/src/lib/effects/local-storage.effect.ts","../../../projects/ngssm-ag-grid/src/lib/reducers/grid-states.reducer.ts","../../../projects/ngssm-ag-grid/src/lib/reducers/selected-rows.reducer.ts","../../../projects/ngssm-ag-grid/src/lib/provide-ngssm-ag-grid.ts","../../../projects/ngssm-ag-grid/src/public-api.ts","../../../projects/ngssm-ag-grid/src/ngssm-ag-grid.ts"],"sourcesContent":["export enum AgGridActionType {\n registerAgGridState = '[AgGridActionType] registerAgGridState',\n registerSelectedRows = '[AgGridActionType] registerSelectedRows',\n savecolumnStatesOnDisk = '[AgGridActionType] savecolumnStatesOnDisk',\n resetcolumnStatesFromDisk = '[AgGridActionType] resetcolumnStatesFromDisk'\n}\n","import { ColumnState, FilterModel } from 'ag-grid-community';\n\nimport { Action } from 'ngssm-store';\n\nimport { ChangeOrigin, ColumnGroupState } from '../state';\nimport { AgGridActionType } from './ag-grid-action-type';\n\nexport class RegisterAgGridStateAction implements Action {\n public readonly type: string = AgGridActionType.registerAgGridState;\n\n constructor(\n public readonly gridId: string,\n public readonly origin: ChangeOrigin,\n public readonly columnStates: ColumnState[],\n public readonly columnGroupStates: ColumnGroupState[],\n public readonly filterModel: FilterModel | null\n ) {}\n}\n","import { Action } from 'ngssm-store';\nimport { ChangeOrigin } from '../state';\nimport { AgGridActionType } from './ag-grid-action-type';\n\nexport class RegisterSelectedRowsAction implements Action {\n public readonly type: string = AgGridActionType.registerSelectedRows;\n\n constructor(\n public readonly gridId: string,\n public readonly origin: ChangeOrigin,\n public readonly ids: string[]\n ) {}\n}\n","import { Action } from 'ngssm-store';\n\nexport class AgGridAction implements Action {\n constructor(\n public readonly type: string,\n public readonly gridId: string\n ) {}\n}\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { GridState } from './grid-state';\nimport { SelectedRows } from './selected-rows';\n\nexport const selectAgGridState = (state: State): AgGridState => state[AgGridStateSpecification.featureStateKey] as AgGridState;\n\nexport const updateAgGridState = (state: State, command: Spec<AgGridState, never>): State =>\n update(state, {\n [AgGridStateSpecification.featureStateKey]: command\n });\n\nexport interface AgGridState {\n gridStates: Record<string, GridState>;\n selectedRows: Record<string, SelectedRows>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: AgGridStateSpecification.featureStateKey,\n initialState: AgGridStateSpecification.initialState\n})\nexport class AgGridStateSpecification {\n public static readonly featureStateKey = 'ag-grid-state';\n public static readonly initialState: AgGridState = {\n gridStates: {},\n selectedRows: {}\n };\n}\n","export enum ChangeOrigin {\n agGrid = 'agGrid',\n other = 'other'\n}\n","/**\n * The `NgssmActionsCellRendererComponent` is a custom cell renderer for `ag-grid` that dynamically renders\n * action buttons within a grid cell. It provides flexibility in configuring button behavior, visibility, and state.\n *\n * ### Features:\n * - Dynamically generates action buttons based on the provided configuration.\n * - Supports reactive state management using Angular signals.\n * - Integrates with observables, functions, or signals for `isDisabled` and `isHidden` properties.\n * - Provides customizable tooltips and button styles.\n * - Executes custom actions when buttons are clicked.\n *\n * ### Usage:\n * To use this component, provide it as a cell renderer in your `ag-grid` column definition:\n *\n * ```typescript\n * columnDefs: [\n * {\n * headerName: 'Actions',\n * field: 'actions',\n * cellRenderer: NgssmActionsCellRendererComponent,\n * cellRendererParams: {\n * actions: [\n * {\n * cssClass: 'delete-button',\n * color: 'warn',\n * tooltip: 'Delete Item',\n * isDisabled: (params) => params.data.isLocked,\n * isHidden: (params) => !params.data.canDelete,\n * click: (params) => console.log('Delete action clicked', params)\n * }\n * ]\n * }\n * }\n * ];\n * ```\n *\n * ### Inputs:\n * - `NgssmActionsCellRendererParams`: Configuration object passed to the component via `cellRendererParams`.\n * - `actions`: Array of `ActionConfig` objects defining the buttons to render.\n *\n * ### Outputs:\n * None.\n *\n * ### Dependencies:\n * - Angular Material components: `MatIconButton`, `MatIcon`, `MatTooltip`.\n * - `ag-grid-angular` for integration with `ag-grid`.\n *\n * ### Example ActionConfig:\n * ```typescript\n * interface ActionConfig {\n * cssClass: string; // CSS class for the button.\n * color?: string; // Button color (e.g., 'primary', 'warn').\n * tooltip?: string; // Tooltip text for the button.\n * isDisabled?: boolean | Signal<boolean> | Observable<boolean> | ((params: ICellRendererParams) => boolean);\n * isHidden?: boolean | Signal<boolean> | Observable<boolean> | ((params: ICellRendererParams) => boolean);\n * click?: (params: ICellRendererParams) => void; // Action to execute on button click.\n * }\n * ```\n *\n * ### Methods:\n * - `agInit(params: ICellRendererParams)`: Initializes the component with the provided cell renderer parameters.\n * - `refresh(params: ICellRendererParams)`: Refreshes the component state when the grid updates.\n * - `executeAction(action: ActionButton)`: Executes the action associated with a button.\n *\n * ### Internal Logic:\n * - The `setupActions` method initializes the action buttons based on the provided configuration.\n * - The `setUpActionSignal` method handles the initialization of `isDisabled` and `isHidden` states for each button.\n * - The component uses Angular signals (`WritableSignal` and `Signal`) to manage the state of `isDisabled` and `isHidden`.\n * - Observables are converted to signals using `toSignal` for seamless integration with Angular's reactivity system.\n *\n * ### Change Detection:\n * - The component uses `ChangeDetectionStrategy.OnPush` for improved performance by minimizing unnecessary change detection cycles.\n *\n * ### Notes:\n * - Ensure that the `actions` array in `NgssmActionsCellRendererParams` is properly configured to avoid runtime errors.\n * - The component is designed to work with Angular Material and requires the relevant modules to be imported in your application.\n * - The `isDisabled` and `isHidden` properties can accept multiple input types (boolean, function, signal, or observable), providing flexibility in defining button behavior.\n */\n\nimport {\n Component,\n ChangeDetectionStrategy,\n signal,\n WritableSignal,\n Signal,\n inject,\n EnvironmentInjector,\n runInInjectionContext,\n isSignal\n} from '@angular/core';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIconButton } from '@angular/material/button';\nimport { isObservable } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\nimport { ICellRendererParams } from 'ag-grid-community';\n\nimport { NgssmComponentAction, NgssmComponentDisplayDirective } from 'ngssm-toolkit';\n\nimport { NgssmActionsCellRendererParams } from './ngssm-actions-cell-renderer-params';\nimport { ActionConfig, ActionDisabledFunc, ActionHiddenFunc, ActionPopupComponent } from './action-config';\n\ninterface ActionButton {\n cssClass: string;\n color: string;\n\n isDisabled: WritableSignal<boolean> | Signal<boolean>;\n isHidden: WritableSignal<boolean> | Signal<boolean>;\n\n isDisabledInputAFunction: boolean;\n isHiddenInputAFunction: boolean;\n\n actionConfig: ActionConfig;\n\n tooltip: string;\n\n popupRendered: WritableSignal<boolean>;\n popupAction?: NgssmComponentAction;\n}\n\n@Component({\n selector: 'ngssm-actions-cell-renderer',\n imports: [MatIconButton, MatIcon, MatTooltip, CdkOverlayOrigin, CdkConnectedOverlay, NgssmComponentDisplayDirective],\n templateUrl: './ngssm-actions-cell-renderer.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmActionsCellRendererComponent implements ICellRendererAngularComp {\n private environmentInjector = inject(EnvironmentInjector);\n private cellParams: ICellRendererParams | undefined;\n\n public readonly actionButtons = signal<ActionButton[]>([]);\n\n public agInit(params: ICellRendererParams): void {\n this.cellParams = params;\n this.setupActions(params as unknown as NgssmActionsCellRendererParams);\n }\n\n public refresh(params: ICellRendererParams): boolean {\n this.cellParams = params;\n this.actionButtons().forEach((a) => {\n if (a.isDisabledInputAFunction) {\n (a.isDisabled as WritableSignal<boolean>).set((a.actionConfig.isDisabled as ActionDisabledFunc)(params));\n }\n\n if (a.isHiddenInputAFunction) {\n (a.isHidden as WritableSignal<boolean>).set((a.actionConfig.isHidden as ActionHiddenFunc)(params));\n }\n });\n return true;\n }\n\n public executeAction(action: ActionButton): void {\n const params = this.cellParams;\n if (params) {\n action.actionConfig.click?.(params);\n }\n }\n\n private setupActions(rendererParams: NgssmActionsCellRendererParams): void {\n runInInjectionContext(this.environmentInjector, () => {\n const actionButtons: ActionButton[] = (rendererParams?.actions ?? []).map((a) => {\n const actionButton: ActionButton = {\n cssClass: a.cssClass,\n color: a.color ?? 'primary',\n isDisabled: signal(false),\n isDisabledInputAFunction: false,\n isHidden: signal(false),\n isHiddenInputAFunction: false,\n actionConfig: a,\n tooltip: a.tooltip ?? '',\n popupRendered: signal(false)\n };\n\n if (a.popupComponent) {\n actionButton.popupAction = ((component: ActionPopupComponent) =>\n this.setupPopupComponent(component, actionButton)) as NgssmComponentAction;\n }\n\n this.setUpActionSignal(actionButton, a, rendererParams, 'isDisabled');\n this.setUpActionSignal(actionButton, a, rendererParams, 'isHidden');\n\n return actionButton;\n });\n\n this.actionButtons.set(actionButtons);\n });\n }\n\n private setUpActionSignal(\n actionButton: ActionButton,\n config: ActionConfig,\n rendererParams: NgssmActionsCellRendererParams,\n signalName: 'isDisabled' | 'isHidden'\n ): void {\n const input = config[signalName];\n\n if (isSignal(input)) {\n actionButton[signalName] = input as Signal<boolean>;\n } else if (input instanceof Function) {\n (actionButton[signalName] as WritableSignal<boolean>).set(input(rendererParams as unknown as ICellRendererParams));\n actionButton[`${signalName}InputAFunction`] = true;\n } else if (isObservable(input)) {\n actionButton[signalName] = toSignal(input, { initialValue: false });\n }\n }\n\n private setupPopupComponent(component: ActionPopupComponent, action: ActionButton): void {\n component?.init?.(action.popupRendered, this.cellParams as unknown as ICellRendererParams, action.actionConfig.popupParameter);\n }\n}\n","<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n","import { ColDef } from 'ag-grid-community';\n\nimport { ActionConfig } from './action-config';\nimport { NgssmActionsCellRendererComponent } from './ngssm-actions-cell-renderer.component';\n\n// Parameters of the actions cell renderer\n// For now, an action is rendered as a mat-icon-button with the class passed in ActionConfig\nexport interface NgssmActionsCellRendererParams<TData = unknown, TValue = unknown> {\n actions: ActionConfig<TData, TValue>[];\n}\n\nexport const getNgssmActionsCellColDef = <TData = unknown, TValue = unknown>(\n params: NgssmActionsCellRendererParams<TData, TValue>\n): Partial<ColDef> => ({\n cellRenderer: NgssmActionsCellRendererComponent,\n cellRendererParams: params\n});\n","import { AgPublicEventType, GetContextMenuItems } from 'ag-grid-community';\n\n/**\n * List of default ag-grid events listened by the directive to update the stored state.\n */\nexport const defaultAgGridColumnsEvents: AgPublicEventType[] = [\n 'sortChanged',\n 'filterChanged',\n 'columnPinned',\n 'columnResized',\n 'displayedColumnsChanged',\n 'filterChanged',\n 'columnGroupOpened'\n];\n\n/**\n * Configuration parameters of the {@link NgssmAgGridDirective} directive to apply on a\n * {@link https://www.ag-grid.com/ ag-grid instance}\n */\nexport interface NgssmAgGridConfig {\n /**\n * Unique identifier of the grid on which the directive is applied\n */\n gridId: string;\n\n /**\n * If true, the selected rows are stored in the state and restored when the directive is created.\n */\n keepSelection?: boolean;\n\n /**\n * If true, context menus are added to the grid to save the columns state into the local storage\n * and to restore from the local storage.\n *\n * @remarks\n *\n * this functionnality is only available for enterprise version of {@link https://www.ag-grid.com/}.\n */\n canSaveOnDiskcolumnStates?: boolean;\n\n /**\n * Used to override default context menu items.\n */\n getContextMenuItems?: GetContextMenuItems;\n\n /**\n * Defines the list of ag-grid events listened to by the directive to update the state of stored columns.\n * By default: defaultAgGridColumnsEvents\n */\n listenedColumnsEvents?: AgPublicEventType[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { ColDef, StatusPanelDef } from 'ag-grid-community';\n\n/**\n * Configuration options for NgssmAgGrid.\n * - theme: The CSS theme to use for the grid.\n * - statusBar: Optional status bar configuration for AG Grid.\n * - defaultColDef: Optional default column definition for all columns.\n * - loadSavedGridStatesAtStartup: If true, grid states saved in local storage are loaded during app initialization.\n */\nexport class NgssmAgGridOptions {\n theme = 'ag-theme-material';\n statusBar:\n | {\n statusPanels: StatusPanelDef[];\n }\n | undefined = undefined;\n defaultColDef: ColDef | undefined = undefined;\n loadSavedGridStatesAtStartup?: boolean = undefined;\n}\n\n/**\n * Injection token for providing NgssmAgGridOptions in Angular DI.\n *\n * Provide options through the provideNgssmAgGrid function instead of using this token.\n */\nexport const NGSSM_AG_GRID_OPTIONS = new InjectionToken<NgssmAgGridOptions>('NGSSM_AG_GRID_OPTIONS');\n","import { Directive, HostBinding, inject } from '@angular/core';\n\nimport { AgGridAngular } from 'ag-grid-angular';\n\nimport { NgssmAgGridOptions, NGSSM_AG_GRID_OPTIONS } from '../ngssm-ag-grid-options';\n\n@Directive({\n selector: '[ngssmAgGridTheme]',\n standalone: true\n})\nexport class NgssmAgGridThemeDirective {\n private readonly options: NgssmAgGridOptions | null = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n private agGridAngular = inject(AgGridAngular);\n\n @HostBinding('class') className = '';\n\n constructor() {\n this.className = (this.options ?? new NgssmAgGridOptions()).theme;\n if (this.agGridAngular.statusBar === undefined) {\n this.agGridAngular.statusBar = this.options?.statusBar;\n }\n\n if (this.agGridAngular.defaultColDef === undefined) {\n this.agGridAngular.defaultColDef = this.options?.defaultColDef;\n }\n }\n}\n","import { Directive, inject, signal, input, effect, runInInjectionContext, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { take } from 'rxjs';\n\nimport { AgGridAngular } from 'ag-grid-angular';\nimport { DefaultMenuItem, GetContextMenuItemsParams, MenuItemDef } from 'ag-grid-community';\n\nimport { createSignal, Logger, Store } from 'ngssm-store';\n\nimport { AgGridAction, AgGridActionType, RegisterAgGridStateAction, RegisterSelectedRowsAction } from '../actions';\nimport { ChangeOrigin, ColumnGroupState, selectAgGridState } from '../state';\nimport { defaultAgGridColumnsEvents, NgssmAgGridConfig } from './ngssm-ag-grid-config';\n\n@Directive({\n selector: '[ngssmAgGrid]'\n})\nexport class NgssmAgGridDirective {\n private readonly logger = inject(Logger);\n private readonly store = inject(Store);\n private readonly agGridAngular = inject(AgGridAngular);\n private readonly injector = inject(Injector);\n\n private readonly gridInitialized = signal(false);\n private readonly gridStates = createSignal((state) => selectAgGridState(state).gridStates);\n private readonly selectedRows = createSignal((state) => selectAgGridState(state).selectedRows);\n\n public readonly config = input.required<NgssmAgGridConfig, string | NgssmAgGridConfig>({\n alias: 'ngssmAgGrid',\n transform: (v) => {\n if (typeof v === 'string') {\n return {\n gridId: v as string\n };\n }\n\n const conf = v as NgssmAgGridConfig;\n return {\n ...conf\n };\n }\n });\n\n constructor() {\n this.logger.information(`[NgssmAgGridDirective] Initialization...`);\n\n // Setup gridInintialized signal\n this.agGridAngular.gridReady.pipe(take(1)).subscribe(() => this.gridInitialized.set(true));\n\n // Apply registered grid setup if any and start listening to ag-grid events\n const effectRef = effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' in progress`);\n\n const gridState = this.gridStates()[this.config().gridId];\n if (gridState) {\n this.agGridAngular.api.setColumnGroupState(gridState.columnGroupStates);\n this.agGridAngular.api.applyColumnState({\n state: gridState.columnStates,\n applyOrder: true\n });\n this.agGridAngular.api.setFilterModel(gridState.filterModel);\n }\n\n if (this.config().keepSelection) {\n const selection = this.selectedRows()[this.config().gridId];\n if (selection) {\n const ids = selection.ids ?? [];\n this.agGridAngular.api.forEachNode((node) => {\n if (node.id) {\n node.setSelected(ids.includes(node.id));\n }\n });\n }\n }\n\n runInInjectionContext(this.injector, () => this.initSateChangeListener());\n\n effectRef.destroy();\n\n this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' done`);\n });\n\n // process changes in columns when not comming from ui\n effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n const gridState = this.gridStates()[this.config().gridId];\n if (gridState?.origin === ChangeOrigin.other) {\n this.agGridAngular.api.setColumnGroupState(gridState.columnGroupStates);\n this.agGridAngular.api.applyColumnState({\n state: gridState.columnStates,\n applyOrder: true\n });\n this.agGridAngular.api.setFilterModel(gridState.filterModel);\n }\n });\n\n // process changes in selection when not comming from ui\n effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n if (this.config().keepSelection !== true) {\n return;\n }\n\n const selection = this.selectedRows()[this.config().gridId];\n if (!selection || selection.origin !== ChangeOrigin.other) {\n return;\n }\n\n const ids = selection.ids ?? [];\n this.agGridAngular.api.forEachNode((node) => {\n if (node.id) {\n node.setSelected(ids.includes(node.id));\n }\n });\n });\n\n this.agGridAngular.getContextMenuItems = (params) => this.getContextMenuItems(params);\n this.logger.information(`[NgssmAgGridDirective] Initialization done.`);\n }\n\n private initSateChangeListener(): void {\n (this.config().listenedColumnsEvents ?? defaultAgGridColumnsEvents).forEach((eventType) => {\n this.agGridAngular.api.addEventListener(eventType, () => this.saveGridState());\n });\n\n this.agGridAngular.rowSelected.pipe(takeUntilDestroyed()).subscribe(() => this.processSelectionChanged());\n }\n\n private saveGridState(): void {\n const state = this.agGridAngular.api.getColumnState();\n const filterModel = this.agGridAngular.api.getFilterModel();\n const columnGroupStates: ColumnGroupState[] = this.agGridAngular.api.getColumnGroupState();\n this.store.dispatchAction(\n new RegisterAgGridStateAction(this.config().gridId, ChangeOrigin.agGrid, state, columnGroupStates, filterModel)\n );\n }\n\n private processSelectionChanged(): void {\n if (this.config().keepSelection !== true) {\n return;\n }\n\n const selectedRows = this.agGridAngular.api\n .getSelectedNodes()\n .map((n) => n.id ?? '')\n .filter((n) => n !== '');\n\n this.store.dispatchAction(new RegisterSelectedRowsAction(this.config().gridId, ChangeOrigin.agGrid, selectedRows));\n }\n\n private getContextMenuItems(params: GetContextMenuItemsParams): (DefaultMenuItem | MenuItemDef)[] {\n this.logger.information('[NgssmAgGridDirective] Generating the context menu...');\n const menuItems: (DefaultMenuItem | MenuItemDef)[] = [];\n const getContextMenuItems = this.config().getContextMenuItems;\n if (getContextMenuItems) {\n menuItems.push(...(getContextMenuItems(params) as (DefaultMenuItem | MenuItemDef)[]));\n } else {\n menuItems.push(...(params.defaultItems ?? []));\n }\n\n if (this.config().canSaveOnDiskcolumnStates === true) {\n const gridId = this.config().gridId;\n menuItems.push(\n ...[\n 'separator' as DefaultMenuItem,\n {\n name: 'Save columns state',\n action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.savecolumnStatesOnDisk, gridId)),\n icon: '<i class=\"fa-regular fa-floppy-disk\"></i>'\n },\n {\n name: 'Restore columns state',\n action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.resetcolumnStatesFromDisk, gridId)),\n icon: '<i class=\"fa-solid fa-rotate-right\"></i>'\n },\n {\n name: 'Reset columns state to default',\n action: () => {\n this.agGridAngular.api.resetColumnState();\n this.agGridAngular.api.resetColumnGroupState();\n this.agGridAngular.api.setFilterModel(null);\n },\n icon: '<i class=\"fa-solid fa-clock-rotate-left\"></i>'\n }\n ]\n );\n }\n return menuItems;\n }\n}\n","import { ICellEditorAngularComp } from 'ag-grid-angular';\nimport { ICellEditorParams } from 'ag-grid-community';\n\nexport abstract class NgssmBaseCellEditor implements ICellEditorAngularComp {\n protected params?: ICellEditorParams;\n\n public agInit(params: ICellEditorParams): void {\n this.params = params;\n }\n\n public getValue() {\n return '';\n }\n\n public isPopup(): boolean {\n return true;\n }\n\n public getPopupPosition(): 'over' | 'under' | undefined {\n return 'over';\n }\n\n public isCancelAfterEnd(): boolean {\n return true;\n }\n\n public cancel(): void {\n this.params?.stopEditing();\n }\n}\n","import { ChangeDetectionStrategy, Component, signal, WritableSignal } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatCard, MatCardActions, MatCardTitle, MatCardHeader } from '@angular/material/card';\nimport { ICellRendererParams } from 'ag-grid-community';\n\nimport { ActionConfirmationPopupParameter } from './action-confirmation-popup-parameter';\nimport { ActionPopupComponent } from '../ngssm-actions-cell-renderer';\n\n/**\n * The `ActionConfirmationPopupComponent` is a reusable confirmation popup component designed to work with `ag-grid`.\n * It provides a customizable confirmation dialog for user actions, allowing developers to define messages, button labels,\n * and actions dynamically.\n *\n * ### Features:\n * - Displays a confirmation popup with customizable message, button labels, and color.\n * - Integrates with the `ActionPopupComponent` interface for seamless use with `NgssmActionsCellRendererComponent`.\n * - Uses Angular signals for efficient state management.\n * - Supports dynamic initialization with parameters provided by `ag-grid`.\n * - Provides methods to handle user actions (confirm or cancel) and close the popup.\n *\n * ### Usage:\n * This component is typically used as a popup in conjunction with the `NgssmActionsCellRendererComponent`.\n * To configure it, pass an `ActionConfirmationPopupParameter` object when initializing the popup.\n *\n * Example:\n * ```typescript\n * const popupParameter: ActionConfirmationPopupParameter = {\n * messageBuilder: (params) => `Are you sure you want to delete ${params.data.name}?`,\n * color: 'warn',\n * cancelButtonLabel: 'No',\n * confirmButtonLabel: 'Yes',\n * confirmAction: (params) => console.log('Confirmed action for:', params.data)\n * };\n * ```\n *\n * ### Inputs:\n * - `popupRendered`: A writable signal indicating whether the popup is currently rendered.\n * - `params`: The cell renderer parameters provided by `ag-grid`.\n * - `popupParameter`: An object of type `ActionConfirmationPopupParameter` that defines the popup's behavior and content.\n *\n * ### Outputs:\n * None.\n *\n * ### Dependencies:\n * - Angular Material components: `MatCard`, `MatButton`.\n * - `ag-grid-community` for integration with `ag-grid`.\n *\n * ### Methods:\n * - `init(popupRendered, params, popupParameter)`: Initializes the popup with the provided parameters.\n * - `popupRendered`: A writable signal to track the popup's visibility.\n * - `params`: The cell renderer parameters from `ag-grid`.\n * - `popupParameter`: The configuration object for the popup.\n *\n * - `closePopup()`: Closes the popup by setting the `isOpen` signal to `false`.\n *\n * - `executeAction()`: Executes the confirmation action defined in the `popupParameter` and closes the popup.\n *\n * ### Signals:\n * - `message`: The message displayed in the popup.\n * - `cancelButtonLabel`: The label for the cancel button.\n * - `confirmButtonLabel`: The label for the confirm button.\n * - `color`: The color theme for the confirm button (e.g., 'primary', 'warn').\n * - `isOpen`: Tracks whether the popup is currently open.\n *\n * ### Example Initialization:\n * ```typescript\n * const popup = new ActionConfirmationPopupComponent();\n * popup.init(\n * popupRenderedSignal,\n * cellRendererParams,\n * {\n * messageBuilder: (params) => `Are you sure you want to delete ${params.data.name}?`,\n * color: 'warn',\n * cancelButtonLabel: 'No',\n * confirmButtonLabel: 'Yes',\n * confirmAction: (params) => console.log('Confirmed action for:', params.data)\n * }\n * );\n * ```\n *\n * ### Notes:\n * - Ensure that the `popupParameter` object is properly configured to avoid runtime errors.\n * - The `messageBuilder` function in `popupParameter` allows dynamic message generation based on the `params` object.\n * - The component uses `ChangeDetectionStrategy.OnPush` for performance optimization.\n * - The `isOpen` signal can be used to programmatically control the popup's visibility.\n */\n@Component({\n selector: 'ngssm-action-confirmation-popup',\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardActions, MatButton],\n templateUrl: './action-confirmation-popup.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionConfirmationPopupComponent implements ActionPopupComponent<unknown, unknown, ActionConfirmationPopupParameter> {\n private params?: ICellRendererParams;\n private popupParameter?: ActionConfirmationPopupParameter;\n public readonly message = signal<string>('No message');\n public readonly cancelButtonLabel = signal<string>('No');\n public readonly confirmButtonLabel = signal<string>('Yes');\n public readonly color = signal<string>('primary');\n\n public isOpen = signal<boolean>(false);\n\n public init(\n popupRendered: WritableSignal<boolean>,\n params?: ICellRendererParams<unknown, unknown>,\n popupParameter?: ActionConfirmationPopupParameter\n ): void {\n this.params = params;\n this.popupParameter = popupParameter;\n\n this.message.set(popupParameter?.messageBuilder?.(params) ?? 'No message');\n this.color.set(popupParameter?.color ?? 'primary');\n this.cancelButtonLabel.set(popupParameter?.cancelButtonLabel ?? 'Cancel');\n this.confirmButtonLabel.set(popupParameter?.confirmButtonLabel ?? 'Confirm');\n\n this.isOpen = popupRendered;\n }\n\n public closePopup(): void {\n this.isOpen.set(false);\n }\n\n public executeAction(): void {\n this.popupParameter?.confirmAction?.(this.params);\n this.closePopup();\n }\n}\n","<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n","import { ColDef } from 'ag-grid-community';\n\nexport const getColDefWithNoPadding = (): Partial<ColDef> => ({\n cellClass: ['cell-with-no-padding']\n});\n\nexport const getColDefForEditableColumn = (): Partial<ColDef> => ({\n editable: true,\n headerClass: 'ngssm-ag-editable-cell',\n valueSetter: () => false\n});\n","import { inject, Injectable } from '@angular/core';\n\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport { AgGridAction, AgGridActionType, RegisterAgGridStateAction } from '../actions';\nimport { ChangeOrigin, selectAgGridState } from '../state';\n\n@Injectable()\nexport class LocalStorageEffect implements Effect {\n private readonly logger = inject(Logger);\n\n public readonly processedActions: string[] = [AgGridActionType.savecolumnStatesOnDisk, AgGridActionType.resetcolumnStatesFromDisk];\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const agGridAction = action as AgGridAction;\n\n switch (action.type) {\n case AgGridActionType.savecolumnStatesOnDisk: {\n const gridState = selectAgGridState(state).gridStates[agGridAction.gridId];\n if (gridState) {\n localStorage.setItem(this.getcolumnStatesLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnStates));\n localStorage.setItem(this.getcolumnGroupStatesLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnGroupStates));\n if (gridState.filterModel) {\n localStorage.setItem(this.getFilterModelLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.filterModel));\n }\n }\n\n break;\n }\n\n case AgGridActionType.resetcolumnStatesFromDisk: {\n const stored = localStorage.getItem(this.getcolumnStatesLocalStorageKey(agGridAction.gridId));\n const columnGroupStates = localStorage.getItem(this.getcolumnGroupStatesLocalStorageKey(agGridAction.gridId));\n const filterModelStored = localStorage.getItem(this.getFilterModelLocalStorageKey(agGridAction.gridId));\n console.log(stored, filterModelStored);\n if (stored) {\n try {\n const columnStates = JSON.parse(stored);\n if (Array.isArray(columnStates)) {\n const action = new RegisterAgGridStateAction(\n agGridAction.gridId,\n ChangeOrigin.other,\n columnStates,\n columnGroupStates ? JSON.parse(columnGroupStates) : [],\n filterModelStored ? JSON.parse(filterModelStored) : null\n );\n actiondispatcher.dispatchAction(action);\n } else {\n this.logger.error(`Wrong columns state config for grid '${agGridAction.gridId}'`, stored);\n }\n } catch (error) {\n this.logger.error(`Unable to load config for grid '${agGridAction.gridId}'`, error);\n }\n }\n\n break;\n }\n }\n }\n\n private getcolumnStatesLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_${gridId}`;\n }\n\n private getcolumnGroupStatesLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_groups_${gridId}`;\n }\n\n private getFilterModelLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_filters_${gridId}`;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { AgGridActionType, RegisterAgGridStateAction } from '../actions';\nimport { updateAgGridState } from '../state';\n\n@Injectable()\nexport class GridStatesReducer implements Reducer {\n public readonly processedActions: string[] = [AgGridActionType.registerAgGridState];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case AgGridActionType.registerAgGridState: {\n const registerAgGridStateAction = action as RegisterAgGridStateAction;\n return updateAgGridState(state, {\n gridStates: {\n [registerAgGridStateAction.gridId]: {\n $set: {\n origin: registerAgGridStateAction.origin,\n columnStates: registerAgGridStateAction.columnStates,\n columnGroupStates: registerAgGridStateAction.columnGroupStates,\n filterModel: registerAgGridStateAction.filterModel\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { AgGridActionType, RegisterSelectedRowsAction } from '../actions';\nimport { updateAgGridState } from '../state';\n\n@Injectable()\nexport class SelectedRowsReducer implements Reducer {\n public readonly processedActions: string[] = [AgGridActionType.registerSelectedRows];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case AgGridActionType.registerSelectedRows: {\n const registerSelectedRowsAction = action as RegisterSelectedRowsAction;\n return updateAgGridState(state, {\n selectedRows: {\n [registerSelectedRowsAction.gridId]: {\n $set: {\n origin: registerSelectedRowsAction.origin,\n ids: registerSelectedRowsAction.ids\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core';\n\nimport { Logger, provideEffect, provideReducers, Store } from 'ngssm-store';\n\nimport { LocalStorageEffect } from './effects/local-storage.effect';\nimport { GridStatesReducer } from './reducers/grid-states.reducer';\nimport { SelectedRowsReducer } from './reducers/selected-rows.reducer';\nimport { NGSSM_AG_GRID_OPTIONS, NgssmAgGridOptions } from './ngssm-ag-grid-options';\nimport { AgGridAction, AgGridActionType } from './actions';\n\n/**\n * Loads saved grid states from localStorage at application startup if enabled in options.\n * Dispatches actions to restore grid state for each matching key.\n */\nexport const loadGridStates = () => {\n const logger = inject(Logger);\n const options = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n if (!options?.loadSavedGridStatesAtStartup) {\n logger.information('[ag-grid] No grid state must be loaded at startup.');\n return;\n }\n\n const store = inject(Store);\n const wantedPrefix = 'ngssm-ag-grid_';\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(wantedPrefix)) {\n const gridId = key.slice(wantedPrefix.length);\n logger.information(`[ag-grid] Restoring '${gridId}'.`);\n store.dispatchAction(new AgGridAction(AgGridActionType.resetcolumnStatesFromDisk, gridId));\n }\n }\n};\n\n/**\n * Provides all necessary providers for NgssmAgGrid, including reducers, effects, options, and grid state loading.\n * @param options Optional configuration for the grid.\n * @returns EnvironmentProviders for NgssmAgGrid.\n */\nexport const provideNgssmAgGrid = (options?: NgssmAgGridOptions): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideAppInitializer(loadGridStates),\n {\n provide: NGSSM_AG_GRID_OPTIONS,\n useValue: options ?? null\n },\n provideReducers(GridStatesReducer, SelectedRowsReducer),\n provideEffect(LocalStorageEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-ag-grid\n */\n\nexport * from './lib/actions';\nexport * from './lib/state';\nexport * from './lib/components';\nexport * from './lib/ngssm-ag-grid-options';\nexport * from './lib/helpers';\nexport * from './lib/provide-ngssm-ag-grid';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -10,8 +10,8 @@ import { Observable } from 'rxjs';
10
10
  declare enum AgGridActionType {
11
11
  registerAgGridState = "[AgGridActionType] registerAgGridState",
12
12
  registerSelectedRows = "[AgGridActionType] registerSelectedRows",
13
- saveColumnsStateOnDisk = "[AgGridActionType] saveColumnsStateOnDisk",
14
- resetColumnsStateFromDisk = "[AgGridActionType] resetColumnsStateFromDisk"
13
+ savecolumnStatesOnDisk = "[AgGridActionType] savecolumnStatesOnDisk",
14
+ resetcolumnStatesFromDisk = "[AgGridActionType] resetcolumnStatesFromDisk"
15
15
  }
16
16
 
17
17
  declare enum ChangeOrigin {
@@ -19,10 +19,15 @@ declare enum ChangeOrigin {
19
19
  other = "other"
20
20
  }
21
21
 
22
+ interface ColumnGroupState {
23
+ groupId: string;
24
+ open: boolean;
25
+ }
22
26
  interface GridState {
23
27
  origin: ChangeOrigin;
24
- columnsState: ColumnState[];
28
+ columnStates: ColumnState[];
25
29
  filterModel: FilterModel | null;
30
+ columnGroupStates: ColumnGroupState[];
26
31
  }
27
32
 
28
33
  interface SelectedRows {
@@ -45,9 +50,10 @@ declare class RegisterAgGridStateAction implements Action {
45
50
  readonly gridId: string;
46
51
  readonly origin: ChangeOrigin;
47
52
  readonly columnStates: ColumnState[];
53
+ readonly columnGroupStates: ColumnGroupState[];
48
54
  readonly filterModel: FilterModel | null;
49
55
  readonly type: string;
50
- constructor(gridId: string, origin: ChangeOrigin, columnStates: ColumnState[], filterModel: FilterModel | null);
56
+ constructor(gridId: string, origin: ChangeOrigin, columnStates: ColumnState[], columnGroupStates: ColumnGroupState[], filterModel: FilterModel | null);
51
57
  }
52
58
 
53
59
  declare class RegisterSelectedRowsAction implements Action {
@@ -287,7 +293,7 @@ interface NgssmAgGridConfig {
287
293
  *
288
294
  * this functionnality is only available for enterprise version of {@link https://www.ag-grid.com/}.
289
295
  */
290
- canSaveOnDiskColumnsState?: boolean;
296
+ canSaveOnDiskcolumnStates?: boolean;
291
297
  /**
292
298
  * Used to override default context menu items.
293
299
  */
@@ -503,4 +509,4 @@ declare const loadGridStates: () => void;
503
509
  declare const provideNgssmAgGrid: (options?: NgssmAgGridOptions) => EnvironmentProviders;
504
510
 
505
511
  export { ActionConfirmationPopupComponent, AgGridAction, AgGridActionType, AgGridStateSpecification, ChangeOrigin, NGSSM_AG_GRID_OPTIONS, NgssmActionsCellRendererComponent, NgssmAgGridDirective, NgssmAgGridOptions, NgssmAgGridThemeDirective, NgssmBaseCellEditor, RegisterAgGridStateAction, RegisterSelectedRowsAction, defaultAgGridColumnsEvents, getColDefForEditableColumn, getColDefWithNoPadding, getNgssmActionsCellColDef, loadGridStates, provideNgssmAgGrid, selectAgGridState, updateAgGridState };
506
- export type { ActionConfig, ActionConfirmationPopupParameter, ActionDisabledFunc, ActionHiddenFunc, ActionPopupComponent, AgGridState, GridState, NgssmActionsCellRendererParams, NgssmAgGridConfig, SelectedRows };
512
+ export type { ActionConfig, ActionConfirmationPopupParameter, ActionDisabledFunc, ActionHiddenFunc, ActionPopupComponent, AgGridState, ColumnGroupState, GridState, NgssmActionsCellRendererParams, NgssmAgGridConfig, SelectedRows };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-ag-grid",
3
- "version": "20.2.0",
3
+ "version": "20.2.2",
4
4
  "description": "NgSsm - Helpers for ag-grid and columns state save/restore feature.",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",