@valtimo/dashboard-management 13.32.0 → 13.33.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.
@@ -7,7 +7,7 @@ import { Validators, ReactiveFormsModule } from '@angular/forms';
7
7
  import * as i6 from '@ngx-translate/core';
8
8
  import { TranslateModule } from '@ngx-translate/core';
9
9
  import * as i4 from '@valtimo/components';
10
- import { CARBON_CONSTANTS, ViewType, SpinnerModule, RenderInPageHeaderDirective, ConfirmationModalModule, CarbonListModule, ValtimoCdsModalDirective, JsonEditorComponent } from '@valtimo/components';
10
+ import { CARBON_CONSTANTS, WidgetLayout, WIDGET_LAYOUT_VALUES, WIDGET_LAYOUT_TRANSLATION_KEYS, ViewType, SpinnerModule, RenderInPageHeaderDirective, ConfirmationModalModule, CarbonListModule, ValtimoCdsModalDirective, JsonEditorComponent, SelectModule, WidgetLayoutInfoComponent } from '@valtimo/components';
11
11
  import * as i3 from 'carbon-components-angular';
12
12
  import { ButtonModule, DropdownModule, InputModule, ModalModule, NotificationModule, IconModule, LayerModule } from 'carbon-components-angular';
13
13
  import { Code16, Edit16 } from '@carbon/icons';
@@ -556,7 +556,12 @@ class EditDashboardModalComponent {
556
556
  this.editDashboardForm = this.fb.group({
557
557
  title: this.fb.control('', [Validators.required]),
558
558
  description: this.fb.control('', [Validators.required]),
559
+ widgetLayout: this.fb.control(WidgetLayout.MUURI_GAP_FREE),
559
560
  });
561
+ this.widgetLayoutSelectItems = WIDGET_LAYOUT_VALUES.map(value => ({
562
+ id: value,
563
+ translationKey: WIDGET_LAYOUT_TRANSLATION_KEYS[value],
564
+ }));
560
565
  }
561
566
  ngOnInit() {
562
567
  this.openOpenSubscription();
@@ -574,6 +579,7 @@ class EditDashboardModalComponent {
574
579
  description: this.dashboardDescription.value,
575
580
  title: this.dashboardTitle.value,
576
581
  key: this.dashboard.key,
582
+ widgetLayout: this.editDashboardForm.get('widgetLayout').value ?? WidgetLayout.MUURI_GAP_FREE,
577
583
  })
578
584
  .subscribe(() => {
579
585
  this.saveEvent.emit();
@@ -584,6 +590,9 @@ class EditDashboardModalComponent {
584
590
  if (this.dashboard) {
585
591
  this.dashboardTitle?.setValue(this.dashboard.title);
586
592
  this.dashboardDescription?.setValue(this.dashboard.description);
593
+ this.editDashboardForm
594
+ .get('widgetLayout')
595
+ ?.setValue(this.dashboard.widgetLayout ?? WidgetLayout.MUURI_GAP_FREE);
587
596
  }
588
597
  this.enable();
589
598
  }
@@ -600,11 +609,11 @@ class EditDashboardModalComponent {
600
609
  this.disabled$.next(false);
601
610
  }
602
611
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: EditDashboardModalComponent, deps: [{ token: i1$1.FormBuilder }, { token: DashboardManagementService }], target: i0.ɵɵFactoryTarget.Component }); }
603
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: EditDashboardModalComponent, isStandalone: false, selector: "valtimo-edit-dashboard-modal", inputs: { showModal$: "showModal$", dashboard: "dashboard" }, outputs: { saveEvent: "saveEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-dashboard-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}.edit-dashboard-modal .form__element{width:100%;margin-bottom:32px}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "component", type: i3.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: i4.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
612
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: EditDashboardModalComponent, isStandalone: false, selector: "valtimo-edit-dashboard-modal", inputs: { showModal$: "showModal$", dashboard: "dashboard" }, outputs: { saveEvent: "saveEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <v-select\n formControlName=\"widgetLayout\"\n [items]=\"widgetLayoutSelectItems\"\n [dropUp]=\"false\"\n [appendInline]=\"false\"\n titleTranslationKey=\"widgetLayout.label\"\n ></v-select>\n </div>\n\n <valtimo-widget-layout-info></valtimo-widget-layout-info>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-dashboard-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}.edit-dashboard-modal .form__element{width:100%;margin-bottom:16px}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "component", type: i3.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: i4.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i4.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "invalid", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "clearable", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline", "warn", "warnText", "dataTestId"], outputs: ["selectedChange"] }, { kind: "component", type: i4.WidgetLayoutInfoComponent, selector: "valtimo-widget-layout-info" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
604
613
  }
605
614
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: EditDashboardModalComponent, decorators: [{
606
615
  type: Component,
607
- args: [{ selector: 'valtimo-edit-dashboard-modal', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-dashboard-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}.edit-dashboard-modal .form__element{width:100%;margin-bottom:32px}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
616
+ args: [{ selector: 'valtimo-edit-dashboard-modal', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <v-select\n formControlName=\"widgetLayout\"\n [items]=\"widgetLayoutSelectItems\"\n [dropUp]=\"false\"\n [appendInline]=\"false\"\n titleTranslationKey=\"widgetLayout.label\"\n ></v-select>\n </div>\n\n <valtimo-widget-layout-info></valtimo-widget-layout-info>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-dashboard-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}.edit-dashboard-modal .form__element{width:100%;margin-bottom:16px}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
608
617
  }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: DashboardManagementService }], propDecorators: { showModal$: [{
609
618
  type: Input
610
619
  }], dashboard: [{
@@ -941,7 +950,9 @@ class DashboardManagementModule {
941
950
  CarbonListModule,
942
951
  LayerModule,
943
952
  ValtimoCdsModalDirective,
944
- JsonEditorComponent] }); }
953
+ JsonEditorComponent,
954
+ SelectModule,
955
+ WidgetLayoutInfoComponent] }); }
945
956
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: DashboardManagementModule, imports: [ButtonModule,
946
957
  CommonModule,
947
958
  DashboardManagementRoutingModule,
@@ -957,7 +968,9 @@ class DashboardManagementModule {
957
968
  WidgetTranslatePipeModule,
958
969
  CarbonListModule,
959
970
  LayerModule,
960
- JsonEditorComponent] }); }
971
+ JsonEditorComponent,
972
+ SelectModule,
973
+ WidgetLayoutInfoComponent] }); }
961
974
  }
962
975
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: DashboardManagementModule, decorators: [{
963
976
  type: NgModule,
@@ -988,6 +1001,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
988
1001
  LayerModule,
989
1002
  ValtimoCdsModalDirective,
990
1003
  JsonEditorComponent,
1004
+ SelectModule,
1005
+ WidgetLayoutInfoComponent,
991
1006
  ],
992
1007
  exports: [],
993
1008
  }]
@@ -1 +1 @@
1
- {"version":3,"file":"valtimo-dashboard-management.mjs","sources":["../../../../projects/valtimo/dashboard-management/src/lib/constants/dashboard-management.test-ids.ts","../../../../projects/valtimo/dashboard-management/src/lib/services/dashboard-management.service.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-configuration-container/widget-configuration-container.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-configuration-container/widget-configuration-container.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-modal/widget-modal.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-modal/widget-modal.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/edit-dashboard-modal/edit-dashboard-modal.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/edit-dashboard-modal/edit-dashboard-modal.html","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-details/dashboard-details.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-details/dashboard-details.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-management/dashboard-management.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-management/dashboard-management.component.html","../../../../projects/valtimo/dashboard-management/src/lib/dashboard-management-routing.module.ts","../../../../projects/valtimo/dashboard-management/src/lib/dashboard-management.module.ts","../../../../projects/valtimo/dashboard-management/src/public-api.ts","../../../../projects/valtimo/dashboard-management/src/valtimo-dashboard-management.ts"],"sourcesContent":["/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DASHBOARD_MANAGEMENT_TEST_IDS = {\n // Dashboard list page\n addButton: 'dashboardManagementAddButton',\n createTitleInput: 'dashboardManagementCreateTitleInput',\n createDescriptionInput: 'dashboardManagementCreateDescriptionInput',\n createButton: 'dashboardManagementCreateButton',\n cancelDashboardButton: 'dashboardManagementCancelDashboardButton',\n // Dashboard details page — edit dashboard\n editButton: 'dashboardManagementEditButton',\n editTitleInput: 'dashboardManagementEditTitleInput',\n editDescriptionInput: 'dashboardManagementEditDescriptionInput',\n completeButton: 'dashboardManagementCompleteButton',\n switchViewButton: 'dashboardDetailsSwitchView',\n // Widget list page (dashboard details)\n addWidgetButton: 'dashboardManagementAddWidgetButton',\n // Widget modal\n widgetTitleInput: 'dashboardManagementWidgetTitleInput',\n widgetDataSourceDropdown: 'dashboardManagementWidgetDataSourceDropdown',\n widgetDisplayTypeDropdown: 'dashboardManagementWidgetDisplayTypeDropdown',\n widgetUrlInput: 'dashboardManagementWidgetUrlInput',\n widgetSaveButton: 'dashboardManagementWidgetSaveButton',\n widgetCancelButton: 'dashboardManagementWidgetCancelButton',\n widgetDeleteButton: 'dashboardManagementWidgetDeleteButton',\n} as const;\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService} from '@valtimo/shared';\nimport {BehaviorSubject, catchError, Observable, of, switchMap, take, tap} from 'rxjs';\nimport {DashboardItem, DashboardWidget, WidgetDataSource} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DashboardManagementService {\n private valtimoEndpointUri: string;\n\n public dashboards$ = new BehaviorSubject<{items: DashboardItem[] | null; loading: boolean}>({\n items: null,\n loading: true,\n });\n\n public loadData(): void {\n this.http\n .get<DashboardItem[]>(this.valtimoEndpointUri)\n .pipe(\n take(1),\n tap(() => {\n this.dashboards$.next({items: null, loading: true});\n })\n )\n .subscribe({\n next: (items: DashboardItem[]) => {\n this.dashboards$.next({items, loading: false});\n },\n error: error => {\n console.error(error);\n },\n });\n }\n\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService\n ) {\n this.valtimoEndpointUri = `${this.configService.config.valtimoApi.endpointUri}management/v1/dashboard`;\n }\n\n public createDashboard(dashboard: DashboardItem): Observable<DashboardItem> {\n return this.http.post<DashboardItem>(this.valtimoEndpointUri, dashboard);\n }\n\n public updateDashboards(dashboards: Array<DashboardItem>): Observable<Array<DashboardItem>> {\n return this.http.put<Array<DashboardItem>>(this.valtimoEndpointUri, dashboards);\n }\n\n public updateDashboard(dashboard: DashboardItem): Observable<DashboardItem> {\n return this.http.put<DashboardItem>(`${this.valtimoEndpointUri}/${dashboard.key}`, dashboard);\n }\n\n public deleteDashboard(dashboardKey: string): Observable<null> {\n return this.http.delete<null>(`${this.valtimoEndpointUri}/${dashboardKey}`);\n }\n\n public dispatchAction(actionResult: Observable<DashboardItem | null>): void {\n actionResult\n .pipe(\n switchMap(() => this.getDashboards()),\n tap(() => {\n this.dashboards$.next({items: null, loading: true});\n }),\n take(1),\n catchError(error => of(error))\n )\n .subscribe({\n next: (items: DashboardItem[]) => this.dashboards$.next({items, loading: false}),\n error: error => {\n console.error(error);\n },\n });\n }\n\n public getDashboard(dashboardKey: string): Observable<DashboardItem> {\n return this.http.get<DashboardItem>(`${this.valtimoEndpointUri}/${dashboardKey}`);\n }\n\n public getDashboardWidgetConfiguration(dashboardKey: string): Observable<Array<DashboardWidget>> {\n return this.http.get<Array<DashboardWidget>>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`\n );\n }\n\n public createDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetConfiguration: DashboardWidget\n ): Observable<DashboardWidget> {\n return this.http.post<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`,\n widgetConfiguration\n );\n }\n\n public updateDashboardWidgetConfigurations(\n dashboardKey: string,\n widgetConfigurations: Array<DashboardWidget>\n ): Observable<Array<DashboardWidget>> {\n return this.http.put<Array<DashboardWidget>>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`,\n widgetConfigurations\n );\n }\n\n public updateDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetConfiguration: DashboardWidget\n ): Observable<DashboardWidget> {\n return this.http.put<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration/${widgetConfiguration.key}`,\n widgetConfiguration\n );\n }\n\n public deleteDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetKey: string\n ): Observable<DashboardWidget> {\n return this.http.delete<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration/${widgetKey}`\n );\n }\n\n public getDataSources(): Observable<Array<WidgetDataSource>> {\n return this.http.get<Array<WidgetDataSource>>(`${this.valtimoEndpointUri}/widget-data-sources`);\n }\n\n private getDashboards(): Observable<DashboardItem[]> {\n return this.http.get<DashboardItem[]>(this.valtimoEndpointUri);\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Subscription} from 'rxjs';\nimport {tap} from 'rxjs/operators';\nimport {\n ConfigurationComponent,\n ConfigurationOutput,\n DataSourceConfigurationComponent,\n DisplayTypeConfigurationComponent,\n WidgetService,\n} from '@valtimo/dashboard';\n\n@Component({\n standalone: false,\n selector: 'valtimo-widget-configuration-container',\n templateUrl: './widget-configuration-container.component.html',\n})\nexport class WidgetConfigurationContainerComponent\n implements OnInit, OnDestroy, ConfigurationComponent\n{\n @ViewChild('widgetConfigurationComponent', {static: true, read: ViewContainerRef})\n private readonly _dynamicContainer: ViewContainerRef;\n\n @Input() public set dataSourceKey(value: string) {\n this._dataSourceKey$.next(value);\n }\n @Input() public set displayTypeKey(value: string) {\n this._displayTypeKey$.next(value);\n }\n @Input() public set disabled(disabledValue: boolean) {\n this._disabled$.next(disabledValue);\n }\n @Input() public set prefillConfiguration(prefillConfigurationValue) {\n this._prefillConfiguration$.next(prefillConfigurationValue);\n }\n @Output() public configurationEvent = new EventEmitter<ConfigurationOutput>();\n\n private _configurationSubscription!: Subscription;\n private readonly _subscriptions = new Subscription();\n\n private readonly _componentRef$ = new BehaviorSubject<\n ComponentRef<DataSourceConfigurationComponent | DisplayTypeConfigurationComponent> | undefined\n >(undefined);\n private readonly _dataSourceKey$ = new BehaviorSubject<string>('');\n private readonly _displayTypeKey$ = new BehaviorSubject<string>('');\n private readonly _disabled$ = new BehaviorSubject<boolean>(false);\n private readonly _prefillConfiguration$ = new BehaviorSubject<object | null>(null);\n\n constructor(private readonly widgetService: WidgetService) {}\n\n public ngOnInit(): void {\n this.openConfigurationComponentSubscription();\n this.openComponentInstanceSubscription();\n this.openDisabledSubscription();\n this.openPrefillConfigurationSubscription();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n private openConfigurationComponentSubscription(): void {\n this._subscriptions.add(\n combineLatest([\n this._displayTypeKey$,\n this._dataSourceKey$,\n this.widgetService.supportedDisplayTypes$,\n this.widgetService.supportedDataSources$,\n ])\n .pipe(\n tap(([displayTypeKey, dataSourceKey, supportedDisplayTypes, supportedDataSources]) => {\n let configurationComponent!: Type<\n DisplayTypeConfigurationComponent | DataSourceConfigurationComponent\n >;\n\n this._dynamicContainer.clear();\n\n const displayTypeSpecification =\n displayTypeKey &&\n supportedDisplayTypes.find(type => type.displayTypeKey === displayTypeKey);\n const dataSourceSpecification =\n dataSourceKey &&\n supportedDataSources.find(source => source.dataSourceKey === dataSourceKey);\n\n if (displayTypeSpecification && displayTypeSpecification.configurationComponent) {\n configurationComponent = displayTypeSpecification.configurationComponent;\n } else if (dataSourceSpecification && dataSourceSpecification.configurationComponent) {\n configurationComponent = dataSourceSpecification.configurationComponent;\n }\n\n if (configurationComponent) {\n const componentRef = this._dynamicContainer.createComponent(configurationComponent);\n this.configurationEvent.emit({valid: false, data: {}});\n this._componentRef$.next(componentRef);\n } else {\n this.configurationEvent.emit({valid: true, data: {}});\n }\n })\n )\n .subscribe()\n );\n }\n\n private openComponentInstanceSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._dataSourceKey$, this._displayTypeKey$]).subscribe(\n ([ref, dataSourceKey, displayTypeKey]) => {\n const instance = ref?.instance;\n\n this._configurationSubscription?.unsubscribe();\n\n if (instance) {\n if (displayTypeKey) {\n (instance as DisplayTypeConfigurationComponent).displayTypeKey = displayTypeKey;\n } else if (dataSourceKey) {\n (instance as DataSourceConfigurationComponent).dataSourceKey = dataSourceKey;\n }\n\n this._configurationSubscription = instance.configurationEvent.subscribe(\n configuration => {\n this.configurationEvent.emit(configuration);\n }\n );\n }\n }\n )\n );\n }\n\n private openDisabledSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._disabled$]).subscribe(([ref, disabled]) => {\n const instance = ref?.instance;\n\n if (instance) {\n instance.disabled = disabled;\n }\n })\n );\n }\n\n private openPrefillConfigurationSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._prefillConfiguration$]).subscribe(\n ([ref, prefillConfiguration]) => {\n const instance = ref?.instance;\n\n if (instance && prefillConfiguration) {\n instance.prefillConfiguration = prefillConfiguration;\n }\n }\n )\n );\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-template #widgetConfigurationComponent></ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {DOCUMENT} from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\nimport {GlobalNotificationService} from '@valtimo/shared';\nimport {\n ConfigurationOutput,\n DashboardWidgetConfiguration,\n DisplayTypeSpecification,\n WidgetService,\n WidgetTranslationService,\n} from '@valtimo/dashboard';\nimport {ListItem} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n filter,\n map,\n Observable,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem, WidgetDataSource, WidgetModalType} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n selector: 'valtimo-widget-modal',\n templateUrl: './widget-modal.component.html',\n styleUrls: ['./widget-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class WidgetModalComponent implements OnInit, OnDestroy {\n public readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n\n @Input() public showModal$: Observable<boolean>;\n @Input() public type: WidgetModalType;\n @Input() public dashboard: DashboardItem;\n @Input() public widgetKey!: string;\n @Input() public set editWidgetConfiguration(configuration: DashboardWidgetConfiguration) {\n if (configuration) {\n this.title.setValue(configuration.title);\n this.url.setValue(configuration.url);\n this.dataSourceSelected({item: {key: configuration.dataSourceKey}} as any);\n this.displayTypeSelected({item: {key: configuration.displayType}} as any);\n this.dataSourcePrefillConfig$.next(configuration.dataSourceProperties);\n this.displayTypePrefillConfig$.next(configuration.displayTypeProperties);\n } else {\n this.dataSourcePrefillConfig$.next(null);\n this.displayTypePrefillConfig$.next(null);\n }\n }\n @Output() public saveEvent = new EventEmitter<ConfigurationOutput>();\n\n public readonly form = this.fb.group({\n title: this.fb.control('', [Validators.required]),\n dataSource: this.fb.control(null, [Validators.required]),\n displayType: this.fb.control(null, [Validators.required]),\n url: this.fb.control(''),\n });\n\n public readonly open$ = new BehaviorSubject<boolean>(false);\n public readonly selectedDataSourceKey$ = new BehaviorSubject<string>('');\n public readonly selectedDisplayTypeKey$ = new BehaviorSubject<string>('');\n\n public readonly dataSourceItems$: Observable<Array<ListItem>> = combineLatest([\n this.dashboardManagementService.getDataSources(),\n this.selectedDataSourceKey$,\n this.widgetService.supportedDataSources$,\n this.translateService.stream('key'),\n ]).pipe(\n filter(([dataSources]) => !!dataSources),\n tap(([dataSources, selectedDataSourceKey]) => {\n if (selectedDataSourceKey) {\n this.setCompatibleDisplayTypes(dataSources, selectedDataSourceKey);\n } else {\n this.resetCompatibleDisplayTypes();\n }\n }),\n map(([dataSources, selectedDataSourceKey, supportedDataSources]) =>\n dataSources\n .filter(dataSource =>\n supportedDataSources.find(\n supportedDataSource => supportedDataSource.dataSourceKey === dataSource.key\n )\n )\n .map(dataSource => ({\n content: this.widgetTranslationService.instant('title', dataSource.key),\n selected: selectedDataSourceKey === dataSource.key,\n key: dataSource.key,\n }))\n )\n );\n\n public readonly dataSourcePrefillConfig$ = new BehaviorSubject<object | null>(null);\n public readonly displayTypePrefillConfig$ = new BehaviorSubject<object | null>(null);\n\n private readonly _compatibleDisplayTypes$ = new BehaviorSubject<Array<DisplayTypeSpecification>>(\n []\n );\n\n public readonly displayTypeItems$: Observable<Array<ListItem>> = combineLatest([\n this._compatibleDisplayTypes$,\n this.selectedDisplayTypeKey$,\n this.translateService.stream('key'),\n ]).pipe(\n map(([compatibleDisplayTypes, selectedDisplayTypeKey]) =>\n compatibleDisplayTypes.map(displayType => ({\n content: this.widgetTranslationService.instant('title', displayType.displayTypeKey),\n selected: displayType.displayTypeKey === selectedDisplayTypeKey,\n key: displayType.displayTypeKey,\n }))\n )\n );\n\n public readonly displayTypeDropdownDisabled$: Observable<boolean> = combineLatest([\n this._compatibleDisplayTypes$,\n this.selectedDataSourceKey$,\n ]).pipe(\n map(\n ([compatibleDisplayTypes, selectedDataSourceKey]) =>\n compatibleDisplayTypes?.length === 0 || !selectedDataSourceKey\n ),\n tap(displayTypeDropdownDisabled => {\n if (displayTypeDropdownDisabled) {\n this.displayType?.disable();\n } else {\n this.displayType?.enable();\n }\n })\n );\n\n public readonly dataSourceConfiguration$ = new BehaviorSubject<ConfigurationOutput>({\n valid: false,\n data: {},\n });\n public readonly displayTypeConfiguration$ = new BehaviorSubject<ConfigurationOutput>({\n valid: false,\n data: {},\n });\n\n public readonly disabled$ = new BehaviorSubject<boolean>(false);\n\n private _openSubscription!: Subscription;\n\n public get title() {\n return this.form.get('title');\n }\n public get key() {\n return this.form.get('key');\n }\n public get dataSource() {\n return this.form.get('dataSource');\n }\n public get displayType() {\n return this.form.get('displayType');\n }\n public get url() {\n return this.form.get('url');\n }\n\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly fb: FormBuilder,\n private readonly translateService: TranslateService,\n private readonly notificationService: GlobalNotificationService,\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly widgetService: WidgetService,\n private readonly widgetTranslationService: WidgetTranslationService\n ) {}\n\n public ngOnInit(): void {\n this.openOpenSubscription();\n }\n\n public ngOnDestroy(): void {\n this._openSubscription?.unsubscribe();\n }\n\n public closeModal(): void {\n this.open$.next(false);\n\n setTimeout(() => {\n this.enable();\n this.form.reset();\n this.selectedDataSourceKey$.next('');\n this.selectedDisplayTypeKey$.next('');\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public save(): void {\n this.disable();\n\n combineLatest([\n this.selectedDataSourceKey$,\n this.selectedDisplayTypeKey$,\n this.displayTypeConfiguration$,\n this.dataSourceConfiguration$,\n ])\n .pipe(\n take(1),\n map(\n ([\n selectedDataSourceKey,\n selectedDisplayTypeKey,\n displayTypeConfiguration,\n dataSourceConfiguration,\n ]) => ({\n title: this.title.value,\n displayType: selectedDisplayTypeKey,\n dataSourceKey: selectedDataSourceKey,\n dataSourceProperties: {...dataSourceConfiguration.data},\n displayTypeProperties: {...displayTypeConfiguration.data},\n url: this.url.value,\n })\n ),\n switchMap(widgetUpdateObject =>\n this.type === 'create'\n ? this.dashboardManagementService.createDashboardWidgetConfiguration(\n this.dashboard.key,\n widgetUpdateObject\n )\n : this.dashboardManagementService.updateDashboardWidgetConfiguration(\n this.dashboard.key,\n {...widgetUpdateObject, key: this.widgetKey}\n )\n )\n )\n .subscribe({\n complete: () => {\n this.saveEvent.emit();\n this.closeModal();\n },\n error: () => {\n this.enable();\n },\n });\n }\n\n public delete(): void {\n this.disable();\n\n this.dashboardManagementService\n .deleteDashboardWidgetConfiguration(this.dashboard.key, this.widgetKey)\n .subscribe({\n complete: () => {\n this.saveEvent.emit();\n this.closeModal();\n },\n error: () => {\n this.enable();\n },\n });\n }\n\n public dataSourceSelected(dataSource: ListItem): void {\n if (!dataSource) {\n return;\n }\n\n this.selectedDataSourceKey$.next(dataSource?.item?.key);\n this.dataSource.setValue(dataSource?.item?.key);\n }\n\n public displayTypeSelected(displayType: ListItem): void {\n if (!displayType) {\n return;\n }\n\n this.selectedDisplayTypeKey$.next(displayType?.item?.key);\n this.displayType.setValue(displayType?.item?.key);\n }\n\n public dataSourceConfiguration(configuration: ConfigurationOutput): void {\n this.dataSourceConfiguration$.next(configuration);\n }\n\n public displayTypeConfiguration(configuration: ConfigurationOutput): void {\n this.displayTypeConfiguration$.next(configuration);\n }\n\n private openOpenSubscription(): void {\n this._openSubscription = this.showModal$.subscribe(show => {\n this.open$.next(show);\n });\n }\n\n private resetCompatibleDisplayTypes(): void {\n this._compatibleDisplayTypes$.next([]);\n }\n\n private setCompatibleDisplayTypes(\n dataSources: Array<WidgetDataSource>,\n selectedDataSourceKey: string\n ): void {\n this.widgetService.supportedDisplayTypes$.pipe(take(1)).subscribe(supportedDisplayTypes => {\n const selectedDataSource = dataSources.find(source => source.key === selectedDataSourceKey);\n const availableDataFeatures = selectedDataSource?.dataFeatures;\n const compatibleDisplayTypes = supportedDisplayTypes.filter(displayType => {\n const supportedDataFeatures = displayType.requiredDataFeatures.filter(\n requiredDataFeature =>\n !!availableDataFeatures?.some(\n availableDataFeature =>\n this.trimAndToUpperCase(availableDataFeature) ===\n this.trimAndToUpperCase(requiredDataFeature)\n )\n );\n return supportedDataFeatures.length === displayType.requiredDataFeatures.length;\n });\n\n this._compatibleDisplayTypes$.next(compatibleDisplayTypes);\n });\n }\n\n private disable(): void {\n this.disabled$.next(true);\n this.form.disable();\n }\n\n private enable(): void {\n this.disabled$.next(false);\n this.form.enable();\n }\n\n private trimAndToUpperCase(text: string): string {\n return `${text}`.trim().toUpperCase();\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n disabled: disabled$ | async,\n isCreate: type === 'create',\n isDelete: type === 'delete',\n isEdit: type === 'edit',\n open: open$ | async,\n } as vars\"\n>\n <ng-container\n *ngIf=\"{\n create: vars.isCreate && ('dashboardManagement.widgets.add' | translate),\n delete: vars.isDelete && ('dashboardManagement.widgets.delete' | translate),\n edit: vars.isEdit && ('dashboardManagement.widgets.edit' | translate),\n } as titles\"\n >\n <cds-modal\n *ngIf=\"{\n title: titles.edit || titles.create || titles.delete,\n } as translations\"\n valtimoCdsModal\n [open]=\"vars.open\"\n showFooter=\"true\"\n size=\"md\"\n title=\"{{ translations.title }}\"\n class=\"widget-modal\"\n (close)=\"closeModal()\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ translations.title }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngIf=\"vars.isDelete\">\n {{ 'dashboardManagement.widgets.deleteDescription' | translate }}</ng-container\n >\n\n <ng-container *ngIf=\"vars.isEdit || vars.isCreate\">\n <ng-container *ngTemplateOutlet=\"widgetForm; context: {vars: vars}\"></ng-container>\n </ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngIf=\"vars.isEdit || vars.isCreate\">\n <ng-container *ngTemplateOutlet=\"editButtons; context: {vars: vars}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"vars.isDelete\">\n <ng-container *ngTemplateOutlet=\"deleteButtons; context: {vars: vars}\"></ng-container>\n </ng-container>\n </cds-modal-footer>\n </cds-modal>\n </ng-container>\n</ng-container>\n\n<ng-template #widgetForm let-vars=\"vars\">\n <form\n *ngIf=\"\n form && {\n dataSourceItems: dataSourceItems$ | async,\n displayTypeDropdownDisabled: displayTypeDropdownDisabled$ | async,\n displayTypeItems: displayTypeItems$ | async,\n selectedDataSourceKey: selectedDataSourceKey$ | async,\n selectedDisplayTypeKey: selectedDisplayTypeKey$ | async,\n } as obs\n \"\n [formGroup]=\"form\"\n class=\"dashboard-modal__form\"\n >\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'dashboardManagement.widgets.form.titleHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.titleHelperText' | translate\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.title' | translate }}\n\n <input\n cdsText\n formControlName=\"title\"\n [attr.data-test-id]=\"testIds.widgetTitleInput\"\n [invalid]=\"title.dirty && title.invalid\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\" *ngIf=\"obs.dataSourceItems\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.widgetDataSourceDropdown\"\n formControlName=\"dataSource\"\n [helperText]=\"'dashboardManagement.widgets.form.dataSourceHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.dateSourceHelperText' | translate\"\n [invalid]=\"dataSource.dirty && dataSource.invalid\"\n [label]=\"'dashboardManagement.widgets.form.dataSource' | translate\"\n (selected)=\"dataSourceSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.dataSourceItems\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <valtimo-widget-configuration-container\n *ngIf=\"obs.selectedDataSourceKey\"\n [dataSourceKey]=\"obs.selectedDataSourceKey\"\n [disabled]=\"vars.disabled\"\n [prefillConfiguration]=\"dataSourcePrefillConfig$ | async\"\n (configurationEvent)=\"dataSourceConfiguration($event)\"\n ></valtimo-widget-configuration-container>\n\n <div class=\"form__element\" *ngIf=\"obs.displayTypeItems\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.widgetDisplayTypeDropdown\"\n formControlName=\"displayType\"\n [helperText]=\"'dashboardManagement.widgets.form.displayTypeHelperText' | translate\"\n [invalid]=\"displayType.dirty && displayType.invalid\"\n [invalidText]=\"'dashboardManagement.widgets.form.displayTypeHelperText' | translate\"\n [label]=\"'dashboardManagement.widgets.form.displayType' | translate\"\n (selected)=\"displayTypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.displayTypeItems\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <valtimo-widget-configuration-container\n *ngIf=\"obs.selectedDisplayTypeKey\"\n [disabled]=\"vars.disabled\"\n [displayTypeKey]=\"obs.selectedDisplayTypeKey\"\n [prefillConfiguration]=\"displayTypePrefillConfig$ | async\"\n (configurationEvent)=\"displayTypeConfiguration($event)\"\n ></valtimo-widget-configuration-container>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'dashboardManagement.widgets.form.urlHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.urlHelperText' | translate\"\n [invalid]=\"url.dirty && url.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.url' | translate }}\n\n <input cdsText formControlName=\"url\" [attr.data-test-id]=\"testIds.widgetUrlInput\" [invalid]=\"url.dirty && url.invalid\" />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editButtons let-vars=\"vars\">\n <ng-container\n *ngIf=\"{\n dataSourceConfiguration: dataSourceConfiguration$ | async,\n displayTypeConfiguration: displayTypeConfiguration$ | async,\n } as obs\"\n >\n <button cdsButton=\"ghost\" [attr.data-test-id]=\"testIds.widgetCancelButton\" [disabled]=\"vars.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.widgetSaveButton\"\n [disabled]=\"\n form.invalid ||\n !obs.dataSourceConfiguration.valid ||\n !obs.displayTypeConfiguration.valid ||\n vars.disabled\n \"\n (click)=\"save()\"\n >\n {{ 'dashboardManagement.widgets.save' | translate }}\n </button>\n </ng-container>\n</ng-template>\n\n<ng-template #deleteButtons let-vars=\"vars\">\n <button cdsButton=\"secondary\" [attr.data-test-id]=\"testIds.widgetCancelButton\" [disabled]=\"vars.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button cdsButton=\"danger\" [attr.data-test-id]=\"testIds.widgetDeleteButton\" [disabled]=\"vars.disabled\" (click)=\"delete()\">\n {{ 'dashboardManagement.widgets.delete' | translate }}\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem} from '../../models';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\nimport {ConfigurationOutput} from '@valtimo/dashboard';\n\n@Component({\n selector: 'valtimo-edit-dashboard-modal',\n templateUrl: './edit-dashboard-modal.html',\n styleUrls: ['./edit-dashboard-modal.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class EditDashboardModalComponent implements OnInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n @Input() public showModal$: Observable<boolean>;\n @Input() public dashboard: DashboardItem;\n @Output() public saveEvent = new EventEmitter<ConfigurationOutput>();\n\n public readonly open$ = new BehaviorSubject<boolean>(false);\n public readonly disabled$ = new BehaviorSubject<boolean>(false);\n public readonly editDashboardForm = this.fb.group({\n title: this.fb.control('', [Validators.required]),\n description: this.fb.control('', [Validators.required]),\n });\n\n public get dashboardTitle() {\n return this.editDashboardForm.get('title');\n }\n\n public get dashboardDescription() {\n return this.editDashboardForm.get('description');\n }\n\n private _openSubscription!: Subscription;\n\n constructor(\n private readonly fb: FormBuilder,\n private readonly dashboardManagementService: DashboardManagementService\n ) {}\n\n public ngOnInit(): void {\n this.openOpenSubscription();\n }\n\n public closeModal(): void {\n this.open$.next(false);\n\n setTimeout(() => {\n this.editDashboardForm.reset();\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public saveDashboard(): void {\n this.disable();\n\n this.dashboardManagementService\n .updateDashboard({\n description: this.dashboardDescription.value,\n title: this.dashboardTitle.value,\n key: this.dashboard.key,\n })\n .subscribe(() => {\n this.saveEvent.emit();\n this.closeModal();\n });\n }\n\n private setEditDashboardForm(): void {\n if (this.dashboard) {\n this.dashboardTitle?.setValue(this.dashboard.title);\n this.dashboardDescription?.setValue(this.dashboard.description);\n }\n\n this.enable();\n }\n\n private openOpenSubscription(): void {\n this._openSubscription = this.showModal$.subscribe(show => {\n this.setEditDashboardForm();\n this.open$.next(show);\n });\n }\n\n private disable(): void {\n this.disabled$.next(true);\n }\n\n private enable(): void {\n this.disabled$.next(false);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {DatePipe} from '@angular/common';\nimport {AfterViewInit, Component, computed, signal, ViewEncapsulation} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {Code16, Edit16} from '@carbon/icons';\nimport {TranslateService} from '@ngx-translate/core';\nimport {\n ActionItem,\n ColumnConfig,\n EditorModel,\n PageHeaderService,\n PageTitleService,\n ViewType,\n} from '@valtimo/components';\nimport {DashboardWidgetConfiguration} from '@valtimo/dashboard';\nimport {IconService} from 'carbon-components-angular';\nimport {BehaviorSubject, combineLatest, map, Observable, switchMap, tap} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem, DashboardWidget, WidgetModalType} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n templateUrl: './dashboard-details.component.html',\n styleUrls: ['./dashboard-details.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DashboardDetailsComponent implements AfterViewInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n public modalType: WidgetModalType = 'create';\n public fields!: ColumnConfig[];\n public readonly actionItems: ActionItem[] = [\n {\n label: 'Edit',\n callback: this.editWidget.bind(this),\n },\n {\n label: 'Duplicate',\n callback: this.duplicateWidget.bind(this),\n },\n {\n label: 'Delete',\n callback: this.deleteWidget.bind(this),\n type: 'danger',\n },\n ];\n\n private readonly _dashboardKey$ = this.route.params.pipe(map(params => params.id));\n private readonly _refreshDashboardSubject$ = new BehaviorSubject<null>(null);\n public readonly currentDashboard$: Observable<DashboardItem | undefined> = combineLatest([\n this._dashboardKey$,\n this.translateService.stream('key'),\n this._refreshDashboardSubject$,\n ]).pipe(\n switchMap(([dashboardKey]) => this.dashboardManagementService.getDashboard(dashboardKey)),\n tap((currentDashboard: DashboardItem) => {\n if (!currentDashboard) {\n return;\n }\n\n this.pageTitleService.setCustomPageTitle(currentDashboard.title);\n this.pageTitleService.setCustomPageSubtitle(\n this.translateService.instant('dashboardManagement.widgets.metadata', {\n createdBy: currentDashboard.createdBy,\n createdOn: this.datePipe.transform(currentDashboard.createdOn ?? '', 'd/M/yy, H:mm'),\n key: currentDashboard.key,\n })\n );\n })\n );\n\n public readonly lastItemIndex$ = new BehaviorSubject<number>(0);\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly dragAndDropDisabled$ = new BehaviorSubject<boolean>(false);\n\n public readonly _refreshWidgetsSubject$ = new BehaviorSubject<DashboardWidget[] | null>(null);\n\n private _widgetData: DashboardWidget[] | null = null;\n public readonly widgetData$: Observable<DashboardWidget[]> = combineLatest([\n this._dashboardKey$,\n this._refreshWidgetsSubject$,\n ]).pipe(\n switchMap(([dashboardKey, refreshWidgets]) => {\n if (!this._widgetData || !refreshWidgets) {\n this.loading$.next(true);\n return this.dashboardManagementService.getDashboardWidgetConfiguration(dashboardKey);\n }\n\n this.dragAndDropDisabled$.next(true);\n\n return this.dashboardManagementService.updateDashboardWidgetConfigurations(\n dashboardKey,\n refreshWidgets\n );\n }),\n tap((data: DashboardWidget[]) => {\n this._widgetData = data;\n this.lastItemIndex$.next(data.length - 1);\n this.loading$.next(false);\n this.dragAndDropDisabled$.next(false);\n })\n );\n\n public readonly jsonEditorModel$: Observable<EditorModel> = this.widgetData$.pipe(\n map((data: DashboardWidget[]) => ({\n value: JSON.stringify(data),\n language: 'json',\n }))\n );\n\n public readonly showModal$ = new BehaviorSubject<boolean>(false);\n public readonly showEditDashboardModal$ = new BehaviorSubject<boolean>(false);\n\n public readonly editWidgetConfiguration$ =\n new BehaviorSubject<DashboardWidgetConfiguration | null>(null);\n\n public readonly compactMode$ = this.pageHeaderService.compactMode$;\n\n public readonly $jsonEditorActive = signal<boolean>(false);\n public readonly $buttonTheme = computed(() => (this.$jsonEditorActive() ? 'primary' : 'ghost'));\n\n constructor(\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly datePipe: DatePipe,\n private readonly iconService: IconService,\n private readonly pageTitleService: PageTitleService,\n private readonly route: ActivatedRoute,\n private readonly translateService: TranslateService,\n private readonly pageHeaderService: PageHeaderService\n ) {}\n\n public ngAfterViewInit(): void {\n this.iconService.registerAll([Code16, Edit16]);\n this.setFields();\n }\n\n public addWidget(): void {\n this.editWidgetConfiguration$.next(null);\n this.modalType = 'create';\n this.showModal();\n }\n\n public editDashboard(): void {\n this.showEditDashboardModal();\n }\n\n public refreshWidgets(): void {\n this._refreshWidgetsSubject$.next(null);\n }\n\n public refreshDashboard(): void {\n this._refreshDashboardSubject$.next(null);\n }\n\n public updateWidgetData(items: DashboardWidget[]): void {\n if (!items) return;\n\n this._refreshWidgetsSubject$.next(items);\n }\n\n public editWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'edit';\n this.showModal();\n }\n\n public switchView(): void {\n this.$jsonEditorActive.set(!this.$jsonEditorActive());\n\n if (!this.$jsonEditorActive()) this.refreshWidgets();\n }\n\n private duplicateWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'create';\n this.showModal();\n }\n\n private setFields(): void {\n this.fields = [\n {\n viewType: ViewType.TEXT,\n key: 'title',\n label: 'Name',\n },\n ];\n }\n\n private deleteWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'delete';\n this.showModal();\n }\n\n private showModal(): void {\n this.showModal$.next(true);\n }\n\n private showEditDashboardModal(): void {\n this.showEditDashboardModal$.next(true);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"\n fields && {\n currentDashboard: currentDashboard$ | async,\n editWidgetConfiguration: editWidgetConfiguration$ | async,\n loading: loading$ | async,\n widgetData: widgetData$ | async,\n dragAndDropDisabled: dragAndDropDisabled$ | async,\n jsonEditorModel: jsonEditorModel$ | async,\n } as obs\n \"\n>\n <div class=\"dashboard-detail-table\">\n @if (!$jsonEditorActive()) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.widgetData\"\n [loading]=\"obs.loading\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"obs.dragAndDropDisabled\"\n (itemsReordered)=\"updateWidgetData($event)\"\n (rowClicked)=\"editWidget($event)\"\n >\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"viewToggle\"></ng-container>\n\n <ng-container [ngTemplateOutlet]=\"addWidgetButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addWidgetButton\"\n description=\"{{ 'dashboardManagement.widgets.noResults.description' | translate }}\"\n title=\"{{ 'dashboardManagement.widgets.noResults.title' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n } @else {\n <valtimo-json-editor\n [model]=\"obs.jsonEditorModel\"\n [fitPage]=\"true\"\n [fitPageSpaceAdjustment]=\"56\"\n (saveEvent)=\"updateWidgetData($event)\"\n >\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n </valtimo-json-editor>\n }\n </div>\n\n <valtimo-widget-modal\n [dashboard]=\"obs.currentDashboard\"\n [editWidgetConfiguration]=\"obs.editWidgetConfiguration\"\n [showModal$]=\"showModal$\"\n [type]=\"modalType\"\n [widgetKey]=\"obs.editWidgetConfiguration?.key\"\n (saveEvent)=\"refreshWidgets()\"\n ></valtimo-widget-modal>\n\n <valtimo-edit-dashboard-modal\n [dashboard]=\"obs.currentDashboard\"\n [showModal$]=\"showEditDashboardModal$\"\n (saveEvent)=\"refreshDashboard()\"\n >\n </valtimo-edit-dashboard-modal>\n</ng-container>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <button\n [attr.data-test-id]=\"testIds.editButton\"\n cdsButton=\"tertiary\"\n [size]=\"(compactMode$ | async) ? 'sm' : 'md'\"\n (click)=\"editDashboard()\"\n >\n {{ 'dashboardManagement.widgets.editButton' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </button>\n </ng-template>\n</ng-container>\n\n<ng-template #addWidgetButton>\n <button cdsButton=\"primary\" [attr.data-test-id]=\"testIds.addWidgetButton\" [disabled]=\"loading$ | async\" (click)=\"addWidget()\">\n {{ 'dashboardManagement.widgets.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #viewToggle>\n <cds-tooltip [description]=\"'JSON editor'\">\n <button\n [cdsButton]=\"$buttonTheme()\"\n [attr.data-test-id]=\"testIds.switchViewButton\"\n iconOnly=\"true\"\n (click)=\"switchView()\"\n >\n <svg cdsIcon=\"code\" size=\"16\"></svg>\n </button>\n </cds-tooltip>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {AbstractControl, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {Router} from '@angular/router';\nimport {ActionItem, ColumnConfig, ViewType} from '@valtimo/components';\nimport {BehaviorSubject, finalize, Observable} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n templateUrl: './dashboard-management.component.html',\n styleUrls: ['./dashboard-management.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class DashboardManagementComponent implements OnInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n public readonly deleteRowKey$: BehaviorSubject<string> = new BehaviorSubject('');\n public readonly openModal$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n public readonly showDeleteModal$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n public readonly tableData$: Observable<{items: DashboardItem[] | null; loading: boolean}> =\n this.dashboardManagementService.dashboards$;\n public fields: ColumnConfig[] = [\n {\n viewType: ViewType.TEXT,\n key: 'title',\n label: 'dashboardManagement.name',\n },\n {\n viewType: ViewType.TEXT,\n key: 'description',\n label: 'dashboardManagement.description',\n },\n {\n viewType: ViewType.TEXT,\n key: 'key',\n label: 'dashboardManagement.key',\n },\n ];\n public readonly actionItems: ActionItem[] = [\n {\n label: 'interface.delete',\n callback: this.deleteDashboard.bind(this),\n type: 'danger',\n },\n ];\n public form: FormGroup;\n\n constructor(\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly fb: FormBuilder,\n private readonly router: Router\n ) {}\n\n public ngOnInit(): void {\n this.dashboardManagementService.loadData();\n this.form = this.fb.group({\n description: this.fb.control('', [Validators.required]),\n title: this.fb.control('', [Validators.required]),\n });\n }\n\n public closeModal(): void {\n this.openModal$.next(false);\n this.form.reset();\n }\n\n public createDashboard(): void {\n const control: AbstractControl | null = this.form.get('title');\n if (!control || !control.valid) {\n return;\n }\n\n const newDashboard: DashboardItem = this.form.getRawValue();\n this.dashboardManagementService.dispatchAction(\n this.dashboardManagementService.createDashboard(newDashboard).pipe(\n finalize(() => {\n this.closeModal();\n })\n )\n );\n }\n\n public onConfirmEvent(dashboardKey: string): void {\n this.dashboardManagementService.dispatchAction(\n this.dashboardManagementService.deleteDashboard(dashboardKey).pipe(\n finalize(() => {\n this.closeModal();\n })\n )\n );\n }\n\n public getControlInvalid(controlKey: string): boolean {\n const control: AbstractControl | null = this.form.get(controlKey);\n\n if (!control) {\n return true;\n }\n\n return !control.valid && !control.pristine;\n }\n\n public openModal(): void {\n this.openModal$.next(true);\n }\n\n public onRowClick(item: DashboardItem): void {\n this.router.navigate([`/dashboard-management/${item.key}`]);\n }\n\n private deleteDashboard(dashboard: DashboardItem): void {\n this.deleteRowKey$.next(dashboard.key);\n this.showDeleteModal$.next(true);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"tableData$ | async as data\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [header]=\"false\"\n [items]=\"data.items\"\n [loading]=\"data.loading\"\n [fields]=\"fields\"\n (rowClicked)=\"onRowClick($event)\"\n class=\"valtimo-dashboard-management__table\"\n >\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addDashboardButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addDashboardButton\"\n description=\"{{ 'dashboardManagement.noResults.description' | translate }}\"\n title=\"{{ 'dashboardManagement.noResults.title' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-container>\n\n<cds-modal\n valtimoCdsModal\n [open]=\"openModal$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.addDashboard' | translate }}\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'dashboardManagement.addDashboard' | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\" class=\"valtimo-dashboard-management__form\">\n <cds-label [invalid]=\"getControlInvalid('title')\">\n {{ 'dashboardManagement.addModal.name' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.createTitleInput\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"getControlInvalid('title')\"\n formControlName=\"title\"\n cdsText\n placeholder=\"{{ 'dashboardManagement.addModal.namePlaceholder' | translate }}\"\n />\n </cds-label>\n\n <cds-label\n [helperText]=\"'dashboardManagement.addModal.descriptionHelperText' | translate\"\n [invalid]=\"getControlInvalid('description')\"\n >\n {{ 'dashboardManagement.description' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.createDescriptionInput\"\n [invalid]=\"getControlInvalid('description')\"\n formControlName=\"description\"\n cdsText\n placeholder=\"{{ 'dashboardManagement.addModal.descriptionPlaceholder' | translate }}\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" [attr.data-test-id]=\"testIds.cancelDashboardButton\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.createButton\"\n [disabled]=\"this.form.invalid\"\n cdsButton=\"primary\"\n (click)=\"createDashboard()\"\n >\n {{ 'dashboardManagement.create' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dashboardManagement.deleteModalContent\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"dashboardManagement.delete\"\n (confirmEvent)=\"onConfirmEvent($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #addDashboardButton>\n <button [attr.data-test-id]=\"testIds.addButton\" cdsButton=\"primary\" (click)=\"openModal()\">\n {{ 'dashboardManagement.addDashboard' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {AuthGuardService} from '@valtimo/security';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {DashboardManagementComponent} from './components/dashboard-management/dashboard-management.component';\nimport {DashboardDetailsComponent} from './components/dashboard-details/dashboard-details.component';\n\nconst routes: Routes = [\n {\n path: 'dashboard-management',\n component: DashboardManagementComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Dashboard configuration', roles: [ROLE_ADMIN]},\n },\n {\n path: 'dashboard-management/:id',\n component: DashboardDetailsComponent,\n canActivate: [AuthGuardService],\n data: {\n title: 'Dashboard details',\n roles: [ROLE_ADMIN],\n customPageTitle: true,\n customPageSubtitle: true,\n },\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n declarations: [],\n})\nexport class DashboardManagementRoutingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CarbonListModule,\n ConfirmationModalModule,\n JsonEditorComponent,\n RenderInPageHeaderDirective,\n SpinnerModule,\n ValtimoCdsModalDirective,\n} from '@valtimo/components';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n LayerModule,\n ModalModule,\n NotificationModule,\n} from 'carbon-components-angular';\nimport {DashboardDetailsComponent} from './components/dashboard-details/dashboard-details.component';\nimport {DashboardManagementComponent} from './components/dashboard-management/dashboard-management.component';\nimport {DashboardManagementRoutingModule} from './dashboard-management-routing.module';\nimport {WidgetModalComponent} from './components/widget-modal/widget-modal.component';\nimport {EditDashboardModalComponent} from './components/edit-dashboard-modal/edit-dashboard-modal';\nimport {WidgetTranslatePipeModule} from '@valtimo/dashboard';\nimport {WidgetConfigurationContainerComponent} from './components/widget-configuration-container/widget-configuration-container.component';\n\n@NgModule({\n declarations: [\n DashboardManagementComponent,\n DashboardDetailsComponent,\n WidgetModalComponent,\n EditDashboardModalComponent,\n WidgetConfigurationContainerComponent,\n ],\n imports: [\n ButtonModule,\n CommonModule,\n DashboardManagementRoutingModule,\n DropdownModule,\n InputModule,\n ModalModule,\n ReactiveFormsModule,\n SpinnerModule,\n TranslateModule,\n RenderInPageHeaderDirective,\n ConfirmationModalModule,\n NotificationModule,\n IconModule,\n WidgetTranslatePipeModule,\n CarbonListModule,\n LayerModule,\n ValtimoCdsModalDirective,\n JsonEditorComponent,\n ],\n exports: [],\n})\nexport class DashboardManagementModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of dashboard-management\n */\n\nexport * from './lib/constants/dashboard-management.test-ids';\nexport * from './lib/dashboard-management.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["tap","i1","i2","i3","i4.DashboardManagementService","i6","i7","i8","i9.WidgetConfigurationContainerComponent","i2.DashboardManagementService","i4","i5","i1.DashboardManagementService","i7.WidgetModalComponent","i8.EditDashboardModalComponent"],"mappings":"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"}
1
+ {"version":3,"file":"valtimo-dashboard-management.mjs","sources":["../../../../projects/valtimo/dashboard-management/src/lib/constants/dashboard-management.test-ids.ts","../../../../projects/valtimo/dashboard-management/src/lib/services/dashboard-management.service.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-configuration-container/widget-configuration-container.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-configuration-container/widget-configuration-container.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-modal/widget-modal.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-modal/widget-modal.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/edit-dashboard-modal/edit-dashboard-modal.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/edit-dashboard-modal/edit-dashboard-modal.html","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-details/dashboard-details.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-details/dashboard-details.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-management/dashboard-management.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-management/dashboard-management.component.html","../../../../projects/valtimo/dashboard-management/src/lib/dashboard-management-routing.module.ts","../../../../projects/valtimo/dashboard-management/src/lib/dashboard-management.module.ts","../../../../projects/valtimo/dashboard-management/src/public-api.ts","../../../../projects/valtimo/dashboard-management/src/valtimo-dashboard-management.ts"],"sourcesContent":["/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DASHBOARD_MANAGEMENT_TEST_IDS = {\n // Dashboard list page\n addButton: 'dashboardManagementAddButton',\n createTitleInput: 'dashboardManagementCreateTitleInput',\n createDescriptionInput: 'dashboardManagementCreateDescriptionInput',\n createButton: 'dashboardManagementCreateButton',\n cancelDashboardButton: 'dashboardManagementCancelDashboardButton',\n // Dashboard details page — edit dashboard\n editButton: 'dashboardManagementEditButton',\n editTitleInput: 'dashboardManagementEditTitleInput',\n editDescriptionInput: 'dashboardManagementEditDescriptionInput',\n completeButton: 'dashboardManagementCompleteButton',\n switchViewButton: 'dashboardDetailsSwitchView',\n // Widget list page (dashboard details)\n addWidgetButton: 'dashboardManagementAddWidgetButton',\n // Widget modal\n widgetTitleInput: 'dashboardManagementWidgetTitleInput',\n widgetDataSourceDropdown: 'dashboardManagementWidgetDataSourceDropdown',\n widgetDisplayTypeDropdown: 'dashboardManagementWidgetDisplayTypeDropdown',\n widgetUrlInput: 'dashboardManagementWidgetUrlInput',\n widgetSaveButton: 'dashboardManagementWidgetSaveButton',\n widgetCancelButton: 'dashboardManagementWidgetCancelButton',\n widgetDeleteButton: 'dashboardManagementWidgetDeleteButton',\n} as const;\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService} from '@valtimo/shared';\nimport {BehaviorSubject, catchError, Observable, of, switchMap, take, tap} from 'rxjs';\nimport {DashboardItem, DashboardWidget, WidgetDataSource} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DashboardManagementService {\n private valtimoEndpointUri: string;\n\n public dashboards$ = new BehaviorSubject<{items: DashboardItem[] | null; loading: boolean}>({\n items: null,\n loading: true,\n });\n\n public loadData(): void {\n this.http\n .get<DashboardItem[]>(this.valtimoEndpointUri)\n .pipe(\n take(1),\n tap(() => {\n this.dashboards$.next({items: null, loading: true});\n })\n )\n .subscribe({\n next: (items: DashboardItem[]) => {\n this.dashboards$.next({items, loading: false});\n },\n error: error => {\n console.error(error);\n },\n });\n }\n\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService\n ) {\n this.valtimoEndpointUri = `${this.configService.config.valtimoApi.endpointUri}management/v1/dashboard`;\n }\n\n public createDashboard(dashboard: DashboardItem): Observable<DashboardItem> {\n return this.http.post<DashboardItem>(this.valtimoEndpointUri, dashboard);\n }\n\n public updateDashboards(dashboards: Array<DashboardItem>): Observable<Array<DashboardItem>> {\n return this.http.put<Array<DashboardItem>>(this.valtimoEndpointUri, dashboards);\n }\n\n public updateDashboard(dashboard: DashboardItem): Observable<DashboardItem> {\n return this.http.put<DashboardItem>(`${this.valtimoEndpointUri}/${dashboard.key}`, dashboard);\n }\n\n public deleteDashboard(dashboardKey: string): Observable<null> {\n return this.http.delete<null>(`${this.valtimoEndpointUri}/${dashboardKey}`);\n }\n\n public dispatchAction(actionResult: Observable<DashboardItem | null>): void {\n actionResult\n .pipe(\n switchMap(() => this.getDashboards()),\n tap(() => {\n this.dashboards$.next({items: null, loading: true});\n }),\n take(1),\n catchError(error => of(error))\n )\n .subscribe({\n next: (items: DashboardItem[]) => this.dashboards$.next({items, loading: false}),\n error: error => {\n console.error(error);\n },\n });\n }\n\n public getDashboard(dashboardKey: string): Observable<DashboardItem> {\n return this.http.get<DashboardItem>(`${this.valtimoEndpointUri}/${dashboardKey}`);\n }\n\n public getDashboardWidgetConfiguration(dashboardKey: string): Observable<Array<DashboardWidget>> {\n return this.http.get<Array<DashboardWidget>>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`\n );\n }\n\n public createDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetConfiguration: DashboardWidget\n ): Observable<DashboardWidget> {\n return this.http.post<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`,\n widgetConfiguration\n );\n }\n\n public updateDashboardWidgetConfigurations(\n dashboardKey: string,\n widgetConfigurations: Array<DashboardWidget>\n ): Observable<Array<DashboardWidget>> {\n return this.http.put<Array<DashboardWidget>>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`,\n widgetConfigurations\n );\n }\n\n public updateDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetConfiguration: DashboardWidget\n ): Observable<DashboardWidget> {\n return this.http.put<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration/${widgetConfiguration.key}`,\n widgetConfiguration\n );\n }\n\n public deleteDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetKey: string\n ): Observable<DashboardWidget> {\n return this.http.delete<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration/${widgetKey}`\n );\n }\n\n public getDataSources(): Observable<Array<WidgetDataSource>> {\n return this.http.get<Array<WidgetDataSource>>(`${this.valtimoEndpointUri}/widget-data-sources`);\n }\n\n private getDashboards(): Observable<DashboardItem[]> {\n return this.http.get<DashboardItem[]>(this.valtimoEndpointUri);\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Subscription} from 'rxjs';\nimport {tap} from 'rxjs/operators';\nimport {\n ConfigurationComponent,\n ConfigurationOutput,\n DataSourceConfigurationComponent,\n DisplayTypeConfigurationComponent,\n WidgetService,\n} from '@valtimo/dashboard';\n\n@Component({\n standalone: false,\n selector: 'valtimo-widget-configuration-container',\n templateUrl: './widget-configuration-container.component.html',\n})\nexport class WidgetConfigurationContainerComponent\n implements OnInit, OnDestroy, ConfigurationComponent\n{\n @ViewChild('widgetConfigurationComponent', {static: true, read: ViewContainerRef})\n private readonly _dynamicContainer: ViewContainerRef;\n\n @Input() public set dataSourceKey(value: string) {\n this._dataSourceKey$.next(value);\n }\n @Input() public set displayTypeKey(value: string) {\n this._displayTypeKey$.next(value);\n }\n @Input() public set disabled(disabledValue: boolean) {\n this._disabled$.next(disabledValue);\n }\n @Input() public set prefillConfiguration(prefillConfigurationValue) {\n this._prefillConfiguration$.next(prefillConfigurationValue);\n }\n @Output() public configurationEvent = new EventEmitter<ConfigurationOutput>();\n\n private _configurationSubscription!: Subscription;\n private readonly _subscriptions = new Subscription();\n\n private readonly _componentRef$ = new BehaviorSubject<\n ComponentRef<DataSourceConfigurationComponent | DisplayTypeConfigurationComponent> | undefined\n >(undefined);\n private readonly _dataSourceKey$ = new BehaviorSubject<string>('');\n private readonly _displayTypeKey$ = new BehaviorSubject<string>('');\n private readonly _disabled$ = new BehaviorSubject<boolean>(false);\n private readonly _prefillConfiguration$ = new BehaviorSubject<object | null>(null);\n\n constructor(private readonly widgetService: WidgetService) {}\n\n public ngOnInit(): void {\n this.openConfigurationComponentSubscription();\n this.openComponentInstanceSubscription();\n this.openDisabledSubscription();\n this.openPrefillConfigurationSubscription();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n private openConfigurationComponentSubscription(): void {\n this._subscriptions.add(\n combineLatest([\n this._displayTypeKey$,\n this._dataSourceKey$,\n this.widgetService.supportedDisplayTypes$,\n this.widgetService.supportedDataSources$,\n ])\n .pipe(\n tap(([displayTypeKey, dataSourceKey, supportedDisplayTypes, supportedDataSources]) => {\n let configurationComponent!: Type<\n DisplayTypeConfigurationComponent | DataSourceConfigurationComponent\n >;\n\n this._dynamicContainer.clear();\n\n const displayTypeSpecification =\n displayTypeKey &&\n supportedDisplayTypes.find(type => type.displayTypeKey === displayTypeKey);\n const dataSourceSpecification =\n dataSourceKey &&\n supportedDataSources.find(source => source.dataSourceKey === dataSourceKey);\n\n if (displayTypeSpecification && displayTypeSpecification.configurationComponent) {\n configurationComponent = displayTypeSpecification.configurationComponent;\n } else if (dataSourceSpecification && dataSourceSpecification.configurationComponent) {\n configurationComponent = dataSourceSpecification.configurationComponent;\n }\n\n if (configurationComponent) {\n const componentRef = this._dynamicContainer.createComponent(configurationComponent);\n this.configurationEvent.emit({valid: false, data: {}});\n this._componentRef$.next(componentRef);\n } else {\n this.configurationEvent.emit({valid: true, data: {}});\n }\n })\n )\n .subscribe()\n );\n }\n\n private openComponentInstanceSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._dataSourceKey$, this._displayTypeKey$]).subscribe(\n ([ref, dataSourceKey, displayTypeKey]) => {\n const instance = ref?.instance;\n\n this._configurationSubscription?.unsubscribe();\n\n if (instance) {\n if (displayTypeKey) {\n (instance as DisplayTypeConfigurationComponent).displayTypeKey = displayTypeKey;\n } else if (dataSourceKey) {\n (instance as DataSourceConfigurationComponent).dataSourceKey = dataSourceKey;\n }\n\n this._configurationSubscription = instance.configurationEvent.subscribe(\n configuration => {\n this.configurationEvent.emit(configuration);\n }\n );\n }\n }\n )\n );\n }\n\n private openDisabledSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._disabled$]).subscribe(([ref, disabled]) => {\n const instance = ref?.instance;\n\n if (instance) {\n instance.disabled = disabled;\n }\n })\n );\n }\n\n private openPrefillConfigurationSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._prefillConfiguration$]).subscribe(\n ([ref, prefillConfiguration]) => {\n const instance = ref?.instance;\n\n if (instance && prefillConfiguration) {\n instance.prefillConfiguration = prefillConfiguration;\n }\n }\n )\n );\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-template #widgetConfigurationComponent></ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {DOCUMENT} from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\nimport {GlobalNotificationService} from '@valtimo/shared';\nimport {\n ConfigurationOutput,\n DashboardWidgetConfiguration,\n DisplayTypeSpecification,\n WidgetService,\n WidgetTranslationService,\n} from '@valtimo/dashboard';\nimport {ListItem} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n filter,\n map,\n Observable,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem, WidgetDataSource, WidgetModalType} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n selector: 'valtimo-widget-modal',\n templateUrl: './widget-modal.component.html',\n styleUrls: ['./widget-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class WidgetModalComponent implements OnInit, OnDestroy {\n public readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n\n @Input() public showModal$: Observable<boolean>;\n @Input() public type: WidgetModalType;\n @Input() public dashboard: DashboardItem;\n @Input() public widgetKey!: string;\n @Input() public set editWidgetConfiguration(configuration: DashboardWidgetConfiguration) {\n if (configuration) {\n this.title.setValue(configuration.title);\n this.url.setValue(configuration.url);\n this.dataSourceSelected({item: {key: configuration.dataSourceKey}} as any);\n this.displayTypeSelected({item: {key: configuration.displayType}} as any);\n this.dataSourcePrefillConfig$.next(configuration.dataSourceProperties);\n this.displayTypePrefillConfig$.next(configuration.displayTypeProperties);\n } else {\n this.dataSourcePrefillConfig$.next(null);\n this.displayTypePrefillConfig$.next(null);\n }\n }\n @Output() public saveEvent = new EventEmitter<ConfigurationOutput>();\n\n public readonly form = this.fb.group({\n title: this.fb.control('', [Validators.required]),\n dataSource: this.fb.control(null, [Validators.required]),\n displayType: this.fb.control(null, [Validators.required]),\n url: this.fb.control(''),\n });\n\n public readonly open$ = new BehaviorSubject<boolean>(false);\n public readonly selectedDataSourceKey$ = new BehaviorSubject<string>('');\n public readonly selectedDisplayTypeKey$ = new BehaviorSubject<string>('');\n\n public readonly dataSourceItems$: Observable<Array<ListItem>> = combineLatest([\n this.dashboardManagementService.getDataSources(),\n this.selectedDataSourceKey$,\n this.widgetService.supportedDataSources$,\n this.translateService.stream('key'),\n ]).pipe(\n filter(([dataSources]) => !!dataSources),\n tap(([dataSources, selectedDataSourceKey]) => {\n if (selectedDataSourceKey) {\n this.setCompatibleDisplayTypes(dataSources, selectedDataSourceKey);\n } else {\n this.resetCompatibleDisplayTypes();\n }\n }),\n map(([dataSources, selectedDataSourceKey, supportedDataSources]) =>\n dataSources\n .filter(dataSource =>\n supportedDataSources.find(\n supportedDataSource => supportedDataSource.dataSourceKey === dataSource.key\n )\n )\n .map(dataSource => ({\n content: this.widgetTranslationService.instant('title', dataSource.key),\n selected: selectedDataSourceKey === dataSource.key,\n key: dataSource.key,\n }))\n )\n );\n\n public readonly dataSourcePrefillConfig$ = new BehaviorSubject<object | null>(null);\n public readonly displayTypePrefillConfig$ = new BehaviorSubject<object | null>(null);\n\n private readonly _compatibleDisplayTypes$ = new BehaviorSubject<Array<DisplayTypeSpecification>>(\n []\n );\n\n public readonly displayTypeItems$: Observable<Array<ListItem>> = combineLatest([\n this._compatibleDisplayTypes$,\n this.selectedDisplayTypeKey$,\n this.translateService.stream('key'),\n ]).pipe(\n map(([compatibleDisplayTypes, selectedDisplayTypeKey]) =>\n compatibleDisplayTypes.map(displayType => ({\n content: this.widgetTranslationService.instant('title', displayType.displayTypeKey),\n selected: displayType.displayTypeKey === selectedDisplayTypeKey,\n key: displayType.displayTypeKey,\n }))\n )\n );\n\n public readonly displayTypeDropdownDisabled$: Observable<boolean> = combineLatest([\n this._compatibleDisplayTypes$,\n this.selectedDataSourceKey$,\n ]).pipe(\n map(\n ([compatibleDisplayTypes, selectedDataSourceKey]) =>\n compatibleDisplayTypes?.length === 0 || !selectedDataSourceKey\n ),\n tap(displayTypeDropdownDisabled => {\n if (displayTypeDropdownDisabled) {\n this.displayType?.disable();\n } else {\n this.displayType?.enable();\n }\n })\n );\n\n public readonly dataSourceConfiguration$ = new BehaviorSubject<ConfigurationOutput>({\n valid: false,\n data: {},\n });\n public readonly displayTypeConfiguration$ = new BehaviorSubject<ConfigurationOutput>({\n valid: false,\n data: {},\n });\n\n public readonly disabled$ = new BehaviorSubject<boolean>(false);\n\n private _openSubscription!: Subscription;\n\n public get title() {\n return this.form.get('title');\n }\n public get key() {\n return this.form.get('key');\n }\n public get dataSource() {\n return this.form.get('dataSource');\n }\n public get displayType() {\n return this.form.get('displayType');\n }\n public get url() {\n return this.form.get('url');\n }\n\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly fb: FormBuilder,\n private readonly translateService: TranslateService,\n private readonly notificationService: GlobalNotificationService,\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly widgetService: WidgetService,\n private readonly widgetTranslationService: WidgetTranslationService\n ) {}\n\n public ngOnInit(): void {\n this.openOpenSubscription();\n }\n\n public ngOnDestroy(): void {\n this._openSubscription?.unsubscribe();\n }\n\n public closeModal(): void {\n this.open$.next(false);\n\n setTimeout(() => {\n this.enable();\n this.form.reset();\n this.selectedDataSourceKey$.next('');\n this.selectedDisplayTypeKey$.next('');\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public save(): void {\n this.disable();\n\n combineLatest([\n this.selectedDataSourceKey$,\n this.selectedDisplayTypeKey$,\n this.displayTypeConfiguration$,\n this.dataSourceConfiguration$,\n ])\n .pipe(\n take(1),\n map(\n ([\n selectedDataSourceKey,\n selectedDisplayTypeKey,\n displayTypeConfiguration,\n dataSourceConfiguration,\n ]) => ({\n title: this.title.value,\n displayType: selectedDisplayTypeKey,\n dataSourceKey: selectedDataSourceKey,\n dataSourceProperties: {...dataSourceConfiguration.data},\n displayTypeProperties: {...displayTypeConfiguration.data},\n url: this.url.value,\n })\n ),\n switchMap(widgetUpdateObject =>\n this.type === 'create'\n ? this.dashboardManagementService.createDashboardWidgetConfiguration(\n this.dashboard.key,\n widgetUpdateObject\n )\n : this.dashboardManagementService.updateDashboardWidgetConfiguration(\n this.dashboard.key,\n {...widgetUpdateObject, key: this.widgetKey}\n )\n )\n )\n .subscribe({\n complete: () => {\n this.saveEvent.emit();\n this.closeModal();\n },\n error: () => {\n this.enable();\n },\n });\n }\n\n public delete(): void {\n this.disable();\n\n this.dashboardManagementService\n .deleteDashboardWidgetConfiguration(this.dashboard.key, this.widgetKey)\n .subscribe({\n complete: () => {\n this.saveEvent.emit();\n this.closeModal();\n },\n error: () => {\n this.enable();\n },\n });\n }\n\n public dataSourceSelected(dataSource: ListItem): void {\n if (!dataSource) {\n return;\n }\n\n this.selectedDataSourceKey$.next(dataSource?.item?.key);\n this.dataSource.setValue(dataSource?.item?.key);\n }\n\n public displayTypeSelected(displayType: ListItem): void {\n if (!displayType) {\n return;\n }\n\n this.selectedDisplayTypeKey$.next(displayType?.item?.key);\n this.displayType.setValue(displayType?.item?.key);\n }\n\n public dataSourceConfiguration(configuration: ConfigurationOutput): void {\n this.dataSourceConfiguration$.next(configuration);\n }\n\n public displayTypeConfiguration(configuration: ConfigurationOutput): void {\n this.displayTypeConfiguration$.next(configuration);\n }\n\n private openOpenSubscription(): void {\n this._openSubscription = this.showModal$.subscribe(show => {\n this.open$.next(show);\n });\n }\n\n private resetCompatibleDisplayTypes(): void {\n this._compatibleDisplayTypes$.next([]);\n }\n\n private setCompatibleDisplayTypes(\n dataSources: Array<WidgetDataSource>,\n selectedDataSourceKey: string\n ): void {\n this.widgetService.supportedDisplayTypes$.pipe(take(1)).subscribe(supportedDisplayTypes => {\n const selectedDataSource = dataSources.find(source => source.key === selectedDataSourceKey);\n const availableDataFeatures = selectedDataSource?.dataFeatures;\n const compatibleDisplayTypes = supportedDisplayTypes.filter(displayType => {\n const supportedDataFeatures = displayType.requiredDataFeatures.filter(\n requiredDataFeature =>\n !!availableDataFeatures?.some(\n availableDataFeature =>\n this.trimAndToUpperCase(availableDataFeature) ===\n this.trimAndToUpperCase(requiredDataFeature)\n )\n );\n return supportedDataFeatures.length === displayType.requiredDataFeatures.length;\n });\n\n this._compatibleDisplayTypes$.next(compatibleDisplayTypes);\n });\n }\n\n private disable(): void {\n this.disabled$.next(true);\n this.form.disable();\n }\n\n private enable(): void {\n this.disabled$.next(false);\n this.form.enable();\n }\n\n private trimAndToUpperCase(text: string): string {\n return `${text}`.trim().toUpperCase();\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n disabled: disabled$ | async,\n isCreate: type === 'create',\n isDelete: type === 'delete',\n isEdit: type === 'edit',\n open: open$ | async,\n } as vars\"\n>\n <ng-container\n *ngIf=\"{\n create: vars.isCreate && ('dashboardManagement.widgets.add' | translate),\n delete: vars.isDelete && ('dashboardManagement.widgets.delete' | translate),\n edit: vars.isEdit && ('dashboardManagement.widgets.edit' | translate),\n } as titles\"\n >\n <cds-modal\n *ngIf=\"{\n title: titles.edit || titles.create || titles.delete,\n } as translations\"\n valtimoCdsModal\n [open]=\"vars.open\"\n showFooter=\"true\"\n size=\"md\"\n title=\"{{ translations.title }}\"\n class=\"widget-modal\"\n (close)=\"closeModal()\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ translations.title }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngIf=\"vars.isDelete\">\n {{ 'dashboardManagement.widgets.deleteDescription' | translate }}</ng-container\n >\n\n <ng-container *ngIf=\"vars.isEdit || vars.isCreate\">\n <ng-container *ngTemplateOutlet=\"widgetForm; context: {vars: vars}\"></ng-container>\n </ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngIf=\"vars.isEdit || vars.isCreate\">\n <ng-container *ngTemplateOutlet=\"editButtons; context: {vars: vars}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"vars.isDelete\">\n <ng-container *ngTemplateOutlet=\"deleteButtons; context: {vars: vars}\"></ng-container>\n </ng-container>\n </cds-modal-footer>\n </cds-modal>\n </ng-container>\n</ng-container>\n\n<ng-template #widgetForm let-vars=\"vars\">\n <form\n *ngIf=\"\n form && {\n dataSourceItems: dataSourceItems$ | async,\n displayTypeDropdownDisabled: displayTypeDropdownDisabled$ | async,\n displayTypeItems: displayTypeItems$ | async,\n selectedDataSourceKey: selectedDataSourceKey$ | async,\n selectedDisplayTypeKey: selectedDisplayTypeKey$ | async,\n } as obs\n \"\n [formGroup]=\"form\"\n class=\"dashboard-modal__form\"\n >\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'dashboardManagement.widgets.form.titleHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.titleHelperText' | translate\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.title' | translate }}\n\n <input\n cdsText\n formControlName=\"title\"\n [attr.data-test-id]=\"testIds.widgetTitleInput\"\n [invalid]=\"title.dirty && title.invalid\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\" *ngIf=\"obs.dataSourceItems\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.widgetDataSourceDropdown\"\n formControlName=\"dataSource\"\n [helperText]=\"'dashboardManagement.widgets.form.dataSourceHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.dateSourceHelperText' | translate\"\n [invalid]=\"dataSource.dirty && dataSource.invalid\"\n [label]=\"'dashboardManagement.widgets.form.dataSource' | translate\"\n (selected)=\"dataSourceSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.dataSourceItems\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <valtimo-widget-configuration-container\n *ngIf=\"obs.selectedDataSourceKey\"\n [dataSourceKey]=\"obs.selectedDataSourceKey\"\n [disabled]=\"vars.disabled\"\n [prefillConfiguration]=\"dataSourcePrefillConfig$ | async\"\n (configurationEvent)=\"dataSourceConfiguration($event)\"\n ></valtimo-widget-configuration-container>\n\n <div class=\"form__element\" *ngIf=\"obs.displayTypeItems\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.widgetDisplayTypeDropdown\"\n formControlName=\"displayType\"\n [helperText]=\"'dashboardManagement.widgets.form.displayTypeHelperText' | translate\"\n [invalid]=\"displayType.dirty && displayType.invalid\"\n [invalidText]=\"'dashboardManagement.widgets.form.displayTypeHelperText' | translate\"\n [label]=\"'dashboardManagement.widgets.form.displayType' | translate\"\n (selected)=\"displayTypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.displayTypeItems\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <valtimo-widget-configuration-container\n *ngIf=\"obs.selectedDisplayTypeKey\"\n [disabled]=\"vars.disabled\"\n [displayTypeKey]=\"obs.selectedDisplayTypeKey\"\n [prefillConfiguration]=\"displayTypePrefillConfig$ | async\"\n (configurationEvent)=\"displayTypeConfiguration($event)\"\n ></valtimo-widget-configuration-container>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'dashboardManagement.widgets.form.urlHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.urlHelperText' | translate\"\n [invalid]=\"url.dirty && url.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.url' | translate }}\n\n <input cdsText formControlName=\"url\" [attr.data-test-id]=\"testIds.widgetUrlInput\" [invalid]=\"url.dirty && url.invalid\" />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editButtons let-vars=\"vars\">\n <ng-container\n *ngIf=\"{\n dataSourceConfiguration: dataSourceConfiguration$ | async,\n displayTypeConfiguration: displayTypeConfiguration$ | async,\n } as obs\"\n >\n <button cdsButton=\"ghost\" [attr.data-test-id]=\"testIds.widgetCancelButton\" [disabled]=\"vars.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.widgetSaveButton\"\n [disabled]=\"\n form.invalid ||\n !obs.dataSourceConfiguration.valid ||\n !obs.displayTypeConfiguration.valid ||\n vars.disabled\n \"\n (click)=\"save()\"\n >\n {{ 'dashboardManagement.widgets.save' | translate }}\n </button>\n </ng-container>\n</ng-template>\n\n<ng-template #deleteButtons let-vars=\"vars\">\n <button cdsButton=\"secondary\" [attr.data-test-id]=\"testIds.widgetCancelButton\" [disabled]=\"vars.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button cdsButton=\"danger\" [attr.data-test-id]=\"testIds.widgetDeleteButton\" [disabled]=\"vars.disabled\" (click)=\"delete()\">\n {{ 'dashboardManagement.widgets.delete' | translate }}\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem} from '../../models';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {\n CARBON_CONSTANTS,\n SelectItem,\n WIDGET_LAYOUT_TRANSLATION_KEYS,\n WIDGET_LAYOUT_VALUES,\n WidgetLayout,\n} from '@valtimo/components';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\nimport {ConfigurationOutput} from '@valtimo/dashboard';\n\n@Component({\n selector: 'valtimo-edit-dashboard-modal',\n templateUrl: './edit-dashboard-modal.html',\n styleUrls: ['./edit-dashboard-modal.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class EditDashboardModalComponent implements OnInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n @Input() public showModal$: Observable<boolean>;\n @Input() public dashboard: DashboardItem;\n @Output() public saveEvent = new EventEmitter<ConfigurationOutput>();\n\n public readonly open$ = new BehaviorSubject<boolean>(false);\n public readonly disabled$ = new BehaviorSubject<boolean>(false);\n public readonly editDashboardForm = this.fb.group({\n title: this.fb.control('', [Validators.required]),\n description: this.fb.control('', [Validators.required]),\n widgetLayout: this.fb.control<WidgetLayout>(WidgetLayout.MUURI_GAP_FREE),\n });\n\n public get dashboardTitle() {\n return this.editDashboardForm.get('title');\n }\n\n public get dashboardDescription() {\n return this.editDashboardForm.get('description');\n }\n\n public readonly widgetLayoutSelectItems: SelectItem[] = WIDGET_LAYOUT_VALUES.map(value => ({\n id: value,\n translationKey: WIDGET_LAYOUT_TRANSLATION_KEYS[value],\n }));\n\n private _openSubscription!: Subscription;\n\n constructor(\n private readonly fb: FormBuilder,\n private readonly dashboardManagementService: DashboardManagementService\n ) {}\n\n public ngOnInit(): void {\n this.openOpenSubscription();\n }\n\n public closeModal(): void {\n this.open$.next(false);\n\n setTimeout(() => {\n this.editDashboardForm.reset();\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public saveDashboard(): void {\n this.disable();\n\n this.dashboardManagementService\n .updateDashboard({\n description: this.dashboardDescription.value,\n title: this.dashboardTitle.value,\n key: this.dashboard.key,\n widgetLayout: this.editDashboardForm.get('widgetLayout').value ?? WidgetLayout.MUURI_GAP_FREE,\n })\n .subscribe(() => {\n this.saveEvent.emit();\n this.closeModal();\n });\n }\n\n private setEditDashboardForm(): void {\n if (this.dashboard) {\n this.dashboardTitle?.setValue(this.dashboard.title);\n this.dashboardDescription?.setValue(this.dashboard.description);\n this.editDashboardForm\n .get('widgetLayout')\n ?.setValue(this.dashboard.widgetLayout ?? WidgetLayout.MUURI_GAP_FREE);\n }\n\n this.enable();\n }\n\n private openOpenSubscription(): void {\n this._openSubscription = this.showModal$.subscribe(show => {\n this.setEditDashboardForm();\n this.open$.next(show);\n });\n }\n\n private disable(): void {\n this.disabled$.next(true);\n }\n\n private enable(): void {\n this.disabled$.next(false);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <v-select\n formControlName=\"widgetLayout\"\n [items]=\"widgetLayoutSelectItems\"\n [dropUp]=\"false\"\n [appendInline]=\"false\"\n titleTranslationKey=\"widgetLayout.label\"\n ></v-select>\n </div>\n\n <valtimo-widget-layout-info></valtimo-widget-layout-info>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {DatePipe} from '@angular/common';\nimport {AfterViewInit, Component, computed, signal, ViewEncapsulation} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {Code16, Edit16} from '@carbon/icons';\nimport {TranslateService} from '@ngx-translate/core';\nimport {\n ActionItem,\n ColumnConfig,\n EditorModel,\n PageHeaderService,\n PageTitleService,\n ViewType,\n} from '@valtimo/components';\nimport {DashboardWidgetConfiguration} from '@valtimo/dashboard';\nimport {IconService} from 'carbon-components-angular';\nimport {BehaviorSubject, combineLatest, map, Observable, switchMap, tap} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem, DashboardWidget, WidgetModalType} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n templateUrl: './dashboard-details.component.html',\n styleUrls: ['./dashboard-details.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DashboardDetailsComponent implements AfterViewInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n public modalType: WidgetModalType = 'create';\n public fields!: ColumnConfig[];\n public readonly actionItems: ActionItem[] = [\n {\n label: 'Edit',\n callback: this.editWidget.bind(this),\n },\n {\n label: 'Duplicate',\n callback: this.duplicateWidget.bind(this),\n },\n {\n label: 'Delete',\n callback: this.deleteWidget.bind(this),\n type: 'danger',\n },\n ];\n\n private readonly _dashboardKey$ = this.route.params.pipe(map(params => params.id));\n private readonly _refreshDashboardSubject$ = new BehaviorSubject<null>(null);\n public readonly currentDashboard$: Observable<DashboardItem | undefined> = combineLatest([\n this._dashboardKey$,\n this.translateService.stream('key'),\n this._refreshDashboardSubject$,\n ]).pipe(\n switchMap(([dashboardKey]) => this.dashboardManagementService.getDashboard(dashboardKey)),\n tap((currentDashboard: DashboardItem) => {\n if (!currentDashboard) {\n return;\n }\n\n this.pageTitleService.setCustomPageTitle(currentDashboard.title);\n this.pageTitleService.setCustomPageSubtitle(\n this.translateService.instant('dashboardManagement.widgets.metadata', {\n createdBy: currentDashboard.createdBy,\n createdOn: this.datePipe.transform(currentDashboard.createdOn ?? '', 'd/M/yy, H:mm'),\n key: currentDashboard.key,\n })\n );\n })\n );\n\n public readonly lastItemIndex$ = new BehaviorSubject<number>(0);\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly dragAndDropDisabled$ = new BehaviorSubject<boolean>(false);\n\n public readonly _refreshWidgetsSubject$ = new BehaviorSubject<DashboardWidget[] | null>(null);\n\n private _widgetData: DashboardWidget[] | null = null;\n public readonly widgetData$: Observable<DashboardWidget[]> = combineLatest([\n this._dashboardKey$,\n this._refreshWidgetsSubject$,\n ]).pipe(\n switchMap(([dashboardKey, refreshWidgets]) => {\n if (!this._widgetData || !refreshWidgets) {\n this.loading$.next(true);\n return this.dashboardManagementService.getDashboardWidgetConfiguration(dashboardKey);\n }\n\n this.dragAndDropDisabled$.next(true);\n\n return this.dashboardManagementService.updateDashboardWidgetConfigurations(\n dashboardKey,\n refreshWidgets\n );\n }),\n tap((data: DashboardWidget[]) => {\n this._widgetData = data;\n this.lastItemIndex$.next(data.length - 1);\n this.loading$.next(false);\n this.dragAndDropDisabled$.next(false);\n })\n );\n\n public readonly jsonEditorModel$: Observable<EditorModel> = this.widgetData$.pipe(\n map((data: DashboardWidget[]) => ({\n value: JSON.stringify(data),\n language: 'json',\n }))\n );\n\n public readonly showModal$ = new BehaviorSubject<boolean>(false);\n public readonly showEditDashboardModal$ = new BehaviorSubject<boolean>(false);\n\n public readonly editWidgetConfiguration$ =\n new BehaviorSubject<DashboardWidgetConfiguration | null>(null);\n\n public readonly compactMode$ = this.pageHeaderService.compactMode$;\n\n public readonly $jsonEditorActive = signal<boolean>(false);\n public readonly $buttonTheme = computed(() => (this.$jsonEditorActive() ? 'primary' : 'ghost'));\n\n constructor(\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly datePipe: DatePipe,\n private readonly iconService: IconService,\n private readonly pageTitleService: PageTitleService,\n private readonly route: ActivatedRoute,\n private readonly translateService: TranslateService,\n private readonly pageHeaderService: PageHeaderService\n ) {}\n\n public ngAfterViewInit(): void {\n this.iconService.registerAll([Code16, Edit16]);\n this.setFields();\n }\n\n public addWidget(): void {\n this.editWidgetConfiguration$.next(null);\n this.modalType = 'create';\n this.showModal();\n }\n\n public editDashboard(): void {\n this.showEditDashboardModal();\n }\n\n public refreshWidgets(): void {\n this._refreshWidgetsSubject$.next(null);\n }\n\n public refreshDashboard(): void {\n this._refreshDashboardSubject$.next(null);\n }\n\n public updateWidgetData(items: DashboardWidget[]): void {\n if (!items) return;\n\n this._refreshWidgetsSubject$.next(items);\n }\n\n public editWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'edit';\n this.showModal();\n }\n\n public switchView(): void {\n this.$jsonEditorActive.set(!this.$jsonEditorActive());\n\n if (!this.$jsonEditorActive()) this.refreshWidgets();\n }\n\n private duplicateWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'create';\n this.showModal();\n }\n\n private setFields(): void {\n this.fields = [\n {\n viewType: ViewType.TEXT,\n key: 'title',\n label: 'Name',\n },\n ];\n }\n\n private deleteWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'delete';\n this.showModal();\n }\n\n private showModal(): void {\n this.showModal$.next(true);\n }\n\n private showEditDashboardModal(): void {\n this.showEditDashboardModal$.next(true);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"\n fields && {\n currentDashboard: currentDashboard$ | async,\n editWidgetConfiguration: editWidgetConfiguration$ | async,\n loading: loading$ | async,\n widgetData: widgetData$ | async,\n dragAndDropDisabled: dragAndDropDisabled$ | async,\n jsonEditorModel: jsonEditorModel$ | async,\n } as obs\n \"\n>\n <div class=\"dashboard-detail-table\">\n @if (!$jsonEditorActive()) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.widgetData\"\n [loading]=\"obs.loading\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"obs.dragAndDropDisabled\"\n (itemsReordered)=\"updateWidgetData($event)\"\n (rowClicked)=\"editWidget($event)\"\n >\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"viewToggle\"></ng-container>\n\n <ng-container [ngTemplateOutlet]=\"addWidgetButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addWidgetButton\"\n description=\"{{ 'dashboardManagement.widgets.noResults.description' | translate }}\"\n title=\"{{ 'dashboardManagement.widgets.noResults.title' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n } @else {\n <valtimo-json-editor\n [model]=\"obs.jsonEditorModel\"\n [fitPage]=\"true\"\n [fitPageSpaceAdjustment]=\"56\"\n (saveEvent)=\"updateWidgetData($event)\"\n >\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n </valtimo-json-editor>\n }\n </div>\n\n <valtimo-widget-modal\n [dashboard]=\"obs.currentDashboard\"\n [editWidgetConfiguration]=\"obs.editWidgetConfiguration\"\n [showModal$]=\"showModal$\"\n [type]=\"modalType\"\n [widgetKey]=\"obs.editWidgetConfiguration?.key\"\n (saveEvent)=\"refreshWidgets()\"\n ></valtimo-widget-modal>\n\n <valtimo-edit-dashboard-modal\n [dashboard]=\"obs.currentDashboard\"\n [showModal$]=\"showEditDashboardModal$\"\n (saveEvent)=\"refreshDashboard()\"\n >\n </valtimo-edit-dashboard-modal>\n</ng-container>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <button\n [attr.data-test-id]=\"testIds.editButton\"\n cdsButton=\"tertiary\"\n [size]=\"(compactMode$ | async) ? 'sm' : 'md'\"\n (click)=\"editDashboard()\"\n >\n {{ 'dashboardManagement.widgets.editButton' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </button>\n </ng-template>\n</ng-container>\n\n<ng-template #addWidgetButton>\n <button cdsButton=\"primary\" [attr.data-test-id]=\"testIds.addWidgetButton\" [disabled]=\"loading$ | async\" (click)=\"addWidget()\">\n {{ 'dashboardManagement.widgets.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #viewToggle>\n <cds-tooltip [description]=\"'JSON editor'\">\n <button\n [cdsButton]=\"$buttonTheme()\"\n [attr.data-test-id]=\"testIds.switchViewButton\"\n iconOnly=\"true\"\n (click)=\"switchView()\"\n >\n <svg cdsIcon=\"code\" size=\"16\"></svg>\n </button>\n </cds-tooltip>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {AbstractControl, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {Router} from '@angular/router';\nimport {ActionItem, ColumnConfig, ViewType} from '@valtimo/components';\nimport {BehaviorSubject, finalize, Observable} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n templateUrl: './dashboard-management.component.html',\n styleUrls: ['./dashboard-management.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class DashboardManagementComponent implements OnInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n public readonly deleteRowKey$: BehaviorSubject<string> = new BehaviorSubject('');\n public readonly openModal$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n public readonly showDeleteModal$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n public readonly tableData$: Observable<{items: DashboardItem[] | null; loading: boolean}> =\n this.dashboardManagementService.dashboards$;\n public fields: ColumnConfig[] = [\n {\n viewType: ViewType.TEXT,\n key: 'title',\n label: 'dashboardManagement.name',\n },\n {\n viewType: ViewType.TEXT,\n key: 'description',\n label: 'dashboardManagement.description',\n },\n {\n viewType: ViewType.TEXT,\n key: 'key',\n label: 'dashboardManagement.key',\n },\n ];\n public readonly actionItems: ActionItem[] = [\n {\n label: 'interface.delete',\n callback: this.deleteDashboard.bind(this),\n type: 'danger',\n },\n ];\n public form: FormGroup;\n\n constructor(\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly fb: FormBuilder,\n private readonly router: Router\n ) {}\n\n public ngOnInit(): void {\n this.dashboardManagementService.loadData();\n this.form = this.fb.group({\n description: this.fb.control('', [Validators.required]),\n title: this.fb.control('', [Validators.required]),\n });\n }\n\n public closeModal(): void {\n this.openModal$.next(false);\n this.form.reset();\n }\n\n public createDashboard(): void {\n const control: AbstractControl | null = this.form.get('title');\n if (!control || !control.valid) {\n return;\n }\n\n const newDashboard: DashboardItem = this.form.getRawValue();\n this.dashboardManagementService.dispatchAction(\n this.dashboardManagementService.createDashboard(newDashboard).pipe(\n finalize(() => {\n this.closeModal();\n })\n )\n );\n }\n\n public onConfirmEvent(dashboardKey: string): void {\n this.dashboardManagementService.dispatchAction(\n this.dashboardManagementService.deleteDashboard(dashboardKey).pipe(\n finalize(() => {\n this.closeModal();\n })\n )\n );\n }\n\n public getControlInvalid(controlKey: string): boolean {\n const control: AbstractControl | null = this.form.get(controlKey);\n\n if (!control) {\n return true;\n }\n\n return !control.valid && !control.pristine;\n }\n\n public openModal(): void {\n this.openModal$.next(true);\n }\n\n public onRowClick(item: DashboardItem): void {\n this.router.navigate([`/dashboard-management/${item.key}`]);\n }\n\n private deleteDashboard(dashboard: DashboardItem): void {\n this.deleteRowKey$.next(dashboard.key);\n this.showDeleteModal$.next(true);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"tableData$ | async as data\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [header]=\"false\"\n [items]=\"data.items\"\n [loading]=\"data.loading\"\n [fields]=\"fields\"\n (rowClicked)=\"onRowClick($event)\"\n class=\"valtimo-dashboard-management__table\"\n >\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addDashboardButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addDashboardButton\"\n description=\"{{ 'dashboardManagement.noResults.description' | translate }}\"\n title=\"{{ 'dashboardManagement.noResults.title' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-container>\n\n<cds-modal\n valtimoCdsModal\n [open]=\"openModal$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.addDashboard' | translate }}\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'dashboardManagement.addDashboard' | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\" class=\"valtimo-dashboard-management__form\">\n <cds-label [invalid]=\"getControlInvalid('title')\">\n {{ 'dashboardManagement.addModal.name' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.createTitleInput\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"getControlInvalid('title')\"\n formControlName=\"title\"\n cdsText\n placeholder=\"{{ 'dashboardManagement.addModal.namePlaceholder' | translate }}\"\n />\n </cds-label>\n\n <cds-label\n [helperText]=\"'dashboardManagement.addModal.descriptionHelperText' | translate\"\n [invalid]=\"getControlInvalid('description')\"\n >\n {{ 'dashboardManagement.description' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.createDescriptionInput\"\n [invalid]=\"getControlInvalid('description')\"\n formControlName=\"description\"\n cdsText\n placeholder=\"{{ 'dashboardManagement.addModal.descriptionPlaceholder' | translate }}\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" [attr.data-test-id]=\"testIds.cancelDashboardButton\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.createButton\"\n [disabled]=\"this.form.invalid\"\n cdsButton=\"primary\"\n (click)=\"createDashboard()\"\n >\n {{ 'dashboardManagement.create' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dashboardManagement.deleteModalContent\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"dashboardManagement.delete\"\n (confirmEvent)=\"onConfirmEvent($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #addDashboardButton>\n <button [attr.data-test-id]=\"testIds.addButton\" cdsButton=\"primary\" (click)=\"openModal()\">\n {{ 'dashboardManagement.addDashboard' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {AuthGuardService} from '@valtimo/security';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {DashboardManagementComponent} from './components/dashboard-management/dashboard-management.component';\nimport {DashboardDetailsComponent} from './components/dashboard-details/dashboard-details.component';\n\nconst routes: Routes = [\n {\n path: 'dashboard-management',\n component: DashboardManagementComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Dashboard configuration', roles: [ROLE_ADMIN]},\n },\n {\n path: 'dashboard-management/:id',\n component: DashboardDetailsComponent,\n canActivate: [AuthGuardService],\n data: {\n title: 'Dashboard details',\n roles: [ROLE_ADMIN],\n customPageTitle: true,\n customPageSubtitle: true,\n },\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n declarations: [],\n})\nexport class DashboardManagementRoutingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CarbonListModule,\n ConfirmationModalModule,\n JsonEditorComponent,\n RenderInPageHeaderDirective,\n SelectModule,\n SpinnerModule,\n ValtimoCdsModalDirective,\n WidgetLayoutInfoComponent,\n} from '@valtimo/components';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n LayerModule,\n ModalModule,\n NotificationModule,\n} from 'carbon-components-angular';\nimport {DashboardDetailsComponent} from './components/dashboard-details/dashboard-details.component';\nimport {DashboardManagementComponent} from './components/dashboard-management/dashboard-management.component';\nimport {DashboardManagementRoutingModule} from './dashboard-management-routing.module';\nimport {WidgetModalComponent} from './components/widget-modal/widget-modal.component';\nimport {EditDashboardModalComponent} from './components/edit-dashboard-modal/edit-dashboard-modal';\nimport {WidgetTranslatePipeModule} from '@valtimo/dashboard';\nimport {WidgetConfigurationContainerComponent} from './components/widget-configuration-container/widget-configuration-container.component';\n\n@NgModule({\n declarations: [\n DashboardManagementComponent,\n DashboardDetailsComponent,\n WidgetModalComponent,\n EditDashboardModalComponent,\n WidgetConfigurationContainerComponent,\n ],\n imports: [\n ButtonModule,\n CommonModule,\n DashboardManagementRoutingModule,\n DropdownModule,\n InputModule,\n ModalModule,\n ReactiveFormsModule,\n SpinnerModule,\n TranslateModule,\n RenderInPageHeaderDirective,\n ConfirmationModalModule,\n NotificationModule,\n IconModule,\n WidgetTranslatePipeModule,\n CarbonListModule,\n LayerModule,\n ValtimoCdsModalDirective,\n JsonEditorComponent,\n SelectModule,\n WidgetLayoutInfoComponent,\n ],\n exports: [],\n})\nexport class DashboardManagementModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of dashboard-management\n */\n\nexport * from './lib/constants/dashboard-management.test-ids';\nexport * from './lib/dashboard-management.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["tap","i1","i2","i3","i4.DashboardManagementService","i6","i7","i8","i9.WidgetConfigurationContainerComponent","i2.DashboardManagementService","i4","i5","i1.DashboardManagementService","i7.WidgetModalComponent","i8.EditDashboardModalComponent"],"mappings":"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"}
@@ -2,6 +2,7 @@ import { EventEmitter, OnInit } from '@angular/core';
2
2
  import { BehaviorSubject, Observable } from 'rxjs';
3
3
  import { DashboardItem } from '../../models';
4
4
  import { FormBuilder } from '@angular/forms';
5
+ import { SelectItem, WidgetLayout } from '@valtimo/components';
5
6
  import { DashboardManagementService } from '../../services/dashboard-management.service';
6
7
  import { ConfigurationOutput } from '@valtimo/dashboard';
7
8
  import * as i0 from "@angular/core";
@@ -36,9 +37,11 @@ export declare class EditDashboardModalComponent implements OnInit {
36
37
  readonly editDashboardForm: import("@angular/forms").FormGroup<{
37
38
  title: import("@angular/forms").FormControl<string>;
38
39
  description: import("@angular/forms").FormControl<string>;
40
+ widgetLayout: import("@angular/forms").FormControl<WidgetLayout>;
39
41
  }>;
40
42
  get dashboardTitle(): import("@angular/forms").AbstractControl<string, string>;
41
43
  get dashboardDescription(): import("@angular/forms").AbstractControl<string, string>;
44
+ readonly widgetLayoutSelectItems: SelectItem[];
42
45
  private _openSubscription;
43
46
  constructor(fb: FormBuilder, dashboardManagementService: DashboardManagementService);
44
47
  ngOnInit(): void;
@@ -13,6 +13,6 @@ import * as i11 from "@ngx-translate/core";
13
13
  import * as i12 from "@valtimo/dashboard";
14
14
  export declare class DashboardManagementModule {
15
15
  static ɵfac: i0.ɵɵFactoryDeclaration<DashboardManagementModule, never>;
16
- static ɵmod: i0.ɵɵNgModuleDeclaration<DashboardManagementModule, [typeof i1.DashboardManagementComponent, typeof i2.DashboardDetailsComponent, typeof i3.WidgetModalComponent, typeof i4.EditDashboardModalComponent, typeof i5.WidgetConfigurationContainerComponent], [typeof i6.ButtonModule, typeof i7.CommonModule, typeof i8.DashboardManagementRoutingModule, typeof i6.DropdownModule, typeof i6.InputModule, typeof i6.ModalModule, typeof i9.ReactiveFormsModule, typeof i10.SpinnerModule, typeof i11.TranslateModule, typeof i10.RenderInPageHeaderDirective, typeof i10.ConfirmationModalModule, typeof i6.NotificationModule, typeof i6.IconModule, typeof i12.WidgetTranslatePipeModule, typeof i10.CarbonListModule, typeof i6.LayerModule, typeof i10.ValtimoCdsModalDirective, typeof i10.JsonEditorComponent], never>;
16
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DashboardManagementModule, [typeof i1.DashboardManagementComponent, typeof i2.DashboardDetailsComponent, typeof i3.WidgetModalComponent, typeof i4.EditDashboardModalComponent, typeof i5.WidgetConfigurationContainerComponent], [typeof i6.ButtonModule, typeof i7.CommonModule, typeof i8.DashboardManagementRoutingModule, typeof i6.DropdownModule, typeof i6.InputModule, typeof i6.ModalModule, typeof i9.ReactiveFormsModule, typeof i10.SpinnerModule, typeof i11.TranslateModule, typeof i10.RenderInPageHeaderDirective, typeof i10.ConfirmationModalModule, typeof i6.NotificationModule, typeof i6.IconModule, typeof i12.WidgetTranslatePipeModule, typeof i10.CarbonListModule, typeof i6.LayerModule, typeof i10.ValtimoCdsModalDirective, typeof i10.JsonEditorComponent, typeof i10.SelectModule, typeof i10.WidgetLayoutInfoComponent], never>;
17
17
  static ɵinj: i0.ɵɵInjectorDeclaration<DashboardManagementModule>;
18
18
  }
@@ -1,3 +1,4 @@
1
+ import { WidgetLayout } from '@valtimo/components';
1
2
  export interface DashboardItem {
2
3
  description: string;
3
4
  key: string;
@@ -6,4 +7,5 @@ export interface DashboardItem {
6
7
  createdBy?: string;
7
8
  createdOn?: string;
8
9
  url?: string;
10
+ widgetLayout?: WidgetLayout;
9
11
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@valtimo/dashboard-management",
3
3
  "license": "EUPL-1.2",
4
- "version": "13.32.0",
4
+ "version": "13.33.0",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "19.2.20",
7
7
  "@angular/core": "19.2.20"