@c8y/ngx-components 1018.0.139 → 1018.0.143

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.
@@ -319,11 +319,16 @@ class ContextDashboardService {
319
319
  }
320
320
  async pasteDashboard(newContext) {
321
321
  if (this.copyClipboard) {
322
- if (this.canPasteDashboard(this.copyClipboard, newContext.context)) {
323
- const dashboardToPaste = this.createContextDashboardCopy(this.copyClipboard.dashboard, newContext.contextData, this.copyClipboard.context.contextData);
324
- const dashboard = await this.create(this.clean(dashboardToPaste), newContext);
325
- this.copyClipboard = undefined;
326
- this.navigateToDashboard(dashboard);
322
+ try {
323
+ if (this.canPasteDashboard(this.copyClipboard, newContext.context)) {
324
+ const dashboardToPaste = this.createContextDashboardCopy(this.copyClipboard.dashboard, newContext.contextData, this.copyClipboard.context.contextData);
325
+ const dashboard = await this.create(this.clean(dashboardToPaste), newContext);
326
+ this.copyClipboard = undefined;
327
+ this.navigateToDashboard(dashboard);
328
+ }
329
+ }
330
+ catch {
331
+ this.alert.warning(gettext('Insufficient permissions for this action.'));
327
332
  }
328
333
  }
329
334
  }
@@ -1370,21 +1375,19 @@ class ContextDashboardComponent {
1370
1375
  */
1371
1376
  async copyDashboard() {
1372
1377
  const viewContext = this.route.parent.snapshot.data?.context;
1373
- if (this.canCopyDashboard(viewContext)) {
1374
- this.contextDashboardService.copyClipboard = {
1375
- dashboard: cloneDeep(this.mo.c8y_Dashboard),
1376
- context: cloneDeep({
1377
- context: viewContext,
1378
- contextData: this.context
1379
- })
1380
- };
1381
- if (viewContext) {
1382
- const ctx = viewContext.split('/').shift();
1383
- const msg = this.translateService.instant('Dashboard copied. Navigate to the desired {{ ctx }} and select "Paste dashboard"', { ctx });
1384
- this.alert.success(msg);
1385
- }
1386
- this.actionBarService.refresh();
1378
+ this.contextDashboardService.copyClipboard = {
1379
+ dashboard: cloneDeep(this.mo.c8y_Dashboard),
1380
+ context: cloneDeep({
1381
+ context: viewContext,
1382
+ contextData: this.context
1383
+ })
1384
+ };
1385
+ if (viewContext) {
1386
+ const ctx = viewContext.split('/').shift();
1387
+ const msg = this.translateService.instant('Dashboard copied. Navigate to the desired {{ ctx }} and select "Paste dashboard"', { ctx });
1388
+ this.alert.success(msg);
1387
1389
  }
1390
+ this.actionBarService.refresh();
1388
1391
  }
1389
1392
  /**
1390
1393
  * Remove the complete dashboard and navigate away.
@@ -1638,6 +1641,7 @@ class ContextDashboardComponent {
1638
1641
  dashboard: true,
1639
1642
  ...this.dashboard.classes
1640
1643
  };
1644
+ this.isCopyDisabled = !this.canCopyDashboard();
1641
1645
  this.widgets = await Promise.all(values(dashboardChildren).map(widget => {
1642
1646
  widget.classes = this.mergeWidgetClasses(widget);
1643
1647
  if (isDeviceType) {
@@ -1689,26 +1693,18 @@ class ContextDashboardComponent {
1689
1693
  };
1690
1694
  this.canDelete = false;
1691
1695
  }
1692
- canCopyDashboard(viewContext) {
1693
- if (!this.validDashboardChildren() && viewContext) {
1694
- const ctx = viewContext.split('/').shift();
1695
- const msg = this.translateService.instant('Only dashboards with widgets referencing the current {{ ctx }} can be copied.', { ctx });
1696
- this.alert.warning(msg);
1697
- return false;
1698
- }
1699
- return true;
1700
- }
1701
- validDashboardChildren() {
1702
- return every(this.mo.c8y_Dashboard.children, child => {
1696
+ canCopyDashboard() {
1697
+ const allDashboardChildrenAreValid = every(this.mo.c8y_Dashboard.children, child => {
1703
1698
  const config = child.config || {};
1704
1699
  const dataPoints = config.datapoints || [];
1705
1700
  return !((config.device && config.device.id !== this.context.id) ||
1706
1701
  some(dataPoints, dataPoint => dataPoint.__target.id !== this.context.id));
1707
1702
  });
1703
+ return allDashboardChildrenAreValid;
1708
1704
  }
1709
1705
  }
1710
1706
  ContextDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: ContextDashboardService }, { token: i5.AlertService }, { token: i0.Renderer2 }, { token: CONTEXT_DASHBOARD_CONFIG }, { token: WidgetService }, { token: i3$1.BsModalService }, { token: i1.InventoryService }, { token: i5.GainsightService }, { token: i5.ActionBarService }, { token: i3.TranslateService }, { token: i5.ModalService }], target: i0.ɵɵFactoryTarget.Component });
1711
- ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", disabled: "disabled", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item *ngIf=\"defaultWidgets.length > 0\" [placement]=\"'right'\" [priority]=\"-1\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n (click)=\"restore()\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i class=\"m-r-4\" c8yIcon=\"reset\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help *ngIf=\"showContextHelpButton\" src=\"/users-guide/cockpit/#dashboards\"></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i5.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i5.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "breadcrumb"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onFreeze", "onChangeStart", "onChangeEnd"] }, { kind: "component", type: i5.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
1707
+ ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", disabled: "disabled", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item *ngIf=\"defaultWidgets.length > 0\" [placement]=\"'right'\" [priority]=\"-1\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n (click)=\"restore()\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i class=\"m-r-4\" c8yIcon=\"reset\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help *ngIf=\"showContextHelpButton\" src=\"/users-guide/cockpit/#dashboards\"></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy,\n isCopyDisabled: isCopyDisabled,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i5.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i5.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "breadcrumb"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onFreeze", "onChangeStart", "onChangeEnd"] }, { kind: "component", type: i5.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
1712
1708
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardComponent, decorators: [{
1713
1709
  type: Component,
1714
1710
  args: [{ selector: 'c8y-context-dashboard', host: {
@@ -1716,7 +1712,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
1716
1712
  display: block;
1717
1713
  `,
1718
1714
  class: 'dashboard c8y-grid-dashboard'
1719
- }, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item *ngIf=\"defaultWidgets.length > 0\" [placement]=\"'right'\" [priority]=\"-1\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n (click)=\"restore()\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i class=\"m-r-4\" c8yIcon=\"reset\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help *ngIf=\"showContextHelpButton\" src=\"/users-guide/cockpit/#dashboards\"></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n" }]
1715
+ }, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item *ngIf=\"defaultWidgets.length > 0\" [placement]=\"'right'\" [priority]=\"-1\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n (click)=\"restore()\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i class=\"m-r-4\" c8yIcon=\"reset\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help *ngIf=\"showContextHelpButton\" src=\"/users-guide/cockpit/#dashboards\"></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy,\n isCopyDisabled: isCopyDisabled,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n" }]
1720
1716
  }], ctorParameters: function () { return [{ type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: ContextDashboardService }, { type: i5.AlertService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
1721
1717
  type: Inject,
1722
1718
  args: [CONTEXT_DASHBOARD_CONFIG]