@c8y/ngx-components 1023.53.0 → 1023.57.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.
Files changed (111) hide show
  1. package/alarms/index.d.ts +2 -1
  2. package/alarms/index.d.ts.map +1 -1
  3. package/application-access/list/index.d.ts +36 -0
  4. package/application-access/list/index.d.ts.map +1 -0
  5. package/application-access/user/application-access-user-details-wrapper/index.d.ts +33 -0
  6. package/application-access/user/application-access-user-details-wrapper/index.d.ts.map +1 -0
  7. package/application-access/user/index.d.ts +6 -0
  8. package/application-access/user/index.d.ts.map +1 -0
  9. package/asset-properties/index.d.ts +1 -1
  10. package/context-dashboard/index.d.ts +1 -1
  11. package/context-dashboard/index.d.ts.map +1 -1
  12. package/datapoints-export-selector/index.d.ts +2 -2
  13. package/device-enrolment/index.d.ts +6 -0
  14. package/device-enrolment/index.d.ts.map +1 -0
  15. package/device-enrolment/modal/index.d.ts +88 -0
  16. package/device-enrolment/modal/index.d.ts.map +1 -0
  17. package/device-grid/index.d.ts +1 -1
  18. package/device-list/index.d.ts +1 -1
  19. package/device-shell/index.d.ts +1 -1
  20. package/echart/index.d.ts +1 -1
  21. package/echart/models/index.d.ts +2 -2
  22. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +1 -1
  23. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +1 -1
  24. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-application-access-list.mjs +180 -0
  26. package/fesm2022/c8y-ngx-components-application-access-list.mjs.map +1 -0
  27. package/fesm2022/c8y-ngx-components-application-access-user-application-access-user-details-wrapper.mjs +113 -0
  28. package/fesm2022/c8y-ngx-components-application-access-user-application-access-user-details-wrapper.mjs.map +1 -0
  29. package/fesm2022/c8y-ngx-components-application-access-user.mjs +20 -0
  30. package/fesm2022/c8y-ngx-components-application-access-user.mjs.map +1 -0
  31. package/fesm2022/c8y-ngx-components-branding-shared.mjs +1 -1
  32. package/fesm2022/c8y-ngx-components-child-devices.mjs +1 -1
  33. package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +1 -1
  34. package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +1 -1
  35. package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +1 -1
  36. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +4 -24
  37. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  38. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0C7SH6L.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-DvKsV_Fs.mjs} +14 -12
  39. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-DvKsV_Fs.mjs.map +1 -0
  40. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +2 -2
  41. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +1 -1
  42. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +1 -1
  43. package/fesm2022/c8y-ngx-components-datapoint-library.mjs +1 -1
  44. package/fesm2022/c8y-ngx-components-device-enrolment-modal.mjs +570 -0
  45. package/fesm2022/c8y-ngx-components-device-enrolment-modal.mjs.map +1 -0
  46. package/fesm2022/c8y-ngx-components-device-enrolment.mjs +147 -0
  47. package/fesm2022/c8y-ngx-components-device-enrolment.mjs.map +1 -0
  48. package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -2
  49. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components-exports.mjs +1 -1
  51. package/fesm2022/c8y-ngx-components-feature-toggles.mjs +1 -1
  52. package/fesm2022/c8y-ngx-components-register-device.mjs +1 -1
  53. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +1 -1
  54. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +1 -1
  55. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +1 -1
  56. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +1 -1
  57. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +1 -1
  58. package/fesm2022/c8y-ngx-components-repository-shared.mjs +3 -5
  59. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  60. package/fesm2022/c8y-ngx-components-sub-assets.mjs +132 -55
  61. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-tenants.mjs +71 -32
  63. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components-upgrade.mjs +7 -1
  65. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  66. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs +8 -7
  67. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
  68. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +4 -4
  69. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
  70. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +37 -86
  71. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
  72. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +1 -1
  73. package/fesm2022/c8y-ngx-components.mjs +454 -225
  74. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  75. package/index.d.ts +109 -39
  76. package/index.d.ts.map +1 -1
  77. package/locales/de.po +184 -13
  78. package/locales/es.po +183 -13
  79. package/locales/fr.po +183 -13
  80. package/locales/ja_JP.po +162 -13
  81. package/locales/ko.po +184 -13
  82. package/locales/locales.pot +166 -11
  83. package/locales/nl.po +183 -13
  84. package/locales/pl.po +183 -13
  85. package/locales/pt_BR.po +183 -13
  86. package/locales/zh_CN.po +184 -13
  87. package/locales/zh_TW.po +183 -13
  88. package/map/index.d.ts +1 -0
  89. package/map/index.d.ts.map +1 -1
  90. package/operations/bulk-operations-service/index.d.ts +1 -1
  91. package/package.json +1 -1
  92. package/protocol-opcua/mappings/index.d.ts +1 -1
  93. package/register-device/index.d.ts +1 -1
  94. package/remote-access/data/index.d.ts +1 -0
  95. package/remote-access/data/index.d.ts.map +1 -1
  96. package/repository/shared/index.d.ts.map +1 -1
  97. package/sub-assets/index.d.ts +9 -3
  98. package/sub-assets/index.d.ts.map +1 -1
  99. package/tenants/index.d.ts +1 -0
  100. package/tenants/index.d.ts.map +1 -1
  101. package/upgrade/index.d.ts.map +1 -1
  102. package/widgets/definitions/device-management-welcome/index.d.ts +9 -6
  103. package/widgets/definitions/device-management-welcome/index.d.ts.map +1 -1
  104. package/widgets/implementations/asset-table/index.d.ts +1 -1
  105. package/widgets/implementations/datapoints-table/index.d.ts +2 -2
  106. package/widgets/implementations/device-management-welcome/index.d.ts +9 -22
  107. package/widgets/implementations/device-management-welcome/index.d.ts.map +1 -1
  108. package/widgets/implementations/kpi/index.d.ts +1 -1
  109. package/widgets/implementations/quick-links/index.d.ts +13 -2
  110. package/widgets/implementations/quick-links/index.d.ts.map +1 -1
  111. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0C7SH6L.mjs.map +0 -1
@@ -415,22 +415,30 @@ class TenantListComponent {
415
415
  }
416
416
  }
417
417
  async suspendTenant(tenant) {
418
- const title = gettext('Suspend tenant');
419
- const confirmationText = gettext('You are about to suspend tenant "{{ company }}" (ID "{{ id }}").');
420
- const proceed = gettext('Do you want to proceed?');
421
- const body = [
422
- this.translateService.instant(confirmationText, {
423
- company: tenant.company,
424
- id: tenant.id
425
- }),
426
- this.translateService.instant(proceed)
427
- ].join(' ');
428
- const labels = {
429
- ok: gettext('Suspend`tenant`')
430
- };
431
418
  try {
432
- await this.modalService.confirm(title, body, Status.DANGER, labels);
433
- const confirmed = await this.passwordService.confirmPassword().toPromise();
419
+ const user = await this.appState.currentUser.value;
420
+ const isExternalUser = user.customProperties?.userOrigin === 'OAUTH2';
421
+ let confirmed;
422
+ if (isExternalUser) {
423
+ confirmed = await this.showExternalUserConfirmModal('suspend', tenant);
424
+ }
425
+ else {
426
+ const title = gettext('Suspend tenant');
427
+ const confirmationText = gettext('You are about to suspend tenant "{{ company }}" (ID "{{ id }}").');
428
+ const proceed = gettext('Do you want to proceed?');
429
+ const body = [
430
+ this.translateService.instant(confirmationText, {
431
+ company: tenant.company,
432
+ id: tenant.id
433
+ }),
434
+ this.translateService.instant(proceed)
435
+ ].join(' ');
436
+ const labels = {
437
+ ok: gettext('Suspend`tenant`')
438
+ };
439
+ await this.modalService.confirm(title, body, Status.DANGER, labels);
440
+ confirmed = await this.passwordService.confirmPassword().toPromise();
441
+ }
434
442
  if (confirmed === true) {
435
443
  const { data: savedTenant } = await this.tenantService.update({
436
444
  id: tenant.id,
@@ -447,24 +455,32 @@ class TenantListComponent {
447
455
  }
448
456
  }
449
457
  async delete(tenant) {
450
- const title = gettext('Delete tenant');
451
- const confirmationText = gettext('You are about to delete tenant "{{ company }}" (ID "{{ id }}").');
452
- const hint = gettext('This operation is irreversible.');
453
- const proceed = gettext('Do you want to proceed?');
454
- const body = [
455
- this.translateService.instant(confirmationText, {
456
- company: tenant.company,
457
- id: tenant.id
458
- }),
459
- this.translateService.instant(hint),
460
- this.translateService.instant(proceed)
461
- ].join(' ');
462
- const labels = {
463
- ok: gettext('Delete`tenant`')
464
- };
465
458
  try {
466
- await this.modalService.confirm(title, body, Status.DANGER, labels);
467
- const confirmed = await this.passwordService.confirmPassword().toPromise();
459
+ const user = await this.appState.currentUser.value;
460
+ const isExternalUser = user.customProperties?.userOrigin === 'OAUTH2';
461
+ let confirmed;
462
+ if (isExternalUser) {
463
+ confirmed = await this.showExternalUserConfirmModal('delete', tenant);
464
+ }
465
+ else {
466
+ const title = gettext('Delete tenant');
467
+ const confirmationText = gettext('You are about to delete tenant "{{ company }}" (ID "{{ id }}").');
468
+ const hint = gettext('This operation is irreversible.');
469
+ const proceed = gettext('Do you want to proceed?');
470
+ const body = [
471
+ this.translateService.instant(confirmationText, {
472
+ company: tenant.company,
473
+ id: tenant.id
474
+ }),
475
+ this.translateService.instant(hint),
476
+ this.translateService.instant(proceed)
477
+ ].join(' ');
478
+ const labels = {
479
+ ok: gettext('Delete`tenant`')
480
+ };
481
+ await this.modalService.confirm(title, body, Status.DANGER, labels);
482
+ confirmed = await this.passwordService.confirmPassword().toPromise();
483
+ }
468
484
  if (confirmed === true) {
469
485
  await this.tenantService.delete(tenant);
470
486
  const tenantsWithoutRemovedOne = this.tenants$.value.filter(t => t !== tenant);
@@ -492,6 +508,29 @@ class TenantListComponent {
492
508
  const blob = new Blob([data], { type: contentType });
493
509
  saveAs(blob, filename);
494
510
  }
511
+ async showExternalUserConfirmModal(action, tenant) {
512
+ try {
513
+ const title = action === 'suspend' ? gettext('Suspend tenant') : gettext('Delete tenant');
514
+ const confirmationText = action === 'suspend'
515
+ ? gettext('You are about to suspend tenant "{{ company }}" (ID "{{ id }}"). This action will immediately affect all users of this tenant.')
516
+ : gettext('You are about to delete tenant "{{ company }}" (ID "{{ id }}"). This action will immediately affect all users of this tenant.');
517
+ const hint = action === 'delete' ? gettext('This operation is irreversible.') + '<br><br>' : '';
518
+ const instruction = gettext('For security reasons, the external authentication server (single sign-on) does not allow for password confirmation. Instead, enter the following code to continue:');
519
+ const body = `${this.translateService.instant(confirmationText, {
520
+ company: tenant.company,
521
+ id: tenant.id
522
+ })}<br><br>${hint}${this.translateService.instant(instruction)}`;
523
+ const labels = {
524
+ ok: action === 'suspend' ? gettext('Suspend`tenant`') : gettext('Delete`tenant`')
525
+ };
526
+ const status = action === 'suspend' ? Status.WARNING : Status.DANGER;
527
+ await this.modalService.confirm(title, body, status, labels, {}, undefined, true);
528
+ return true;
529
+ }
530
+ catch {
531
+ return false;
532
+ }
533
+ }
495
534
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TenantListComponent, deps: [{ token: i1.AppStateService }, { token: i1.AlertService }, { token: i1.ModalService }, { token: i2.TranslateService }, { token: i1$1.TenantService }, { token: i1.TenantUiService }, { token: i4.Location }, { token: i1.PasswordService }, { token: i1$1.UserService }, { token: i1.Permissions }, { token: i1.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
496
535
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: TenantListComponent, isStandalone: true, selector: "c8y-tenant-list", ngImport: i0, template: "<c8y-title>\n {{ 'Subtenants' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-layers\"\n label=\"{{ 'Tenants' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n@if (!!(appState.state$ | async).newsletter) {\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{\n 'Downloads the list of emails of users subscribed for newsletter on the current tenant and its subtenants.'\n | translate\n }}\"\n type=\"button\"\n (click)=\"downloadNewsletterEmails()\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Email addresses' | translate }}\n </button>\n </c8y-action-bar-item>\n}\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Create tenant' | translate }}\"\n type=\"button\"\n (click)=\"createTenant({ sendGainsightEvent: false })\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Create tenant' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#managing-subtenants\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"tenants$ | async\"\n [pagination]=\"pagination\"\n [showSearch]=\"showSearch\"\n [actionControls]=\"actionControls\"\n (onReload)=\"loadTenants()\"\n >\n @if (!(tenants$ | async)) {\n <c8y-loading></c8y-loading>\n } @else {\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-layers'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"\n stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\n \"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n @if (stats?.size === 0) {\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Create tenant' | translate }}\"\n (click)=\"createTenant()\"\n [disabled]=\"!isPermittedToCreateTenanant\"\n >\n {{ 'Create tenant' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">user documentation</a>.\n </small>\n </p>\n }\n </c8y-ui-empty-state>\n }\n\n <c8y-column name=\"company\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n <a [routerLink]=\"['/tenants', context.item.id]\">{{ context.value }}</a>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"parent\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value || currentTenant.name }}\">\n {{ context.value || currentTenant.name }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"creationTime\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | c8yDate }}\">\n {{ context.value | c8yDate }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"status\">\n <ng-container *c8yCellRendererDef=\"let context\">\n @if (context.item.status === TenantStatus.ACTIVE) {\n <span title=\"{{ 'Active`tenant`' | translate }}\">\n <i\n class=\"text-success\"\n c8yIcon=\"check-circle\"\n ></i>\n </span>\n }\n @if (context.item.status === TenantStatus.SUSPENDED) {\n <span title=\"{{ 'Suspended`tenant`' | translate }}\">\n <i\n class=\"text-danger\"\n c8yIcon=\"ban\"\n ></i>\n </span>\n }\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "loading", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "component", type: GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "directive", type: ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "directive", type: CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }] }); }
497
536
  }