@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
1 lines • 24.2 kB
Source Map (JSON)
{"version":3,"file":"c8y-ngx-components-data-broker.mjs","sources":["../../data-broker/model/data-broker.subscription.model.ts","../../data-broker/factories/data-broker.subscription.factory.ts","../../data-broker/data-broker-subscriptions.service.ts","../../data-broker/data-broker.module.ts","../../data-broker/ng1/downgraded.services.ts","../../data-broker/ng1/index.ts","../../data-broker/c8y-ngx-components-data-broker.ts"],"sourcesContent":["import { IUser } from '@c8y/client';\n\nexport enum DataBrokerConnectorStatus {\n ACTIVE = 'ACTIVE',\n SUSPENDED = 'SUSPENDED',\n WAITING = 'WAITING'\n}\n\nexport interface SubscriptionStatusViewModel {\n icon: string;\n textClass: string;\n text: string;\n iconClass?: string;\n}\n\nexport interface SubscriptionViewModel {\n userEnabled: boolean;\n visibleUserStatus: string;\n userId: string;\n status: SubscriptionStatusViewModel;\n id: string;\n _c8y_BrokerSource: any;\n}\n\nexport interface NewDeviceRequestStatus {\n name: string;\n label: string;\n value: string;\n}\n\nexport interface SubscriptionsViewModelNg1 {\n init(): void;\n reload(): void;\n destroy(): void;\n}\n\nexport type UserStatusPartial = Required<Pick<IUser, 'id' | 'enabled'>>;\n","import { DeviceRegistrationStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport {\n SubscriptionStatusViewModel,\n DataBrokerConnectorStatus,\n NewDeviceRequestStatus\n} from '../model/data-broker.subscription.model';\n\nexport class SubscriptionStatusViewModelFactory {\n build(status: DataBrokerConnectorStatus): SubscriptionStatusViewModel {\n let statusViewModel = null;\n switch (status) {\n case DataBrokerConnectorStatus.ACTIVE: // dataBrokerConnectorsSvc.STATUS.ACTIVE.value\n statusViewModel = {\n icon: 'check-circle',\n textClass: 'text-success',\n text: gettext('Active`data broker subscription`')\n };\n break;\n case DataBrokerConnectorStatus.SUSPENDED: // dataBrokerConnectorsSvc.STATUS.SUSPENDED.value\n statusViewModel = {\n icon: 'exclamation-triangle',\n textClass: 'text-warning',\n text: gettext('Inactive`data broker subscription`')\n };\n break;\n case DataBrokerConnectorStatus.WAITING: // dataBrokerConnectorsSvc.STATUS.WAITING.value\n statusViewModel = {\n icon: 'spinner',\n iconClass: 'icon-spin',\n textClass: 'text-warning',\n text: gettext('Waiting`data broker subscription`')\n };\n break;\n default:\n break;\n }\n return statusViewModel;\n }\n}\n\nexport class NewDeviceRequestStatusFactory {\n build(status: DeviceRegistrationStatus): NewDeviceRequestStatus {\n let result = null;\n switch (status) {\n case DeviceRegistrationStatus.WAITING_FOR_CONNECTION:\n result = {\n name: DeviceRegistrationStatus.WAITING_FOR_CONNECTION,\n label: gettext('Waiting for connection`data broker subscription`'),\n value: DeviceRegistrationStatus.WAITING_FOR_CONNECTION\n };\n break;\n case DeviceRegistrationStatus.PENDING_ACCEPTANCE:\n result = {\n name: DeviceRegistrationStatus.PENDING_ACCEPTANCE,\n label: gettext('Pending acceptance`data broker subscription`'),\n value: DeviceRegistrationStatus.PENDING_ACCEPTANCE\n };\n break;\n case DeviceRegistrationStatus.ACCEPTED:\n result = {\n name: DeviceRegistrationStatus.ACCEPTED,\n label: gettext('Accepted`data broker subscription`'),\n value: DeviceRegistrationStatus.ACCEPTED\n };\n case DeviceRegistrationStatus.BLOCKED:\n result = {\n name: DeviceRegistrationStatus.BLOCKED,\n label: gettext('Blocked`data broker subscription`'),\n value: DeviceRegistrationStatus.BLOCKED\n };\n break;\n }\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n IDeviceRegistration,\n IManagedObject,\n IUser,\n UserService,\n InventoryService,\n DeviceRegistrationService,\n DeviceRegistrationStatus\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { get, pick, set } from 'lodash-es';\nimport { BehaviorSubject, interval, merge, Observable, Subject, Subscription } from 'rxjs';\nimport {\n ManagedObjectRealtimeService,\n DeviceBootstrapRealtimeService,\n AppStateService\n} from '@c8y/ngx-components';\nimport {\n SubscriptionStatusViewModel,\n DataBrokerConnectorStatus,\n SubscriptionViewModel,\n SubscriptionsViewModelNg1\n} from './model/data-broker.subscription.model';\nimport {\n SubscriptionStatusViewModelFactory,\n NewDeviceRequestStatusFactory\n} from './factories/data-broker.subscription.factory';\nimport { distinctUntilChanged, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';\n\n@Injectable()\nexport class DataBrokerSubscriptionsService {\n private readonly FRAGMENT_TYPE: string = 'c8y_BrokerSource';\n private readonly NEW_DEVICE_REQUEST_TYPE: string = 'c8y_DataBroker';\n /**\n * inventory polling interval\n */\n private readonly POLL_INTERVAL_FOR_SUBSCRIPTIONS = 15000;\n /**\n * produce status fragment for subscription\n */\n private subscriptionStatusViewModelFactory: SubscriptionStatusViewModelFactory;\n /**\n * produce request status view model\n */\n private newDeviceRequestStatusViewModelFactory: NewDeviceRequestStatusFactory;\n\n private moRealtimeSubscriptionsMap = new Map<string, Subscription>();\n\n private subscriptionsCount;\n\n private refreshPendingTrigger$ = new BehaviorSubject<void>(null);\n\n filters = {\n fragmentType: this.FRAGMENT_TYPE,\n pageSize: 2000\n };\n\n /**\n * legacy enum values\n */\n NEW_DEVICE_REQUEST_STATUS;\n\n constructor(\n private moRealtimeService: ManagedObjectRealtimeService,\n private deviceBootstrapRealtimeService: DeviceBootstrapRealtimeService,\n private inventoryService: InventoryService,\n private userService: UserService,\n private deviceRegistrationService: DeviceRegistrationService,\n private appStateService: AppStateService\n ) {\n this.subscriptionStatusViewModelFactory = new SubscriptionStatusViewModelFactory();\n this.newDeviceRequestStatusViewModelFactory = new NewDeviceRequestStatusFactory();\n\n // Build legacy enum structure for ng1 component\n this.NEW_DEVICE_REQUEST_STATUS = this.generateDeviceRequestStatusEnum(\n this.newDeviceRequestStatusViewModelFactory\n );\n }\n\n async getBrokerSubscriptionsList(): Promise<IManagedObject[]> {\n return (await this.inventoryService.list(this.filters)).data;\n }\n\n /**\n * User status text (legacy compatibility)\n */\n getVisibleUserStatusText(user): string {\n return user.enabled ? gettext('active`subscription`') : gettext('inactive`subscription`');\n }\n\n async remove(subscription: SubscriptionViewModel) {\n // handle realtime unsubsribe\n if (this.moRealtimeSubscriptionsMap.has(subscription.id)) {\n this.moRealtimeSubscriptionsMap.get(subscription.id).unsubscribe();\n this.moRealtimeSubscriptionsMap.delete(subscription.id);\n }\n // handle removal\n const brokerSourceRenamed = `_${this.FRAGMENT_TYPE}`;\n set(subscription, this.FRAGMENT_TYPE, null);\n\n return await this.inventoryService.update(\n pick(subscription, ['id', this.FRAGMENT_TYPE, brokerSourceRenamed])\n );\n }\n\n async setStatus(\n subscription: SubscriptionViewModel,\n enabled: boolean\n ): Promise<SubscriptionViewModel> {\n const userData = (\n await this.userService.update({\n id: subscription.userId,\n enabled\n } as Partial<IUser>)\n ).data;\n subscription.userEnabled = userData.enabled;\n subscription.visibleUserStatus = this.getVisibleUserStatusText(userData);\n return subscription;\n }\n\n /**\n * List of pending subscriptions\n */\n async listPendingBrokerSubscriptions(): Promise<IDeviceRegistration[]> {\n return (\n await this.deviceRegistrationService.list({\n pageSize: 2000,\n withTotalPages: true\n })\n ).data;\n }\n\n /**\n * Accept subscription\n */\n async accept(code: string): Promise<IDeviceRegistration> {\n return (await this.deviceRegistrationService.accept(code)).data;\n }\n\n /**\n * Discard subscription\n */\n async discard(code: string) {\n return await this.deviceRegistrationService.delete(code);\n }\n\n /**\n * Add new subscription\n */\n async create(code: string): Promise<IDeviceRegistration> {\n return (\n await this.deviceRegistrationService.create({\n id: code,\n type: this.NEW_DEVICE_REQUEST_TYPE\n })\n ).data;\n }\n\n getForNg1({\n pollingInterval,\n onPendingSubscriptions,\n onExistingSubscriptions,\n onMoUpdate\n }): SubscriptionsViewModelNg1 {\n const reload$ = new Subject<void>();\n const destroy$ = new Subject<void>();\n const ready$ = new Subject<void>();\n\n const unsubscribeRealtime = () => {\n const moRealtimeSubscriptionIterator = this.moRealtimeSubscriptionsMap.keys();\n let key = moRealtimeSubscriptionIterator.next().value as string;\n while (this.moRealtimeSubscriptionsMap.has(key)) {\n this.moRealtimeSubscriptionsMap.get(key).unsubscribe();\n this.moRealtimeSubscriptionsMap.delete(key as string);\n key = moRealtimeSubscriptionIterator.next().value as string;\n }\n };\n\n const userInitialized$ = this.appStateService.currentUser.pipe(\n filter(currentUser => currentUser !== null)\n );\n const triggers = merge(reload$, ready$);\n const pendingSubscriptions$: Observable<SubscriptionViewModel[]> = merge(\n triggers,\n this.deviceBootstrapRealtimeService.onAll$(),\n this.refreshPendingTrigger$\n ).pipe(\n switchMap(() => userInitialized$),\n switchMap(() => this.listPendingBrokerSubscriptions()),\n map(pendingSubscriptions =>\n this.convertDeviceRegistrationsToSubscriptionViewModels(pendingSubscriptions)\n ),\n takeUntil(destroy$)\n );\n const existingSubscriptions$: Observable<SubscriptionViewModel[]> = merge(\n triggers,\n interval(pollingInterval)\n ).pipe(\n switchMap(() => userInitialized$),\n switchMap(() => this.getBrokerSubscriptionsList()),\n tap(mos => {\n if (this.subscriptionsCount !== mos.length) {\n this.refreshPendingTrigger$.next();\n this.subscriptionsCount = mos.length;\n }\n mos.forEach(mo => {\n if (!this.moRealtimeSubscriptionsMap.has(mo.id)) {\n const mortObservable = this.moRealtimeService\n .onUpdate$(mo.id)\n .pipe(switchMap(mo => this.convertToViewModel([mo])));\n this.moRealtimeSubscriptionsMap.set(mo.id, mortObservable.subscribe(onMoUpdate));\n }\n });\n }),\n distinctUntilChanged(),\n switchMap(mos => this.convertToViewModel(mos)),\n takeUntil(destroy$)\n );\n\n return {\n init() {\n pendingSubscriptions$.subscribe(onPendingSubscriptions);\n existingSubscriptions$.subscribe(onExistingSubscriptions);\n setTimeout(() => {\n ready$.next();\n }, 1000);\n },\n reload() {\n reload$.next();\n },\n destroy() {\n destroy$.next();\n destroy$.complete();\n unsubscribeRealtime();\n }\n };\n }\n\n private convertDeviceRegistrationsToSubscriptionViewModels(\n pendingSubscriptions\n ): SubscriptionViewModel[] {\n const convertedToViewModel = pendingSubscriptions\n .filter(deviceRequest => deviceRequest.type === this.NEW_DEVICE_REQUEST_TYPE)\n .map(deviceRequest => {\n return Object.assign({}, get(deviceRequest, 'customProperties.c8y_BrokerSource'), {\n status: this.newDeviceRequestStatusViewModelFactory.build(deviceRequest.status),\n type: deviceRequest.type,\n id: deviceRequest.id\n });\n });\n return convertedToViewModel;\n }\n\n private generateDeviceRequestStatusEnum(newDeviceRequestViewModelFactory) {\n const result = {};\n for (const status in DeviceRegistrationStatus) {\n Object.defineProperty(result, status, {\n enumerable: true,\n writable: false,\n configurable: false,\n value: newDeviceRequestViewModelFactory.build(status as any as DeviceRegistrationStatus)\n });\n }\n return result;\n }\n\n // Function maps data in suitable manner to have it easier to display. Used in service mainly for compatibility\n private async convertToViewModel(\n subscriptions: IManagedObject[]\n ): Promise<SubscriptionViewModel[]> {\n const viewModelSubscriptions = subscriptions.map(async subscription => {\n const { data: userDetails } = await this.userService.detail(subscription.owner);\n return {\n userEnabled: userDetails.enabled,\n visibleUserStatus: this.getVisibleUserStatusText(userDetails), //TODO:IIAR should be extracted to ngx pipe when the rest of data-broker is migrated\n userId: userDetails.id,\n status: this.getStatusViewModel(subscription.c8y_BrokerSource.status), //TODO:IIAR should be extracted to ngx pipe when the rest of data-broker is migrated\n id: subscription.id,\n _c8y_BrokerSource: subscription.c8y_BrokerSource\n } as SubscriptionViewModel;\n });\n return Promise.all(viewModelSubscriptions);\n }\n\n // Status decoration (legacy compatibility)\n private getStatusViewModel(status: DataBrokerConnectorStatus): SubscriptionStatusViewModel {\n return this.subscriptionStatusViewModelFactory.build(status);\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n CoreModule,\n ManagedObjectRealtimeService,\n DeviceBootstrapRealtimeService\n} from '@c8y/ngx-components';\nimport { DataBrokerSubscriptionsService } from './data-broker-subscriptions.service';\n\n@NgModule({\n declarations: [],\n imports: [CoreModule],\n providers: [\n DataBrokerSubscriptionsService,\n ManagedObjectRealtimeService,\n DeviceBootstrapRealtimeService\n ],\n exports: []\n})\nexport class DataBrokerModule {}\n","import { downgradeInjectable } from '@angular/upgrade/static';\nimport { DataBrokerSubscriptionsService } from '../data-broker-subscriptions.service';\nexport const dataBrokerSubscriptionsServiceDowngradedInjectable = downgradeInjectable(\n DataBrokerSubscriptionsService\n);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules';\nimport { dataBrokerSubscriptionsServiceDowngradedInjectable } from './downgraded.services';\n\nconst NAME_DATA_BROKER = 'c8y.upgrade.dataBroker';\n\nangular\n .module(NAME_DATA_BROKER, [])\n .service('c8yDataBrokerSubscriptionsService', dataBrokerSubscriptionsServiceDowngradedInjectable);\n\nexport const ng1ModulesDataBroker = [NAME_DATA_BROKER];\n\nregisterNgModule(ng1ModulesDataBroker);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}