ngssm-ag-grid 22.0.0 → 22.1.0
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.
|
@@ -2,7 +2,7 @@ import { __decorate } from 'tslib';
|
|
|
2
2
|
import update from 'immutability-helper';
|
|
3
3
|
import { NgSsmFeatureState, Logger, Store, createSignal, provideReducers, provideEffect } from 'ngssm-store';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
-
import { signal, inject, EnvironmentInjector, runInInjectionContext, isSignal,
|
|
5
|
+
import { signal, inject, EnvironmentInjector, runInInjectionContext, isSignal, Component, InjectionToken, HostBinding, Directive, input, Injector, effect, Injectable, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
|
|
6
6
|
import { CdkOverlayOrigin, CdkConnectedOverlay } from '@angular/cdk/overlay';
|
|
7
7
|
import { MatIcon } from '@angular/material/icon';
|
|
8
8
|
import { MatTooltip } from '@angular/material/tooltip';
|
|
@@ -152,9 +152,6 @@ var ChangeOrigin;
|
|
|
152
152
|
* - The component uses Angular signals (`WritableSignal` and `Signal`) to manage the state of `isDisabled` and `isHidden`.
|
|
153
153
|
* - Observables are converted to signals using `toSignal` for seamless integration with Angular's reactivity system.
|
|
154
154
|
*
|
|
155
|
-
* ### Change Detection:
|
|
156
|
-
* - The component uses `ChangeDetectionStrategy.OnPush` for improved performance by minimizing unnecessary change detection cycles.
|
|
157
|
-
*
|
|
158
155
|
* ### Notes:
|
|
159
156
|
* - Ensure that the `actions` array in `NgssmActionsCellRendererParams` is properly configured to avoid runtime errors.
|
|
160
157
|
* - The component is designed to work with Angular Material and requires the relevant modules to be imported in your application.
|
|
@@ -227,12 +224,12 @@ class NgssmActionsCellRendererComponent {
|
|
|
227
224
|
setupPopupComponent(component, action) {
|
|
228
225
|
component?.init?.(action.popupRendered, this.cellParams, action.actionConfig.popupParameter);
|
|
229
226
|
}
|
|
230
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
231
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
227
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: NgssmActionsCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
228
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", 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", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }] });
|
|
232
229
|
}
|
|
233
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: NgssmActionsCellRendererComponent, decorators: [{
|
|
234
231
|
type: Component,
|
|
235
|
-
args: [{ selector: 'ngssm-actions-cell-renderer', imports: [MatIconButton, MatIcon, MatTooltip, CdkOverlayOrigin, CdkConnectedOverlay, NgssmComponentDisplayDirective],
|
|
232
|
+
args: [{ selector: 'ngssm-actions-cell-renderer', imports: [MatIconButton, MatIcon, MatTooltip, CdkOverlayOrigin, CdkConnectedOverlay, NgssmComponentDisplayDirective], 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" }]
|
|
236
233
|
}] });
|
|
237
234
|
|
|
238
235
|
const getNgssmActionsCellColDef = (params) => ({
|
|
@@ -286,10 +283,10 @@ class NgssmAgGridThemeDirective {
|
|
|
286
283
|
this.agGridAngular.defaultColDef = this.options?.defaultColDef;
|
|
287
284
|
}
|
|
288
285
|
}
|
|
289
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
290
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.
|
|
286
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: NgssmAgGridThemeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
287
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: NgssmAgGridThemeDirective, isStandalone: true, selector: "[ngssmAgGridTheme]", host: { properties: { "class": "this.className" } }, ngImport: i0 });
|
|
291
288
|
}
|
|
292
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
289
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: NgssmAgGridThemeDirective, decorators: [{
|
|
293
290
|
type: Directive,
|
|
294
291
|
args: [{
|
|
295
292
|
selector: '[ngssmAgGridTheme]'
|
|
@@ -451,10 +448,10 @@ class NgssmAgGridDirective {
|
|
|
451
448
|
}
|
|
452
449
|
return menuItems;
|
|
453
450
|
}
|
|
454
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
455
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.
|
|
451
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: NgssmAgGridDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
452
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.1", type: NgssmAgGridDirective, isStandalone: true, selector: "[ngssmAgGrid]", inputs: { config: { classPropertyName: "config", publicName: "ngssmAgGrid", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
|
|
456
453
|
}
|
|
457
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
454
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: NgssmAgGridDirective, decorators: [{
|
|
458
455
|
type: Directive,
|
|
459
456
|
args: [{
|
|
460
457
|
selector: '[ngssmAgGrid]'
|
|
@@ -558,7 +555,6 @@ class NgssmBaseCellEditor {
|
|
|
558
555
|
* ### Notes:
|
|
559
556
|
* - Ensure that the `popupParameter` object is properly configured to avoid runtime errors.
|
|
560
557
|
* - The `messageBuilder` function in `popupParameter` allows dynamic message generation based on the `params` object.
|
|
561
|
-
* - The component uses `ChangeDetectionStrategy.OnPush` for performance optimization.
|
|
562
558
|
* - The `isOpen` signal can be used to programmatically control the popup's visibility.
|
|
563
559
|
*/
|
|
564
560
|
class ActionConfirmationPopupComponent {
|
|
@@ -590,12 +586,12 @@ class ActionConfirmationPopupComponent {
|
|
|
590
586
|
this.popupParameter?.confirmAction?.(this.params);
|
|
591
587
|
this.closePopup();
|
|
592
588
|
}
|
|
593
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
594
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.
|
|
589
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: ActionConfirmationPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
590
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.1", 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"] }] });
|
|
595
591
|
}
|
|
596
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
592
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: ActionConfirmationPopupComponent, decorators: [{
|
|
597
593
|
type: Component,
|
|
598
|
-
args: [{ selector: 'ngssm-action-confirmation-popup', imports: [MatCard, MatCardHeader, MatCardTitle, MatCardActions, MatButton],
|
|
594
|
+
args: [{ selector: 'ngssm-action-confirmation-popup', imports: [MatCard, MatCardHeader, MatCardTitle, MatCardActions, MatButton], 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" }]
|
|
599
595
|
}] });
|
|
600
596
|
|
|
601
597
|
const getColDefWithNoPadding = () => ({
|
|
@@ -657,10 +653,10 @@ class LocalStorageEffect {
|
|
|
657
653
|
getFilterModelLocalStorageKey(gridId) {
|
|
658
654
|
return `ngssm-ag-grid_filters_${gridId}`;
|
|
659
655
|
}
|
|
660
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
661
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
656
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: LocalStorageEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
657
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: LocalStorageEffect });
|
|
662
658
|
}
|
|
663
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
659
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: LocalStorageEffect, decorators: [{
|
|
664
660
|
type: Injectable
|
|
665
661
|
}] });
|
|
666
662
|
|
|
@@ -686,10 +682,10 @@ class GridStatesReducer {
|
|
|
686
682
|
}
|
|
687
683
|
return state;
|
|
688
684
|
}
|
|
689
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
690
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
685
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: GridStatesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
686
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: GridStatesReducer });
|
|
691
687
|
}
|
|
692
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
688
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: GridStatesReducer, decorators: [{
|
|
693
689
|
type: Injectable
|
|
694
690
|
}] });
|
|
695
691
|
|
|
@@ -713,10 +709,10 @@ class SelectedRowsReducer {
|
|
|
713
709
|
}
|
|
714
710
|
return state;
|
|
715
711
|
}
|
|
716
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
717
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
712
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SelectedRowsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
713
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SelectedRowsReducer });
|
|
718
714
|
}
|
|
719
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
715
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SelectedRowsReducer, decorators: [{
|
|
720
716
|
type: Injectable
|
|
721
717
|
}] });
|
|
722
718
|
|
|
@@ -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 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 public readonly actionButtons = signal<ActionButton[]>([]);\n\n private environmentInjector = inject(EnvironmentInjector);\n private cellParams: ICellRendererParams | undefined;\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})\nexport class NgssmAgGridThemeDirective {\n @HostBinding('class') className = '';\n\n private readonly options: NgssmAgGridOptions | null = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n private agGridAngular = inject(AgGridAngular);\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 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 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 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\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 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 private params?: ICellRendererParams;\n private popupParameter?: ActionConfirmationPopupParameter;\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 public readonly processedActions: string[] = [AgGridActionType.saveColumnStatesOnDisk, AgGridActionType.resetColumnStatesFromDisk];\n\n private readonly logger = inject(Logger);\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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"}
|
|
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 * ### 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 { Component, signal, WritableSignal, Signal, inject, EnvironmentInjector, runInInjectionContext, isSignal } 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})\nexport class NgssmActionsCellRendererComponent implements ICellRendererAngularComp {\n public readonly actionButtons = signal<ActionButton[]>([]);\n\n private environmentInjector = inject(EnvironmentInjector);\n private cellParams: ICellRendererParams | undefined;\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})\nexport class NgssmAgGridThemeDirective {\n @HostBinding('class') className = '';\n\n private readonly options: NgssmAgGridOptions | null = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n private agGridAngular = inject(AgGridAngular);\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 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 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 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\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 { 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 `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})\nexport class ActionConfirmationPopupComponent implements ActionPopupComponent<unknown, unknown, 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 private params?: ICellRendererParams;\n private popupParameter?: ActionConfirmationPopupParameter;\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 public readonly processedActions: string[] = [AgGridActionType.saveColumnStatesOnDisk, AgGridActionType.resetColumnStatesFromDisk];\n\n private readonly logger = inject(Logger);\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/package.json
CHANGED
package/types/ngssm-ag-grid.d.ts
CHANGED
|
@@ -228,9 +228,6 @@ interface ActionConfig<TData = unknown, TValue = unknown, TPopupComponent = unkn
|
|
|
228
228
|
* - The component uses Angular signals (`WritableSignal` and `Signal`) to manage the state of `isDisabled` and `isHidden`.
|
|
229
229
|
* - Observables are converted to signals using `toSignal` for seamless integration with Angular's reactivity system.
|
|
230
230
|
*
|
|
231
|
-
* ### Change Detection:
|
|
232
|
-
* - The component uses `ChangeDetectionStrategy.OnPush` for improved performance by minimizing unnecessary change detection cycles.
|
|
233
|
-
*
|
|
234
231
|
* ### Notes:
|
|
235
232
|
* - Ensure that the `actions` array in `NgssmActionsCellRendererParams` is properly configured to avoid runtime errors.
|
|
236
233
|
* - The component is designed to work with Angular Material and requires the relevant modules to be imported in your application.
|
|
@@ -453,7 +450,6 @@ interface ActionConfirmationPopupParameter<TData = unknown, TValue = unknown> {
|
|
|
453
450
|
* ### Notes:
|
|
454
451
|
* - Ensure that the `popupParameter` object is properly configured to avoid runtime errors.
|
|
455
452
|
* - The `messageBuilder` function in `popupParameter` allows dynamic message generation based on the `params` object.
|
|
456
|
-
* - The component uses `ChangeDetectionStrategy.OnPush` for performance optimization.
|
|
457
453
|
* - The `isOpen` signal can be used to programmatically control the popup's visibility.
|
|
458
454
|
*/
|
|
459
455
|
declare class ActionConfirmationPopupComponent implements ActionPopupComponent<unknown, unknown, ActionConfirmationPopupParameter> {
|