@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.
- package/alarms/index.d.ts +2 -1
- package/alarms/index.d.ts.map +1 -1
- package/application-access/list/index.d.ts +36 -0
- package/application-access/list/index.d.ts.map +1 -0
- package/application-access/user/application-access-user-details-wrapper/index.d.ts +33 -0
- package/application-access/user/application-access-user-details-wrapper/index.d.ts.map +1 -0
- package/application-access/user/index.d.ts +6 -0
- package/application-access/user/index.d.ts.map +1 -0
- package/asset-properties/index.d.ts +1 -1
- package/context-dashboard/index.d.ts +1 -1
- package/context-dashboard/index.d.ts.map +1 -1
- package/datapoints-export-selector/index.d.ts +2 -2
- package/device-enrolment/index.d.ts +6 -0
- package/device-enrolment/index.d.ts.map +1 -0
- package/device-enrolment/modal/index.d.ts +88 -0
- package/device-enrolment/modal/index.d.ts.map +1 -0
- package/device-grid/index.d.ts +1 -1
- package/device-list/index.d.ts +1 -1
- package/device-shell/index.d.ts +1 -1
- package/echart/index.d.ts +1 -1
- package/echart/models/index.d.ts +2 -2
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-application-access-list.mjs +180 -0
- package/fesm2022/c8y-ngx-components-application-access-list.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-application-access-user-application-access-user-details-wrapper.mjs +113 -0
- package/fesm2022/c8y-ngx-components-application-access-user-application-access-user-details-wrapper.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-application-access-user.mjs +20 -0
- package/fesm2022/c8y-ngx-components-application-access-user.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-branding-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-child-devices.mjs +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +4 -24
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- 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
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-DvKsV_Fs.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +2 -2
- package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-enrolment-modal.mjs +570 -0
- package/fesm2022/c8y-ngx-components-device-enrolment-modal.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-device-enrolment.mjs +147 -0
- package/fesm2022/c8y-ngx-components-device-enrolment.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -2
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-exports.mjs +1 -1
- package/fesm2022/c8y-ngx-components-feature-toggles.mjs +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +3 -5
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +132 -55
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +71 -32
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +7 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs +8 -7
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +4 -4
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +37 -86
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +1 -1
- package/fesm2022/c8y-ngx-components.mjs +454 -225
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/index.d.ts +109 -39
- package/index.d.ts.map +1 -1
- package/locales/de.po +184 -13
- package/locales/es.po +183 -13
- package/locales/fr.po +183 -13
- package/locales/ja_JP.po +162 -13
- package/locales/ko.po +184 -13
- package/locales/locales.pot +166 -11
- package/locales/nl.po +183 -13
- package/locales/pl.po +183 -13
- package/locales/pt_BR.po +183 -13
- package/locales/zh_CN.po +184 -13
- package/locales/zh_TW.po +183 -13
- package/map/index.d.ts +1 -0
- package/map/index.d.ts.map +1 -1
- package/operations/bulk-operations-service/index.d.ts +1 -1
- package/package.json +1 -1
- package/protocol-opcua/mappings/index.d.ts +1 -1
- package/register-device/index.d.ts +1 -1
- package/remote-access/data/index.d.ts +1 -0
- package/remote-access/data/index.d.ts.map +1 -1
- package/repository/shared/index.d.ts.map +1 -1
- package/sub-assets/index.d.ts +9 -3
- package/sub-assets/index.d.ts.map +1 -1
- package/tenants/index.d.ts +1 -0
- package/tenants/index.d.ts.map +1 -1
- package/upgrade/index.d.ts.map +1 -1
- package/widgets/definitions/device-management-welcome/index.d.ts +9 -6
- package/widgets/definitions/device-management-welcome/index.d.ts.map +1 -1
- package/widgets/implementations/asset-table/index.d.ts +1 -1
- package/widgets/implementations/datapoints-table/index.d.ts +2 -2
- package/widgets/implementations/device-management-welcome/index.d.ts +9 -22
- package/widgets/implementations/device-management-welcome/index.d.ts.map +1 -1
- package/widgets/implementations/kpi/index.d.ts +1 -1
- package/widgets/implementations/quick-links/index.d.ts +13 -2
- package/widgets/implementations/quick-links/index.d.ts.map +1 -1
- 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.
|
|
433
|
-
const
|
|
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.
|
|
467
|
-
const
|
|
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
|
}
|