@c8y/ngx-components 1021.67.0 → 1021.71.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/branding/shared/lazy/branding-import-modal/branding-import-modal.component.d.ts.map +1 -1
- package/core/beta-feature/beta-feature-show-notification.service.d.ts +10 -0
- package/core/beta-feature/beta-feature-show-notification.service.d.ts.map +1 -0
- package/core/beta-feature/beta-feature.providers.d.ts +3 -0
- package/core/beta-feature/beta-feature.providers.d.ts.map +1 -0
- package/core/beta-feature/beta-preview-button.component.d.ts +17 -0
- package/core/beta-feature/beta-preview-button.component.d.ts.map +1 -0
- package/core/beta-feature/beta-preview-drawer.factory.d.ts +19 -0
- package/core/beta-feature/beta-preview-drawer.factory.d.ts.map +1 -0
- package/core/beta-feature/beta-preview.component.d.ts +25 -0
- package/core/beta-feature/beta-preview.component.d.ts.map +1 -0
- package/core/beta-feature/beta-preview.model.d.ts +24 -0
- package/core/beta-feature/beta-preview.model.d.ts.map +1 -0
- package/core/beta-feature/beta-preview.service.d.ts +47 -0
- package/core/beta-feature/beta-preview.service.d.ts.map +1 -0
- package/core/beta-feature/feature-cache.service.d.ts +26 -0
- package/core/beta-feature/feature-cache.service.d.ts.map +1 -0
- package/core/beta-feature/feature-state.pipe.d.ts +12 -0
- package/core/beta-feature/feature-state.pipe.d.ts.map +1 -0
- package/core/beta-feature/index.d.ts +7 -0
- package/core/beta-feature/index.d.ts.map +1 -0
- package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
- package/core/bottom-drawer/bottom-drawer.component.d.ts +1 -0
- package/core/bottom-drawer/bottom-drawer.component.d.ts.map +1 -1
- package/core/bottom-drawer/bottom-drawer.model.d.ts +4 -0
- package/core/bottom-drawer/bottom-drawer.model.d.ts.map +1 -1
- package/core/common/ApplicationOptions.d.ts +8 -0
- package/core/common/ApplicationOptions.d.ts.map +1 -1
- package/core/common/bytes.pipe.d.ts +26 -10
- package/core/common/bytes.pipe.d.ts.map +1 -1
- package/core/common/index.d.ts +1 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/notification-display.service.d.ts +19 -0
- package/core/common/notification-display.service.d.ts.map +1 -0
- package/core/core.module.d.ts.map +1 -1
- package/core/header/header-bar/header-bar.component.d.ts +1 -0
- package/core/header/header-bar/header-bar.component.d.ts.map +1 -1
- package/core/header/header.service.d.ts +4 -1
- package/core/header/header.service.d.ts.map +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.d.ts.map +1 -1
- package/datapoint-explorer/datapoint-explorer-navigation-factory.d.ts +10 -0
- package/datapoint-explorer/datapoint-explorer-navigation-factory.d.ts.map +1 -0
- package/datapoint-explorer/datapoint-explorer-route-factory.d.ts +10 -0
- package/datapoint-explorer/datapoint-explorer-route-factory.d.ts.map +1 -0
- package/datapoint-explorer/datapoint-explorer.module.d.ts.map +1 -1
- package/echart/charts.component.d.ts +14 -3
- package/echart/charts.component.d.ts.map +1 -1
- package/esm2022/branding/shared/lazy/branding-import-modal/branding-import-modal.component.mjs +4 -7
- package/esm2022/core/beta-feature/beta-feature-show-notification.service.mjs +17 -0
- package/esm2022/core/beta-feature/beta-feature.providers.mjs +9 -0
- package/esm2022/core/beta-feature/beta-preview-button.component.mjs +53 -0
- package/esm2022/core/beta-feature/beta-preview-drawer.factory.mjs +52 -0
- package/esm2022/core/beta-feature/beta-preview.component.mjs +64 -0
- package/esm2022/core/beta-feature/beta-preview.model.mjs +2 -0
- package/esm2022/core/beta-feature/beta-preview.service.mjs +114 -0
- package/esm2022/core/beta-feature/feature-cache.service.mjs +48 -0
- package/esm2022/core/beta-feature/feature-state.pipe.mjs +22 -0
- package/esm2022/core/beta-feature/index.mjs +7 -0
- package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +4 -1
- package/esm2022/core/bottom-drawer/bottom-drawer.component.mjs +4 -3
- package/esm2022/core/bottom-drawer/bottom-drawer.model.mjs +1 -1
- package/esm2022/core/common/ApplicationOptions.mjs +1 -1
- package/esm2022/core/common/bytes.pipe.mjs +47 -18
- package/esm2022/core/common/index.mjs +2 -1
- package/esm2022/core/common/notification-display.service.mjs +2 -0
- package/esm2022/core/core.module.mjs +4 -2
- package/esm2022/core/data-grid/data-grid.component.mjs +3 -3
- package/esm2022/core/docs/legal-notices-outlet/legal-notices-outlet.component.mjs +3 -3
- package/esm2022/core/header/header-bar/header-bar.component.mjs +4 -3
- package/esm2022/core/header/header.service.mjs +12 -6
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/core/user/user-details-drawer/user-details-drawer.component.mjs +3 -3
- package/esm2022/core/version/version-list/version-list.component.mjs +3 -3
- package/esm2022/datapoint-explorer/datapoint-explorer-navigation-factory.mjs +31 -0
- package/esm2022/datapoint-explorer/datapoint-explorer-route-factory.mjs +37 -0
- package/esm2022/datapoint-explorer/datapoint-explorer.module.mjs +22 -48
- package/esm2022/echart/charts.component.mjs +50 -3
- package/esm2022/messaging-management/api/model/backlogQuota.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespace.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespaceDetails.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespaceList.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespacePolicies.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespacePublishers.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespaceSubscribers.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespaceTopics.mjs +2 -0
- package/esm2022/messaging-management/api/model/pageStatistics.mjs +2 -0
- package/esm2022/messaging-management/api/model/pageable.mjs +2 -0
- package/esm2022/messaging-management/api/model/sortable.mjs +2 -0
- package/esm2022/messaging-management/api/model/subscriber.mjs +2 -0
- package/esm2022/messaging-management/api/model/subscriberFilters.mjs +2 -0
- package/esm2022/messaging-management/api/model/subscriberList.mjs +2 -0
- package/esm2022/messaging-management/api/model/subscriberToDelete.mjs +2 -0
- package/esm2022/messaging-management/api/model/topic.mjs +2 -0
- package/esm2022/messaging-management/api/model/topicDetailFilters.mjs +2 -0
- package/esm2022/messaging-management/api/model/topicList.mjs +2 -0
- package/esm2022/messaging-management/api/model/topicListFilters.mjs +2 -0
- package/esm2022/messaging-management/api/model/topicType.mjs +9 -0
- package/esm2022/messaging-management/api/services/messaging-namespaces.service.mjs +83 -0
- package/esm2022/messaging-management/api/services/messaging-subscribers.service.mjs +55 -0
- package/esm2022/messaging-management/api/services/messaging-topics.service.mjs +48 -0
- package/esm2022/messaging-management/c8y-ngx-components-messaging-management.mjs +5 -0
- package/esm2022/messaging-management/constants.mjs +4 -0
- package/esm2022/messaging-management/index.mjs +2 -0
- package/esm2022/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.mjs +43 -0
- package/esm2022/messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.mjs +36 -0
- package/esm2022/messaging-management/messaging/namespace-list/namespace-list.component.mjs +51 -0
- package/esm2022/messaging-management/messaging/shared/usage/usage.component.mjs +68 -0
- package/esm2022/messaging-management/messaging/topic/topic-list-view.component.mjs +81 -0
- package/esm2022/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.mjs +220 -0
- package/esm2022/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.mjs +137 -0
- package/esm2022/messaging-management/messaging/topic/topics-data-grid.service.mjs +113 -0
- package/esm2022/messaging-management/messaging-management.guard.mjs +40 -0
- package/esm2022/messaging-management/messaging-management.module.mjs +72 -0
- package/esm2022/messaging-management/navigator/messaging-navigator-factory.mjs +55 -0
- package/esm2022/messaging-management/navigator/topic-details-tab.factory.mjs +33 -0
- package/esm2022/messaging-management/utils/backlog-quota-limit.pipe.mjs +32 -0
- package/esm2022/messaging-management/utils/namespace-props.mjs +23 -0
- package/esm2022/messaging-management/utils/time-to-live.pipe.mjs +122 -0
- package/esm2022/operations/device-selector/device-selector.component.mjs +5 -1
- package/esm2022/register-device/bulk/bulk-device-registration-modal.component.mjs +8 -10
- package/esm2022/register-device/general/general-device-registration.component.mjs +8 -10
- package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +10 -12
- package/esm2022/upgrade/ng1/downgraded.services.mjs +3 -2
- package/esm2022/upgrade/ng1/index.mjs +3 -2
- package/esm2022/widgets/cockpit-exports/index.mjs +2 -2
- package/esm2022/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.mjs +56 -0
- package/esm2022/widgets/definitions/datapoints-graph/index.mjs +12 -29
- package/esm2022/widgets/definitions/index.mjs +3 -2
- package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.mjs +18 -3
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +3 -6
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +81 -48
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +49 -2
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +1225 -0
- package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +4 -0
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +10 -14
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +18 -20
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +3 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +65 -28
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +17 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +396 -39
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +272 -5
- package/locales/es.po +271 -4
- package/locales/fr.po +272 -5
- package/locales/ja_JP.po +272 -5
- package/locales/ko.po +271 -4
- package/locales/locales.pot +271 -8
- package/locales/nl.po +271 -4
- package/locales/pl.po +271 -4
- package/locales/pt_BR.po +272 -5
- package/locales/zh_CN.po +271 -4
- package/locales/zh_TW.po +272 -5
- package/messaging-management/api/model/backlogQuota.d.ts +14 -0
- package/messaging-management/api/model/backlogQuota.d.ts.map +1 -0
- package/messaging-management/api/model/namespace.d.ts +13 -0
- package/messaging-management/api/model/namespace.d.ts.map +1 -0
- package/messaging-management/api/model/namespaceDetails.d.ts +8 -0
- package/messaging-management/api/model/namespaceDetails.d.ts.map +1 -0
- package/messaging-management/api/model/namespaceList.d.ts +5 -0
- package/messaging-management/api/model/namespaceList.d.ts.map +1 -0
- package/messaging-management/api/model/namespacePolicies.d.ts +10 -0
- package/messaging-management/api/model/namespacePolicies.d.ts.map +1 -0
- package/messaging-management/api/model/namespacePublishers.d.ts +4 -0
- package/messaging-management/api/model/namespacePublishers.d.ts.map +1 -0
- package/messaging-management/api/model/namespaceSubscribers.d.ts +4 -0
- package/messaging-management/api/model/namespaceSubscribers.d.ts.map +1 -0
- package/messaging-management/api/model/namespaceTopics.d.ts +5 -0
- package/messaging-management/api/model/namespaceTopics.d.ts.map +1 -0
- package/messaging-management/api/model/pageStatistics.d.ts +12 -0
- package/messaging-management/api/model/pageStatistics.d.ts.map +1 -0
- package/messaging-management/api/model/pageable.d.ts +8 -0
- package/messaging-management/api/model/pageable.d.ts.map +1 -0
- package/messaging-management/api/model/sortable.d.ts +6 -0
- package/messaging-management/api/model/sortable.d.ts.map +1 -0
- package/messaging-management/api/model/subscriber.d.ts +28 -0
- package/messaging-management/api/model/subscriber.d.ts.map +1 -0
- package/messaging-management/api/model/subscriberFilters.d.ts +13 -0
- package/messaging-management/api/model/subscriberFilters.d.ts.map +1 -0
- package/messaging-management/api/model/subscriberList.d.ts +7 -0
- package/messaging-management/api/model/subscriberList.d.ts.map +1 -0
- package/messaging-management/api/model/subscriberToDelete.d.ts +12 -0
- package/messaging-management/api/model/subscriberToDelete.d.ts.map +1 -0
- package/messaging-management/api/model/topic.d.ts +52 -0
- package/messaging-management/api/model/topic.d.ts.map +1 -0
- package/messaging-management/api/model/topicDetailFilters.d.ts +9 -0
- package/messaging-management/api/model/topicDetailFilters.d.ts.map +1 -0
- package/messaging-management/api/model/topicList.d.ts +7 -0
- package/messaging-management/api/model/topicList.d.ts.map +1 -0
- package/messaging-management/api/model/topicListFilters.d.ts +12 -0
- package/messaging-management/api/model/topicListFilters.d.ts.map +1 -0
- package/messaging-management/api/model/topicType.d.ts +8 -0
- package/messaging-management/api/model/topicType.d.ts.map +1 -0
- package/messaging-management/api/services/messaging-namespaces.service.d.ts +52 -0
- package/messaging-management/api/services/messaging-namespaces.service.d.ts.map +1 -0
- package/messaging-management/api/services/messaging-subscribers.service.d.ts +30 -0
- package/messaging-management/api/services/messaging-subscribers.service.d.ts.map +1 -0
- package/messaging-management/api/services/messaging-topics.service.d.ts +21 -0
- package/messaging-management/api/services/messaging-topics.service.d.ts.map +1 -0
- package/messaging-management/c8y-ngx-components-messaging-management.d.ts.map +1 -0
- package/messaging-management/constants.d.ts +4 -0
- package/messaging-management/constants.d.ts.map +1 -0
- package/messaging-management/index.d.ts +2 -0
- package/messaging-management/index.d.ts.map +1 -0
- package/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.d.ts +29 -0
- package/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.d.ts.map +1 -0
- package/messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.d.ts +15 -0
- package/messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.d.ts.map +1 -0
- package/messaging-management/messaging/namespace-list/namespace-list.component.d.ts +17 -0
- package/messaging-management/messaging/namespace-list/namespace-list.component.d.ts.map +1 -0
- package/messaging-management/messaging/shared/usage/usage.component.d.ts +40 -0
- package/messaging-management/messaging/shared/usage/usage.component.d.ts.map +1 -0
- package/messaging-management/messaging/topic/topic-list-view.component.d.ts +38 -0
- package/messaging-management/messaging/topic/topic-list-view.component.d.ts.map +1 -0
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.d.ts +21 -0
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.d.ts.map +1 -0
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.d.ts +52 -0
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.d.ts.map +1 -0
- package/messaging-management/messaging/topic/topics-data-grid.service.d.ts +13 -0
- package/messaging-management/messaging/topic/topics-data-grid.service.d.ts.map +1 -0
- package/messaging-management/messaging-management.guard.d.ts +12 -0
- package/messaging-management/messaging-management.guard.d.ts.map +1 -0
- package/messaging-management/messaging-management.module.d.ts +7 -0
- package/messaging-management/messaging-management.module.d.ts.map +1 -0
- package/messaging-management/navigator/messaging-navigator-factory.d.ts +18 -0
- package/messaging-management/navigator/messaging-navigator-factory.d.ts.map +1 -0
- package/messaging-management/navigator/topic-details-tab.factory.d.ts +15 -0
- package/messaging-management/navigator/topic-details-tab.factory.d.ts.map +1 -0
- package/messaging-management/utils/backlog-quota-limit.pipe.d.ts +13 -0
- package/messaging-management/utils/backlog-quota-limit.pipe.d.ts.map +1 -0
- package/messaging-management/utils/namespace-props.d.ts +10 -0
- package/messaging-management/utils/namespace-props.d.ts.map +1 -0
- package/messaging-management/utils/time-to-live.pipe.d.ts +16 -0
- package/messaging-management/utils/time-to-live.pipe.d.ts.map +1 -0
- package/operations/device-selector/device-selector.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts +5 -5
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/general/general-device-registration.component.d.ts +5 -5
- package/register-device/general/general-device-registration.component.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts +4 -4
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
- package/upgrade/ng1/downgraded.services.d.ts +1 -0
- package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
- package/upgrade/ng1/index.d.ts.map +1 -1
- package/widgets/cockpit-exports/index.d.ts +1 -1
- package/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.d.ts +11 -0
- package/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.d.ts.map +1 -0
- package/widgets/definitions/datapoints-graph/index.d.ts +0 -28
- package/widgets/definitions/datapoints-graph/index.d.ts.map +1 -1
- package/widgets/definitions/index.d.ts +2 -1
- package/widgets/definitions/index.d.ts.map +1 -1
- package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts +2 -0
- package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts.map +1 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Component, DestroyRef, EventEmitter, inject, ViewChild } from '@angular/core';
|
|
2
|
+
import { ActionBarItemComponent, AppStateService, BreadcrumbModule, BytesPipe, C8yTranslateDirective, C8yTranslatePipe, DataGridComponent, DataGridModule, EmptyStateComponent, EmptyStateContextDirective, gettext, HeaderModule, IconDirective, LoadingComponent, Permissions, RelativeTimePipe } from '@c8y/ngx-components';
|
|
3
|
+
import { ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { CommonModule, DecimalPipe } from '@angular/common';
|
|
5
|
+
import { MessagingTopicType } from '../../../api/model/topicType';
|
|
6
|
+
import { MessagingTopicsService } from '../../../api/services/messaging-topics.service';
|
|
7
|
+
import { MessagingNamespacesService } from '../../../api/services/messaging-namespaces.service';
|
|
8
|
+
import { NAMESPACE_PROPS } from '../../../utils/namespace-props';
|
|
9
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
10
|
+
import { TopicSubscribersDataGridService } from './topic-subscribers-data-grid.service';
|
|
11
|
+
import { BehaviorSubject, combineLatest, firstValueFrom } from 'rxjs';
|
|
12
|
+
import { map, shareReplay, switchMap, tap } from 'rxjs/operators';
|
|
13
|
+
import { UsageComponent } from '../../shared/usage/usage.component';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@c8y/ngx-components";
|
|
16
|
+
import * as i2 from "@angular/common";
|
|
17
|
+
export class TopicSubscribersViewComponent {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.route = inject(ActivatedRoute);
|
|
20
|
+
this.appState = inject(AppStateService);
|
|
21
|
+
this.namespacesService = inject(MessagingNamespacesService);
|
|
22
|
+
this.topicsService = inject(MessagingTopicsService);
|
|
23
|
+
this.topicSubscribersDataGridService = inject(TopicSubscribersDataGridService);
|
|
24
|
+
this.translateService = inject(TranslateService);
|
|
25
|
+
this.permissions = inject(Permissions);
|
|
26
|
+
this.destroyRef = inject(DestroyRef);
|
|
27
|
+
this.loading$ = new BehaviorSubject(false);
|
|
28
|
+
this.refresh = new EventEmitter();
|
|
29
|
+
this.tenantId$ = this.appState.currentTenant.pipe(map(tenant => tenant.name));
|
|
30
|
+
this.namespaceId$ = this.route.params.pipe(map(params => params['namespace']));
|
|
31
|
+
this.namespaceLabel$ = this.namespaceId$.pipe(map(namespaceId => this.translateService.instant(NAMESPACE_PROPS[namespaceId].label)));
|
|
32
|
+
this.topicId$ = this.route.params.pipe(map(params => params['topic']));
|
|
33
|
+
this.overview$ = combineLatest([this.tenantId$, this.namespaceId$, this.topicId$, this.refresh]).pipe(tap(() => this.loading$.next(true)), switchMap(async ([tenantId, namespaceId, topicId]) => ({
|
|
34
|
+
topic: (await this.topicsService.detail({
|
|
35
|
+
tenant: tenantId,
|
|
36
|
+
namespace: namespaceId,
|
|
37
|
+
topic: topicId,
|
|
38
|
+
type: MessagingTopicType.Persistent
|
|
39
|
+
})).data,
|
|
40
|
+
policies: await this.namespacesService.getNamespacePolicies(tenantId, namespaceId)
|
|
41
|
+
})), tap(() => this.loading$.next(false)), shareReplay(1));
|
|
42
|
+
this.topicName$ = this.overview$.pipe(map(overview => overview.topic.name));
|
|
43
|
+
this.tableTitle = gettext('Subscribers');
|
|
44
|
+
this.loadingItemsLabel = gettext('Loading subscribers...');
|
|
45
|
+
this.loadMoreItemsLabel = gettext('Load more subscribers');
|
|
46
|
+
this.noResultsMessage = gettext('No matching subscribers found.');
|
|
47
|
+
this.noResultsSubtitle = gettext('Refine your search terms or check your spelling.');
|
|
48
|
+
this.noDataMessage = gettext('No subscribers to display.');
|
|
49
|
+
this.noDataSubtitle = gettext('Create new subscribers to monitor them here.');
|
|
50
|
+
this.columns = this.topicSubscribersDataGridService.getColumns();
|
|
51
|
+
this.pagination = {
|
|
52
|
+
pageSize: 20,
|
|
53
|
+
currentPage: 1
|
|
54
|
+
};
|
|
55
|
+
this.selectable = true;
|
|
56
|
+
this.actionControls = [
|
|
57
|
+
{
|
|
58
|
+
type: 'unsubscribeSubscriber',
|
|
59
|
+
icon: 'unsubscribe',
|
|
60
|
+
text: gettext('Unsubscribe'),
|
|
61
|
+
callback: (subscriber) => this.unsubscribeSubscriber(subscriber),
|
|
62
|
+
showIf: () => this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN)
|
|
63
|
+
}
|
|
64
|
+
];
|
|
65
|
+
this.bulkActionControls = [
|
|
66
|
+
{
|
|
67
|
+
type: 'unsubscribeSubscriber',
|
|
68
|
+
icon: 'unsubscribe',
|
|
69
|
+
text: gettext('Unsubscribe'),
|
|
70
|
+
callback: (subscribersNames) => this.bulkUnsubscribeSubscribers(subscribersNames),
|
|
71
|
+
showIf: () => this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN)
|
|
72
|
+
}
|
|
73
|
+
];
|
|
74
|
+
this.serverSideDataCallback = this.onDataSourceModifier.bind(this);
|
|
75
|
+
}
|
|
76
|
+
async onDataSourceModifier(dataSourceModifier) {
|
|
77
|
+
return firstValueFrom(combineLatest([this.tenantId$, this.namespaceId$, this.topicId$]).pipe(switchMap(([tenantId, namespaceId, topicId]) => this.topicSubscribersDataGridService.getServerSideData(tenantId, namespaceId, topicId, MessagingTopicType.Persistent, dataSourceModifier))));
|
|
78
|
+
}
|
|
79
|
+
ngAfterViewInit() {
|
|
80
|
+
this.refresh.emit();
|
|
81
|
+
}
|
|
82
|
+
async unsubscribeSubscriber(subscriber) {
|
|
83
|
+
const tenant = await firstValueFrom(this.tenantId$);
|
|
84
|
+
const namespace = await firstValueFrom(this.namespaceId$);
|
|
85
|
+
const topic = await firstValueFrom(this.topicId$);
|
|
86
|
+
this.topicSubscribersDataGridService.unsubscribeSubscriber({
|
|
87
|
+
...subscriber,
|
|
88
|
+
tenant,
|
|
89
|
+
namespace,
|
|
90
|
+
topic,
|
|
91
|
+
type: MessagingTopicType.Persistent
|
|
92
|
+
}, () => this.refresh.emit());
|
|
93
|
+
}
|
|
94
|
+
async bulkUnsubscribeSubscribers(subscribersNames) {
|
|
95
|
+
const tenant = await firstValueFrom(this.tenantId$);
|
|
96
|
+
const namespace = await firstValueFrom(this.namespaceId$);
|
|
97
|
+
const topic = await firstValueFrom(this.topicId$);
|
|
98
|
+
const allSubscribers = await firstValueFrom(this.dataGrid.dataSource.data$);
|
|
99
|
+
const subscribers = subscribersNames.map(subscriberName => {
|
|
100
|
+
const subscriber = allSubscribers.find(subscriber => subscriber.name === subscriberName);
|
|
101
|
+
return {
|
|
102
|
+
...subscriber,
|
|
103
|
+
tenant,
|
|
104
|
+
namespace,
|
|
105
|
+
topic,
|
|
106
|
+
type: MessagingTopicType.Persistent
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
this.topicSubscribersDataGridService.bulkUnsubscribeSubscribers(subscribers, () => this.refresh.emit());
|
|
110
|
+
}
|
|
111
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicSubscribersViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
112
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TopicSubscribersViewComponent, isStandalone: true, selector: "app-topic-subscribers-view", viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title>{{ topicName$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"namespaceLabel$ | async\"\n [path]=\"'/monitoring/messaging-service/namespace/' + (namespaceId$ | async)\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"topicName$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div class=\"card-block\">\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"'day-view'\"\n ></i>\n <span class=\"tag tag--default\">{{ 'Topic' | translate }}</span>\n </div>\n <span class=\"h4\">{{ topicName$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic usage</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicSummary\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicSummary>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Active subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.activeSubscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Total subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.subscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Total unacknowledged messages' | translate }}\n </label>\n <span class=\"m-l-16\">{{ overview.topic.unackMsgBacklog | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate in' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateIn | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate out' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateOut | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic message backlog</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicBacklog\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicBacklog>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog usage\n </label>\n <app-usage [percentage]=\"overview.topic.backlogUsagePercentage\"></app-usage>\n <span class=\"m-l-16\">{{ overview.topic.backlogSize | bytes }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog quota\n </label>\n <span class=\"m-l-16\">\n {{\n overview.policies.backlogQuota?.limit > 0\n ? (overview.policies.backlogQuota?.limit | bytes)\n : '-'\n }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n <c8y-data-grid\n class=\"content-fullpage d-flex d-col border-top border-bottom\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n [selectable]=\"selectable\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'input'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"activeClients\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"messageAckRate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"lastAcknowledgeDate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ context.value }}\"\n *ngIf=\"context.value; else noLastAcknwoldegeDate\"\n >\n {{ context.value | relativeTime }}\n </span>\n <ng-template #noLastAcknwoldegeDate>–</ng-template>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"unackMsgBacklog\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "ngmodule", type: DataGridModule }, { kind: "directive", type: i1.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i1.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "ngmodule", type: HeaderModule }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: RelativeTimePipe, name: "relativeTime" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.PercentPipe, name: "percent" }, { kind: "pipe", type: BytesPipe, name: "bytes" }, { kind: "ngmodule", type: BreadcrumbModule }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: UsageComponent, selector: "app-usage", inputs: ["count", "limit", "percentage"] }, { 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: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }] }); }
|
|
113
|
+
}
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicSubscribersViewComponent, decorators: [{
|
|
115
|
+
type: Component,
|
|
116
|
+
args: [{ selector: 'app-topic-subscribers-view', standalone: true, imports: [
|
|
117
|
+
DataGridModule,
|
|
118
|
+
DecimalPipe,
|
|
119
|
+
HeaderModule,
|
|
120
|
+
C8yTranslateDirective,
|
|
121
|
+
RelativeTimePipe,
|
|
122
|
+
C8yTranslatePipe,
|
|
123
|
+
CommonModule,
|
|
124
|
+
BytesPipe,
|
|
125
|
+
BreadcrumbModule,
|
|
126
|
+
UsageComponent,
|
|
127
|
+
ActionBarItemComponent,
|
|
128
|
+
IconDirective,
|
|
129
|
+
EmptyStateComponent,
|
|
130
|
+
EmptyStateContextDirective,
|
|
131
|
+
LoadingComponent
|
|
132
|
+
], template: "<c8y-title>{{ topicName$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"namespaceLabel$ | async\"\n [path]=\"'/monitoring/messaging-service/namespace/' + (namespaceId$ | async)\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"topicName$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div class=\"card-block\">\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"'day-view'\"\n ></i>\n <span class=\"tag tag--default\">{{ 'Topic' | translate }}</span>\n </div>\n <span class=\"h4\">{{ topicName$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic usage</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicSummary\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicSummary>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Active subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.activeSubscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Total subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.subscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Total unacknowledged messages' | translate }}\n </label>\n <span class=\"m-l-16\">{{ overview.topic.unackMsgBacklog | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate in' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateIn | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate out' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateOut | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic message backlog</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicBacklog\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicBacklog>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog usage\n </label>\n <app-usage [percentage]=\"overview.topic.backlogUsagePercentage\"></app-usage>\n <span class=\"m-l-16\">{{ overview.topic.backlogSize | bytes }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog quota\n </label>\n <span class=\"m-l-16\">\n {{\n overview.policies.backlogQuota?.limit > 0\n ? (overview.policies.backlogQuota?.limit | bytes)\n : '-'\n }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n <c8y-data-grid\n class=\"content-fullpage d-flex d-col border-top border-bottom\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n [selectable]=\"selectable\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'input'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"activeClients\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"messageAckRate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"lastAcknowledgeDate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ context.value }}\"\n *ngIf=\"context.value; else noLastAcknwoldegeDate\"\n >\n {{ context.value | relativeTime }}\n </span>\n <ng-template #noLastAcknwoldegeDate>–</ng-template>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"unackMsgBacklog\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n" }]
|
|
133
|
+
}], propDecorators: { dataGrid: [{
|
|
134
|
+
type: ViewChild,
|
|
135
|
+
args: [DataGridComponent, { static: true }]
|
|
136
|
+
}] } });
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMtc3Vic2NyaWJlcnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9tZXNzYWdpbmcvdG9waWMvdG9waWMtc3Vic2NyaWJlcnMtdmlldy90b3BpYy1zdWJzY3JpYmVycy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L21lc3NhZ2luZy90b3BpYy90b3BpYy1zdWJzY3JpYmVycy12aWV3L3RvcGljLXN1YnNjcmliZXJzLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHNCQUFzQixFQUV0QixlQUFlLEVBQ2YsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxxQkFBcUIsRUFDckIsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUNqQixjQUFjLEVBRWQsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixPQUFPLEVBQ1AsWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFFaEIsV0FBVyxFQUNYLGdCQUFnQixFQUdqQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUs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VUFBVTthQUNwQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsK0JBQStCLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUNoRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUNwQixDQUFDO0lBQ0osQ0FBQzsrR0FySVUsNkJBQTZCO21HQUE3Qiw2QkFBNkIsZ0lBc0U3QixpQkFBaUIsOERDM0k5QixnN1FBdU9BLDJDRHBMSSxjQUFjLHUrQkFDZCxXQUFXLDhDQUNYLFlBQVksbUlBQ1oscUJBQXFCLG1FQUNyQixnQkFBZ0IsZ0RBQ2hCLGdCQUFnQixpREFDaEIsWUFBWSwwVUFDWixTQUFTLDZDQUNULGdCQUFnQixzUUFDaEIsY0FBYyxnR0FDZCxzQkFBc0IsMEpBQ3RCLGFBQWEsMkVBQ2IsbUJBQW1CLG9IQUNuQiwwQkFBMEIsZ0VBQzFCLGdCQUFnQjs7NEZBSVAsNkJBQTZCO2tCQXRCekMsU0FBUzsrQkFDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQO3dCQUNQLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2Qsc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQixnQkFBZ0I7cUJBQ2pCOzhCQXlFK0MsUUFBUTtzQkFBdkQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJJdGVtQ29tcG9uZW50LFxuICBBY3Rpb25Db250cm9sLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJyZWFkY3J1bWJNb2R1bGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBCeXRlc1BpcGUsXG4gIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgQ29sdW1uLFxuICBEYXRhR3JpZENvbXBvbmVudCxcbiAgRGF0YUdyaWRNb2R1bGUsXG4gIERhdGFTb3VyY2VNb2RpZmllcixcbiAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgRW1wdHlTdGF0ZUNvbnRleHREaXJlY3RpdmUsXG4gIGdldHRleHQsXG4gIEhlYWRlck1vZHVsZSxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTG9hZGluZ0NvbXBvbmVudCxcbiAgUGFnaW5hdGlvbixcbiAgUGVybWlzc2lvbnMsXG4gIFJlbGF0aXZlVGltZVBpcGUsXG4gIFNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gIFNlcnZlclNpZGVEYXRhUmVzdWx0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZXNzYWdpbmdUb3BpY1R5cGUgfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWwvdG9waWNUeXBlJztcbmltcG9ydCB7IE1lc3NhZ2luZ1RvcGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcGkvc2VydmljZXMvbWVzc2FnaW5nLXRvcGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1lc3NhZ2luZ05hbWVzcGFjZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL21lc3NhZ2luZy1uYW1lc3BhY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTkFNRVNQQUNFX1BST1BTIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbmFtZXNwYWNlLXByb3BzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRvcGljU3Vic2NyaWJlcnNEYXRhR3JpZFNlcnZpY2UgfSBmcm9tICcuL3RvcGljLXN1YnNjcmliZXJzLWRhdGEtZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVXNhZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXNhZ2UvdXNhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IE1lc3NhZ2luZ1N1YnNjcmliZXIgfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWwvc3Vic2NyaWJlcic7XG5pbXBvcnQgeyBNZXNzYWdpbmdTdWJzY3JpYmVyVG9EZWxldGUgfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWwvc3Vic2NyaWJlclRvRGVsZXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRvcGljLXN1YnNjcmliZXJzLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGF0YUdyaWRNb2R1bGUsXG4gICAgRGVjaW1hbFBpcGUsXG4gICAgSGVhZGVyTW9kdWxlLFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBSZWxhdGl2ZVRpbWVQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZVBpcGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEJ5dGVzUGlwZSxcbiAgICBCcmVhZGNydW1iTW9kdWxlLFxuICAgIFVzYWdlQ29tcG9uZW50LFxuICAgIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlLFxuICAgIExvYWRpbmdDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RvcGljLXN1YnNjcmliZXJzLXZpZXcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRvcGljU3Vic2NyaWJlcnNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgYXBwU3RhdGUgPSBpbmplY3QoQXBwU3RhdGVTZXJ2aWNlKTtcbiAgbmFtZXNwYWNlc1NlcnZpY2UgPSBpbmplY3QoTWVzc2FnaW5nTmFtZXNwYWNlc1NlcnZpY2UpO1xuICB0b3BpY3NTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2luZ1RvcGljc1NlcnZpY2UpO1xuICB0b3BpY1N1YnNjcmliZXJzRGF0YUdyaWRTZXJ2aWNlID0gaW5qZWN0KFRvcGljU3Vic2NyaWJlcnNEYXRhR3JpZFNlcnZpY2UpO1xuICB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwZXJtaXNzaW9ucyA9IGluamVjdChQZXJtaXNzaW9ucyk7XG4gIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICB0ZW5hbnRJZCQgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRUZW5hbnQucGlwZShtYXAodGVuYW50ID0+IHRlbmFudC5uYW1lKSk7XG4gIG5hbWVzcGFjZUlkJCA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUobWFwKHBhcmFtcyA9PiBwYXJhbXNbJ25hbWVzcGFjZSddIGFzIHN0cmluZykpO1xuICBuYW1lc3BhY2VMYWJlbCQgPSB0aGlzLm5hbWVzcGFjZUlkJC5waXBlKFxuICAgIG1hcChuYW1lc3BhY2VJZCA9PiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChOQU1FU1BBQ0VfUFJPUFNbbmFtZXNwYWNlSWRdLmxhYmVsKSlcbiAgKTtcbiAgdG9waWNJZCQgPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gcGFyYW1zWyd0b3BpYyddIGFzIHN0cmluZykpO1xuICBvdmVydmlldyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnRlbmFudElkJCwgdGhpcy5uYW1lc3BhY2VJZCQsIHRoaXMudG9waWNJZCQsIHRoaXMucmVmcmVzaF0pLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKGFzeW5jIChbdGVuYW50SWQsIG5hbWVzcGFjZUlkLCB0b3BpY0lkXSkgPT4gKHtcbiAgICAgIHRvcGljOiAoXG4gICAgICAgIGF3YWl0IHRoaXMudG9waWNzU2VydmljZS5kZXRhaWwoe1xuICAgICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VJZCxcbiAgICAgICAgICB0b3BpYzogdG9waWNJZCxcbiAgICAgICAgICB0eXBlOiBNZXNzYWdpbmdUb3BpY1R5cGUuUGVyc2lzdGVudFxuICAgICAgICB9KVxuICAgICAgKS5kYXRhLFxuICAgICAgcG9saWNpZXM6IGF3YWl0IHRoaXMubmFtZXNwYWNlc1NlcnZpY2UuZ2V0TmFtZXNwYWNlUG9saWNpZXModGVuYW50SWQsIG5hbWVzcGFjZUlkKVxuICAgIH0pKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgdG9waWNOYW1lJCA9IHRoaXMub3ZlcnZpZXckLnBpcGUobWFwKG92ZXJ2aWV3ID0+IG92ZXJ2aWV3LnRvcGljLm5hbWUpKTtcblxuICB0YWJsZVRpdGxlID0gZ2V0dGV4dCgnU3Vic2NyaWJlcnMnKTtcbiAgbG9hZGluZ0l0ZW1zTGFiZWwgPSBnZXR0ZXh0KCdMb2FkaW5nIHN1YnNjcmliZXJzLi4uJyk7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbCA9IGdldHRleHQoJ0xvYWQgbW9yZSBzdWJzY3JpYmVycycpO1xuICBub1Jlc3VsdHNNZXNzYWdlID0gZ2V0dGV4dCgnTm8gbWF0Y2hpbmcgc3Vic2NyaWJlcnMgZm91bmQuJyk7XG4gIG5vUmVzdWx0c1N1YnRpdGxlID0gZ2V0dGV4dCgnUmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuJyk7XG4gIG5vRGF0YU1lc3NhZ2UgPSBnZXR0ZXh0KCdObyBzdWJzY3JpYmVycyB0byBkaXNwbGF5LicpO1xuICBub0RhdGFTdWJ0aXRsZSA9IGdldHRleHQoJ0NyZWF0ZSBuZXcgc3Vic2NyaWJlcnMgdG8gbW9uaXRvciB0aGVtIGhlcmUuJyk7XG5cbiAgY29sdW1uczogQ29sdW1uW10gPSB0aGlzLnRvcGljU3Vic2NyaWJlcnNEYXRhR3JpZFNlcnZpY2UuZ2V0Q29sdW1ucygpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VTaXplOiAyMCxcbiAgICBjdXJyZW50UGFnZTogMVxuICB9O1xuXG4gIHNlbGVjdGFibGUgPSB0cnVlO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6ICd1bnN1YnNjcmliZVN1YnNjcmliZXInLFxuICAgICAgaWNvbjogJ3Vuc3Vic2NyaWJlJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1Vuc3Vic2NyaWJlJyksXG4gICAgICBjYWxsYmFjazogKHN1YnNjcmliZXI6IE1lc3NhZ2luZ1N1YnNjcmliZXIpID0+IHRoaXMudW5zdWJzY3JpYmVTdWJzY3JpYmVyKHN1YnNjcmliZXIpLFxuICAgICAgc2hvd0lmOiAoKSA9PiB0aGlzLnBlcm1pc3Npb25zLmhhc1JvbGUoUGVybWlzc2lvbnMuUk9MRV9URU5BTlRfTUFOQUdFTUVOVF9BRE1JTilcbiAgICB9XG4gIF07XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiAndW5zdWJzY3JpYmVTdWJzY3JpYmVyJyxcbiAgICAgIGljb246ICd1bnN1YnNjcmliZScsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdVbnN1YnNjcmliZScpLFxuICAgICAgY2FsbGJhY2s6IChzdWJzY3JpYmVyc05hbWVzOiBzdHJpbmdbXSkgPT4gdGhpcy5idWxrVW5zdWJzY3JpYmVTdWJzY3JpYmVycyhzdWJzY3JpYmVyc05hbWVzKSxcbiAgICAgIHNob3dJZjogKCkgPT4gdGhpcy5wZXJtaXNzaW9ucy5oYXNSb2xlKFBlcm1pc3Npb25zLlJPTEVfVEVOQU5UX01BTkFHRU1FTlRfQURNSU4pXG4gICAgfVxuICBdO1xuICBAVmlld0NoaWxkKERhdGFHcmlkQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXRhR3JpZDogRGF0YUdyaWRDb21wb25lbnQ7XG5cbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjayA9IHRoaXMub25EYXRhU291cmNlTW9kaWZpZXIuYmluZCh0aGlzKTtcbiAgYXN5bmMgb25EYXRhU291cmNlTW9kaWZpZXIoXG4gICAgZGF0YVNvdXJjZU1vZGlmaWVyOiBEYXRhU291cmNlTW9kaWZpZXJcbiAgKTogUHJvbWlzZTxTZXJ2ZXJTaWRlRGF0YVJlc3VsdD4ge1xuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbShcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudGVuYW50SWQkLCB0aGlzLm5hbWVzcGFjZUlkJCwgdGhpcy50b3BpY0lkJF0pLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoW3RlbmFudElkLCBuYW1lc3BhY2VJZCwgdG9waWNJZF0pID0+XG4gICAgICAgICAgdGhpcy50b3BpY1N1YnNjcmliZXJzRGF0YUdyaWRTZXJ2aWNlLmdldFNlcnZlclNpZGVEYXRhKFxuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBuYW1lc3BhY2VJZCxcbiAgICAgICAgICAgIHRvcGljSWQsXG4gICAgICAgICAgICBNZXNzYWdpbmdUb3BpY1R5cGUuUGVyc2lzdGVudCxcbiAgICAgICAgICAgIGRhdGFTb3VyY2VNb2RpZmllclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlU3Vic2NyaWJlcihzdWJzY3JpYmVyOiBNZXNzYWdpbmdTdWJzY3JpYmVyKSB7XG4gICAgY29uc3QgdGVuYW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50ZW5hbnRJZCQpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmFtZXNwYWNlSWQkKTtcbiAgICBjb25zdCB0b3BpYyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudG9waWNJZCQpO1xuICAgIHRoaXMudG9waWNTdWJzY3JpYmVyc0RhdGFHcmlkU2VydmljZS51bnN1YnNjcmliZVN1YnNjcmliZXIoXG4gICAgICB7XG4gICAgICAgIC4uLnN1YnNjcmliZXIsXG4gICAgICAgIHRlbmFudCxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICB0b3BpYyxcbiAgICAgICAgdHlwZTogTWVzc2FnaW5nVG9waWNUeXBlLlBlcnNpc3RlbnRcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLnJlZnJlc2guZW1pdCgpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGJ1bGtVbnN1YnNjcmliZVN1YnNjcmliZXJzKHN1YnNjcmliZXJzTmFtZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGVuYW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50ZW5hbnRJZCQpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmFtZXNwYWNlSWQkKTtcbiAgICBjb25zdCB0b3BpYyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudG9waWNJZCQpO1xuICAgIGNvbnN0IGFsbFN1YnNjcmliZXJzOiBNZXNzYWdpbmdTdWJzY3JpYmVyW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMuZGF0YUdyaWQuZGF0YVNvdXJjZS5kYXRhJFxuICAgICk7XG5cbiAgICBjb25zdCBzdWJzY3JpYmVyczogTWVzc2FnaW5nU3Vic2NyaWJlclRvRGVsZXRlW10gPSBzdWJzY3JpYmVyc05hbWVzLm1hcChzdWJzY3JpYmVyTmFtZSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyID0gYWxsU3Vic2NyaWJlcnMuZmluZChzdWJzY3JpYmVyID0+IHN1YnNjcmliZXIubmFtZSA9PT0gc3Vic2NyaWJlck5hbWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3Vic2NyaWJlcixcbiAgICAgICAgdGVuYW50LFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHRvcGljLFxuICAgICAgICB0eXBlOiBNZXNzYWdpbmdUb3BpY1R5cGUuUGVyc2lzdGVudFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudG9waWNTdWJzY3JpYmVyc0RhdGFHcmlkU2VydmljZS5idWxrVW5zdWJzY3JpYmVTdWJzY3JpYmVycyhzdWJzY3JpYmVycywgKCkgPT5cbiAgICAgIHRoaXMucmVmcmVzaC5lbWl0KClcbiAgICApO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7IHRvcGljTmFtZSQgfCBhc3luYyB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ21vbml0b3JpbmcnXCJcbiAgICBbbGFiZWxdPVwiJ01vbml0b3JpbmcnIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbbGFiZWxdPVwiJ01lc3NhZ2luZyBzZXJ2aWNlJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy9tb25pdG9yaW5nL21lc3NhZ2luZy1zZXJ2aWNlJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2xhYmVsXT1cIm5hbWVzcGFjZUxhYmVsJCB8IGFzeW5jXCJcbiAgICBbcGF0aF09XCInL21vbml0b3JpbmcvbWVzc2FnaW5nLXNlcnZpY2UvbmFtZXNwYWNlLycgKyAobmFtZXNwYWNlSWQkIHwgYXN5bmMpXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cInRvcGljTmFtZSQgfCBhc3luY1wiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YVxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAoY2xpY2spPVwicmVmcmVzaC5lbWl0KClcIlxuICA+XG4gICAgPGlcbiAgICAgIGM4eUljb249XCJyZWZyZXNoXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGxvYWRpbmckIHwgYXN5bmMgfVwiXG4gICAgPjwvaT5cbiAgICB7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2E+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxkaXYgY2xhc3M9XCJjYXJkIGNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sXCI+XG4gIDxkaXYgY2xhc3M9XCJiZy1sZXZlbC0xIHNlcGFyYXRvci1ib3R0b20gZmxleC1uby1zaHJpbmtcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbC1tZC00IG0tYi0yNCBjb2wteHMtMTIgZC1mbGV4IHAtdC0yNCBnYXAtMTYgdGV4dC1kZWZhdWx0IGEtaS1jZW50ZXIgYS1zLXN0cmV0Y2hcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgZC1jb2xcIj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJtLWItOCBpY29uLTQwIGM4eS1pY29uLWR1b2NvbG9yXCJcbiAgICAgICAgICAgIFtjOHlJY29uXT1cIidkYXktdmlldydcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgdGFnLS1kZWZhdWx0XCI+e3sgJ1RvcGljJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaDRcIj57eyB0b3BpY05hbWUkIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgYzh5LWZpZWxkc2V0LS1sZ1wiPlxuICAgICAgICAgIDxsZWdlbmQgdHJhbnNsYXRlPlRvcGljIHVzYWdlPC9sZWdlbmQ+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZyQgfCBhc3luYzsgZWxzZSB0b3BpY1N1bW1hcnlcIj5cbiAgICAgICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0b3BpY1N1bW1hcnk+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3ZlcnZpZXckIHwgYXN5bmMgYXMgb3ZlcnZpZXdcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBzbWFsbCBhbmltYXRlZCBmYWRlSW5cIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnQWN0aXZlIHN1YnNjcmliZXJzJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC0xNlwiPnt7IG92ZXJ2aWV3LnRvcGljLmFjdGl2ZVN1YnNjcmliZXJzIHwgbnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLWF1dG9cIj57eyAnVG90YWwgc3Vic2NyaWJlcnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLTE2XCI+e3sgb3ZlcnZpZXcudG9waWMuc3Vic2NyaWJlcnMgfCBudW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnVG90YWwgdW5hY2tub3dsZWRnZWQgbWVzc2FnZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj57eyBvdmVydmlldy50b3BpYy51bmFja01zZ0JhY2tsb2cgfCBudW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnTWVzc2FnZSByYXRlIGluJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1sLTE2XCJcbiAgICAgICAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNQZXJTZWNvbmQ6IG92ZXJ2aWV3LnRvcGljLm1zZ1JhdGVJbiB8IG51bWJlclxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZXNQZXJTZWNvbmQgfX0gbXNnL3NcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnTWVzc2FnZSByYXRlIG91dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tbC0xNlwiXG4gICAgICAgICAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzUGVyU2Vjb25kOiBvdmVydmlldy50b3BpYy5tc2dSYXRlT3V0IHwgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlc1BlclNlY29uZCB9fSBtc2cvc1xuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgYzh5LWZpZWxkc2V0LS1sZ1wiPlxuICAgICAgICAgIDxsZWdlbmQgdHJhbnNsYXRlPlRvcGljIG1lc3NhZ2UgYmFja2xvZzwvbGVnZW5kPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmckIHwgYXN5bmM7IGVsc2UgdG9waWNCYWNrbG9nXCI+XG4gICAgICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9waWNCYWNrbG9nPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm92ZXJ2aWV3JCB8IGFzeW5jIGFzIG92ZXJ2aWV3XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgYW5pbWF0ZWQgZmFkZUluXCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJhY2tsb2cgdXNhZ2VcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8YXBwLXVzYWdlIFtwZXJjZW50YWdlXT1cIm92ZXJ2aWV3LnRvcGljLmJhY2tsb2dVc2FnZVBlcmNlbnRhZ2VcIj48L2FwcC11c2FnZT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLTE2XCI+e3sgb3ZlcnZpZXcudG9waWMuYmFja2xvZ1NpemUgfCBieXRlcyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBCYWNrbG9nIHF1b3RhXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtMTZcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICBvdmVydmlldy5wb2xpY2llcy5iYWNrbG9nUXVvdGE/LmxpbWl0ID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAob3ZlcnZpZXcucG9saWNpZXMuYmFja2xvZ1F1b3RhPy5saW1pdCB8IGJ5dGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnLSdcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sIGJvcmRlci10b3AgYm9yZGVyLWJvdHRvbVwiXG4gICAgW3RpdGxlXT1cInRhYmxlVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgIFtsb2FkaW5nSXRlbXNMYWJlbF09XCJsb2FkaW5nSXRlbXNMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgW2xvYWRNb3JlSXRlbXNMYWJlbF09XCJsb2FkTW9yZUl0ZW1zTGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXT1cInNlcnZlclNpZGVEYXRhQ2FsbGJhY2tcIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgIFtoaWRlUmVsb2FkXT1cInRydWVcIlxuICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW2J1bGtBY3Rpb25Db250cm9sc109XCJidWxrQWN0aW9uQ29udHJvbHNcIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgW2ljb25dPVwic3RhdHM/LnNpemUgPiAwID8gJ3NlYXJjaCcgOiAnaW5wdXQnXCJcbiAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgW3N1YnRpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhU3VidGl0bGUgfCB0cmFuc2xhdGUpXCJcbiAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0c1wiXG4gICAgICBbaG9yaXpvbnRhbF09XCJzdGF0cz8uc2l6ZSA+IDBcIlxuICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJuYW1lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJhY3RpdmVDbGllbnRzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpjOHlDZWxsUmVuZGVyZXJEZWY9XCJsZXQgY29udGV4dFwiPlxuICAgICAgICA8c3BhbiB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfCBudW1iZXIgfX1cIj5cbiAgICAgICAgICB7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cblxuICAgIDxjOHktY29sdW1uIG5hbWU9XCJtZXNzYWdlQWNrUmF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IG51bWJlciB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwibGFzdEFja25vd2xlZGdlRGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICB0aXRsZT1cInt7IGNvbnRleHQudmFsdWUgfX1cIlxuICAgICAgICAgICpuZ0lmPVwiY29udGV4dC52YWx1ZTsgZWxzZSBub0xhc3RBY2tud29sZGVnZURhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IHJlbGF0aXZlVGltZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9MYXN0QWNrbndvbGRlZ2VEYXRlPiZuZGFzaDs8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktY29sdW1uPlxuXG4gICAgPGM4eS1jb2x1bW4gbmFtZT1cInVuYWNrTXNnQmFja2xvZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIHwgbnVtYmVyIH19XCI+XG4gICAgICAgICAge3sgY29udGV4dC52YWx1ZSB8IG51bWJlciB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1jb2x1bW4+XG5cbiAgICA8Yzh5LWNvbHVtbiBuYW1lPVwiYmFja2xvZ1VzYWdlUGVyY2VudGFnZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYzh5Q2VsbFJlbmRlcmVyRGVmPVwibGV0IGNvbnRleHRcIj5cbiAgICAgICAgPHNwYW4gdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIC8gMTAwIHwgcGVyY2VudDogJzEuMC0yJyB9fVwiPlxuICAgICAgICAgIHt7IGNvbnRleHQudmFsdWUgLyAxMDAgfCBwZXJjZW50OiAnMS4wLTInIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWNvbHVtbj5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BaseColumn, gettext } from '@c8y/ngx-components';
|
|
3
|
+
import { MessagingTopicsService } from '../../api/services/messaging-topics.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class TopicsDataGridService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.topicsService = inject(MessagingTopicsService);
|
|
8
|
+
}
|
|
9
|
+
getColumns() {
|
|
10
|
+
return [
|
|
11
|
+
this.createColumn({
|
|
12
|
+
name: 'name',
|
|
13
|
+
header: gettext('Name'),
|
|
14
|
+
path: 'name',
|
|
15
|
+
filterable: true,
|
|
16
|
+
filteringConfig: {
|
|
17
|
+
fields: [
|
|
18
|
+
{
|
|
19
|
+
key: 'name',
|
|
20
|
+
type: 'input',
|
|
21
|
+
props: {
|
|
22
|
+
label: gettext('Filter topics by partial name'),
|
|
23
|
+
placeholder: 'myTopic',
|
|
24
|
+
required: true
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
getFilter(model) {
|
|
29
|
+
return model.name;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}),
|
|
33
|
+
this.createColumn({
|
|
34
|
+
name: 'msgRateIn',
|
|
35
|
+
header: gettext('Message rate in (msg/s)'),
|
|
36
|
+
path: 'msgRateIn'
|
|
37
|
+
}),
|
|
38
|
+
this.createColumn({
|
|
39
|
+
name: 'msgRateOut',
|
|
40
|
+
header: gettext('Message rate out (msg/s)'),
|
|
41
|
+
path: 'msgRateOut'
|
|
42
|
+
}),
|
|
43
|
+
this.createColumn({
|
|
44
|
+
name: 'subscribers',
|
|
45
|
+
header: gettext('Subscribers'),
|
|
46
|
+
path: 'subscribers'
|
|
47
|
+
}),
|
|
48
|
+
this.createColumn({
|
|
49
|
+
name: 'backlogSize',
|
|
50
|
+
header: gettext('Message backlog'),
|
|
51
|
+
path: 'backlogSize'
|
|
52
|
+
}),
|
|
53
|
+
this.createColumn({
|
|
54
|
+
name: 'backlogUsagePercentage',
|
|
55
|
+
header: gettext('Used backlog'),
|
|
56
|
+
path: 'backlogUsagePercentage',
|
|
57
|
+
sortOrder: 'desc'
|
|
58
|
+
})
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
async getServerSideData(tenantId, namespaceId, dataSourceModifier) {
|
|
62
|
+
const topicFilters = this.getTopicFilters(tenantId, namespaceId, dataSourceModifier);
|
|
63
|
+
const { res, data, paging } = await this.topicsService.list(topicFilters);
|
|
64
|
+
const filteredSize = paging.totalElements;
|
|
65
|
+
const size = (await this.topicsService.list({
|
|
66
|
+
...topicFilters,
|
|
67
|
+
currentPage: 1,
|
|
68
|
+
pageSize: 1
|
|
69
|
+
})).paging.totalPages;
|
|
70
|
+
return {
|
|
71
|
+
res,
|
|
72
|
+
data,
|
|
73
|
+
paging,
|
|
74
|
+
size,
|
|
75
|
+
filteredSize
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
createColumn(columnProps) {
|
|
79
|
+
const column = new BaseColumn();
|
|
80
|
+
Object.assign(column, columnProps);
|
|
81
|
+
return column;
|
|
82
|
+
}
|
|
83
|
+
getTopicFilters(tenantId, namespaceId, dataSourceModifier) {
|
|
84
|
+
const topicFilters = {
|
|
85
|
+
tenant: tenantId,
|
|
86
|
+
namespace: namespaceId,
|
|
87
|
+
currentPage: dataSourceModifier.pagination.currentPage,
|
|
88
|
+
pageSize: dataSourceModifier.pagination.pageSize
|
|
89
|
+
};
|
|
90
|
+
return dataSourceModifier.columns.reduce((topicFilters, column) => {
|
|
91
|
+
if (column.filterable) {
|
|
92
|
+
if (column.filterPredicate) {
|
|
93
|
+
topicFilters[column.path] = column.filterPredicate;
|
|
94
|
+
}
|
|
95
|
+
if (column.externalFilterQuery) {
|
|
96
|
+
topicFilters[column.path] = column.filteringConfig.getFilter(column.externalFilterQuery);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (column.sortable && column.sortOrder) {
|
|
100
|
+
const sortPath = column.sortingConfig?.pathSortingConfigs?.[0]?.path || column.path;
|
|
101
|
+
topicFilters.sort = `${sortPath},${column.sortOrder}`;
|
|
102
|
+
}
|
|
103
|
+
return topicFilters;
|
|
104
|
+
}, topicFilters);
|
|
105
|
+
}
|
|
106
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicsDataGridService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
107
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicsDataGridService, providedIn: 'root' }); }
|
|
108
|
+
}
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicsDataGridService, decorators: [{
|
|
110
|
+
type: Injectable,
|
|
111
|
+
args: [{ providedIn: 'root' }]
|
|
112
|
+
}] });
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWNzLWRhdGEtZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvbWVzc2FnaW5nL3RvcGljL3RvcGljcy1kYXRhLWdyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsVUFBVSxFQUdWLE9BQU8sRUFFUixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOztBQUdyRixNQUFNLE9BQU8scUJBQXFCO0lBRGxDO1FBRVksa0JBQWEsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztLQXFIMUQ7SUFuSEMsVUFBVTtRQUNSLE9BQU87WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUNoQixJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDdkIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLGVBQWUsRUFBRTtvQkFDZixNQUFNLEVBQUU7d0JBQ047NEJBQ0UsR0FBRyxFQUFFLE1BQU07NEJBQ1gsSUFBSSxFQUFFLE9BQU87NEJBQ2IsS0FBSyxFQUFFO2dDQUNMLEtBQUssRUFBRSxPQUFPLENBQUMsK0JBQStCLENBQUM7Z0NBQy9DLFdBQVcsRUFBRSxTQUFTO2dDQUN0QixRQUFRLEVBQUUsSUFBSTs2QkFDZjt5QkFDRjtxQkFDRjtvQkFDRCxTQUFTLENBQUMsS0FBdUI7d0JBQy9CLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDcEIsQ0FBQztpQkFDRjthQUNGLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUNoQixJQUFJLEVBQUUsV0FBVztnQkFDakIsTUFBTSxFQUFF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Z0JBQzNGLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNwRixZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4RCxDQUFDO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ25CLENBQUM7K0dBckhVLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRFIsTUFBTTs7NEZBQ25CLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJhc2VDb2x1bW4sXG4gIENvbHVtbixcbiAgRGF0YVNvdXJjZU1vZGlmaWVyLFxuICBnZXR0ZXh0LFxuICBTZXJ2ZXJTaWRlRGF0YVJlc3VsdFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE1lc3NhZ2luZ1RvcGljTGlzdEZpbHRlcnMgfSBmcm9tICcuLi8uLi9hcGkvbW9kZWwvdG9waWNMaXN0RmlsdGVycyc7XG5pbXBvcnQgeyBNZXNzYWdpbmdUb3BpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL3NlcnZpY2VzL21lc3NhZ2luZy10b3BpY3Muc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVG9waWNzRGF0YUdyaWRTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHRvcGljc1NlcnZpY2UgPSBpbmplY3QoTWVzc2FnaW5nVG9waWNzU2VydmljZSk7XG5cbiAgZ2V0Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuY3JlYXRlQ29sdW1uKHtcbiAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ05hbWUnKSxcbiAgICAgICAgcGF0aDogJ25hbWUnLFxuICAgICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgICBmaWx0ZXJpbmdDb25maWc6IHtcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiAnbmFtZScsXG4gICAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0ZpbHRlciB0b3BpY3MgYnkgcGFydGlhbCBuYW1lJyksXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdteVRvcGljJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBnZXRGaWx0ZXIobW9kZWw6IHsgbmFtZTogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsLm5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRoaXMuY3JlYXRlQ29sdW1uKHtcbiAgICAgICAgbmFtZTogJ21zZ1JhdGVJbicsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnTWVzc2FnZSByYXRlIGluIChtc2cvcyknKSxcbiAgICAgICAgcGF0aDogJ21zZ1JhdGVJbidcbiAgICAgIH0pLFxuICAgICAgdGhpcy5jcmVhdGVDb2x1bW4oe1xuICAgICAgICBuYW1lOiAnbXNnUmF0ZU91dCcsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnTWVzc2FnZSByYXRlIG91dCAobXNnL3MpJyksXG4gICAgICAgIHBhdGg6ICdtc2dSYXRlT3V0J1xuICAgICAgfSksXG4gICAgICB0aGlzLmNyZWF0ZUNvbHVtbih7XG4gICAgICAgIG5hbWU6ICdzdWJzY3JpYmVycycsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnU3Vic2NyaWJlcnMnKSxcbiAgICAgICAgcGF0aDogJ3N1YnNjcmliZXJzJ1xuICAgICAgfSksXG4gICAgICB0aGlzLmNyZWF0ZUNvbHVtbih7XG4gICAgICAgIG5hbWU6ICdiYWNrbG9nU2l6ZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnTWVzc2FnZSBiYWNrbG9nJyksXG4gICAgICAgIHBhdGg6ICdiYWNrbG9nU2l6ZSdcbiAgICAgIH0pLFxuICAgICAgdGhpcy5jcmVhdGVDb2x1bW4oe1xuICAgICAgICBuYW1lOiAnYmFja2xvZ1VzYWdlUGVyY2VudGFnZScsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnVXNlZCBiYWNrbG9nJyksXG4gICAgICAgIHBhdGg6ICdiYWNrbG9nVXNhZ2VQZXJjZW50YWdlJyxcbiAgICAgICAgc29ydE9yZGVyOiAnZGVzYydcbiAgICAgIH0pXG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIGdldFNlcnZlclNpZGVEYXRhKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlSWQ6IHN0cmluZyxcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgY29uc3QgdG9waWNGaWx0ZXJzID0gdGhpcy5nZXRUb3BpY0ZpbHRlcnModGVuYW50SWQsIG5hbWVzcGFjZUlkLCBkYXRhU291cmNlTW9kaWZpZXIpO1xuICAgIGNvbnN0IHsgcmVzLCBkYXRhLCBwYWdpbmcgfSA9IGF3YWl0IHRoaXMudG9waWNzU2VydmljZS5saXN0KHRvcGljRmlsdGVycyk7XG4gICAgY29uc3QgZmlsdGVyZWRTaXplID0gcGFnaW5nLnRvdGFsRWxlbWVudHM7XG4gICAgY29uc3Qgc2l6ZSA9IChcbiAgICAgIGF3YWl0IHRoaXMudG9waWNzU2VydmljZS5saXN0KHtcbiAgICAgICAgLi4udG9waWNGaWx0ZXJzLFxuICAgICAgICBjdXJyZW50UGFnZTogMSxcbiAgICAgICAgcGFnZVNpemU6IDFcbiAgICAgIH0pXG4gICAgKS5wYWdpbmcudG90YWxQYWdlcztcblxuICAgIHJldHVybiB7XG4gICAgICByZXMsXG4gICAgICBkYXRhLFxuICAgICAgcGFnaW5nLFxuICAgICAgc2l6ZSxcbiAgICAgIGZpbHRlcmVkU2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbihjb2x1bW5Qcm9wczogUGFydGlhbDxCYXNlQ29sdW1uPik6IEJhc2VDb2x1bW4ge1xuICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBCYXNlQ29sdW1uKCk7XG4gICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIGNvbHVtblByb3BzKTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb3BpY0ZpbHRlcnMoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBuYW1lc3BhY2VJZDogc3RyaW5nLFxuICAgIGRhdGFTb3VyY2VNb2RpZmllcjogRGF0YVNvdXJjZU1vZGlmaWVyXG4gICk6IE1lc3NhZ2luZ1RvcGljTGlzdEZpbHRlcnMge1xuICAgIGNvbnN0IHRvcGljRmlsdGVyczogTWVzc2FnaW5nVG9waWNMaXN0RmlsdGVycyA9IHtcbiAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZUlkLFxuICAgICAgY3VycmVudFBhZ2U6IGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLmN1cnJlbnRQYWdlLFxuICAgICAgcGFnZVNpemU6IGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLnBhZ2VTaXplXG4gICAgfTtcblxuICAgIHJldHVybiBkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucy5yZWR1Y2UoKHRvcGljRmlsdGVycywgY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLmZpbHRlcmFibGUpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXJQcmVkaWNhdGUpIHtcbiAgICAgICAgICB0b3BpY0ZpbHRlcnNbY29sdW1uLnBhdGhdID0gY29sdW1uLmZpbHRlclByZWRpY2F0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW4uZXh0ZXJuYWxGaWx0ZXJRdWVyeSkge1xuICAgICAgICAgIHRvcGljRmlsdGVyc1tjb2x1bW4ucGF0aF0gPSBjb2x1bW4uZmlsdGVyaW5nQ29uZmlnLmdldEZpbHRlcihjb2x1bW4uZXh0ZXJuYWxGaWx0ZXJRdWVyeSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5zb3J0YWJsZSAmJiBjb2x1bW4uc29ydE9yZGVyKSB7XG4gICAgICAgIGNvbnN0IHNvcnRQYXRoID0gY29sdW1uLnNvcnRpbmdDb25maWc/LnBhdGhTb3J0aW5nQ29uZmlncz8uWzBdPy5wYXRoIHx8IGNvbHVtbi5wYXRoO1xuICAgICAgICB0b3BpY0ZpbHRlcnMuc29ydCA9IGAke3NvcnRQYXRofSwke2NvbHVtbi5zb3J0T3JkZXJ9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRvcGljRmlsdGVycztcbiAgICB9LCB0b3BpY0ZpbHRlcnMpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { Permissions } from '@c8y/ngx-components';
|
|
3
|
+
import { ApplicationService, FeatureService, UserService } from '@c8y/client';
|
|
4
|
+
import { MESSAGING_MANAGEMENT_FEATURE_KEY, MESSAGING_MANAGEMENT_MICROSERVICE_NAME } from './constants';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class MessagingManagementGuard {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.userService = inject(UserService);
|
|
9
|
+
this.featureService = inject(FeatureService);
|
|
10
|
+
this.applicationService = inject(ApplicationService);
|
|
11
|
+
this.cachedResult = null;
|
|
12
|
+
}
|
|
13
|
+
async canActivate() {
|
|
14
|
+
if (this.cachedResult !== null) {
|
|
15
|
+
return this.cachedResult;
|
|
16
|
+
}
|
|
17
|
+
const currentUser = (await this.userService.current()).data;
|
|
18
|
+
const hasRequiredRoles = this.userService.hasAnyRole(currentUser, [
|
|
19
|
+
Permissions.ROLE_TENANT_STATISTICS_READ,
|
|
20
|
+
Permissions.ROLE_TENANT_MANAGEMENT_ADMIN
|
|
21
|
+
]);
|
|
22
|
+
const featureEnabled = await this.featureService
|
|
23
|
+
.detail(MESSAGING_MANAGEMENT_FEATURE_KEY)
|
|
24
|
+
.then(({ data }) => data.active)
|
|
25
|
+
.catch(() => false);
|
|
26
|
+
const microserviceSubscribed = await this.applicationService
|
|
27
|
+
.isAvailable(MESSAGING_MANAGEMENT_MICROSERVICE_NAME)
|
|
28
|
+
.then(({ data: subscribed }) => subscribed)
|
|
29
|
+
.catch(() => false);
|
|
30
|
+
this.cachedResult = hasRequiredRoles && featureEnabled && microserviceSubscribed;
|
|
31
|
+
return this.cachedResult;
|
|
32
|
+
}
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingManagementGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
34
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingManagementGuard, providedIn: 'root' }); }
|
|
35
|
+
}
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingManagementGuard, decorators: [{
|
|
37
|
+
type: Injectable,
|
|
38
|
+
args: [{ providedIn: 'root' }]
|
|
39
|
+
}] });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLW1hbmFnZW1lbnQuZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9tZXNzYWdpbmctbWFuYWdlbWVudC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUUsT0FBTyxFQUNMLGdDQUFnQyxFQUNoQyxzQ0FBc0MsRUFDdkMsTUFBTSxhQUFhLENBQUM7O0FBR3JCLE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFFVSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVoRCxpQkFBWSxHQUFtQixJQUFJLENBQUM7S0EyQjdDO0lBekJDLEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMzQixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDaEUsV0FBVyxDQUFDLDJCQUEyQjtZQUN2QyxXQUFXLENBQUMsNEJBQTRCO1NBQ3pDLENBQUMsQ0FBQztRQUVILE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWM7YUFDN0MsTUFBTSxDQUFDLGdDQUFnQyxDQUFDO2FBQ3hDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDL0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRCLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCO2FBQ3pELFdBQVcsQ0FBQyxzQ0FBc0MsQ0FBQzthQUNuRCxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDO2FBQzFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0QixJQUFJLENBQUMsWUFBWSxHQUFHLGdCQUFnQixJQUFJLGNBQWMsSUFBSSxzQkFBc0IsQ0FBQztRQUVqRixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQzsrR0EvQlUsd0JBQXdCO21IQUF4Qix3QkFBd0IsY0FEWCxNQUFNOzs0RkFDbkIsd0JBQXdCO2tCQURwQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FuQWN0aXZhdGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvbnMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSwgRmVhdHVyZVNlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgTUVTU0FHSU5HX01BTkFHRU1FTlRfRkVBVFVSRV9LRVksXG4gIE1FU1NBR0lOR19NQU5BR0VNRU5UX01JQ1JPU0VSVklDRV9OQU1FXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdpbmdNYW5hZ2VtZW50R3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG4gIHByaXZhdGUgdXNlclNlcnZpY2UgPSBpbmplY3QoVXNlclNlcnZpY2UpO1xuICBwcml2YXRlIGZlYXR1cmVTZXJ2aWNlID0gaW5qZWN0KEZlYXR1cmVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoQXBwbGljYXRpb25TZXJ2aWNlKTtcblxuICBwcml2YXRlIGNhY2hlZFJlc3VsdDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gIGFzeW5jIGNhbkFjdGl2YXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmNhY2hlZFJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gKGF3YWl0IHRoaXMudXNlclNlcnZpY2UuY3VycmVudCgpKS5kYXRhO1xuICAgIGNvbnN0IGhhc1JlcXVpcmVkUm9sZXMgPSB0aGlzLnVzZXJTZXJ2aWNlLmhhc0FueVJvbGUoY3VycmVudFVzZXIsIFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfVEVOQU5UX1NUQVRJU1RJQ1NfUkVBRCxcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfVEVOQU5UX01BTkFHRU1FTlRfQURNSU5cbiAgICBdKTtcblxuICAgIGNvbnN0IGZlYXR1cmVFbmFibGVkID0gYXdhaXQgdGhpcy5mZWF0dXJlU2VydmljZVxuICAgICAgLmRldGFpbChNRVNTQUdJTkdfTUFOQUdFTUVOVF9GRUFUVVJFX0tFWSlcbiAgICAgIC50aGVuKCh7IGRhdGEgfSkgPT4gZGF0YS5hY3RpdmUpXG4gICAgICAuY2F0Y2goKCkgPT4gZmFsc2UpO1xuXG4gICAgY29uc3QgbWljcm9zZXJ2aWNlU3Vic2NyaWJlZCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlXG4gICAgICAuaXNBdmFpbGFibGUoTUVTU0FHSU5HX01BTkFHRU1FTlRfTUlDUk9TRVJWSUNFX05BTUUpXG4gICAgICAudGhlbigoeyBkYXRhOiBzdWJzY3JpYmVkIH0pID0+IHN1YnNjcmliZWQpXG4gICAgICAuY2F0Y2goKCkgPT4gZmFsc2UpO1xuXG4gICAgdGhpcy5jYWNoZWRSZXN1bHQgPSBoYXNSZXF1aXJlZFJvbGVzICYmIGZlYXR1cmVFbmFibGVkICYmIG1pY3Jvc2VydmljZVN1YnNjcmliZWQ7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRSZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { hookNavigator, hookRoute, hookTab } from '@c8y/ngx-components';
|
|
3
|
+
import { MessagingNavigatorNodeFactory } from './navigator/messaging-navigator-factory';
|
|
4
|
+
import { NamespaceListComponent } from './messaging/namespace-list/namespace-list.component';
|
|
5
|
+
import { TopicListViewComponent } from './messaging/topic/topic-list-view.component';
|
|
6
|
+
import { TopicSubscribersViewComponent } from './messaging/topic/topic-subscribers-view/topic-subscribers-view.component';
|
|
7
|
+
import { TopicDetailsTabFactory } from './navigator/topic-details-tab.factory';
|
|
8
|
+
import { basePath } from './constants';
|
|
9
|
+
import { MessagingManagementGuard } from './messaging-management.guard';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
export class MessagingManagementModule {
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
13
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: MessagingManagementModule }); }
|
|
14
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingManagementModule, providers: [
|
|
15
|
+
hookRoute([
|
|
16
|
+
{
|
|
17
|
+
path: basePath,
|
|
18
|
+
component: NamespaceListComponent,
|
|
19
|
+
canActivate: [MessagingManagementGuard]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
path: basePath + '/namespace/:namespace',
|
|
23
|
+
component: TopicListViewComponent,
|
|
24
|
+
canActivate: [MessagingManagementGuard]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
path: basePath + '/namespace/:namespace/topic/:topic',
|
|
28
|
+
redirectTo: basePath + '/namespace/:namespace/topic/:topic/subscribers',
|
|
29
|
+
pathMatch: 'full'
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
path: basePath + '/namespace/:namespace/topic/:topic/subscribers',
|
|
33
|
+
component: TopicSubscribersViewComponent,
|
|
34
|
+
canActivate: [MessagingManagementGuard]
|
|
35
|
+
}
|
|
36
|
+
]),
|
|
37
|
+
hookTab(TopicDetailsTabFactory),
|
|
38
|
+
hookNavigator(MessagingNavigatorNodeFactory)
|
|
39
|
+
] }); }
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingManagementModule, decorators: [{
|
|
42
|
+
type: NgModule,
|
|
43
|
+
args: [{
|
|
44
|
+
providers: [
|
|
45
|
+
hookRoute([
|
|
46
|
+
{
|
|
47
|
+
path: basePath,
|
|
48
|
+
component: NamespaceListComponent,
|
|
49
|
+
canActivate: [MessagingManagementGuard]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
path: basePath + '/namespace/:namespace',
|
|
53
|
+
component: TopicListViewComponent,
|
|
54
|
+
canActivate: [MessagingManagementGuard]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
path: basePath + '/namespace/:namespace/topic/:topic',
|
|
58
|
+
redirectTo: basePath + '/namespace/:namespace/topic/:topic/subscribers',
|
|
59
|
+
pathMatch: 'full'
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
path: basePath + '/namespace/:namespace/topic/:topic/subscribers',
|
|
63
|
+
component: TopicSubscribersViewComponent,
|
|
64
|
+
canActivate: [MessagingManagementGuard]
|
|
65
|
+
}
|
|
66
|
+
]),
|
|
67
|
+
hookTab(TopicDetailsTabFactory),
|
|
68
|
+
hookNavigator(MessagingNavigatorNodeFactory)
|
|
69
|
+
]
|
|
70
|
+
}]
|
|
71
|
+
}] });
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLW1hbmFnZW1lbnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvbWVzc2FnaW5nLW1hbmFnZW1lbnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFDMUgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUE4QnhFLE1BQU0sT0FBTyx5QkFBeUI7K0dBQXpCLHlCQUF5QjtnSEFBekIseUJBQXlCO2dIQUF6Qix5QkFBeUIsYUEzQnpCO1lBQ1QsU0FBUyxDQUFDO2dCQUNSO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLFNBQVMsRUFBRSxzQkFBc0I7b0JBQ2pDLFdBQVcsRUFBRSxDQUFDLHdCQUF3QixDQUFDO2lCQUN4QztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsUUFBUSxHQUFHLHVCQUF1QjtvQkFDeEMsU0FBUyxFQUFFLHNCQUFzQjtvQkFDakMsV0FBVyxFQUFFLENBQUMsd0JBQXdCLENBQUM7aUJBQ3hDO2dCQUNEO29CQUNFLElBQUksRUFBRSxRQUFRLEdBQUcsb0NBQW9DO29CQUNyRCxVQUFVLEVBQUUsUUFBUSxHQUFHLGdEQUFnRDtvQkFDdkUsU0FBUyxFQUFFLE1BQU07aUJBQ2xCO2dCQUNEO29CQUNFLElBQUksRUFBRSxRQUFRLEdBQUcsZ0RBQWdEO29CQUNqRSxTQUFTLEVBQUUsNkJBQTZCO29CQUN4QyxXQUFXLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztpQkFDeEM7YUFDRixDQUFDO1lBQ0YsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1lBQy9CLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQztTQUM3Qzs7NEZBRVUseUJBQXlCO2tCQTVCckMsUUFBUTttQkFBQztvQkFDUixTQUFTLEVBQUU7d0JBQ1QsU0FBUyxDQUFDOzRCQUNSO2dDQUNFLElBQUksRUFBRSxRQUFRO2dDQUNkLFNBQVMsRUFBRSxzQkFBc0I7Z0NBQ2pDLFdBQVcsRUFBRSxDQUFDLHdCQUF3QixDQUFDOzZCQUN4Qzs0QkFDRDtnQ0FDRSxJQUFJLEVBQUUsUUFBUSxHQUFHLHVCQUF1QjtnQ0FDeEMsU0FBUyxFQUFFLHNCQUFzQjtnQ0FDakMsV0FBVyxFQUFFLENBQUMsd0JBQXdCLENBQUM7NkJBQ3hDOzRCQUNEO2dDQUNFLElBQUksRUFBRSxRQUFRLEdBQUcsb0NBQW9DO2dDQUNyRCxVQUFVLEVBQUUsUUFBUSxHQUFHLGdEQUFnRDtnQ0FDdkUsU0FBUyxFQUFFLE1BQU07NkJBQ2xCOzRCQUNEO2dDQUNFLElBQUksRUFBRSxRQUFRLEdBQUcsZ0RBQWdEO2dDQUNqRSxTQUFTLEVBQUUsNkJBQTZCO2dDQUN4QyxXQUFXLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQzs2QkFDeEM7eUJBQ0YsQ0FBQzt3QkFDRixPQUFPLENBQUMsc0JBQXNCLENBQUM7d0JBQy9CLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQztxQkFDN0M7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaG9va05hdmlnYXRvciwgaG9va1JvdXRlLCBob29rVGFiIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNZXNzYWdpbmdOYXZpZ2F0b3JOb2RlRmFjdG9yeSB9IGZyb20gJy4vbmF2aWdhdG9yL21lc3NhZ2luZy1uYXZpZ2F0b3ItZmFjdG9yeSc7XG5pbXBvcnQgeyBOYW1lc3BhY2VMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9tZXNzYWdpbmcvbmFtZXNwYWNlLWxpc3QvbmFtZXNwYWNlLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFRvcGljTGlzdFZpZXdDb21wb25lbnQgfSBmcm9tICcuL21lc3NhZ2luZy90b3BpYy90b3BpYy1saXN0LXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IFRvcGljU3Vic2NyaWJlcnNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tZXNzYWdpbmcvdG9waWMvdG9waWMtc3Vic2NyaWJlcnMtdmlldy90b3BpYy1zdWJzY3JpYmVycy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb3BpY0RldGFpbHNUYWJGYWN0b3J5IH0gZnJvbSAnLi9uYXZpZ2F0b3IvdG9waWMtZGV0YWlscy10YWIuZmFjdG9yeSc7XG5pbXBvcnQgeyBiYXNlUGF0aCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1lc3NhZ2luZ01hbmFnZW1lbnRHdWFyZCB9IGZyb20gJy4vbWVzc2FnaW5nLW1hbmFnZW1lbnQuZ3VhcmQnO1xuXG5ATmdNb2R1bGUoe1xuICBwcm92aWRlcnM6IFtcbiAgICBob29rUm91dGUoW1xuICAgICAge1xuICAgICAgICBwYXRoOiBiYXNlUGF0aCxcbiAgICAgICAgY29tcG9uZW50OiBOYW1lc3BhY2VMaXN0Q29tcG9uZW50LFxuICAgICAgICBjYW5BY3RpdmF0ZTogW01lc3NhZ2luZ01hbmFnZW1lbnRHdWFyZF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhdGg6IGJhc2VQYXRoICsgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZScsXG4gICAgICAgIGNvbXBvbmVudDogVG9waWNMaXN0Vmlld0NvbXBvbmVudCxcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtNZXNzYWdpbmdNYW5hZ2VtZW50R3VhcmRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYXRoOiBiYXNlUGF0aCArICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvdG9waWMvOnRvcGljJyxcbiAgICAgICAgcmVkaXJlY3RUbzogYmFzZVBhdGggKyAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3RvcGljLzp0b3BpYy9zdWJzY3JpYmVycycsXG4gICAgICAgIHBhdGhNYXRjaDogJ2Z1bGwnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYXRoOiBiYXNlUGF0aCArICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvdG9waWMvOnRvcGljL3N1YnNjcmliZXJzJyxcbiAgICAgICAgY29tcG9uZW50OiBUb3BpY1N1YnNjcmliZXJzVmlld0NvbXBvbmVudCxcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtNZXNzYWdpbmdNYW5hZ2VtZW50R3VhcmRdXG4gICAgICB9XG4gICAgXSksXG4gICAgaG9va1RhYihUb3BpY0RldGFpbHNUYWJGYWN0b3J5KSxcbiAgICBob29rTmF2aWdhdG9yKE1lc3NhZ2luZ05hdmlnYXRvck5vZGVGYWN0b3J5KVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2luZ01hbmFnZW1lbnRNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { AppStateService, gettext, NavigatorNode, NavigatorService } from '@c8y/ngx-components';
|
|
3
|
+
import { NAMESPACE_PROPS } from '../utils/namespace-props';
|
|
4
|
+
import { MessagingNamespacesService } from '../api/services/messaging-namespaces.service';
|
|
5
|
+
import { catchError, filter, map, shareReplay, switchMap, take } from 'rxjs/operators';
|
|
6
|
+
import { from } from 'rxjs';
|
|
7
|
+
import { MessagingManagementGuard } from '../messaging-management.guard';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
const baseNode = new NavigatorNode({
|
|
10
|
+
label: gettext('Messaging service'),
|
|
11
|
+
icon: 'arrows-dotted-left-right',
|
|
12
|
+
path: 'monitoring/messaging-service',
|
|
13
|
+
priority: 100,
|
|
14
|
+
parent: {
|
|
15
|
+
label: gettext('Monitoring'),
|
|
16
|
+
icon: 'monitoring'
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
export class MessagingNavigatorNodeFactory {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.appState = inject(AppStateService);
|
|
22
|
+
this.navigatorService = inject(NavigatorService);
|
|
23
|
+
this.namespacesService = inject(MessagingNamespacesService);
|
|
24
|
+
this.guard = inject(MessagingManagementGuard);
|
|
25
|
+
this.currentTenantId = this.appState.currentTenant.pipe(filter(currentTenant => !!currentTenant), map(currentTenant => currentTenant.name), take(1));
|
|
26
|
+
this.navigatorNode$ = from(this.guard.canActivate()).pipe(filter(allowed => allowed), switchMap(() => this.currentTenantId), switchMap(currentTenantId => this.namespacesService.getNamespaces(currentTenantId)), map(({ namespaces }) => {
|
|
27
|
+
if (!namespaces?.length) {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
namespaces.forEach(namespace => {
|
|
31
|
+
const label = NAMESPACE_PROPS[namespace.name]?.label || namespace.name;
|
|
32
|
+
const childNode = new NavigatorNode({
|
|
33
|
+
label,
|
|
34
|
+
path: `monitoring/messaging-service/namespace/${namespace.name}`,
|
|
35
|
+
icon: NAMESPACE_PROPS[namespace.name]?.icon,
|
|
36
|
+
routerLinkExact: false
|
|
37
|
+
});
|
|
38
|
+
baseNode.add(childNode);
|
|
39
|
+
});
|
|
40
|
+
return baseNode;
|
|
41
|
+
}), catchError(() => {
|
|
42
|
+
return [];
|
|
43
|
+
}), shareReplay(1));
|
|
44
|
+
}
|
|
45
|
+
get() {
|
|
46
|
+
return this.navigatorNode$;
|
|
47
|
+
}
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingNavigatorNodeFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
49
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingNavigatorNodeFactory, providedIn: 'root' }); }
|
|
50
|
+
}
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingNavigatorNodeFactory, decorators: [{
|
|
52
|
+
type: Injectable,
|
|
53
|
+
args: [{ providedIn: 'root' }]
|
|
54
|
+
}], ctorParameters: () => [] });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLW5hdmlnYXRvci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvbmF2aWdhdG9yL21lc3NhZ2luZy1uYXZpZ2F0b3ItZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsZUFBZSxFQUVmLE9BQU8sRUFDUCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxJQUFJLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBRXpFLE1BQU0sUUFBUSxHQUFHLElBQUksYUFBYSxDQUFDO0lBQ2pDLEtBQUssRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUM7SUFDbkMsSUFBSSxFQUFFLDBCQUEwQjtJQUNoQyxJQUFJLEVBQUUsOEJBQThCO0lBQ3BDLFFBQVEsRUFBRSxHQUFHO0lBQ2IsTUFBTSxFQUFFO1FBQ04sS0FBSyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDNUIsSUFBSSxFQUFFLFlBQVk7S0FDbkI7Q0FDRixDQUFDLENBQUM7QUFHSCxNQUFNLE9BQU8sNkJBQTZCO0lBY3hDO1FBYkEsYUFBUSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxzQkFBaUIsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN2RCxVQUFLLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFekMsb0JBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ2hELE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFDeEMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQztRQUtBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3ZELE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUMxQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUNyQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQ25GLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUM3QixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUN2RSxNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBQztvQkFDbEMsS0FBSztvQkFDTCxJQUFJLEVBQUUsMENBQTBDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQ2hFLElBQUksRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUk7b0JBQzNDLGVBQWUsRUFBRSxLQUFLO2lCQUN2QixDQUFDLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELEdBQUc7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQzsrR0E1Q1UsNkJBQTZCO21IQUE3Qiw2QkFBNkIsY0FEaEIsTUFBTTs7NEZBQ25CLDZCQUE2QjtrQkFEekMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcFN0YXRlU2VydmljZSxcbiAgRXh0ZW5zaW9uRmFjdG9yeSxcbiAgZ2V0dGV4dCxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE5BTUVTUEFDRV9QUk9QUyB9IGZyb20gJy4uL3V0aWxzL25hbWVzcGFjZS1wcm9wcyc7XG5pbXBvcnQgeyBNZXNzYWdpbmdOYW1lc3BhY2VzU2VydmljZSB9IGZyb20gJy4uL2FwaS9zZXJ2aWNlcy9tZXNzYWdpbmctbmFtZXNwYWNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVzc2FnaW5nTWFuYWdlbWVudEd1YXJkIH0gZnJvbSAnLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQuZ3VhcmQnO1xuXG5jb25zdCBiYXNlTm9kZSA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgbGFiZWw6IGdldHRleHQoJ01lc3NhZ2luZyBzZXJ2aWNlJyksXG4gIGljb246ICdhcnJvd3MtZG90dGVkLWxlZnQtcmlnaHQnLFxuICBwYXRoOiAnbW9uaXRvcmluZy9tZXNzYWdpbmctc2VydmljZScsXG4gIHByaW9yaXR5OiAxMDAsXG4gIHBhcmVudDoge1xuICAgIGxhYmVsOiBnZXR0ZXh0KCdNb25pdG9yaW5nJyksXG4gICAgaWNvbjogJ21vbml0b3JpbmcnXG4gIH1cbn0pO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2luZ05hdmlnYXRvck5vZGVGYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaW9uRmFjdG9yeTxOYXZpZ2F0b3JOb2RlPiB7XG4gIGFwcFN0YXRlID0gaW5qZWN0KEFwcFN0YXRlU2VydmljZSk7XG4gIG5hdmlnYXRvclNlcnZpY2UgPSBpbmplY3QoTmF2aWdhdG9yU2VydmljZSk7XG4gIG5hbWVzcGFjZXNTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2luZ05hbWVzcGFjZXNTZXJ2aWNlKTtcbiAgZ3VhcmQgPSBpbmplY3QoTWVzc2FnaW5nTWFuYWdlbWVudEd1YXJkKTtcblxuICBjdXJyZW50VGVuYW50SWQgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRUZW5hbnQucGlwZShcbiAgICBmaWx0ZXIoY3VycmVudFRlbmFudCA9PiAhIWN1cnJlbnRUZW5hbnQpLFxuICAgIG1hcChjdXJyZW50VGVuYW50ID0+IGN1cnJlbnRUZW5hbnQubmFtZSksXG4gICAgdGFrZSgxKVxuICApO1xuXG4gIG5hdmlnYXRvck5vZGUkOiBPYnNlcnZhYmxlPE5hdmlnYXRvck5vZGUgfCBOYXZpZ2F0b3JOb2RlW10+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubmF2aWdhdG9yTm9kZSQgPSBmcm9tKHRoaXMuZ3VhcmQuY2FuQWN0aXZhdGUoKSkucGlwZShcbiAgICAgIGZpbHRlcihhbGxvd2VkID0+IGFsbG93ZWQpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY3VycmVudFRlbmFudElkKSxcbiAgICAgIHN3aXRjaE1hcChjdXJyZW50VGVuYW50SWQgPT4gdGhpcy5uYW1lc3BhY2VzU2VydmljZS5nZXROYW1lc3BhY2VzKGN1cnJlbnRUZW5hbnRJZCkpLFxuICAgICAgbWFwKCh7IG5hbWVzcGFjZXMgfSkgPT4ge1xuICAgICAgICBpZiAoIW5hbWVzcGFjZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lc3BhY2VzLmZvckVhY2gobmFtZXNwYWNlID0+IHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IE5BTUVTUEFDRV9QUk9QU1tuYW1lc3BhY2UubmFtZV0/LmxhYmVsIHx8IG5hbWVzcGFjZS5uYW1lO1xuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgcGF0aDogYG1vbml0b3JpbmcvbWVzc2FnaW5nLXNlcnZpY2UvbmFtZXNwYWNlLyR7bmFtZXNwYWNlLm5hbWV9YCxcbiAgICAgICAgICAgIGljb246IE5BTUVTUEFDRV9QUk9QU1tuYW1lc3BhY2UubmFtZV0/Lmljb24sXG4gICAgICAgICAgICByb3V0ZXJMaW5rRXhhY3Q6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYmFzZU5vZGUuYWRkKGNoaWxkTm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYmFzZU5vZGU7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIGdldCgpOiBPYnNlcnZhYmxlPE5hdmlnYXRvck5vZGUgfCBOYXZpZ2F0b3JOb2RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3JOb2RlJDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { gettext } from '@c8y/ngx-components';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { basePath } from '../constants';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
export class TopicDetailsTabFactory {
|
|
8
|
+
constructor(router) {
|
|
9
|
+
this.router = router;
|
|
10
|
+
}
|
|
11
|
+
get() {
|
|
12
|
+
const pattern = /\/namespace\/(.+)\/topic\/(.+)\/subscribers$/;
|
|
13
|
+
const matches = this.router.url.match(pattern);
|
|
14
|
+
if (matches) {
|
|
15
|
+
const namespace = matches[1];
|
|
16
|
+
const topic = matches[2];
|
|
17
|
+
return [
|
|
18
|
+
{
|
|
19
|
+
path: basePath + `/namespace/${namespace}/topic/${topic}/subscribers`,
|
|
20
|
+
priority: 500,
|
|
21
|
+
label: gettext('Subscribers')
|
|
22
|
+
}
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicDetailsTabFactory, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicDetailsTabFactory }); }
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopicDetailsTabFactory, decorators: [{
|
|
31
|
+
type: Injectable
|
|
32
|
+
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMtZGV0YWlscy10YWIuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L25hdmlnYXRvci90b3BpYy1kZXRhaWxzLXRhYi5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFHeEMsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUFtQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFHLENBQUM7SUFFckMsR0FBRztRQUNELE1BQU0sT0FBTyxHQUFHLDhDQUE4QyxDQUFDO1FBQy9ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixPQUFPO2dCQUNMO29CQUNFLElBQUksRUFBRSxRQUFRLEdBQUcsY0FBYyxTQUFTLFVBQVUsS0FBSyxjQUFjO29CQUNyRSxRQUFRLEVBQUUsR0FBRztvQkFDYixLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQztpQkFDOUI7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzsrR0FuQlUsc0JBQXNCO21IQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXR0ZXh0LCBUYWJGYWN0b3J5IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYmFzZVBhdGggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVG9waWNEZXRhaWxzVGFiRmFjdG9yeSBpbXBsZW1lbnRzIFRhYkZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgZ2V0KCkge1xuICAgIGNvbnN0IHBhdHRlcm4gPSAvXFwvbmFtZXNwYWNlXFwvKC4rKVxcL3RvcGljXFwvKC4rKVxcL3N1YnNjcmliZXJzJC87XG4gICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMucm91dGVyLnVybC5tYXRjaChwYXR0ZXJuKTtcblxuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICBjb25zdCBuYW1lc3BhY2UgPSBtYXRjaGVzWzFdO1xuICAgICAgY29uc3QgdG9waWMgPSBtYXRjaGVzWzJdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6IGJhc2VQYXRoICsgYC9uYW1lc3BhY2UvJHtuYW1lc3BhY2V9L3RvcGljLyR7dG9waWN9L3N1YnNjcmliZXJzYCxcbiAgICAgICAgICBwcmlvcml0eTogNTAwLFxuICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdTdWJzY3JpYmVycycpXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl19
|