@c8y/ngx-components 1023.14.57 → 1023.14.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/context-dashboard/index.d.ts.map +1 -1
  2. package/datapoint-explorer/view/index.d.ts +1 -1
  3. package/device-provisioned-certificates/index.d.ts.map +1 -1
  4. package/ecosystem/index.d.ts.map +1 -1
  5. package/ecosystem/shared/index.d.ts +1 -1
  6. package/ecosystem/shared/index.d.ts.map +1 -1
  7. package/fesm2022/c8y-ngx-components-asset-properties.mjs +5 -6
  8. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  9. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-CDjsn5j9.mjs → c8y-ngx-components-asset-property-grid.component-CfTLV3QX.mjs} +2 -2
  10. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-CDjsn5j9.mjs.map → c8y-ngx-components-asset-property-grid.component-CfTLV3QX.mjs.map} +1 -1
  11. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +1 -1
  12. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs +67 -0
  14. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs.map +1 -0
  15. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +17 -7
  16. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +2 -2
  18. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +2 -1
  20. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +1 -1
  22. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-device-grid.mjs +1 -1
  24. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-device-profile.mjs +1 -1
  26. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  27. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +5 -6
  28. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-echart.mjs +6 -3
  30. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +1 -1
  32. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-ecosystem.mjs +4 -4
  35. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-exports-list.mjs +1 -1
  37. package/fesm2022/c8y-ngx-components-exports-list.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-files-repository.mjs +1 -1
  39. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-messaging-management.mjs +2 -2
  41. package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +1 -1
  43. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
  45. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
  47. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +1 -1
  49. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components-repository-software.mjs +1 -1
  51. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  52. package/fesm2022/c8y-ngx-components-search.mjs +1 -1
  53. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  54. package/fesm2022/c8y-ngx-components-services.mjs +1 -1
  55. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  56. package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
  57. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  58. package/fesm2022/c8y-ngx-components-tenants.mjs +7 -6
  59. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  60. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +1 -1
  61. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components.mjs +10 -6
  63. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  64. package/index.d.ts +20 -2
  65. package/index.d.ts.map +1 -1
  66. package/locales/de.po +17 -5
  67. package/locales/es.po +16 -4
  68. package/locales/fr.po +16 -4
  69. package/locales/ja_JP.po +16 -4
  70. package/locales/ko.po +16 -4
  71. package/locales/locales.pot +11 -2
  72. package/locales/nl.po +16 -4
  73. package/locales/pl.po +18 -6
  74. package/locales/pt_BR.po +16 -4
  75. package/locales/zh_CN.po +16 -4
  76. package/locales/zh_TW.po +16 -4
  77. package/package.json +1 -1
  78. package/tenants/index.d.ts.map +1 -1
  79. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DM3hASUP.mjs +0 -60
  80. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DM3hASUP.mjs.map +0 -1
@@ -0,0 +1,67 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component } from '@angular/core';
3
+ import { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES, ContextDashboardService, DashboardDetailService, AppearanceSettingsComponent } from './c8y-ngx-components-context-dashboard.mjs';
4
+ import * as i5 from '@angular/forms';
5
+ import { ReactiveFormsModule } from '@angular/forms';
6
+ import * as i2 from '@c8y/ngx-components';
7
+ import { CoreModule, C8yTranslatePipe } from '@c8y/ngx-components';
8
+ import { PopoverDirective } from 'ngx-bootstrap/popover';
9
+
10
+ class DashboardAppearanceSettingsComponent {
11
+ constructor(contextDashboardService, dashboardDetailService) {
12
+ this.contextDashboardService = contextDashboardService;
13
+ this.dashboardDetailService = dashboardDetailService;
14
+ this.styling = {
15
+ themeClass: 'dashboard-theme-light',
16
+ headerClass: 'panel-title-regular'
17
+ };
18
+ this.DEFAULT_DASHBOARD_MARGIN = 12;
19
+ }
20
+ ngOnInit() {
21
+ this.dashboard = this.dashboardDetailService.details.dashboard;
22
+ this.appearanceSettingsForm = this.dashboardDetailService.appearanceSettingsForm;
23
+ if (this.dashboard) {
24
+ this.setDashboardStyle();
25
+ }
26
+ }
27
+ changeThemeClass(themeClass) {
28
+ this.styling.themeClass = themeClass;
29
+ this.appearanceSettingsForm.get('classes').setValue({ [this.styling.themeClass]: true });
30
+ this.dashboardDetailService.previewChangedFn({ classes: { [this.styling.themeClass]: true } });
31
+ this.appearanceSettingsForm.markAsDirty();
32
+ }
33
+ changeHeaderClass(headerClass) {
34
+ this.styling.headerClass = headerClass;
35
+ this.appearanceSettingsForm.get('widgetClasses').setValue({ [this.styling.headerClass]: true });
36
+ this.dashboardDetailService.previewChangedFn({
37
+ widgetClasses: { [this.styling.headerClass]: true }
38
+ });
39
+ this.appearanceSettingsForm.markAsDirty();
40
+ }
41
+ setDashboardStyle() {
42
+ const allClasses = {
43
+ ...this.appearanceSettingsForm.get('classes').value,
44
+ ...this.appearanceSettingsForm.get('widgetClasses').value
45
+ };
46
+ const styles = Object.keys(allClasses).map(c => c.split('-').pop());
47
+ styles.forEach(styleName => {
48
+ this.styling.themeClass = this.contextDashboardService.getStyling(DASHBOARD_THEME_CLASSES, styleName, this.styling.themeClass);
49
+ this.styling.headerClass = this.contextDashboardService.getStyling(WIDGET_HEADER_CLASSES, styleName, this.styling.headerClass);
50
+ });
51
+ }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DashboardAppearanceSettingsComponent, deps: [{ token: ContextDashboardService }, { token: DashboardDetailService }], target: i0.ɵɵFactoryTarget.Component }); }
53
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DashboardAppearanceSettingsComponent, isStandalone: true, selector: "c8y-dashboard-appearance-settings", ngImport: i0, template: "<div [formGroup]=\"appearanceSettingsForm\">\n <c8y-appearance-settings\n [themeClass]=\"styling.themeClass\"\n [headerClass]=\"styling.headerClass\"\n (themeClassChange)=\"changeThemeClass($event)\"\n (headerClassChange)=\"changeHeaderClass($event)\"\n [dashboardSettings]=\"true\"\n [columns]=\"3\"\n >\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Misc</legend>\n <c8y-form-group>\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n formControlName=\"widgetMargin\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label>\n {{ 'Translate if possible' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Translates dashboard or widget titles if they are written in English and their translations are available in the loaded standard or custom translation resources.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate dashboard title if possible' | translate }}\"\n >\n <input\n name=\"translateDashboardTitle\"\n type=\"checkbox\"\n formControlName=\"translateDashboardTitle\"\n />\n <span></span>\n <span>{{ 'Dashboard title' | translate }}</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate widget titles if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n formControlName=\"translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Widget titles' | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </div>\n </c8y-appearance-settings>\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "dashboardSettings", "possibleStylingTheme", "possibleStylingHeader", "columns"], outputs: ["themeClassChange", "headerClassChange", "onChange"] }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
54
+ }
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DashboardAppearanceSettingsComponent, decorators: [{
56
+ type: Component,
57
+ args: [{ selector: 'c8y-dashboard-appearance-settings', standalone: true, imports: [
58
+ ReactiveFormsModule,
59
+ CoreModule,
60
+ AppearanceSettingsComponent,
61
+ C8yTranslatePipe,
62
+ PopoverDirective
63
+ ], template: "<div [formGroup]=\"appearanceSettingsForm\">\n <c8y-appearance-settings\n [themeClass]=\"styling.themeClass\"\n [headerClass]=\"styling.headerClass\"\n (themeClassChange)=\"changeThemeClass($event)\"\n (headerClassChange)=\"changeHeaderClass($event)\"\n [dashboardSettings]=\"true\"\n [columns]=\"3\"\n >\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Misc</legend>\n <c8y-form-group>\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n formControlName=\"widgetMargin\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label>\n {{ 'Translate if possible' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Translates dashboard or widget titles if they are written in English and their translations are available in the loaded standard or custom translation resources.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate dashboard title if possible' | translate }}\"\n >\n <input\n name=\"translateDashboardTitle\"\n type=\"checkbox\"\n formControlName=\"translateDashboardTitle\"\n />\n <span></span>\n <span>{{ 'Dashboard title' | translate }}</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate widget titles if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n formControlName=\"translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Widget titles' | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </div>\n </c8y-appearance-settings>\n</div>\n" }]
64
+ }], ctorParameters: () => [{ type: ContextDashboardService }, { type: DashboardDetailService }] });
65
+
66
+ export { DashboardAppearanceSettingsComponent };
67
+ //# sourceMappingURL=c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs","sources":["../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.ts","../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.html"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport {\n ContextDashboard,\n DASHBOARD_THEME_CLASSES,\n WIDGET_HEADER_CLASSES\n} from '../context-dashboard.model';\nimport { ContextDashboardService } from '../context-dashboard.service';\nimport { DashboardDetailService } from '../dashboard-detail.service';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe, CoreModule } from '@c8y/ngx-components';\nimport { AppearanceSettingsComponent } from '../widget-config/appearance-settings.component';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\n\n@Component({\n selector: 'c8y-dashboard-appearance-settings',\n templateUrl: './dashboard-appearance-settings.component.html',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n CoreModule,\n AppearanceSettingsComponent,\n C8yTranslatePipe,\n PopoverDirective\n ]\n})\nexport class DashboardAppearanceSettingsComponent implements OnInit {\n dashboard: ContextDashboard;\n appearanceSettingsForm: DashboardDetailService['appearanceSettingsForm'];\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n\n constructor(\n private contextDashboardService: ContextDashboardService,\n private dashboardDetailService: DashboardDetailService\n ) {}\n\n ngOnInit() {\n this.dashboard = this.dashboardDetailService.details.dashboard;\n this.appearanceSettingsForm = this.dashboardDetailService.appearanceSettingsForm;\n if (this.dashboard) {\n this.setDashboardStyle();\n }\n }\n\n changeThemeClass(themeClass: string) {\n this.styling.themeClass = themeClass;\n this.appearanceSettingsForm.get('classes').setValue({ [this.styling.themeClass]: true });\n this.dashboardDetailService.previewChangedFn({ classes: { [this.styling.themeClass]: true } });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n changeHeaderClass(headerClass: string) {\n this.styling.headerClass = headerClass;\n this.appearanceSettingsForm.get('widgetClasses').setValue({ [this.styling.headerClass]: true });\n this.dashboardDetailService.previewChangedFn({\n widgetClasses: { [this.styling.headerClass]: true }\n });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n private setDashboardStyle() {\n const allClasses = {\n ...this.appearanceSettingsForm.get('classes').value,\n ...this.appearanceSettingsForm.get('widgetClasses').value\n };\n\n const styles = Object.keys(allClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n this.styling.themeClass = this.contextDashboardService.getStyling(\n DASHBOARD_THEME_CLASSES,\n styleName,\n this.styling.themeClass\n );\n this.styling.headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n this.styling.headerClass\n );\n });\n }\n}\n","<div [formGroup]=\"appearanceSettingsForm\">\n <c8y-appearance-settings\n [themeClass]=\"styling.themeClass\"\n [headerClass]=\"styling.headerClass\"\n (themeClassChange)=\"changeThemeClass($event)\"\n (headerClassChange)=\"changeHeaderClass($event)\"\n [dashboardSettings]=\"true\"\n [columns]=\"3\"\n >\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Misc</legend>\n <c8y-form-group>\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n formControlName=\"widgetMargin\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label>\n {{ 'Translate if possible' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Translates dashboard or widget titles if they are written in English and their translations are available in the loaded standard or custom translation resources.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate dashboard title if possible' | translate }}\"\n >\n <input\n name=\"translateDashboardTitle\"\n type=\"checkbox\"\n formControlName=\"translateDashboardTitle\"\n />\n <span></span>\n <span>{{ 'Dashboard title' | translate }}</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate widget titles if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n formControlName=\"translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Widget titles' | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </div>\n </c8y-appearance-settings>\n</div>\n"],"names":["i1.ContextDashboardService","i2.DashboardDetailService","i4"],"mappings":"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"}
@@ -8,7 +8,7 @@ import { of, Subject, from, combineLatest, map as map$1, BehaviorSubject, tap as
8
8
  import { gettext } from '@c8y/ngx-components/gettext';
9
9
  import { __decorate, __metadata } from 'tslib';
10
10
  import * as i3 from '@angular/common';
11
- import { NgIf, NgTemplateOutlet, CommonModule, NgClass, AsyncPipe, NgForOf, NgFor } from '@angular/common';
11
+ import { NgTemplateOutlet, CommonModule, NgClass, AsyncPipe, NgIf, NgForOf, NgFor } from '@angular/common';
12
12
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
13
13
  import * as i6 from '@c8y/ngx-components/context-dashboard-state';
14
14
  import * as i2$1 from '@ngx-translate/core';
@@ -640,6 +640,9 @@ class ContextDashboardService {
640
640
  this.navigator.add(node);
641
641
  }
642
642
  getContextForGS(mo) {
643
+ if (!mo) {
644
+ return null;
645
+ }
643
646
  if (this.groupService.isDevice(mo)) {
644
647
  return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.DEVICE;
645
648
  }
@@ -1254,7 +1257,8 @@ class DashboardDetailComponent {
1254
1257
  };
1255
1258
  }
1256
1259
  async cancel() {
1257
- if (!this.isEdit && !this.isReport) {
1260
+ const isUnsavedDefaultDashboard = this.isNamedDashboard && !this.mo.id;
1261
+ if (!this.isEdit && !this.isReport && !isUnsavedDefaultDashboard) {
1258
1262
  // dashboard creation in it's own tab- confirm and cleanup triggered in canDeactivate during routing
1259
1263
  this.tabsService.items$.pipe(first()).subscribe((tabs) => {
1260
1264
  const tab = tabs.find(t => t.featureId !== newDashboardTab.featureId);
@@ -1344,11 +1348,17 @@ class DashboardDetailComponent {
1344
1348
  }
1345
1349
  }
1346
1350
  async createNewDashboard() {
1351
+ const isUnsavedDefaultDashboard = this.isNamedDashboard && !this.mo.id;
1347
1352
  const mo = await this.contextDashboardService.create(this.dashboard, this.currentContext, this.isNamedDashboard ? this.dashboard.name : undefined);
1348
1353
  await this.onCreateGSEvent(mo);
1349
1354
  await this.clearNamedOutletPath();
1350
1355
  this.cleanupAfterDetailsClose();
1351
- await this.contextDashboardService.navigateToDashboard(mo, true);
1356
+ if (!isUnsavedDefaultDashboard) {
1357
+ await this.contextDashboardService.navigateToDashboard(mo, true);
1358
+ }
1359
+ else {
1360
+ this.dashboardSaved.emit(mo);
1361
+ }
1352
1362
  }
1353
1363
  async onCreateGSEvent(mo) {
1354
1364
  const parentName = await this.convertStringToHash(this.context?.name);
@@ -1524,7 +1534,7 @@ class DashboardDetailComponent {
1524
1534
  this.tabs = this.dashboardDetailService.getTabs();
1525
1535
  }
1526
1536
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DashboardDetailComponent, deps: [{ token: ContextDashboardService }, { token: i2$1.TranslateService }, { token: i2.ContextRouteService }, { token: i1.ActivatedRoute }, { token: i2.TabsService }, { token: i1.Router }, { token: i1$1.InventoryService }, { token: i1.ActivatedRoute }, { token: DashboardDetailService }, { token: i2.AppStateService }, { token: i2.GroupService }, { token: i2.ModalService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
1527
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DashboardDetailComponent, isStandalone: true, selector: "c8y-dashboard-detail", inputs: { isReport: "isReport", deviceType: "deviceType", context: "context", mo: "mo", dashboard: "dashboard", isNamedDashboard: "isNamedDashboard", hideAvailability: "hideAvailability" }, outputs: { dashboardSaved: "dashboardSaved", previewChanged: "previewChanged" }, providers: [DashboardDetailService], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n class=\"c8y-top-drawer--tabs\"\n [tabs]=\"tabs\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n [openFirstTab]=\"true\"\n ></c8y-tabs-outlet>\n\n <div\n class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\"\n >\n <router-outlet name=\"dashboard-details\"></router-outlet>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"((dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit) || dashboardDetailService.saveButtonDisabled\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context", "openFirstTab", "hasHeader"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
1537
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DashboardDetailComponent, isStandalone: true, selector: "c8y-dashboard-detail", inputs: { isReport: "isReport", deviceType: "deviceType", context: "context", mo: "mo", dashboard: "dashboard", isNamedDashboard: "isNamedDashboard", hideAvailability: "hideAvailability" }, outputs: { dashboardSaved: "dashboardSaved", previewChanged: "previewChanged" }, providers: [DashboardDetailService], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n @if (!isCollapsed) {\n <div class=\"d-flex\">\n <c8y-tabs-outlet\n class=\"c8y-top-drawer--tabs\"\n [tabs]=\"tabs\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n [openFirstTab]=\"true\"\n ></c8y-tabs-outlet>\n\n <div\n class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\"\n >\n <router-outlet name=\"dashboard-details\"></router-outlet>\n </div>\n </div>\n }\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n ((dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit) ||\n dashboardDetailService.saveButtonDisabled\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context", "openFirstTab", "hasHeader"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
1528
1538
  }
1529
1539
  __decorate([
1530
1540
  memoize(),
@@ -1534,7 +1544,7 @@ __decorate([
1534
1544
  ], DashboardDetailComponent.prototype, "convertStringToHash", null);
1535
1545
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DashboardDetailComponent, decorators: [{
1536
1546
  type: Component,
1537
- args: [{ selector: 'c8y-dashboard-detail', providers: [DashboardDetailService], imports: [CollapseDirective, NgIf, TabsOutletComponent, RouterOutlet, C8yTranslatePipe], template: "<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n class=\"c8y-top-drawer--tabs\"\n [tabs]=\"tabs\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n [openFirstTab]=\"true\"\n ></c8y-tabs-outlet>\n\n <div\n class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\"\n >\n <router-outlet name=\"dashboard-details\"></router-outlet>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"((dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit) || dashboardDetailService.saveButtonDisabled\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n" }]
1547
+ args: [{ selector: 'c8y-dashboard-detail', providers: [DashboardDetailService], imports: [CollapseDirective, TabsOutletComponent, RouterOutlet, C8yTranslatePipe], template: "<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n @if (!isCollapsed) {\n <div class=\"d-flex\">\n <c8y-tabs-outlet\n class=\"c8y-top-drawer--tabs\"\n [tabs]=\"tabs\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n [openFirstTab]=\"true\"\n ></c8y-tabs-outlet>\n\n <div\n class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\"\n >\n <router-outlet name=\"dashboard-details\"></router-outlet>\n </div>\n </div>\n }\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n ((dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit) ||\n dashboardDetailService.saveButtonDisabled\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n" }]
1538
1548
  }], ctorParameters: () => [{ type: ContextDashboardService }, { type: i2$1.TranslateService }, { type: i2.ContextRouteService }, { type: i1.ActivatedRoute }, { type: i2.TabsService }, { type: i1.Router }, { type: i1$1.InventoryService }, { type: i1.ActivatedRoute }, { type: DashboardDetailService }, { type: i2.AppStateService }, { type: i2.GroupService }, { type: i2.ModalService }, { type: i2.GainsightService }], propDecorators: { isReport: [{
1539
1549
  type: Input
1540
1550
  }], deviceType: [{
@@ -3697,7 +3707,7 @@ class ContextDashboardModule {
3697
3707
  },
3698
3708
  {
3699
3709
  path: DashboardDetailsTabId.APPEARANCE,
3700
- loadComponent: () => import('./c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DM3hASUP.mjs').then(m => m.DashboardAppearanceSettingsComponent),
3710
+ loadComponent: () => import('./c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs').then(m => m.DashboardAppearanceSettingsComponent),
3701
3711
  outlet: DASHBOARD_DETAILS_OUTLET,
3702
3712
  context: ViewContext.Dashboard
3703
3713
  },
@@ -3770,7 +3780,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3770
3780
  },
3771
3781
  {
3772
3782
  path: DashboardDetailsTabId.APPEARANCE,
3773
- loadComponent: () => import('./c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DM3hASUP.mjs').then(m => m.DashboardAppearanceSettingsComponent),
3783
+ loadComponent: () => import('./c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs').then(m => m.DashboardAppearanceSettingsComponent),
3774
3784
  outlet: DASHBOARD_DETAILS_OUTLET,
3775
3785
  context: ViewContext.Dashboard
3776
3786
  },