@c8y/ngx-components 1021.71.3 → 1021.73.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-register-device.mjs","sources":["../../register-device/register-device.service.ts","../../register-device/extensible/base-device-registration.model.ts","../../register-device/bulk/bulk-device-registration-modal.component.ts","../../register-device/bulk/bulk-device-registration-modal.component.html","../../register-device/general/general-device-registration.component.ts","../../register-device/general/general-device-registration.component.html","../../register-device/general/general-device-registration.service.ts","../../register-device/general/general-device-registration-button.component.ts","../../register-device/general/general-device-registration-button.component.html","../../register-device/dropdown/register-device-extension.service.ts","../../register-device/dropdown/register-device-dropdown.component.ts","../../register-device/dropdown/register-device-dropdown.component.html","../../register-device/device-registration-view.component.ts","../../register-device/device-registration-view.component.html","../../register-device/register-device-navigation.factory.ts","../../register-device/extensible/base-extensible-device-registration.service.ts","../../register-device/extensible/single/extensible-device-registration.service.ts","../../register-device/extensible/single/extensible-device-registration-stepper.component.ts","../../register-device/extensible/single/extensible-device-registration-stepper.component.html","../../register-device/extensible/single/extensible-device-registration-modal.component.ts","../../register-device/extensible/single/extensible-device-registration-modal.component.html","../../register-device/extensible/single/extensible-device-registration-button.component.ts","../../register-device/extensible/single/extensible-device-registration-button.component.html","../../register-device/extensible/bulk/extensible-bulk-device-registration.service.ts","../../register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.ts","../../register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.html","../../register-device/extensible/bulk/extensible-bulk-device-registration-button.component.ts","../../register-device/extensible/bulk/extensible-bulk-device-registration-button.component.html","../../register-device/bulk/bulk-device-registration-button.component.ts","../../register-device/bulk/bulk-device-registration-button.component.html","../../register-device/register-device.factory.ts","../../register-device/register-device.module.ts","../../register-device/c8y-ngx-components-register-device.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n DeviceRegistrationService,\n DeviceRegistrationStatus,\n IDeviceRegistration,\n IDeviceRegistrationAccept,\n IDeviceRegistrationCreate,\n IDeviceRegistrationLimit,\n IResult,\n Paging\n} from '@c8y/client';\nimport { get, pick } from 'lodash-es';\nimport { BehaviorSubject, forkJoin, from, Observable, Subject } from 'rxjs';\nimport { AlertService, gettext, IRealtimeDeviceBootstrap } from '@c8y/ngx-components';\nimport { finalize, map, mergeMap, takeLast, takeUntil } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RegisterDeviceService {\n readonly _loading: Subject<boolean> = new Subject();\n readonly _limit: BehaviorSubject<IDeviceRegistrationLimit> = new BehaviorSubject({\n isReached: false\n });\n readonly _deviceRegistrationRequests: BehaviorSubject<{\n data: IDeviceRegistration[];\n paging?: Paging<IDeviceRegistration>;\n }> = new BehaviorSubject({ data: [] });\n readonly deviceRegistrationRequests$: Observable<{\n data: IDeviceRegistration[];\n paging?: Paging<IDeviceRegistration>;\n }> = this._deviceRegistrationRequests.asObservable();\n readonly loading$: Observable<boolean> = this._loading.asObservable();\n readonly limit$: Observable<IDeviceRegistrationLimit> = this._limit.asObservable();\n paging: Paging<IDeviceRegistration>;\n\n private readonly deviceRegUrl = '/deviceregistration';\n private endSubscriptions: Subject<void> = new Subject();\n\n constructor(\n private router: Router,\n private deviceRegService: DeviceRegistrationService,\n private alertService: AlertService\n ) {}\n\n isDeviceRegistration(): boolean {\n return get(this.router, 'url') === this.deviceRegUrl;\n }\n\n internalListUpdate(\n deviceRequests: IDeviceRegistration[],\n pagingObject?: Paging<IDeviceRegistration>\n ) {\n let { paging, data } = this._deviceRegistrationRequests.getValue();\n if (pagingObject) {\n paging = pagingObject;\n }\n data = [...data, ...deviceRequests].filter(deviceReq => deviceReq.type !== 'c8y_DataBroker');\n this._deviceRegistrationRequests.next({ data, paging });\n }\n\n onDeviceBootstrap(bsData: IRealtimeDeviceBootstrap) {\n const { id, status } = bsData;\n this._deviceRegistrationRequests.next({\n data: this.updateStatusById(id, status)\n });\n }\n\n list(pageSize = 100) {\n this._loading.next(true);\n this._deviceRegistrationRequests.next({ data: [], paging: undefined });\n\n from(this.deviceRegService.list({ pageSize, withTotalPages: true }))\n .pipe(\n takeUntil(this.endSubscriptions),\n finalize(() => this.limit())\n )\n .subscribe(\n res => {\n const { data, paging } = res;\n this.internalListUpdate(data, paging);\n this._loading.next(false);\n },\n err => {\n this._loading.next(false);\n this.alertService.addServerFailure(err);\n }\n );\n }\n\n createMultiple(newDeviceRequests: IDeviceRegistrationCreate[]) {\n if (newDeviceRequests && newDeviceRequests.length > 0) {\n this._loading.next(true);\n const newRequests$ = newDeviceRequests.map(element => {\n return from(\n this.deviceRegService.create(element).catch((err: IResult<IDeviceRegistration>) => ({\n res: err.res,\n data: { ...err.data, id: element.id }\n }))\n );\n });\n\n const groupedRequests: {\n success: IDeviceRegistration[];\n failed: IDeviceRegistration[];\n } = {\n success: [],\n failed: []\n };\n\n return forkJoin(newRequests$).pipe(\n mergeMap(resp =>\n resp.map(el => {\n el.res.ok\n ? groupedRequests.success.push(el.data)\n : groupedRequests.failed.push(el.data);\n return groupedRequests;\n })\n ),\n takeLast(1),\n finalize(() => {\n this.internalListUpdate(groupedRequests.success);\n this._loading.next(false);\n })\n );\n }\n }\n\n remove(id: string) {\n this._loading.next(true);\n from(this.deviceRegService.delete(id))\n .pipe(takeUntil(this.endSubscriptions))\n .subscribe(\n () => {\n this._deviceRegistrationRequests.next({\n data: this.removeDeviceRegistrationRequestById(id)\n });\n this._loading.next(false);\n this.alertService.success(gettext('Device registration cancelled.'));\n },\n err => {\n this._loading.next(false);\n this.alertService.addServerFailure(err);\n }\n );\n }\n\n accept(request: IDeviceRegistration) {\n this._loading.next(true);\n const payload = pick(request, ['id', 'securityToken']);\n from(this.deviceRegService.accept(payload))\n .pipe(takeUntil(this.endSubscriptions))\n .subscribe(\n () => {\n this._deviceRegistrationRequests.next({\n data: this.removeDeviceRegistrationRequestById(payload.id)\n });\n this.limit();\n this._loading.next(false);\n this.alertService.success(gettext('Device registration accepted.'));\n },\n err => {\n this._loading.next(false);\n this.alertService.addServerFailure(err);\n }\n );\n }\n\n acceptAll() {\n const acceptedDeviceRequests: IDeviceRegistrationAccept[] = [];\n const failedDeviceRequests: IDeviceRegistrationAccept[] = [];\n this._loading.next(true);\n\n from(this.deviceRegService.acceptAll())\n .pipe(\n takeUntil(this.endSubscriptions),\n map(({ data }) => {\n data.map(deviceRegistrationRequest => {\n if (deviceRegistrationRequest.successful) {\n acceptedDeviceRequests.push(deviceRegistrationRequest);\n this.removeDeviceRegistrationRequestById(deviceRegistrationRequest.id);\n } else {\n failedDeviceRequests.push(deviceRegistrationRequest);\n }\n });\n return data;\n }),\n finalize(() => {\n // update rendered list with successful accepted device registrations\n // see: this.updateStatusById(...)\n this.internalListUpdate([]);\n this.limit();\n this._loading.next(false);\n if (failedDeviceRequests.length > 0) {\n this.alertService.warning(\n gettext('Could not accept all pending registration requests.'),\n JSON.stringify(\n {\n failedDeviceRequests,\n acceptedDeviceRequests\n },\n undefined,\n 2\n )\n );\n } else {\n this.alertService.success(gettext('Accepted all pending registration requests.'));\n }\n })\n )\n .subscribe(\n () => {\n // empty by design\n },\n err => {\n this._loading.next(false);\n this.alertService.addServerFailure(err);\n }\n );\n }\n\n limit() {\n from(this.deviceRegService.limit())\n .pipe(takeUntil(this.endSubscriptions))\n .subscribe(\n res => this._limit.next(res.data),\n err => this.alertService.addServerFailure(err)\n );\n }\n\n getRequestByStatus(status: DeviceRegistrationStatus): IDeviceRegistration[] {\n return this._deviceRegistrationRequests.getValue().data.filter(req => req.status === status);\n }\n\n ngOnDestroy(): void {\n this.endSubscriptions.next();\n this.endSubscriptions.complete();\n }\n\n private updateStatusById(id: string, status: DeviceRegistrationStatus) {\n const items = this._deviceRegistrationRequests.getValue().data;\n const matchingElementIndex = items.findIndex(element => element.id === id);\n if (matchingElementIndex >= 0) {\n items[matchingElementIndex].status = status;\n }\n return items;\n }\n\n private removeDeviceRegistrationRequestById(id: string) {\n const items = this._deviceRegistrationRequests.getValue().data;\n const matchingElementIndex = items.findIndex(element => element.id === id);\n if (matchingElementIndex >= 0) {\n items.splice(matchingElementIndex, 1);\n }\n this._loading.next(false);\n return items;\n }\n}\n","export interface ApplicationExtension {\n name: string;\n description: string;\n type: string;\n}\n\nexport interface ExtensibleDeviceRegistrationProvider extends ApplicationExtension {\n contextPath: string;\n}\n\nexport const PRODUCT_EXPERIENCE_BASE_REGISTRATION = {\n EVENT: 'deviceRegistration',\n COMPONENT: {\n BULK: 'bulk-registration',\n EXTENSIBLE_BULK: 'bulk-extensible-registration',\n EXTENSIBLE_SINGLE: 'single-extensible-registration'\n },\n RESULT: { SUCCESS: 'registrationSuccess', FAILURE: 'registrationFailure' }\n} as const;\n","import { Component, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { DeviceRegistrationBulkService, IDeviceRegistrationBulkResult } from '@c8y/client';\nimport {\n C8yJSONSchema,\n C8yStepper,\n FeatureCacheService,\n GainsightService,\n gettext\n} from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { saveAs } from 'file-saver';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { PRODUCT_EXPERIENCE_BASE_REGISTRATION } from '../extensible/base-device-registration.model';\nimport { BulkFailedResult } from '../extensible/bulk/extensible-bulk-device-registration.model';\nimport { RegisterDeviceService } from '../register-device.service';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst registerDeviceBulkSchema: object = {\n $schema: 'https://json-schema.org/draft/2019-09/schema',\n type: 'object',\n properties: {\n csvBulkFile: {\n type: 'array',\n title: gettext('CSV file upload'),\n description: gettext(\n 'You can use file upload component to let users send files. This input accepts only a single CSV file.'\n ),\n contentMediaType: 'csv'\n }\n },\n required: ['csvBulkFile'],\n additionalProperties: false\n};\n\nconst simpleCsvHeaders: string[] = ['ID', 'PATH'];\nconst csvHeaders: string[] = [\n 'ID',\n 'TYPE',\n 'NAME',\n 'ICCID',\n 'IDTYPE',\n 'PATH',\n 'SHELL',\n 'AUTH_TYPE'\n];\nconst fullCsvHeaders: string[] = [...csvHeaders, 'CREDENTIALS'];\nexport const ESTCsvHeaders: string[] = [...csvHeaders, 'ENROLLMENT_OTP'];\n\n@Component({\n selector: 'bulk-device-registration',\n templateUrl: 'bulk-device-registration-modal.component.html'\n})\nexport class BulkDeviceRegistrationModalComponent {\n @ViewChild(C8yStepper, { static: true }) stepper: C8yStepper;\n message: string;\n success: boolean;\n pending: boolean;\n result: IDeviceRegistrationBulkResult;\n failedResult: BulkFailedResult;\n form = new FormGroup({});\n model = {};\n template: FormlyFieldConfig[];\n certificateAuthorityFeatureEnabled =\n this.featureCacheService.getFeatureState('certificate-authority');\n\n constructor(\n private jsonschema: C8yJSONSchema,\n private deviceRegistrationService: DeviceRegistrationBulkService,\n private registerDeviceService: RegisterDeviceService,\n private bsModalRef: BsModalRef,\n private gainsightService: GainsightService,\n private featureCacheService: FeatureCacheService,\n private translateService: TranslateService\n ) {}\n\n ngOnInit() {\n this.template = [this.jsonschema.toFieldConfig(registerDeviceBulkSchema)];\n }\n\n upload() {\n this.pending = true;\n const file = this.getFile(this.model);\n this.deviceRegistrationService\n .create(file)\n .then(({ res, data }) => {\n if (res.status < 400) {\n this.result = data;\n this.success = data.numberOfFailed === 0 && data.numberOfSuccessful === data.numberOfAll;\n this.message = this.success\n ? gettext('Device registration created.')\n : (this.message = gettext('Device registration failed.'));\n if (this.success) {\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.SUCCESS,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.BULK\n });\n } else {\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.BULK\n });\n }\n } else {\n this.failedResult = data as unknown as BulkFailedResult;\n this.message = gettext('Device registration failed.');\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.BULK\n });\n }\n this.model = {};\n this.pending = false;\n this.stepper.next();\n })\n .catch(() => {\n this.message = gettext('Error occurred while processing the uploaded file.');\n this.pending = false;\n this.stepper.next();\n });\n }\n\n downloadSimple() {\n return this.download(simpleCsvHeaders, gettext('Simple bulk registration - template.csv'));\n }\n\n downloadFull() {\n return this.download(fullCsvHeaders, gettext('Full bulk registration - template.csv'));\n }\n\n downloadEst() {\n return this.download(ESTCsvHeaders, gettext('EST registration - template.csv'));\n }\n\n download(headers: string[], fileName: string) {\n const headerRaw = headers.map(header => `\"${header}\"`).join(';');\n const binaryFile = new Blob([headerRaw], { type: 'text/csv' });\n saveAs(binaryFile, this.translateService.instant(fileName));\n }\n\n complete() {\n this.registerDeviceService.list();\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n private getFile(model): File {\n const csvBulkFile = (model as any)?.csvBulkFile;\n return csvBulkFile ? csvBulkFile[0]?.file : undefined;\n }\n}\n","<c8y-modal\n [title]=\"'Bulk device registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <i c8yIcon=\"upload\"></i>\n </ng-container>\n\n <c8y-stepper [hideStepProgress]=\"true\" linear id=\"modal-body\">\n <cdk-step>\n <p class=\"modal-subtitle sticky-top\" translate>Register devices in bulk</p>\n\n <c8y-form-group class=\"d-block p-24 p-t-16 p-b-0 m-b-0\">\n <formly-form [form]=\"form\" [fields]=\"template\" [model]=\"model\"></formly-form>\n </c8y-form-group>\n\n <div class=\"p-24 m-t-0 bg-level-1\">\n <div class=\"bg-gray-white separator-bottom p-t-16 p-b-16 p-l-24 p-r-24\">\n <div>\n <p class=\"m-b-8 text-medium\">\n <strong translate>Simple registration</strong>\n </p>\n <small class=\"text-muted\" translate>\n Creates all registration requests at once, then each one needs to go through regular\n acceptance process.\n </small>\n </div>\n <div class=\"m-b-16 m-t-16\">\n <a\n title=\"{{ 'Download template' | translate }}\"\n class=\"btn btn-default btn-sm\"\n target=\"_self\"\n (click)=\"downloadSimple()\"\n >\n <i c8yIcon=\"download\" translate></i>\n {{ 'Download template' | translate }}\n </a>\n </div>\n </div>\n <div class=\"bg-gray-white separator-bottom p-t-16 p-b-16 p-l-24 p-r-24\">\n <div>\n <p class=\"m-b-8 text-medium\">\n <strong translate>Full registration</strong>\n </p>\n <small class=\"text-muted\" translate>\n Creates all device credentials and devices using provided list of property values.\n Devices can start communicating with the platform immediately.\n </small>\n </div>\n <div class=\"m-b-16 m-t-16\">\n <a\n title=\"{{ 'Download template' | translate }}\"\n class=\"btn btn-default btn-sm\"\n target=\"_self\"\n (click)=\"downloadFull()\"\n >\n <i c8yIcon=\"download\" translate></i>\n {{ 'Download template' | translate }}\n </a>\n </div>\n </div>\n <div class=\"bg-gray-white separator-bottom p-t-16 p-b-16 p-l-24 p-r-24\" *ngIf=\"certificateAuthorityFeatureEnabled | async\">\n <div>\n <p class=\"m-b-8 text-medium\">\n <strong translate>Full registration with device certificate creation</strong>\n </p>\n <small class=\"text-muted\" translate>\n Creates device certificates and devices using the provided list of property values. Once the certificates are provisioned, the devices can immediately start communicating with the platform\n </small>\n </div>\n <div class=\"m-b-16 m-t-16\">\n <a\n title=\"{{ 'Download template' | translate }}\"\n class=\"btn btn-default btn-sm\"\n target=\"_self\"\n (click)=\"downloadEst()\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Download template' | translate }}\n </a>\n </div>\n </div>\n </div>\n\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"form.invalid\"\n [pending]=\"pending\"\n (onCancel)=\"cancel()\"\n (onNext)=\"upload()\"\n [labels]=\"{ next: 'Upload' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n\n <cdk-step state=\"final\">\n <div class=\"m-24\">\n <div *ngIf=\"success; else warning\">\n <c8y-operation-result\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n <ng-template #warning>\n <c8y-operation-result\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-template>\n <c8y-list-group class=\"separator-top m-t-16\">\n <ng-container *ngIf=\"result; else failedResponse\">\n <c8y-li *ngIf=\"success; else fail\">\n <c8y-li-icon class=\"text-success\" icon=\"check-circle\"></c8y-li-icon>\n <p>{{ 'All devices have been processed.' | translate }}</p>\n <c8y-li-collapse>\n <pre><code>{{ result | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n <ng-template #fail>\n <c8y-li>\n <c8y-li-icon class=\"text-danger\" icon=\"ban\"></c8y-li-icon>\n <p\n ngNonBindable\n [translateParams]=\"{ count: result?.numberOfFailed, total: result?.numberOfAll }\"\n translate\n >\n Failed to process {{ count }} out of {{ total }}.\n </p>\n <c8y-li-collapse>\n <pre><code>{{ result | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n </ng-template>\n </ng-container>\n <ng-template #failedResponse>\n <c8y-li>\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <small>{{ failedResult?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ failedResult | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n [showButtons]=\"{ next: true }\"\n (onNext)=\"complete()\"\n [labels]=\"{ next: success ? 'Close' : 'Cancel' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy\n} from '@angular/core';\nimport { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';\nimport {\n TenantUiService,\n gettext,\n C8yStepper,\n memoize,\n GainsightService,\n FeatureCacheService\n} from '@c8y/ngx-components';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { from, Observable, Subject, defer, BehaviorSubject } from 'rxjs';\nimport { filter, shareReplay, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport {\n DeviceRegistrationBulkService,\n IManagedObject,\n InventoryService,\n IResultList,\n ITenant,\n TenantService\n} from '@c8y/client';\nimport { RegisterDeviceService } from '../register-device.service';\nimport { CdkStep } from '@angular/cdk/stepper';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ESTCsvHeaders } from '../bulk/bulk-device-registration-modal.component';\n\ninterface GeneralDeviceRegistrationModelType {\n id: string;\n tenant?: { id: string };\n group?: { id: string; name?: string };\n oneTimePassword?: string;\n}\n\n@Component({\n selector: 'c8y-general-device-registration',\n templateUrl: 'general-device-registration.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GeneralDeviceRegistrationComponent implements AfterViewInit, OnDestroy {\n readonly MANAGEMENT = 'management';\n readonly FILTER: object = {\n withTotalPages: true,\n pageSize: 25\n };\n\n useEST$ = new BehaviorSubject<boolean>(false);\n certificateAuthorityFeatureEnabled =\n this.featureCacheService.getFeatureState('certificate-authority');\n\n form = new FormGroup({});\n model = {\n devicesToCreate: [{} as GeneralDeviceRegistrationModelType]\n };\n options: FormlyFormOptions = {\n formState: {\n canLoadTenants: true,\n useEST: this.useEST$.getValue()\n }\n };\n\n PRODUCT_EXPERIENCE = {\n EVENT: 'deviceRegistration',\n COMPONENT: 'single-general-registration',\n RESULT: { SUCCESS: 'registrationSuccess', FAILURE: 'registrationFailure' }\n };\n\n isLoading$: Observable<boolean>;\n success: { id: string }[] = [];\n failed: { id: string; message?: string; details?: any }[] = [];\n\n fields: FormlyFieldConfig[] = [\n {\n type: 'array',\n key: 'devicesToCreate',\n props: {\n addText: gettext('Add device'),\n addTextDataCy: 'add-device'\n },\n fieldArray: {\n fieldGroup: [\n {\n key: 'id',\n type: 'string',\n focus: true,\n props: {\n placeholder: '0123ab32fcd',\n label: gettext('Device ID'),\n required: true\n },\n validators: {\n unique: {\n expression: (control: FormControl) => {\n const found = (\n control.root.get('devicesToCreate') as FormArray<\n FormGroup<{ id: FormControl<string> }>\n >\n ).controls\n .map(el => el.controls.id)\n .find(el => el !== control && el.value === control.value);\n return !found;\n },\n message: () => gettext('Device ID duplicates are not allowed')\n }\n }\n },\n {\n key: 'tenant',\n type: 'typeahead',\n expressions: {\n hide: field => {\n const formState = field.options?.formState;\n if (!formState?.canLoadTenants) {\n field.formControl.setValue(null);\n }\n return !formState?.canLoadTenants || false;\n }\n },\n defaultValue: { id: this.MANAGEMENT },\n props: {\n label: gettext('Add to tenant'),\n required: true,\n c8yForOptions: this.canLoadTenants$().pipe(\n filter(canLoad => canLoad),\n switchMap(() => this.getTenants$())\n ) as Observable<IResultList<ITenant>>,\n container: 'body',\n displayProperty: 'id',\n valueProperties: ['id']\n },\n hooks: {\n onInit: _field =>\n this.canLoadTenants$().pipe(\n tap(canLoad => {\n this.options.formState.canLoadTenants = canLoad;\n this.cd.detectChanges();\n })\n )\n }\n },\n {\n key: 'group',\n type: 'typeahead',\n expressions: {\n 'props.disabled': (field: FormlyFieldConfig) => {\n const formState = field.options?.formState;\n const model = field.model;\n if (formState?.canLoadTenants) {\n if (model?.tenant?.id !== this.MANAGEMENT) {\n field.formControl.setValue(null);\n }\n return !(model?.tenant?.id === this.MANAGEMENT);\n }\n delete field?.props?.description;\n return false;\n }\n },\n props: {\n disabled: false,\n label: gettext('Add to group'),\n description: gettext(\n 'You can add device to specific group for management tenant only.'\n ),\n container: 'body',\n displayProperty: 'name',\n valueProperties: ['id'],\n c8yForOptions: this.getGroups$()\n },\n hooks: {\n onInit: _field =>\n this.canLoadTenants$().pipe(\n tap(canLoad => {\n this.options.formState.canLoadTenants = canLoad;\n this.cd.detectChanges();\n })\n )\n }\n },\n {\n key: 'oneTimePassword',\n type: 'string',\n expressions: {\n hide: field => !field.options?.formState?.useEST\n },\n props: {\n placeholder: 'TruDN3H45L0',\n label: gettext('One-time password'),\n required: true\n },\n hooks: {\n onInit: _field =>\n this.useEST$.pipe(\n tap(useEST => {\n this.options.formState.useEST = useEST;\n this.cd.detectChanges();\n })\n )\n }\n }\n ]\n }\n }\n ];\n\n result = new Promise<void>((resolve, reject) => {\n this.onSuccessfulClosing = resolve;\n this.onCancel = reject;\n });\n\n private onSuccessfulClosing: () => void;\n private onCancel: () => void;\n\n private destroy$: Subject<void> = new Subject();\n private lastCreatedDevices: GeneralDeviceRegistrationModelType[] = [];\n\n constructor(\n private tenantUIService: TenantUiService,\n private tenantService: TenantService,\n private registerDeviceService: RegisterDeviceService,\n private inventoryService: InventoryService,\n private cd: ChangeDetectorRef,\n public bsModalRef: BsModalRef,\n private gainsightService: GainsightService,\n private deviceRegistrationService: DeviceRegistrationBulkService,\n private featureCacheService: FeatureCacheService\n ) {\n this.isLoading$ = this.registerDeviceService.loading$;\n }\n\n ngAfterViewInit() {\n this.cd.detectChanges();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n registerDevice(eventObject: { stepper: C8yStepper; step: CdkStep }) {\n !this.useEST$.getValue() ? this.create(eventObject) : this.registerByEst(eventObject);\n }\n\n fixErrors(event: { stepper: C8yStepper; step: CdkStep }, failedRequests: any) {\n if (failedRequests && failedRequests.length > 0) {\n this.options.resetModel({\n devicesToCreate: [\n ...this.lastCreatedDevices.filter(el =>\n failedRequests.map(data => data.id).includes(el.id)\n )\n ]\n });\n this.cd.detectChanges();\n }\n event?.stepper.previous();\n }\n\n close() {\n this.bsModalRef.hide();\n this.onSuccessfulClosing();\n }\n\n cancel() {\n this.bsModalRef.hide();\n this.onCancel();\n }\n\n private create(eventObject: { stepper: C8yStepper; step: CdkStep }) {\n if (this.model?.devicesToCreate?.length > 0) {\n this.lastCreatedDevices = [...this.model.devicesToCreate];\n\n const dataToSend = this.model.devicesToCreate.map(\n (el: GeneralDeviceRegistrationModelType) => {\n const { id, tenant, group } = el;\n let data: { id: string; tenantId?: string; groupId?: string } = { id };\n\n if (tenant?.id) {\n data = { ...data, tenantId: tenant.id };\n }\n\n if (group?.id) {\n data = { ...data, groupId: group.id };\n }\n\n return data;\n }\n );\n\n this.registerDeviceService\n .createMultiple(dataToSend)\n .pipe(takeUntil(this.destroy$))\n .subscribe(requests => {\n this.success = requests.success ?? [];\n if (this.success.length > 0) {\n this.gainsightService.triggerEvent(this.PRODUCT_EXPERIENCE.EVENT, {\n result: this.PRODUCT_EXPERIENCE.RESULT.SUCCESS,\n component: this.PRODUCT_EXPERIENCE.COMPONENT\n });\n }\n\n this.failed = requests.failed ?? [];\n if (this.failed.length > 0) {\n this.gainsightService.triggerEvent(this.PRODUCT_EXPERIENCE.EVENT, {\n result: this.PRODUCT_EXPERIENCE.RESULT.FAILURE,\n component: this.PRODUCT_EXPERIENCE.COMPONENT\n });\n }\n\n if (eventObject) {\n eventObject.stepper.next();\n }\n });\n }\n }\n\n private registerByEst(eventObject: { stepper: C8yStepper; step: CdkStep }) {\n this.lastCreatedDevices = [...this.model.devicesToCreate];\n this.deviceRegistrationService\n .create(this.convertObjectToCSVFile(this.model.devicesToCreate))\n .then(({ res, data }) => {\n if (res.status < 400) {\n this.failed = data.failedCreationList.map(value => {\n return {\n id: value.deviceId,\n message: value.failureReason\n };\n });\n const failedIds = new Set(this.failed.map(item => item.id));\n this.success = this.model.devicesToCreate.filter(item => !failedIds.has(item.id));\n }\n eventObject.stepper.next();\n })\n .catch(() => {\n eventObject.stepper.next();\n });\n }\n\n private convertObjectToCSVFile(data: any): File {\n const fullCsvHeaders = ESTCsvHeaders;\n\n const csvHeaders = fullCsvHeaders.join(';') + '\\n';\n const dataToSend = data.map(el => {\n return {\n ID: el.id,\n AUTH_TYPE: 'CERTIFICATES',\n ENROLLMENT_OTP: el.oneTimePassword,\n PATH: el.group?.id || '',\n TENANT: el.tenant?.id || ''\n };\n });\n\n const csvRows = dataToSend\n .map(row => fullCsvHeaders.map(header => row[header] ?? '').join(';'))\n .join('\\n');\n\n const csvContent = csvHeaders + csvRows;\n const blob = new Blob([csvContent], { type: 'text/csv' });\n return new File([blob], `ESTRegistrationFile.csv`, { type: 'text/csv' });\n }\n\n @memoize()\n private canLoadTenants$(): Observable<boolean> {\n return defer(() => from(this.tenantUIService.isManagementTenant())).pipe(shareReplay(1));\n }\n\n @memoize()\n private getTenants$(): Observable<IResultList<ITenant>> {\n return defer(() => from(this.tenantService.list(this.FILTER))).pipe(shareReplay(1));\n }\n\n @memoize()\n private getGroups$(): Observable<IResultList<IManagedObject>> {\n return defer(() =>\n from(\n this.inventoryService.listQuery(\n { __filter: { __has: 'c8y_IsDeviceGroup' }, __orderby: [{ name: 1 }] },\n { ...this.FILTER }\n )\n )\n ).pipe(shareReplay(1));\n }\n}\n","<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear c8y-modal-body>\n <cdk-step [stepControl]=\"form\">\n <div class=\"text-center sticky-top bg-component\">\n <p class=\"text-medium text-16 separator-bottom p-16\" translate>Register general devices</p>\n <label\n class=\"c8y-switch m-24 a-i-center\"\n title=\"{{ 'Create device certificates during device registration' | translate }}\"\n for=\"useEST\"\n *ngIf=\"certificateAuthorityFeatureEnabled | async\"\n >\n <input\n type=\"checkbox\"\n name=\"useEST\"\n id=\"useEST\"\n [ngModel]=\"useEST$.getValue()\"\n (ngModelChange)=\"useEST$.next($event)\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Create device certificates during device registration' | translate }}</span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'The device registration process includes creating device certificates, which are issued by the tenant\\'s Certificate Authority (CA).' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </div>\n <div>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n class=\"formly-group-array-cols d-block p-l-24 p-b-24 min-height-fit p-r-8\"\n [ngClass]=\"{'p-t-24' : !(certificateAuthorityFeatureEnabled | async)}\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n (onNext)=\"registerDevice($event)\"\n (onCancel)=\"cancel()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-container>\n\n <div *ngIf=\"success.length > 0 && failed.length > 0\" class=\"p-l-24 p-r-24 text-center\">\n <c8y-operation-result\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <p\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n class=\"p-b-16 text-danger\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div class=\"m-b-8 p-l-24 p-r-24\" *ngIf=\"success.length > 0\" translate>\n Turn on the registered device(s) and wait for connection(s) to be established. Once a\n device is connected, its status will change to \"Pending acceptance\". You will need to\n approve it by clicking on the \"Accept\" button.\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"close()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n","import { inject, Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { GeneralDeviceRegistrationComponent } from './general-device-registration.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeneralDeviceRegistrationService {\n private modalService = inject(BsModalService);\n\n async open(initialState?: Partial<GeneralDeviceRegistrationComponent>) {\n const modalRef = this.modalService.show(GeneralDeviceRegistrationComponent, {\n class: 'modal-md',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true,\n initialState: {\n ...initialState\n }\n });\n\n return await modalRef.content.result;\n }\n}\n","import { Component } from '@angular/core';\nimport { GeneralDeviceRegistrationService } from './general-device-registration.service';\n\n@Component({\n selector: 'c8y-general-device-registration-button',\n templateUrl: 'general-device-registration-button.component.html'\n})\nexport class GeneralDeviceRegistrationButtonComponent {\n constructor(private registrationService: GeneralDeviceRegistrationService) {}\n\n async open() {\n try {\n await this.registrationService.open();\n } catch {\n // modal was closed\n }\n }\n}\n","<button title=\"{{ 'General' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'General' | translate }}\n</button>\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n ExtensionFactory,\n ExtensionPointWithoutStateForPlugins,\n fromTriggerOnce,\n GenericHookType,\n hookGeneric,\n PluginsResolveService,\n GenericHookOptions\n} from '@c8y/ngx-components';\nimport { flatten } from 'lodash';\nimport { Observable } from 'rxjs';\nimport { shareReplay, startWith } from 'rxjs/operators';\nimport { RegisterDeviceItem } from './RegisterDeviceItem';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n * { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n * { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n * { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type RegisterDeviceExtension =\n | RegisterDeviceItem\n | RegisterDeviceItem[]\n | ExtensionFactory<RegisterDeviceItem>;\n/**\n * A hook to use for Multi Provider extension.\n * @deprecated Consider using the `hookDeviceRegistration` function instead.\n */\nexport const HOOK_DEVICE_REGISTRATION = new InjectionToken<RegisterDeviceExtension>(\n 'HOOK_DEVICE_REGISTRATION'\n);\n\n/**\n * You can either provide a single `RegisterDeviceExtension` as parameter:\n * ```typescript\n * hookDeviceRegistration(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n * hookDeviceRegistration([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<RegisterDeviceExtension>`\n * ```typescript\n * export class MyDeviceRegistrationFactory implements ExtensionFactory<RegisterDeviceExtension> {...}\n * ...\n * hookDeviceRegistration(MyDeviceRegistrationFactory)\n * ```\n * A typed alternative to `HOOK_DEVICE_REGISTRATION`.\n * @param registration The `RegisterDeviceExtension`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookDeviceRegistration(\n registration: GenericHookType<RegisterDeviceExtension>,\n options?: Partial<GenericHookOptions>\n) {\n return hookGeneric<RegisterDeviceExtension>(registration, HOOK_DEVICE_REGISTRATION, options);\n}\n\n/**\n * A service which defines device registration options.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RegisterDeviceExtensionService extends ExtensionPointWithoutStateForPlugins<RegisterDeviceItem> {\n constructor(\n rootInjector: Injector,\n private router: Router,\n plugins: PluginsResolveService\n ) {\n super(rootInjector, plugins);\n this.items$ = this.setupItemsObservable();\n }\n\n protected setupItemsObservable(): Observable<RegisterDeviceItem[]> {\n return fromTriggerOnce<RegisterDeviceItem>(this.router, this.refresh$, [\n () =>\n flatten(\n this.injectors.map(injector => injector.get(HOOK_DEVICE_REGISTRATION, [], { self: true }))\n ),\n () => this.factories\n ]).pipe(startWith([]), shareReplay(1));\n }\n}\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { RegisterDeviceService } from '../register-device.service';\nimport { RegisterDeviceExtensionService } from './register-device-extension.service';\n\n@Component({\n selector: 'c8y-register-device-dropdown',\n templateUrl: './register-device-dropdown.component.html'\n})\nexport class RegisterDeviceDropdownComponent {\n single$ = this.registerDeviceExtensionService.items$.pipe(\n map(items =>\n items.filter(item => item.category === 'single').sort((a, b) => b.priority - a.priority)\n )\n );\n\n bulk$ = this.registerDeviceExtensionService.items$.pipe(\n map(items =>\n items.filter(item => item.category === 'bulk').sort((a, b) => b.priority - a.priority)\n )\n );\n\n limit$: Observable<boolean> = this.registerDeviceService.limit$.pipe(\n map(limit => limit.isReached)\n );\n\n constructor(\n private registerDeviceExtensionService: RegisterDeviceExtensionService,\n private registerDeviceService: RegisterDeviceService\n ) {}\n}\n","<div class=\"dropdown\" dropdown>\n <button\n *ngIf=\"!(limit$ | async); else disable\"\n title=\"{{ 'Register device' | translate }}\"\n type=\"button\"\n class=\"dropdown-toggle c8y-dropdown d-flex a-i-center\"\n dropdownToggle\n aria-haspopup=\"true\"\n data-cy=\"register-device--dropdown-button\"\n >\n <span class=\"text-truncate\" translate>Register device</span>\n <i [c8yIcon]=\"'caret-down'\" class=\"m-l-4 text-primary\"></i>\n </button>\n <ng-template #disable>\n <button\n title=\"{{ 'Device registration disabled' | translate }}\"\n type=\"button\"\n class=\"btn btn-clean d-flex p-l-8\"\n disabled\n >\n <span class=\"text-truncate\" translate>Register device</span>\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n </ng-template>\n\n <!-- dropdown for normal screen sizes -->\n <ul class=\"dropdown-menu dropdown-menu-right hidden-xs\" data-cy=\"register-device--dropdown\" *dropdownMenu>\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <!-- fake dropdown for mobile screen sizes. *dropdownMenu is missing by design! -->\n <ul class=\"dropdown-menu dropdown-menu visible-xs\">\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ng-template #dropdown>\n <ng-container *ngIf=\"single$ | async as single\">\n <li class=\"dropdown-header\" *ngIf=\"single.length > 0\" translate data-cy=\"single-group\">Single registration</li>\n <li *ngFor=\"let item of single\">\n <ng-container *c8yOutlet=\"item.template\"></ng-container>\n </li>\n </ng-container>\n <ng-container *ngIf=\"bulk$ | async as bulk\">\n <li class=\"dropdown-header\" *ngIf=\"bulk.length > 0\" translate data-cy=\"bulk-group\">Bulk registration</li>\n <li *ngFor=\"let item of bulk\">\n <ng-container *c8yOutlet=\"item.template\"></ng-container>\n </li>\n </ng-container>\n </ng-template>\n</div>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport {\n DeviceRegistrationSecurityMode,\n DeviceRegistrationStatus,\n IDeviceRegistration,\n IDeviceRegistrationLimit,\n Paging\n} from '@c8y/client';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { filter, map, switchMap, takeUntil } from 'rxjs/operators';\nimport {\n DeviceBootstrapRealtimeService,\n IRealtimeDeviceBootstrap,\n TenantUiService,\n ModalService,\n Status,\n gettext,\n OptionsService\n} from '@c8y/ngx-components';\nimport { RegisterDeviceService } from './register-device.service';\nimport { sortBy } from 'lodash-es';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { GeneralDeviceRegistrationService } from './general/general-device-registration.service';\n\n@Component({\n selector: 'c8y-device-registration-view',\n templateUrl: 'device-registration-view.component.html'\n})\nexport class DeviceRegistrationViewComponent implements OnInit, OnDestroy {\n deviceRequests$: Observable<{\n data: IDeviceRegistration[];\n paging?: Paging<IDeviceRegistration>;\n }>;\n limit$: Observable<IDeviceRegistrationLimit>;\n limitReachedInfo$: Observable<string>;\n requireSecurityToken = false;\n isManagementTenant = false;\n isLoading = false;\n gridOrList: 'interact-list' | 'interact-grid' = 'interact-grid';\n status = DeviceRegistrationStatus;\n\n readonly statusProps = {\n [DeviceRegistrationStatus.WAITING_FOR_CONNECTION]: {\n label: gettext('Waiting for connection'),\n icon: 'unlink',\n cls: 'text-danger'\n },\n [DeviceRegistrationStatus.PENDING_ACCEPTANCE]: {\n label: gettext('Pending acceptance'),\n icon: 'circle',\n cls: 'text-info'\n },\n [DeviceRegistrationStatus.ACCEPTED]: {\n label: gettext('Accepted'),\n icon: 'check-circle',\n cls: 'text-success'\n },\n [DeviceRegistrationStatus.BLOCKED]: {\n label: gettext('Blocked'),\n icon: 'ban',\n cls: 'text-danger'\n }\n };\n\n private unsubscribe$: Subject<void> = new Subject();\n private readonly _securityTokenPolicy: BehaviorSubject<DeviceRegistrationSecurityMode> =\n new BehaviorSubject(DeviceRegistrationSecurityMode.OPTIONAL);\n\n constructor(\n private registerDeviceService: RegisterDeviceService,\n private bootstrapRealtimeService: DeviceBootstrapRealtimeService,\n private tenantUiService: TenantUiService,\n private modalService: ModalService,\n private translateService: TranslateService,\n private optionsService: OptionsService,\n private activatedRoute: ActivatedRoute,\n private generalRegistration: GeneralDeviceRegistrationService\n ) {}\n\n ngOnInit() {\n this.loadAll();\n this.setIsManagementTenant();\n this.setRequireSecurityToken();\n\n this.deviceRequests$ = this.registerDeviceService.deviceRegistrationRequests$.pipe(\n map(req => ({\n data: sortBy(req.data, [\n ({ status }) => (status === DeviceRegistrationStatus.PENDING_ACCEPTANCE ? 0 : 1),\n '-creationTime'\n ]),\n paging: req.paging\n }))\n );\n this.limit$ = this.registerDeviceService.limit$;\n this.limitReachedInfo$ = this.limit$.pipe(\n filter(deviceRegistrationLimit => deviceRegistrationLimit.isReached),\n switchMap(({ limit }) =>\n this.translateService.stream(\n gettext(\n 'You reached the limit of {{ maxDevices }} devices. No more devices can be registered.'\n ),\n { maxDevices: limit }\n )\n )\n );\n this.registerDeviceService.loading$\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(value => (this.isLoading = value));\n\n this.bootstrapRealtimeService\n .onUpdate$()\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((bootstrap: IRealtimeDeviceBootstrap) => {\n this.registerDeviceService.onDeviceBootstrap(bootstrap);\n });\n\n this.handleQueryParams();\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n updateList(data) {\n this.registerDeviceService.internalListUpdate(data);\n }\n\n async handleQueryParams() {\n const { externalId, 'one-time-password': oneTimePassword } =\n this.activatedRoute.snapshot.queryParams;\n\n if (!externalId) {\n return;\n }\n try {\n await this.generalRegistration.open({\n useEST$: new BehaviorSubject<boolean>(!!oneTimePassword),\n model: {\n devicesToCreate: [\n {\n id: externalId,\n oneTimePassword\n }\n ]\n }\n });\n this.loadAll();\n } catch (e) {\n // modal closed\n }\n }\n\n async delete(id: string) {\n const confirmed = await this.modalService.confirm(\n gettext('Cancel device registration'),\n this.translateService.instant(\n gettext(\n 'You are about to cancel device registration for ID \"{{id}}\". Do you want to proceed?'\n ),\n { id }\n ),\n Status.DANGER,\n {\n ok: gettext('Cancel registration'),\n cancel: gettext('Close')\n }\n );\n\n if (confirmed) {\n this.registerDeviceService.remove(id);\n }\n }\n\n accept(request: IDeviceRegistration) {\n this.registerDeviceService.accept(request);\n }\n\n acceptAll() {\n this.registerDeviceService.acceptAll();\n }\n\n canAcceptAll() {\n const pendingRequests = this.registerDeviceService.getRequestByStatus(\n DeviceRegistrationStatus.PENDING_ACCEPTANCE\n );\n return !(pendingRequests.length > 0 && !this.requireSecurityToken);\n }\n\n loadAll() {\n this.registerDeviceService.list();\n }\n\n displayMode(listClass: 'interact-list' | 'interact-grid') {\n this.gridOrList = listClass;\n }\n\n async setRequireSecurityToken() {\n const mode: DeviceRegistrationSecurityMode =\n (await this.optionsService.getTenantOption<DeviceRegistrationSecurityMode>(\n 'device-registration',\n 'security-token.policy',\n DeviceRegistrationSecurityMode.OPTIONAL\n )) as DeviceRegistrationSecurityMode;\n this._securityTokenPolicy.next(mode);\n this.requireSecurityToken = mode === DeviceRegistrationSecurityMode.REQUIRED;\n }\n\n async setIsManagementTenant() {\n this.isManagementTenant = await this.tenantUiService.isManagementTenant();\n }\n\n shouldShowSecurityTokenInput(data: IDeviceRegistration) {\n return (\n data &&\n data.status === DeviceRegistrationStatus.PENDING_ACCEPTANCE &&\n this.showTokenInputBasedOnSecurityMode()\n );\n }\n\n showTokenInputBasedOnSecurityMode() {\n return this._securityTokenPolicy.getValue() !== DeviceRegistrationSecurityMode.IGNORED;\n }\n}\n","<ng-container *ngIf=\"deviceRequests$ | async as deviceRequestList\">\n <c8y-title>\n {{ 'Device registration' | translate }}\n <small *ngIf=\"deviceRequestList.data.length === 1\">1 {{ 'new device' | translate }}</small>\n <small *ngIf=\"deviceRequestList.data.length > 1\">\n {{ deviceRequestList.data.length }} {{ 'new devices' | translate }}\n </small>\n </c8y-title>\n\n <c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'exchange'\"\n [label]=\"'Devices' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-connect'\"\n [label]=\"'Device registration' | translate\"\n ></c8y-breadcrumb-item>\n </c8y-breadcrumb>\n\n <c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n >\n <c8y-list-display-switch (onListClassChange)=\"displayMode($event)\"></c8y-list-display-switch>\n </c8y-action-bar-item>\n\n <ng-container *ngIf=\"limit$ | async as limitStatus\">\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Accept all' | translate }}\"\n type=\"button\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n (click)=\"acceptAll()\"\n [disabled]=\"canAcceptAll() || limitStatus?.isReached\"\n >\n <i [c8yIcon]=\"'check'\"></i>\n {{ 'Accept all' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"9\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadAll()\"\n [disabled]=\"isLoading\"\n >\n <i\n [c8yIcon]=\"'refresh'\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n >\n <c8y-register-device-dropdown></c8y-register-device-dropdown>\n </c8y-action-bar-item>\n\n <c8y-help\n src=\"/docs/device-management-application/registering-devices/#registering-devices\"\n ></c8y-help>\n\n <ng-container *ngIf=\"deviceRequestList.data.length > 0; else noData\">\n <div\n class=\"card-group\"\n [ngClass]=\"gridOrList\"\n >\n <!-- START interact-list sticky header START -->\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"gridOrList === 'interact-list'\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header p-l-40\">\n <p translate>Device</p>\n </div>\n <div class=\"card-block card-column-30 p-l-0 m-l-8\">\n <p translate>Status</p>\n </div>\n <div\n class=\"card-block card-column-30 p-0\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <p translate>Security token</p>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Security token is required if the connected device uses it.' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"card-footer card-column-50\">\n <div\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-30\">\n {{ 'By`user`' | translate }}\n </div>\n <div class=\"card-column-20\">\n {{ 'Tenant ID' | translate }}\n </div>\n </div>\n <ng-template #noManagement>\n <div class=\"d-contents\">\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-50\">\n {{ 'By`user`' | translate }}\n </div>\n </div>\n </ng-template>\n </div>\n <div\n class=\"card-actions-group\"\n style=\"min-width: 176px\"\n >\n <div class=\"btn btn-xs invisible\">\n <!--EMPTY by design-->\n </div>\n </div>\n </div>\n </div>\n <!-- END interact-list sticky header END -->\n\n <div\n class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\"\n *ngIf=\"limitStatus?.isReached\"\n >\n <p\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n >\n <strong>\n {{ limitReachedInfo$ | async }}\n </strong>\n <br />\n <span translate>Please contact your platform administrator.</span>\n </p>\n </div>\n\n <ng-container *ngFor=\"let singleRequest of deviceRequestList.data\">\n <div class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\">\n <div class=\"card\">\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n [class]=\"statusProps[singleRequest.status].cls\"\n [c8yIcon]=\"statusProps[singleRequest.status].icon\"\n ></i>\n </div>\n <p\n class=\"card-title text-truncate\"\n title=\"{{ singleRequest.id }}\"\n >\n {{ singleRequest.id }}\n </p>\n </div>\n\n <div class=\"card-block text-center card-column-30\">\n <span\n class=\"text-label-small\"\n translate\n >\n Status\n </span>\n <p>\n <i\n class=\"icon-spin text-primary\"\n c8yIcon=\"refresh\"\n *ngIf=\"singleRequest.status === status.WAITING_FOR_CONNECTION\"\n ></i>\n {{ statusProps[singleRequest.status].label | translate }}\n </p>\n </div>\n\n <ng-container *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\">\n <div\n class=\"card-block text-center card-column-30 p-t-0\"\n [ngClass]=\"{ 'p-b-0': !shouldShowSecurityTokenInput(singleRequest) }\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <ng-container *ngIf=\"shouldShowSecurityTokenInput(singleRequest)\">\n <span\n class=\"text-label-small\"\n *ngIf=\"gridOrList !== 'interact-list'\"\n translate\n >\n Security token\n </span>\n <input\n class=\"form-control\"\n type=\"text\"\n [(ngModel)]=\"singleRequest.securityToken\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'A1e3gh5ds' }\"\n [required]=\"requireSecurityToken\"\n />\n </ng-container>\n </div>\n\n <div\n class=\"card-actions-group d-flex a-i-center j-c-center\"\n style=\"min-width: 176px\"\n >\n <button\n class=\"btn btn-sm\"\n title=\"{{\n singleRequest.status === status.PENDING_ACCEPTANCE\n ? ('Remove' | translate)\n : ('Cancel' | translate)\n }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn-danger': singleRequest.status === status.PENDING_ACCEPTANCE,\n 'btn-default': singleRequest.status !== status.PENDING_ACCEPTANCE\n }\"\n (click)=\"delete(singleRequest.id)\"\n [disabled]=\"isLoading\"\n >\n <span *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\">\n {{ 'Remove' | translate }}\n </span>\n <span *ngIf=\"singleRequest.status !== status.PENDING_ACCEPTANCE\">\n {{ 'Cancel' | translate }}\n </span>\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Accept' | translate }}\"\n type=\"button\"\n (click)=\"accept(singleRequest)\"\n *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\"\n [disabled]=\"\n isLoading ||\n limitStatus?.isReached ||\n (!singleRequest.securityToken && requireSecurityToken)\n \"\n >\n {{ 'Accept' | translate }}\n </button>\n </div>\n </ng-container>\n\n <div class=\"card-footer separator text-center card-column-50\">\n <small\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div\n class=\"d-contents\"\n *ngIf=\"singleRequest.creationTime && singleRequest.owner\"\n >\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-30 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n <span class=\"card-column-20\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n in`tenant`\n </span>\n <span>{{ singleRequest.tenantId }}</span>\n </span>\n </div>\n <div\n class=\"d-contents\"\n *ngIf=\"!singleRequest.creationTime || !singleRequest.owner\"\n >\n <div class=\"card-column-50\"></div>\n <div class=\"card-column-30\"></div>\n <span\n class=\"text-label-small\"\n translate\n >\n Created in`tenant`\n </span>\n <div class=\"card-column-20\">\n <span>\n {{ singleRequest.tenantId }}\n </span>\n </div>\n </div>\n </small>\n <ng-template #noManagement>\n <small class=\"d-contents\">\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-50 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n </small>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <c8y-load-more\n [paging]=\"deviceRequestList.paging\"\n [hidden]=\"true\"\n (onLoad)=\"updateList($event)\"\n ></c8y-load-more>\n </ng-container>\n\n <ng-template #noData>\n <div class=\"c8y-empty-state m-t-40 text-center\">\n <h1 class=\"c8y-icon c8y-icon-device-connect c8y-icon-duocolor\"></h1>\n <ng-container *ngIf=\"limitStatus?.isReached; else limitNotReached\">\n <h3>\n {{ limitReachedInfo$ | async }}\n </h3>\n <p translate>Please contact your platform administrator.</p>\n </ng-container>\n <ng-template #limitNotReached>\n <h3 translate>No pending registrations to display.</h3>\n <p\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n translate\n >\n Use the \"Register device\" dropdown in the top right corner.\n </p>\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\nimport { gettext, NavigatorNode, NavigatorNodeFactory, Permissions } from '@c8y/ngx-components';\n\n@Injectable()\nexport class RegisterDeviceNavigationFactory implements NavigatorNodeFactory {\n constructor(private permissions: Permissions) {}\n get() {\n const userHasPermission = this.permissions.hasAnyRole([\n Permissions.ROLE_DEVICE_CONTROL_ADMIN,\n Permissions.ROLE_DEVICE_CONTROL_READ\n ]);\n const nav: NavigatorNode[] = [];\n if (userHasPermission) {\n nav.push(\n new NavigatorNode({\n label: gettext('Registration'),\n icon: 'c8y-device-connect',\n path: '/deviceregistration',\n parent: gettext('Devices'),\n preventDuplicates: true,\n priority: 3000\n })\n );\n }\n return nav;\n }\n}\n","import { ApplicationService, ApplicationType, IApplication } from '@c8y/client';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport { flatMap } from 'lodash-es';\nimport {\n ApplicationExtension,\n ExtensibleDeviceRegistrationProvider\n} from './base-device-registration.model';\n\nexport class BaseExtensibleDeviceRegistrationService {\n constructor(\n protected applicationService: ApplicationService,\n protected stateService: AppStateService\n ) {}\n\n protected getMetadataUrl(contextPath: string): string {\n return `${this.getServiceBaseUrl(contextPath)}/metadata`;\n }\n\n protected getServiceBaseUrl(contextPath: string): string {\n if (!contextPath || contextPath.length === 0) {\n throw new Error(\n gettext('The URL of the microservice is misconfigured. A context path is missing.')\n );\n }\n return `/service/${contextPath}/deviceRegistration`;\n }\n\n protected async getDeviceRegistrationProviders(\n bulk: boolean\n ): Promise<ExtensibleDeviceRegistrationProvider[]> {\n let providers: ExtensibleDeviceRegistrationProvider[] = [];\n const microservices = await this.listMicroservicesByUser();\n if (microservices && microservices.length > 0) {\n providers = this.getProvidersFromManifestExtensions(microservices, bulk).concat(\n this.getProvidersFromExtensions(microservices, bulk)\n );\n }\n return providers;\n }\n\n private async listMicroservicesByUser() {\n const { data } = await this.applicationService.listByUser(\n this.stateService?.currentUser?.value?.userName,\n {\n dropOverwrittenApps: true,\n noPaging: true,\n pageSize: 100,\n withTotalPages: true\n }\n );\n return data?.filter(({ type }) => type === ApplicationType.MICROSERVICE);\n }\n\n private getProvidersFromManifestExtensions(\n applications: IApplication[],\n bulk: boolean\n ): ExtensibleDeviceRegistrationProvider[] {\n return flatMap(applications, application => {\n return application?.manifest?.extensions?.map(extension => {\n return { ...extension, contextPath: application.contextPath } as ApplicationExtension;\n });\n }).filter(provider => this.appSupportingExtensibleDeviceRegistrationForm(provider, bulk));\n }\n\n private getProvidersFromExtensions(\n applications: IApplication[],\n bulk: boolean\n ): ExtensibleDeviceRegistrationProvider[] {\n return flatMap(applications, application => {\n return application.extensions?.map(extension => {\n return {\n ...extension,\n contextPath: application.contextPath\n } as ExtensibleDeviceRegistrationProvider;\n });\n }).filter(provider => this.appSupportingExtensibleDeviceRegistrationForm(provider, bulk));\n }\n\n private appSupportingExtensibleDeviceRegistrationForm(\n extension: ExtensibleDeviceRegistrationProvider,\n bulk: boolean\n ): boolean {\n if (bulk) {\n return extension?.type === 'extensibleBulkDeviceRegistration';\n } else {\n return extension?.type === 'extensibleDeviceRegistration';\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ApplicationService, FetchClient, IResult } from '@c8y/client';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport { BaseExtensibleDeviceRegistrationService } from '../base-extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationSchema } from './extensible-device-registration.model';\nimport { ExtensibleDeviceRegistrationProvider } from '../base-device-registration.model';\n\n@Injectable()\nexport class ExtensibleDeviceRegistrationService extends BaseExtensibleDeviceRegistrationService {\n constructor(\n protected applicationService: ApplicationService,\n protected stateService: AppStateService,\n private client: FetchClient\n ) {\n super(applicationService, stateService);\n }\n\n async getSchema(contextPath: string): Promise<ExtensibleDeviceRegistrationSchema> {\n const response = await this.client.fetch(this.getMetadataUrl(contextPath), {\n params: { lang: this.stateService.state.lang }\n });\n const data = await response.json();\n\n if (!data || !data.c8y_DeviceRegistration) {\n throw new Error(\n gettext(\n 'The response of the microservice is incomplete. The device registration information is missing.'\n )\n );\n }\n\n return data.c8y_DeviceRegistration;\n }\n\n getDeviceRegistrationProviders(): Promise<ExtensibleDeviceRegistrationProvider[]> {\n return super.getDeviceRegistrationProviders(false);\n }\n\n async registerDevice(contextPath: string, model: any): Promise<IResult<any>> {\n const method = 'POST';\n const body = JSON.stringify(model);\n const headers = { 'content-type': 'application/json', accept: 'application/json' };\n const res = await this.client.fetch(this.getServiceBaseUrl(contextPath), {\n method,\n body,\n headers\n });\n const data = await res.json();\n return { res, data };\n }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { C8yStepper, GainsightService, gettext } from '@c8y/ngx-components';\nimport { FormGroup } from '@angular/forms';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ExtensibleDeviceRegistrationService } from './extensible-device-registration.service';\nimport { RegisterDeviceService } from '../../register-device.service';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { STEP_STATE } from '@angular/cdk/stepper';\nimport { PRODUCT_EXPERIENCE_BASE_REGISTRATION } from '../base-device-registration.model';\n\n@Component({\n selector: 'c8y-extensible-device-registration-stepper',\n templateUrl: 'extensible-device-registration-stepper.component.html'\n})\nexport class ExtensibleDeviceRegistrationStepperComponent implements OnInit {\n message: string;\n errorMessage: string;\n pendingStatus = false;\n forms: FormGroup[] = [];\n model: any = {};\n @ViewChild(C8yStepper, { static: true })\n stepper: C8yStepper;\n\n @Input() contextPath: string;\n @Input() labels: string[];\n @Input() steps: FormlyFieldConfig[][];\n\n private readonly SERVER_ERROR = gettext('Cannot register your device.');\n private readonly SUCCESSFUL_REGISTRATION = gettext('Your device was successfully registered.');\n private readonly NO_CONNECTION = gettext('Unable to reach the microservice.');\n\n constructor(\n private customProviderService: ExtensibleDeviceRegistrationService,\n private registerDeviceService: RegisterDeviceService,\n private bsModalRef: BsModalRef,\n private gainsightService: GainsightService\n ) {}\n\n ngOnInit() {\n this.steps.forEach(() => this.forms.push(new FormGroup({})));\n }\n\n async save() {\n this.pendingStatus = true;\n this.errorMessage = null;\n const { res, data } = await this.customProviderService\n .registerDevice(this.contextPath, this.model)\n .catch(() => {\n return {\n res: undefined,\n data: undefined\n };\n })\n .finally(() => {\n this.pendingStatus = false;\n this.stepper.next();\n });\n\n if (res && data) {\n if (res.status >= 400 && res.status < 500) {\n this.handleError(data.message || this.SERVER_ERROR);\n } else if (res.status >= 500) {\n this.handleError(this.SERVER_ERROR);\n } else {\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.SUCCESS,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_SINGLE\n });\n this.message = this.SUCCESSFUL_REGISTRATION;\n }\n } else {\n this.handleError(this.NO_CONNECTION);\n }\n }\n\n close() {\n this.bsModalRef.hide();\n }\n\n complete() {\n this.registerDeviceService.list();\n this.bsModalRef.hide();\n }\n\n goToFirstStep() {\n this.stepper.selectedIndex = 0;\n }\n\n isRegistrationStep() {\n return this.stepper.selectedIndex === this.steps.length - 1;\n }\n\n finalStepStatus() {\n if (this.stepper.selectedIndex === this.steps.length) {\n if (this.errorMessage) {\n return STEP_STATE.ERROR;\n } else {\n return STEP_STATE.DONE;\n }\n } else {\n return STEP_STATE.NUMBER;\n }\n }\n\n private handleError(message: string) {\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_SINGLE\n });\n this.errorMessage = message;\n }\n}\n","<c8y-stepper\n [disableProgressButtons]=\"true\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n [customClasses]=\"['m-40', 'm-t-8', 'm-b-16']\"\n>\n <cdk-step *ngFor=\"let step of steps; let i = index\" [stepControl]=\"forms[i]\" [label]=\"labels[i]\">\n <c8y-form-group class=\"form-group p-24 p-b-0 p-t-16\">\n <formly-form [form]=\"forms[i]\" [fields]=\"step\" [model]=\"model\"></formly-form>\n </c8y-form-group>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block modal-footer separator-top bg-component\"\n *ngIf=\"isRegistrationStep()\"\n [showButtons]=\"{ cancel: true, back: true, next: true }\"\n [labels]=\"{ next: 'Register' }\"\n (onCancel)=\"close()\"\n (onNext)=\"save()\"\n [pending]=\"pendingStatus\"\n [disabled]=\"forms[i].invalid\"\n ></c8y-stepper-buttons>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block modal-footer separator-top bg-component\"\n *ngIf=\"!isRegistrationStep()\"\n [showButtons]=\"{ cancel: true, back: i !== 0, next: true }\"\n [disabled]=\"forms[i].invalid\"\n (onCancel)=\"close()\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step [state]=\"finalStepStatus()\" label=\"{{ 'Summary' | translate }}\">\n <c8y-operation-result\n *ngIf=\"!errorMessage; else errorInfo\"\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n data-cy=\"success\"\n ></c8y-operation-result>\n <ng-template #errorInfo>\n <c8y-operation-result\n text=\"{{ errorMessage | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n data-cy=\"error\"\n ></c8y-operation-result>\n </ng-template>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block modal-footer separator-top bg-component\"\n [showButtons]=\"{ cancel: errorMessage, back: errorMessage, next: !errorMessage }\"\n [labels]=\"{ back: 'Fix issue', next: 'Close' }\"\n (onCancel)=\"close()\"\n (onNext)=\"complete()\"\n (onBack)=\"goToFirstStep()\"\n ></c8y-stepper-buttons>\n </cdk-step>\n</c8y-stepper>\n","import { Component, OnInit } from '@angular/core';\nimport { C8yJSONSchema, gettext } from '@c8y/ngx-components';\nimport { ExtensibleDeviceRegistrationService } from './extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationSchema } from './extensible-device-registration.model';\nimport { JSONSchema7 } from 'json-schema';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'extensible-device-registration-modal',\n templateUrl: 'extensible-device-registration-modal.component.html'\n})\nexport class ExtensibleDeviceRegistrationModalComponent implements OnInit {\n title: string;\n loadingErrorMessage: string;\n pages: FormlyFieldConfig[][];\n labels: string[] = [];\n contextPath: string;\n\n constructor(\n public bsModalRef: BsModalRef,\n private jsonschema: C8yJSONSchema,\n private registrationService: ExtensibleDeviceRegistrationService\n ) {}\n\n async ngOnInit() {\n const { title, pages }: ExtensibleDeviceRegistrationSchema = await this.registrationService\n .getSchema(this.contextPath)\n .catch(error => {\n this.loadingErrorMessage =\n error?.message || gettext('Cannot fetch a form definition from the microservice.');\n return {\n title: gettext('Error')\n };\n });\n this.title = title;\n this.pages = pages?.map((step: JSONSchema7) => {\n this.labels.push(step.title);\n return [this.jsonschema.toFieldConfig(step) as FormlyFieldConfig];\n });\n }\n}\n","<c8y-modal\n [title]=\"title | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span class=\"c8y-icon c8y-icon-device-connect\"></span>\n </ng-container>\n <ng-container *ngIf=\"pages as steps; else loadingOrError\">\n <c8y-extensible-device-registration-stepper\n c8y-modal-body\n [steps]=\"steps\"\n [labels]=\"labels\"\n [contextPath]=\"contextPath\"\n ></c8y-extensible-device-registration-stepper>\n </ng-container>\n <ng-template #loadingOrError>\n <ng-container *ngIf=\"loadingErrorMessage; else loading\">\n <c8y-operation-result\n class=\"lead text-regular\"\n type=\"error\"\n text=\"{{ loadingErrorMessage | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n data-cy=\"error\"\n ></c8y-operation-result>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"bsModalRef.hide()\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-container>\n <ng-template #loading>\n <div class=\"modal-header modal-header-info text-center\">\n <c8y-loading\n class=\"text-center\"\n layout=\"application\"\n [message]=\"'Loading the registration form definition…' | translate\"\n ></c8y-loading>\n </div>\n </ng-template>\n </ng-template>\n</c8y-modal>\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ExtensibleDeviceRegistrationService } from './extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationModalComponent } from './extensible-device-registration-modal.component';\nimport { ExtensibleDeviceRegistrationProvider } from '../base-device-registration.model';\n\n@Component({\n selector: 'extensible-device-registration-provider',\n templateUrl: 'extensible-device-registration-button.component.html'\n})\nexport class ExtensibleDeviceRegistrationButtonComponent implements OnInit {\n providersMetaData: Promise<ExtensibleDeviceRegistrationProvider[]>;\n\n constructor(\n private deviceRegistrationService: ExtensibleDeviceRegistrationService,\n private modalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.providersMetaData = this.deviceRegistrationService.getDeviceRegistrationProviders();\n }\n\n click(providerMetaData: ExtensibleDeviceRegistrationProvider) {\n const { name, contextPath } = providerMetaData;\n this.modalService.show(ExtensibleDeviceRegistrationModalComponent, {\n initialState: { name, contextPath } as Partial<ExtensibleDeviceRegistrationModalComponent>,\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true\n });\n }\n}\n","<div *ngFor=\"let provider of providersMetaData | async\">\n <button title=\"{{ provider.name | translate }}\" type=\"button\" (click)=\"click(provider)\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ provider.name | translate }}\n </button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ApplicationService, FetchClient, IResult } from '@c8y/client';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport { BulkDescription, BulkResult } from './extensible-bulk-device-registration.model';\nimport { BaseExtensibleDeviceRegistrationService } from '../base-extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationProvider } from '../base-device-registration.model';\n\n@Injectable()\nexport class BulkExtensibleDeviceRegistrationService extends BaseExtensibleDeviceRegistrationService {\n constructor(\n protected applicationService: ApplicationService,\n protected stateService: AppStateService,\n private client: FetchClient\n ) {\n super(applicationService, stateService);\n }\n\n getDeviceRegistrationProviders(): Promise<ExtensibleDeviceRegistrationProvider[]> {\n return super.getDeviceRegistrationProviders(true);\n }\n\n async getBulkDescription(contextPath: string): Promise<BulkDescription> {\n const res = await this.client.fetch(this.getMetadataUrl(contextPath), {\n params: { lang: this.stateService.state.lang }\n });\n const { c8y_DeviceRegistration } = await res.json();\n\n if (!c8y_DeviceRegistration || !c8y_DeviceRegistration.bulk) {\n throw new Error(\n gettext(\n 'The response of the microservice is incomplete. The bulk registration information is missing.'\n )\n );\n }\n\n return c8y_DeviceRegistration.bulk;\n }\n\n async upload(csv: File, contextPath): Promise<IResult<BulkResult>> {\n const method = 'POST';\n const body = this.createBinaryRequestBody(csv);\n const res = await this.client.fetch(this.getBulkUrl(contextPath), { method, body });\n const data = await res.json();\n return { res, data };\n }\n\n getBulkUrl(contextPath: string): string {\n return `${this.getServiceBaseUrl(contextPath)}/bulk`;\n }\n\n private createBinaryRequestBody(file: any): FormData {\n const body = new FormData();\n const newFile = new File([file], file.name, { type: 'text/csv' });\n body.append('file', newFile, newFile.name);\n return body;\n }\n}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { IResult } from '@c8y/client';\nimport { C8yJSONSchema, C8yStepper, GainsightService, gettext } from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { RegisterDeviceService } from '../../register-device.service';\nimport { PRODUCT_EXPERIENCE_BASE_REGISTRATION } from '../base-device-registration.model';\nimport {\n BulkDescription,\n BulkFailedResult,\n BulkFileExample,\n BulkResult\n} from './extensible-bulk-device-registration.model';\nimport { BulkExtensibleDeviceRegistrationService } from './extensible-bulk-device-registration.service';\nconst extensibleDeviceRegistrationBulkSchema: object = {\n $schema: 'https://json-schema.org/draft/2019-09/schema',\n type: 'object',\n properties: {\n csvBulkFile: {\n type: 'array',\n title: gettext('CSV file upload'),\n description: gettext(\n 'You can use file upload component to let users send files. This input accepts only a single CSV file.'\n ),\n contentMediaType: 'csv'\n }\n },\n required: ['csvBulkFile'],\n additionalProperties: false\n};\n\n@Component({\n selector: 'extensible-device-registration-modal-component',\n templateUrl: 'extensible-bulk-device-registration-modal.component.html'\n})\nexport class ExtensibleBulkDeviceRegistrationModalComponent implements OnInit {\n @ViewChild(C8yStepper, { static: true }) stepper: C8yStepper;\n title: string;\n examples: BulkFileExample[];\n message: string;\n success: boolean;\n loadingError = false;\n pending = false;\n contextPath: string;\n result: BulkResult | BulkFailedResult;\n form = new FormGroup({});\n model = {};\n template: FormlyFieldConfig[];\n\n constructor(\n private jsonschema: C8yJSONSchema,\n private bulkExtensibleDeviceRegistrationService: BulkExtensibleDeviceRegistrationService,\n private registerDeviceService: RegisterDeviceService,\n private bsModalRef: BsModalRef,\n private gainsightService: GainsightService\n ) {}\n\n async ngOnInit() {\n const { title, exampleFileUrls }: BulkDescription =\n await this.bulkExtensibleDeviceRegistrationService\n .getBulkDescription(this.contextPath)\n .catch(error => {\n this.message = error.message;\n this.loadingError = true;\n\n return {\n title: gettext('Error'),\n exampleFileUrls: []\n };\n });\n\n this.title = title;\n this.template = [this.jsonschema.toFieldConfig(extensibleDeviceRegistrationBulkSchema)];\n this.examples = exampleFileUrls;\n }\n\n async upload() {\n this.pending = true;\n const { res, data }: IResult<BulkResult> = await this.bulkExtensibleDeviceRegistrationService\n .upload(this.getFile(this.model), this.contextPath)\n .catch(() => {\n return {\n res: undefined,\n data: undefined\n };\n })\n .finally(() => {\n this.pending = false;\n this.stepper.next();\n });\n\n this.result = data;\n this.success = res?.status < 400;\n\n if (this.success) {\n this.message = gettext('Device registration created.');\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.SUCCESS,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_BULK\n });\n this.model = {};\n }\n\n if (res) {\n if (res.status >= 400 && res.status < 500) {\n this.message = gettext('Device registration failed.');\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_BULK\n });\n } else if (res.status >= 500) {\n this.message = gettext('Error occurred while processing the uploaded file.');\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_BULK\n });\n }\n } else {\n this.message = gettext('No internet connection. Unable to reach the microservice.');\n }\n }\n\n getFile(model) {\n const csvBulkFile = (model as any)?.csvBulkFile;\n return csvBulkFile ? csvBulkFile[0]?.file : undefined;\n }\n\n complete() {\n this.registerDeviceService.list();\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n}\n","<c8y-modal\n [title]=\"title | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <i c8yIcon=\"c8y-device-connect\"></i>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear class=\"p-t-16\" c8y-modal-body>\n <ng-container *ngIf=\"!loadingError\">\n <cdk-step>\n <div class=\"sticky-top bg-component separator-bottom\">\n <p\n class=\"p-l-24 p-r-24 p-t-16 p-b-16 m-b-0 separator-bottom text-16 text-medium text-center bg-component\"\n translate\n >\n Register devices in bulk\n </p>\n <c8y-form-group class=\"p-24 p-t-16 p-b-8 m-b-0\">\n <formly-form [form]=\"form\" [fields]=\"template\" [model]=\"model\"></formly-form>\n </c8y-form-group>\n </div>\n <div\n *ngFor=\"let example of examples\"\n class=\"bg-gray-white separator-bottom p-t-16 p-b-16 p-l-24 p-r-24\"\n >\n <p class=\"m-b-8 text-medium\">\n {{ example.title | translate }}\n </p>\n <p class=\"small m-b-8\">{{ example.description | translate }}</p>\n <a\n title=\"{{ 'Download template' | translate }}\"\n class=\"btn btn-default btn-sm\"\n target=\"_self\"\n [href]=\"example.url\"\n download=\"{{ 'Example bulk registration - template.csv' | translate }}\"\n >\n <i c8yIcon=\"download\"></i>\n <span translate>Download template</span>\n </a>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"form.invalid\"\n [pending]=\"pending\"\n (onCancel)=\"cancel()\"\n (onNext)=\"upload()\"\n [labels]=\"{ next: 'Upload' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </ng-container>\n <cdk-step state=\"final\">\n <div class=\"p-24\">\n <div *ngIf=\"success; else fail\">\n <c8y-operation-result\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n data-cy=\"success\"\n ></c8y-operation-result>\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li>\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n <p translate>File successfully uploaded.</p>\n <c8y-li-collapse>\n <pre><code>{{ result | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n </div>\n <ng-template #fail>\n <c8y-operation-result\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n data-cy=\"error\"\n ></c8y-operation-result>\n <c8y-list-group *ngIf=\"result\" class=\"separator-top m-t-16\">\n <c8y-li>\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p translate>Bulk operation failed.</p>\n <c8y-li-collapse>\n <pre><code>{{ result | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n </ng-template>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-component\"\n [showButtons]=\"{ next: true }\"\n (onNext)=\"complete()\"\n [labels]=\"{ next: success ? 'Complete' : 'Cancel' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n","import { Component, OnInit } from '@angular/core';\nimport { BulkExtensibleDeviceRegistrationService } from './extensible-bulk-device-registration.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ExtensibleBulkDeviceRegistrationModalComponent } from './extensible-bulk-device-registration-modal.component';\nimport { ExtensibleDeviceRegistrationProvider } from '../base-device-registration.model';\n\n@Component({\n selector: 'extensible-device-registration-component',\n templateUrl: 'extensible-bulk-device-registration-button.component.html'\n})\nexport class ExtensibleBulkDeviceRegistrationButtonComponent implements OnInit {\n bulkProvidersMetaData: Promise<ExtensibleDeviceRegistrationProvider[]>;\n\n constructor(\n private bulkExtensibleDeviceRegistrationService: BulkExtensibleDeviceRegistrationService,\n private modalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.bulkProvidersMetaData =\n this.bulkExtensibleDeviceRegistrationService.getDeviceRegistrationProviders();\n }\n\n click(contextPath) {\n this.modalService.show(ExtensibleBulkDeviceRegistrationModalComponent, {\n initialState: { contextPath } as Partial<ExtensibleBulkDeviceRegistrationModalComponent>,\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true\n });\n }\n}\n","<div *ngFor=\"let provider of bulkProvidersMetaData | async\">\n <button\n title=\"{{ provider.name | translate }}\"\n type=\"button\"\n (click)=\"click(provider.contextPath)\"\n >\n <i c8yIcon=\"upload\"></i>\n {{ provider.name | translate }}\n </button>\n</div>\n","import { Component } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkDeviceRegistrationModalComponent } from './bulk-device-registration-modal.component';\nimport { ExtensibleDeviceRegistrationProvider } from '../extensible/base-device-registration.model';\n\n@Component({\n selector: 'extensible-device-registration-component',\n templateUrl: 'bulk-device-registration-button.component.html'\n})\nexport class BulkDeviceRegistrationButtonComponent {\n bulkProvidersMetaData: Promise<ExtensibleDeviceRegistrationProvider[]>;\n\n constructor(private modalService: BsModalService) {}\n\n click() {\n this.modalService.show(BulkDeviceRegistrationModalComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true\n });\n }\n}\n","<button title=\"{{ 'General' | translate }}\" type=\"button\" (click)=\"click()\">\n <i c8yIcon=\"upload\"></i>\n {{ 'General' | translate }}\n</button>\n","import { Injectable } from '@angular/core';\nimport { GeneralDeviceRegistrationButtonComponent } from './general/general-device-registration-button.component';\nimport { ExtensibleDeviceRegistrationButtonComponent } from './extensible/single/extensible-device-registration-button.component';\nimport { ExtensibleBulkDeviceRegistrationButtonComponent } from './extensible/bulk/extensible-bulk-device-registration-button.component';\nimport { BulkDeviceRegistrationButtonComponent } from './bulk/bulk-device-registration-button.component';\nimport { RegisterDeviceItem, RegisterDeviceFactory } from './dropdown/RegisterDeviceItem';\n\n@Injectable()\nexport class DeviceRegistrationFactory implements RegisterDeviceFactory {\n get() {\n return [\n {\n template: GeneralDeviceRegistrationButtonComponent,\n priority: 100,\n category: 'single'\n } as RegisterDeviceItem,\n {\n template: ExtensibleDeviceRegistrationButtonComponent,\n priority: 50,\n category: 'single'\n } as RegisterDeviceItem,\n {\n template: ExtensibleBulkDeviceRegistrationButtonComponent,\n priority: 50,\n category: 'bulk'\n } as RegisterDeviceItem,\n {\n template: BulkDeviceRegistrationButtonComponent,\n priority: 100,\n category: 'bulk'\n } as RegisterDeviceItem\n ];\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport {\n CommonModule,\n CoreModule,\n DeviceBootstrapRealtimeService,\n DynamicFormsModule,\n hookNavigator,\n StepperModule\n} from '@c8y/ngx-components';\nimport { DeviceRegistrationViewComponent } from './device-registration-view.component';\nimport { GeneralDeviceRegistrationComponent } from './general/general-device-registration.component';\nimport { GeneralDeviceRegistrationButtonComponent } from './general/general-device-registration-button.component';\nimport { RegisterDeviceNavigationFactory } from './register-device-navigation.factory';\nimport { ExtensibleDeviceRegistrationButtonComponent } from './extensible/single/extensible-device-registration-button.component';\nimport { ExtensibleDeviceRegistrationModalComponent } from './extensible/single/extensible-device-registration-modal.component';\nimport { ExtensibleDeviceRegistrationService } from './extensible/single/extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationStepperComponent } from './extensible/single/extensible-device-registration-stepper.component';\nimport { ExtensibleBulkDeviceRegistrationModalComponent } from './extensible/bulk/extensible-bulk-device-registration-modal.component';\nimport { BulkExtensibleDeviceRegistrationService } from './extensible/bulk/extensible-bulk-device-registration.service';\nimport { BulkDeviceRegistrationModalComponent } from './bulk/bulk-device-registration-modal.component';\nimport { ExtensibleBulkDeviceRegistrationButtonComponent } from './extensible/bulk/extensible-bulk-device-registration-button.component';\nimport { BulkDeviceRegistrationButtonComponent } from './bulk/bulk-device-registration-button.component';\nimport { RegisterDeviceDropdownComponent } from './dropdown/register-device-dropdown.component';\nimport { hookDeviceRegistration } from './dropdown/register-device-extension.service';\nimport { DeviceRegistrationFactory } from './register-device.factory';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\n\nconst deviceRegistrationRoutes: Routes = [\n {\n path: 'deviceregistration',\n component: DeviceRegistrationViewComponent\n }\n];\n\n@NgModule({\n imports: [\n BsDropdownModule,\n PopoverModule,\n CommonModule,\n CoreModule,\n StepperModule,\n DynamicFormsModule,\n RouterModule.forChild(deviceRegistrationRoutes)\n ],\n declarations: [\n DeviceRegistrationViewComponent,\n GeneralDeviceRegistrationComponent,\n GeneralDeviceRegistrationButtonComponent,\n BulkDeviceRegistrationModalComponent,\n BulkDeviceRegistrationButtonComponent,\n ExtensibleDeviceRegistrationButtonComponent,\n ExtensibleDeviceRegistrationModalComponent,\n ExtensibleDeviceRegistrationStepperComponent,\n ExtensibleBulkDeviceRegistrationModalComponent,\n ExtensibleBulkDeviceRegistrationButtonComponent,\n RegisterDeviceDropdownComponent\n ],\n providers: [\n hookDeviceRegistration(DeviceRegistrationFactory),\n hookNavigator(RegisterDeviceNavigationFactory),\n DeviceBootstrapRealtimeService,\n ExtensibleDeviceRegistrationService,\n BulkExtensibleDeviceRegistrationService\n ]\n})\nexport class RegisterDeviceModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i1","i3.RegisterDeviceService","i6","i7","i8","i5","i9","i1.GeneralDeviceRegistrationService","i2","i1.RegisterDeviceExtensionService","i2.RegisterDeviceService","i4","i1.RegisterDeviceService","i5.GeneralDeviceRegistrationService","i9.RegisterDeviceDropdownComponent","i1.ExtensibleDeviceRegistrationService","i3.ExtensibleDeviceRegistrationService","i5.ExtensibleDeviceRegistrationStepperComponent","i2.BulkExtensibleDeviceRegistrationService","i1.BulkExtensibleDeviceRegistrationService"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-register-device.mjs","sources":["../../register-device/register-device.service.ts","../../register-device/extensible/base-device-registration.model.ts","../../register-device/bulk/bulk-device-registration-modal.component.ts","../../register-device/bulk/bulk-device-registration-modal.component.html","../../register-device/general/general-device-registration.component.ts","../../register-device/general/general-device-registration.component.html","../../register-device/general/general-device-registration.service.ts","../../register-device/general/general-device-registration-button.component.ts","../../register-device/general/general-device-registration-button.component.html","../../register-device/dropdown/register-device-extension.service.ts","../../register-device/dropdown/register-device-dropdown.component.ts","../../register-device/dropdown/register-device-dropdown.component.html","../../register-device/device-registration-view.component.ts","../../register-device/device-registration-view.component.html","../../register-device/register-device-navigation.factory.ts","../../register-device/extensible/base-extensible-device-registration.service.ts","../../register-device/extensible/single/extensible-device-registration.service.ts","../../register-device/extensible/single/extensible-device-registration-stepper.component.ts","../../register-device/extensible/single/extensible-device-registration-stepper.component.html","../../register-device/extensible/single/extensible-device-registration-modal.component.ts","../../register-device/extensible/single/extensible-device-registration-modal.component.html","../../register-device/extensible/single/extensible-device-registration-button.component.ts","../../register-device/extensible/single/extensible-device-registration-button.component.html","../../register-device/extensible/bulk/extensible-bulk-device-registration.service.ts","../../register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.ts","../../register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.html","../../register-device/extensible/bulk/extensible-bulk-device-registration-button.component.ts","../../register-device/extensible/bulk/extensible-bulk-device-registration-button.component.html","../../register-device/bulk/bulk-device-registration-button.component.ts","../../register-device/bulk/bulk-device-registration-button.component.html","../../register-device/register-device.factory.ts","../../register-device/register-device.module.ts","../../register-device/c8y-ngx-components-register-device.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n DeviceRegistrationService,\n DeviceRegistrationStatus,\n IDeviceRegistration,\n IDeviceRegistrationAccept,\n IDeviceRegistrationCreate,\n IDeviceRegistrationLimit,\n IResult,\n Paging\n} from '@c8y/client';\nimport { get, pick } from 'lodash-es';\nimport { BehaviorSubject, forkJoin, from, Observable, Subject } from 'rxjs';\nimport { AlertService, gettext, IRealtimeDeviceBootstrap } from '@c8y/ngx-components';\nimport { finalize, map, mergeMap, takeLast, takeUntil } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RegisterDeviceService {\n readonly _loading: Subject<boolean> = new Subject();\n readonly _limit: BehaviorSubject<IDeviceRegistrationLimit> = new BehaviorSubject({\n isReached: false\n });\n readonly _deviceRegistrationRequests: BehaviorSubject<{\n data: IDeviceRegistration[];\n paging?: Paging<IDeviceRegistration>;\n }> = new BehaviorSubject({ data: [] });\n readonly deviceRegistrationRequests$: Observable<{\n data: IDeviceRegistration[];\n paging?: Paging<IDeviceRegistration>;\n }> = this._deviceRegistrationRequests.asObservable();\n readonly loading$: Observable<boolean> = this._loading.asObservable();\n readonly limit$: Observable<IDeviceRegistrationLimit> = this._limit.asObservable();\n paging: Paging<IDeviceRegistration>;\n\n private readonly deviceRegUrl = '/deviceregistration';\n private endSubscriptions: Subject<void> = new Subject();\n\n constructor(\n private router: Router,\n private deviceRegService: DeviceRegistrationService,\n private alertService: AlertService\n ) {}\n\n isDeviceRegistration(): boolean {\n return get(this.router, 'url') === this.deviceRegUrl;\n }\n\n internalListUpdate(\n deviceRequests: IDeviceRegistration[],\n pagingObject?: Paging<IDeviceRegistration>\n ) {\n let { paging, data } = this._deviceRegistrationRequests.getValue();\n if (pagingObject) {\n paging = pagingObject;\n }\n data = [...data, ...deviceRequests].filter(deviceReq => deviceReq.type !== 'c8y_DataBroker');\n this._deviceRegistrationRequests.next({ data, paging });\n }\n\n onDeviceBootstrap(bsData: IRealtimeDeviceBootstrap) {\n const { id, status } = bsData;\n this._deviceRegistrationRequests.next({\n data: this.updateStatusById(id, status)\n });\n }\n\n list(pageSize = 100) {\n this._loading.next(true);\n this._deviceRegistrationRequests.next({ data: [], paging: undefined });\n\n from(this.deviceRegService.list({ pageSize, withTotalPages: true }))\n .pipe(\n takeUntil(this.endSubscriptions),\n finalize(() => this.limit())\n )\n .subscribe(\n res => {\n const { data, paging } = res;\n this.internalListUpdate(data, paging);\n this._loading.next(false);\n },\n err => {\n this._loading.next(false);\n this.alertService.addServerFailure(err);\n }\n );\n }\n\n createMultiple(newDeviceRequests: IDeviceRegistrationCreate[]) {\n if (newDeviceRequests && newDeviceRequests.length > 0) {\n this._loading.next(true);\n const newRequests$ = newDeviceRequests.map(element => {\n return from(\n this.deviceRegService.create(element).catch((err: IResult<IDeviceRegistration>) => ({\n res: err.res,\n data: { ...err.data, id: element.id }\n }))\n );\n });\n\n const groupedRequests: {\n success: IDeviceRegistration[];\n failed: IDeviceRegistration[];\n } = {\n success: [],\n failed: []\n };\n\n return forkJoin(newRequests$).pipe(\n mergeMap(resp =>\n resp.map(el => {\n el.res.ok\n ? groupedRequests.success.push(el.data)\n : groupedRequests.failed.push(el.data);\n return groupedRequests;\n })\n ),\n takeLast(1),\n finalize(() => {\n this.internalListUpdate(groupedRequests.success);\n this._loading.next(false);\n })\n );\n }\n }\n\n remove(id: string) {\n this._loading.next(true);\n from(this.deviceRegService.delete(id))\n .pipe(takeUntil(this.endSubscriptions))\n .subscribe(\n () => {\n this._deviceRegistrationRequests.next({\n data: this.removeDeviceRegistrationRequestById(id)\n });\n this._loading.next(false);\n this.alertService.success(gettext('Device registration cancelled.'));\n },\n err => {\n this._loading.next(false);\n this.alertService.addServerFailure(err);\n }\n );\n }\n\n accept(request: IDeviceRegistration) {\n this._loading.next(true);\n const payload = pick(request, ['id', 'securityToken']);\n from(this.deviceRegService.accept(payload))\n .pipe(takeUntil(this.endSubscriptions))\n .subscribe(\n () => {\n this._deviceRegistrationRequests.next({\n data: this.removeDeviceRegistrationRequestById(payload.id)\n });\n this.limit();\n this._loading.next(false);\n this.alertService.success(gettext('Device registration accepted.'));\n },\n err => {\n this._loading.next(false);\n this.alertService.addServerFailure(err);\n }\n );\n }\n\n acceptAll() {\n const acceptedDeviceRequests: IDeviceRegistrationAccept[] = [];\n const failedDeviceRequests: IDeviceRegistrationAccept[] = [];\n this._loading.next(true);\n\n from(this.deviceRegService.acceptAll())\n .pipe(\n takeUntil(this.endSubscriptions),\n map(({ data }) => {\n data.map(deviceRegistrationRequest => {\n if (deviceRegistrationRequest.successful) {\n acceptedDeviceRequests.push(deviceRegistrationRequest);\n this.removeDeviceRegistrationRequestById(deviceRegistrationRequest.id);\n } else {\n failedDeviceRequests.push(deviceRegistrationRequest);\n }\n });\n return data;\n }),\n finalize(() => {\n // update rendered list with successful accepted device registrations\n // see: this.updateStatusById(...)\n this.internalListUpdate([]);\n this.limit();\n this._loading.next(false);\n if (failedDeviceRequests.length > 0) {\n this.alertService.warning(\n gettext('Could not accept all pending registration requests.'),\n JSON.stringify(\n {\n failedDeviceRequests,\n acceptedDeviceRequests\n },\n undefined,\n 2\n )\n );\n } else {\n this.alertService.success(gettext('Accepted all pending registration requests.'));\n }\n })\n )\n .subscribe(\n () => {\n // empty by design\n },\n err => {\n this._loading.next(false);\n this.alertService.addServerFailure(err);\n }\n );\n }\n\n limit() {\n from(this.deviceRegService.limit())\n .pipe(takeUntil(this.endSubscriptions))\n .subscribe(\n res => this._limit.next(res.data),\n err => this.alertService.addServerFailure(err)\n );\n }\n\n getRequestByStatus(status: DeviceRegistrationStatus): IDeviceRegistration[] {\n return this._deviceRegistrationRequests.getValue().data.filter(req => req.status === status);\n }\n\n ngOnDestroy(): void {\n this.endSubscriptions.next();\n this.endSubscriptions.complete();\n }\n\n private updateStatusById(id: string, status: DeviceRegistrationStatus) {\n const items = this._deviceRegistrationRequests.getValue().data;\n const matchingElementIndex = items.findIndex(element => element.id === id);\n if (matchingElementIndex >= 0) {\n items[matchingElementIndex].status = status;\n }\n return items;\n }\n\n private removeDeviceRegistrationRequestById(id: string) {\n const items = this._deviceRegistrationRequests.getValue().data;\n const matchingElementIndex = items.findIndex(element => element.id === id);\n if (matchingElementIndex >= 0) {\n items.splice(matchingElementIndex, 1);\n }\n this._loading.next(false);\n return items;\n }\n}\n","export interface ApplicationExtension {\n name: string;\n description: string;\n type: string;\n}\n\nexport interface ExtensibleDeviceRegistrationProvider extends ApplicationExtension {\n contextPath: string;\n}\n\nexport const PRODUCT_EXPERIENCE_BASE_REGISTRATION = {\n EVENT: 'deviceRegistration',\n COMPONENT: {\n BULK: 'bulk-registration',\n EXTENSIBLE_BULK: 'bulk-extensible-registration',\n EXTENSIBLE_SINGLE: 'single-extensible-registration'\n },\n RESULT: { SUCCESS: 'registrationSuccess', FAILURE: 'registrationFailure' }\n} as const;\n","import { Component, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { DeviceRegistrationBulkService, IDeviceRegistrationBulkResult } from '@c8y/client';\nimport {\n C8yJSONSchema,\n C8yStepper,\n FeatureCacheService,\n GainsightService,\n gettext\n} from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { saveAs } from 'file-saver';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { PRODUCT_EXPERIENCE_BASE_REGISTRATION } from '../extensible/base-device-registration.model';\nimport { BulkFailedResult } from '../extensible/bulk/extensible-bulk-device-registration.model';\nimport { RegisterDeviceService } from '../register-device.service';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst registerDeviceBulkSchema: object = {\n $schema: 'https://json-schema.org/draft/2019-09/schema',\n type: 'object',\n properties: {\n csvBulkFile: {\n type: 'array',\n title: gettext('CSV file upload'),\n description: gettext(\n 'You can use file upload component to let users send files. This input accepts only a single CSV file.'\n ),\n contentMediaType: 'csv'\n }\n },\n required: ['csvBulkFile'],\n additionalProperties: false\n};\n\nconst simpleCsvHeaders: string[] = ['ID', 'PATH'];\nconst csvHeaders: string[] = [\n 'ID',\n 'TYPE',\n 'NAME',\n 'ICCID',\n 'IDTYPE',\n 'PATH',\n 'SHELL',\n 'AUTH_TYPE'\n];\nconst fullCsvHeaders: string[] = [...csvHeaders, 'CREDENTIALS'];\nexport const ESTCsvHeaders: string[] = [...csvHeaders, 'ENROLLMENT_OTP'];\n\n@Component({\n selector: 'bulk-device-registration',\n templateUrl: 'bulk-device-registration-modal.component.html'\n})\nexport class BulkDeviceRegistrationModalComponent {\n @ViewChild(C8yStepper, { static: true }) stepper: C8yStepper;\n message: string;\n success: boolean;\n pending: boolean;\n result: IDeviceRegistrationBulkResult;\n failedResult: BulkFailedResult;\n form = new FormGroup({});\n model = {};\n template: FormlyFieldConfig[];\n certificateAuthorityFeatureEnabled =\n this.featureCacheService.getFeatureState('certificate-authority');\n\n constructor(\n private jsonschema: C8yJSONSchema,\n private deviceRegistrationService: DeviceRegistrationBulkService,\n private registerDeviceService: RegisterDeviceService,\n private bsModalRef: BsModalRef,\n private gainsightService: GainsightService,\n private featureCacheService: FeatureCacheService,\n private translateService: TranslateService\n ) {}\n\n ngOnInit() {\n this.template = [this.jsonschema.toFieldConfig(registerDeviceBulkSchema)];\n }\n\n upload() {\n this.pending = true;\n const file = this.getFile(this.model);\n this.deviceRegistrationService\n .create(file)\n .then(({ res, data }) => {\n if (res.status < 400) {\n this.result = data;\n this.success = data.numberOfFailed === 0 && data.numberOfSuccessful === data.numberOfAll;\n this.message = this.success\n ? gettext('Device registration created.')\n : (this.message = gettext('Device registration failed.'));\n if (this.success) {\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.SUCCESS,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.BULK\n });\n } else {\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.BULK\n });\n }\n } else {\n this.failedResult = data as unknown as BulkFailedResult;\n this.message = gettext('Device registration failed.');\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.BULK\n });\n }\n this.model = {};\n this.pending = false;\n this.stepper.next();\n })\n .catch(() => {\n this.message = gettext('Error occurred while processing the uploaded file.');\n this.pending = false;\n this.stepper.next();\n });\n }\n\n downloadSimple() {\n return this.download(simpleCsvHeaders, gettext('Simple bulk registration - template.csv'));\n }\n\n downloadFull() {\n return this.download(fullCsvHeaders, gettext('Full bulk registration - template.csv'));\n }\n\n downloadEst() {\n return this.download(ESTCsvHeaders, gettext('EST registration - template.csv'));\n }\n\n download(headers: string[], fileName: string) {\n const headerRaw = headers.map(header => `\"${header}\"`).join(';');\n const binaryFile = new Blob([headerRaw], { type: 'text/csv' });\n saveAs(binaryFile, this.translateService.instant(fileName));\n }\n\n complete() {\n this.registerDeviceService.list();\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n private getFile(model): File {\n const csvBulkFile = (model as any)?.csvBulkFile;\n return csvBulkFile ? csvBulkFile[0]?.file : undefined;\n }\n}\n","<c8y-modal\n [title]=\"'Bulk device registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <i c8yIcon=\"upload\"></i>\n </ng-container>\n\n <c8y-stepper [hideStepProgress]=\"true\" linear id=\"modal-body\">\n <cdk-step>\n <p class=\"modal-subtitle sticky-top\" translate>Register devices in bulk</p>\n\n <c8y-form-group class=\"d-block p-24 p-t-16 p-b-0 m-b-0\">\n <formly-form [form]=\"form\" [fields]=\"template\" [model]=\"model\"></formly-form>\n </c8y-form-group>\n\n <div class=\"p-24 m-t-0 bg-level-1\">\n <div class=\"bg-gray-white separator-bottom p-t-16 p-b-16 p-l-24 p-r-24\">\n <div>\n <p class=\"m-b-8 text-medium\">\n <strong translate>Simple registration</strong>\n </p>\n <small class=\"text-muted\" translate>\n Creates all registration requests at once, then each one needs to go through regular\n acceptance process.\n </small>\n </div>\n <div class=\"m-b-16 m-t-16\">\n <a\n title=\"{{ 'Download template' | translate }}\"\n class=\"btn btn-default btn-sm\"\n target=\"_self\"\n (click)=\"downloadSimple()\"\n >\n <i c8yIcon=\"download\" translate></i>\n {{ 'Download template' | translate }}\n </a>\n </div>\n </div>\n <div class=\"bg-gray-white separator-bottom p-t-16 p-b-16 p-l-24 p-r-24\">\n <div>\n <p class=\"m-b-8 text-medium\">\n <strong translate>Full registration</strong>\n </p>\n <small class=\"text-muted\" translate>\n Creates all device credentials and devices using provided list of property values.\n Devices can start communicating with the platform immediately.\n </small>\n </div>\n <div class=\"m-b-16 m-t-16\">\n <a\n title=\"{{ 'Download template' | translate }}\"\n class=\"btn btn-default btn-sm\"\n target=\"_self\"\n (click)=\"downloadFull()\"\n >\n <i c8yIcon=\"download\" translate></i>\n {{ 'Download template' | translate }}\n </a>\n </div>\n </div>\n <div class=\"bg-gray-white separator-bottom p-t-16 p-b-16 p-l-24 p-r-24\" *ngIf=\"certificateAuthorityFeatureEnabled | async\">\n <div>\n <p class=\"m-b-8 text-medium\">\n <strong translate>Full registration with device certificate creation</strong>\n </p>\n <small class=\"text-muted\" translate>\n Creates device certificates and devices using the provided list of property values. Once the certificates are provisioned, the devices can immediately start communicating with the platform\n </small>\n </div>\n <div class=\"m-b-16 m-t-16\">\n <a\n title=\"{{ 'Download template' | translate }}\"\n class=\"btn btn-default btn-sm\"\n target=\"_self\"\n (click)=\"downloadEst()\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Download template' | translate }}\n </a>\n </div>\n </div>\n </div>\n\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"form.invalid\"\n [pending]=\"pending\"\n (onCancel)=\"cancel()\"\n (onNext)=\"upload()\"\n [labels]=\"{ next: 'Upload' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n\n <cdk-step state=\"final\">\n <div class=\"m-24\">\n <div *ngIf=\"success; else warning\">\n <c8y-operation-result\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n <ng-template #warning>\n <c8y-operation-result\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </ng-template>\n <c8y-list-group class=\"separator-top m-t-16\">\n <ng-container *ngIf=\"result; else failedResponse\">\n <c8y-li *ngIf=\"success; else fail\">\n <c8y-li-icon class=\"text-success\" icon=\"check-circle\"></c8y-li-icon>\n <p>{{ 'All devices have been processed.' | translate }}</p>\n <c8y-li-collapse>\n <pre><code>{{ result | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n <ng-template #fail>\n <c8y-li>\n <c8y-li-icon class=\"text-danger\" icon=\"ban\"></c8y-li-icon>\n <p\n ngNonBindable\n [translateParams]=\"{ count: result?.numberOfFailed, total: result?.numberOfAll }\"\n translate\n >\n Failed to process {{ count }} out of {{ total }}.\n </p>\n <c8y-li-collapse>\n <pre><code>{{ result | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n </ng-template>\n </ng-container>\n <ng-template #failedResponse>\n <c8y-li>\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <small>{{ failedResult?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ failedResult | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n [showButtons]=\"{ next: true }\"\n (onNext)=\"complete()\"\n [labels]=\"{ next: success ? 'Close' : 'Cancel' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy\n} from '@angular/core';\nimport { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';\nimport {\n TenantUiService,\n gettext,\n C8yStepper,\n memoize,\n GainsightService,\n FeatureCacheService\n} from '@c8y/ngx-components';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { from, Observable, Subject, defer, BehaviorSubject } from 'rxjs';\nimport { filter, shareReplay, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport {\n DeviceRegistrationBulkService,\n IManagedObject,\n InventoryService,\n IResultList,\n ITenant,\n TenantService\n} from '@c8y/client';\nimport { RegisterDeviceService } from '../register-device.service';\nimport { CdkStep } from '@angular/cdk/stepper';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ESTCsvHeaders } from '../bulk/bulk-device-registration-modal.component';\n\ninterface GeneralDeviceRegistrationModelType {\n id: string;\n tenant?: { id: string };\n group?: { id: string; name?: string };\n oneTimePassword?: string;\n}\n\n@Component({\n selector: 'c8y-general-device-registration',\n templateUrl: 'general-device-registration.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GeneralDeviceRegistrationComponent implements AfterViewInit, OnDestroy {\n readonly MANAGEMENT = 'management';\n readonly FILTER: object = {\n withTotalPages: true,\n pageSize: 25\n };\n\n useEST$ = new BehaviorSubject<boolean>(false);\n certificateAuthorityFeatureEnabled =\n this.featureCacheService.getFeatureState('certificate-authority');\n\n form = new FormGroup({});\n model = {\n devicesToCreate: [{} as GeneralDeviceRegistrationModelType]\n };\n options: FormlyFormOptions = {\n formState: {\n canLoadTenants: true,\n useEST: this.useEST$.getValue()\n }\n };\n\n PRODUCT_EXPERIENCE = {\n EVENT: 'deviceRegistration',\n COMPONENT: 'single-general-registration',\n RESULT: { SUCCESS: 'registrationSuccess', FAILURE: 'registrationFailure' }\n };\n\n isLoading$: Observable<boolean>;\n success: { id: string }[] = [];\n failed: { id: string; message?: string; details?: any }[] = [];\n\n fields: FormlyFieldConfig[] = [\n {\n type: 'array',\n key: 'devicesToCreate',\n props: {\n addText: gettext('Add device'),\n addTextDataCy: 'add-device'\n },\n fieldArray: {\n fieldGroup: [\n {\n key: 'id',\n type: 'string',\n focus: true,\n props: {\n placeholder: '0123ab32fcd',\n label: gettext('Device ID'),\n required: true\n },\n validators: {\n unique: {\n expression: (control: FormControl) => {\n const found = (\n control.root.get('devicesToCreate') as FormArray<\n FormGroup<{ id: FormControl<string> }>\n >\n ).controls\n .map(el => el.controls.id)\n .find(el => el !== control && el.value === control.value);\n return !found;\n },\n message: () => gettext('Device ID duplicates are not allowed')\n }\n }\n },\n {\n key: 'tenant',\n type: 'typeahead',\n expressions: {\n hide: field => {\n const formState = field.options?.formState;\n if (!formState?.canLoadTenants) {\n field.formControl.setValue(null);\n }\n return !formState?.canLoadTenants || false;\n }\n },\n defaultValue: { id: this.MANAGEMENT },\n props: {\n label: gettext('Add to tenant'),\n required: true,\n c8yForOptions: this.canLoadTenants$().pipe(\n filter(canLoad => canLoad),\n switchMap(() => this.getTenants$())\n ) as Observable<IResultList<ITenant>>,\n container: 'body',\n displayProperty: 'id',\n valueProperties: ['id']\n },\n hooks: {\n onInit: _field =>\n this.canLoadTenants$().pipe(\n tap(canLoad => {\n this.options.formState.canLoadTenants = canLoad;\n this.cd.detectChanges();\n })\n )\n }\n },\n {\n key: 'group',\n type: 'typeahead',\n expressions: {\n 'props.disabled': (field: FormlyFieldConfig) => {\n const formState = field.options?.formState;\n const model = field.model;\n if (formState?.canLoadTenants) {\n if (model?.tenant?.id !== this.MANAGEMENT) {\n field.formControl.setValue(null);\n }\n return !(model?.tenant?.id === this.MANAGEMENT);\n }\n delete field?.props?.description;\n return false;\n }\n },\n props: {\n disabled: false,\n label: gettext('Add to group'),\n description: gettext(\n 'You can add device to specific group for management tenant only.'\n ),\n container: 'body',\n displayProperty: 'name',\n valueProperties: ['id'],\n c8yForOptions: this.getGroups$()\n },\n hooks: {\n onInit: _field =>\n this.canLoadTenants$().pipe(\n tap(canLoad => {\n this.options.formState.canLoadTenants = canLoad;\n this.cd.detectChanges();\n })\n )\n }\n },\n {\n key: 'oneTimePassword',\n type: 'string',\n expressions: {\n hide: field => !field.options?.formState?.useEST\n },\n props: {\n placeholder: 'TruDN3H45L0',\n label: gettext('One-time password'),\n required: true\n },\n hooks: {\n onInit: _field =>\n this.useEST$.pipe(\n tap(useEST => {\n this.options.formState.useEST = useEST;\n this.cd.detectChanges();\n })\n )\n }\n }\n ]\n }\n }\n ];\n\n result = new Promise<void>((resolve, reject) => {\n this.onSuccessfulClosing = resolve;\n this.onCancel = reject;\n });\n\n private onSuccessfulClosing: () => void;\n private onCancel: () => void;\n\n private destroy$: Subject<void> = new Subject();\n private lastCreatedDevices: GeneralDeviceRegistrationModelType[] = [];\n\n constructor(\n private tenantUIService: TenantUiService,\n private tenantService: TenantService,\n private registerDeviceService: RegisterDeviceService,\n private inventoryService: InventoryService,\n private cd: ChangeDetectorRef,\n public bsModalRef: BsModalRef,\n private gainsightService: GainsightService,\n private deviceRegistrationService: DeviceRegistrationBulkService,\n private featureCacheService: FeatureCacheService\n ) {\n this.isLoading$ = this.registerDeviceService.loading$;\n }\n\n ngAfterViewInit() {\n this.cd.detectChanges();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n registerDevice(eventObject: { stepper: C8yStepper; step: CdkStep }) {\n !this.useEST$.getValue() ? this.create(eventObject) : this.registerByEst(eventObject);\n }\n\n fixErrors(event: { stepper: C8yStepper; step: CdkStep }, failedRequests: any) {\n if (failedRequests && failedRequests.length > 0) {\n this.options.resetModel({\n devicesToCreate: [\n ...this.lastCreatedDevices.filter(el =>\n failedRequests.map(data => data.id).includes(el.id)\n )\n ]\n });\n this.cd.detectChanges();\n }\n event?.stepper.previous();\n }\n\n close() {\n this.bsModalRef.hide();\n this.onSuccessfulClosing();\n }\n\n cancel() {\n this.bsModalRef.hide();\n this.onCancel();\n }\n\n private create(eventObject: { stepper: C8yStepper; step: CdkStep }) {\n if (this.model?.devicesToCreate?.length > 0) {\n this.lastCreatedDevices = [...this.model.devicesToCreate];\n\n const dataToSend = this.model.devicesToCreate.map(\n (el: GeneralDeviceRegistrationModelType) => {\n const { id, tenant, group } = el;\n let data: { id: string; tenantId?: string; groupId?: string } = { id };\n\n if (tenant?.id) {\n data = { ...data, tenantId: tenant.id };\n }\n\n if (group?.id) {\n data = { ...data, groupId: group.id };\n }\n\n return data;\n }\n );\n\n this.registerDeviceService\n .createMultiple(dataToSend)\n .pipe(takeUntil(this.destroy$))\n .subscribe(requests => {\n this.success = requests.success ?? [];\n if (this.success.length > 0) {\n this.gainsightService.triggerEvent(this.PRODUCT_EXPERIENCE.EVENT, {\n result: this.PRODUCT_EXPERIENCE.RESULT.SUCCESS,\n component: this.PRODUCT_EXPERIENCE.COMPONENT\n });\n }\n\n this.failed = requests.failed ?? [];\n if (this.failed.length > 0) {\n this.gainsightService.triggerEvent(this.PRODUCT_EXPERIENCE.EVENT, {\n result: this.PRODUCT_EXPERIENCE.RESULT.FAILURE,\n component: this.PRODUCT_EXPERIENCE.COMPONENT\n });\n }\n\n if (eventObject) {\n eventObject.stepper.next();\n }\n });\n }\n }\n\n private registerByEst(eventObject: { stepper: C8yStepper; step: CdkStep }) {\n this.lastCreatedDevices = [...this.model.devicesToCreate];\n this.deviceRegistrationService\n .create(this.convertObjectToCSVFile(this.model.devicesToCreate))\n .then(({ res, data }) => {\n if (res.status < 400) {\n this.failed = data.failedCreationList.map(value => {\n return {\n id: value.deviceId,\n message: value.failureReason\n };\n });\n const failedIds = new Set(this.failed.map(item => item.id));\n this.success = this.model.devicesToCreate.filter(item => !failedIds.has(item.id));\n }\n eventObject.stepper.next();\n })\n .catch(() => {\n eventObject.stepper.next();\n });\n }\n\n private convertObjectToCSVFile(data: any): File {\n const fullCsvHeaders = ESTCsvHeaders;\n\n const csvHeaders = fullCsvHeaders.join(';') + '\\n';\n const dataToSend = data.map(el => {\n return {\n ID: el.id,\n AUTH_TYPE: 'CERTIFICATES',\n ENROLLMENT_OTP: el.oneTimePassword,\n PATH: el.group?.id || '',\n TENANT: el.tenant?.id || ''\n };\n });\n\n const csvRows = dataToSend\n .map(row => fullCsvHeaders.map(header => row[header] ?? '').join(';'))\n .join('\\n');\n\n const csvContent = csvHeaders + csvRows;\n const blob = new Blob([csvContent], { type: 'text/csv' });\n return new File([blob], `ESTRegistrationFile.csv`, { type: 'text/csv' });\n }\n\n @memoize()\n private canLoadTenants$(): Observable<boolean> {\n return defer(() => from(this.tenantUIService.isManagementTenant())).pipe(shareReplay(1));\n }\n\n @memoize()\n private getTenants$(): Observable<IResultList<ITenant>> {\n return defer(() => from(this.tenantService.list(this.FILTER))).pipe(shareReplay(1));\n }\n\n @memoize()\n private getGroups$(): Observable<IResultList<IManagedObject>> {\n return defer(() =>\n from(\n this.inventoryService.listQuery(\n { __filter: { __has: 'c8y_IsDeviceGroup' }, __orderby: [{ name: 1 }] },\n { ...this.FILTER }\n )\n )\n ).pipe(shareReplay(1));\n }\n}\n","<c8y-modal\n [title]=\"'Register devices' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n linear\n c8y-modal-body\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"text-center sticky-top bg-component\">\n <p\n class=\"text-medium text-16 separator-bottom p-16\"\n translate\n >\n Register general devices\n </p>\n <label\n class=\"c8y-switch m-24 a-i-center\"\n title=\"{{ 'Create device certificates during device registration' | translate }}\"\n for=\"useEST\"\n *ngIf=\"certificateAuthorityFeatureEnabled | async\"\n >\n <input\n id=\"useEST\"\n name=\"useEST\"\n type=\"checkbox\"\n [ngModel]=\"useEST$.getValue()\"\n (ngModelChange)=\"useEST$.next($event)\"\n />\n <span></span>\n <span class=\"control-label\">\n {{ 'Create device certificates during device registration' | translate }}\n </span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'The device registration process includes creating device certificates, which are issued by the tenant\\'s Certificate Authority (CA).'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n </div>\n <div>\n <formly-form\n class=\"formly-group-array-cols d-block p-l-24 p-b-24 min-height-fit p-r-8\"\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n [ngClass]=\"{ 'p-t-24': !(certificateAuthorityFeatureEnabled | async) }\"\n ></formly-form>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onNext)=\"registerDevice($event)\"\n (onCancel)=\"cancel()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"!form?.valid\"\n [pending]=\"isLoading$ | async\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <div class=\"p-24 min-height-fit\">\n <c8y-operation-result\n class=\"lead\"\n type=\"success\"\n *ngIf=\"success.length === 1 && failed.length === 0\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n <c8y-operation-result\n class=\"lead\"\n type=\"error\"\n *ngIf=\"success.length === 0 && failed.length === 1\"\n text=\"{{ 'Failed to register device' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n\n <ng-container *ngIf=\"success.length > 1 || failed.length > 1\">\n <c8y-operation-result\n class=\"lead\"\n type=\"success\"\n *ngIf=\"failed.length === 0\"\n [text]=\"\n '{{ successfulDevicesCount }} devices registered'\n | translate: { successfulDevicesCount: success.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n <c8y-operation-result\n class=\"lead\"\n type=\"error\"\n *ngIf=\"success.length === 0\"\n [text]=\"\n '{{ failedDevicesCount }} devices failed to register'\n | translate: { failedDevicesCount: failed.length }\n \"\n [size]=\"84\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n </ng-container>\n\n <div\n class=\"p-l-24 p-r-24 text-center\"\n *ngIf=\"success.length > 0 && failed.length > 0\"\n >\n <c8y-operation-result\n class=\"lead\"\n type=\"error\"\n text=\"{{ 'Several devices failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n <p\n class=\"p-b-16 text-danger\"\n ngNonBindable\n translate\n [translateParams]=\"{ count: failed.length, total: failed.length + success.length }\"\n >\n Registration failed for {{ count }} devices out of {{ total }}.\n </p>\n </div>\n\n <div\n class=\"m-b-8 p-l-24 p-r-24\"\n data-cy=\"device-registration-success-message\"\n *ngIf=\"success.length > 0\"\n >\n <span\n *ngIf=\"!(useEST$ | async)\"\n translate\n >\n Turn on the registered devices and wait for connections to be established. Once a device\n is connected, its status will change to \"Pending acceptance\". You will need to approve\n it by clicking on the \"Accept\" button.\n </span>\n <span\n *ngIf=\"useEST$ | async\"\n translate\n >\n The successfully enrolled devices can now request signed certificates and use them to\n connect and authenticate to the platform via certificate-based authentication.\n </span>\n </div>\n\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li *ngFor=\"let fail of failed\">\n <c8y-li-icon\n class=\"text-danger\"\n [icon]=\"'ban'\"\n ></c8y-li-icon>\n <p>{{ fail?.id }}</p>\n <small>{{ fail?.message | translate }}</small>\n <c8y-li-collapse>\n <pre><code>{{ fail?.details | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n\n <c8y-li *ngFor=\"let s of success\">\n <c8y-li-icon\n class=\"text-success\"\n [icon]=\"'check-circle'\"\n ></c8y-li-icon>\n {{ s?.id }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"close()\"\n (onBack)=\"fixErrors($event, failed)\"\n [showButtons]=\"{ back: failed.length > 0, custom: true }\"\n [labels]=\"{ back: 'Fix errors', custom: 'Close' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n","import { inject, Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { GeneralDeviceRegistrationComponent } from './general-device-registration.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeneralDeviceRegistrationService {\n private modalService = inject(BsModalService);\n\n async open(initialState?: Partial<GeneralDeviceRegistrationComponent>) {\n const modalRef = this.modalService.show(GeneralDeviceRegistrationComponent, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true,\n initialState: {\n ...initialState\n }\n });\n\n return await modalRef.content.result;\n }\n}\n","import { Component } from '@angular/core';\nimport { GeneralDeviceRegistrationService } from './general-device-registration.service';\n\n@Component({\n selector: 'c8y-general-device-registration-button',\n templateUrl: 'general-device-registration-button.component.html'\n})\nexport class GeneralDeviceRegistrationButtonComponent {\n constructor(private registrationService: GeneralDeviceRegistrationService) {}\n\n async open() {\n try {\n await this.registrationService.open();\n } catch {\n // modal was closed\n }\n }\n}\n","<button title=\"{{ 'General' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'General' | translate }}\n</button>\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n ExtensionFactory,\n ExtensionPointWithoutStateForPlugins,\n fromTriggerOnce,\n GenericHookType,\n hookGeneric,\n PluginsResolveService,\n GenericHookOptions\n} from '@c8y/ngx-components';\nimport { flatten } from 'lodash';\nimport { Observable } from 'rxjs';\nimport { shareReplay, startWith } from 'rxjs/operators';\nimport { RegisterDeviceItem } from './RegisterDeviceItem';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n * { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n * { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n * { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type RegisterDeviceExtension =\n | RegisterDeviceItem\n | RegisterDeviceItem[]\n | ExtensionFactory<RegisterDeviceItem>;\n/**\n * A hook to use for Multi Provider extension.\n * @deprecated Consider using the `hookDeviceRegistration` function instead.\n */\nexport const HOOK_DEVICE_REGISTRATION = new InjectionToken<RegisterDeviceExtension>(\n 'HOOK_DEVICE_REGISTRATION'\n);\n\n/**\n * You can either provide a single `RegisterDeviceExtension` as parameter:\n * ```typescript\n * hookDeviceRegistration(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n * hookDeviceRegistration([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<RegisterDeviceExtension>`\n * ```typescript\n * export class MyDeviceRegistrationFactory implements ExtensionFactory<RegisterDeviceExtension> {...}\n * ...\n * hookDeviceRegistration(MyDeviceRegistrationFactory)\n * ```\n * A typed alternative to `HOOK_DEVICE_REGISTRATION`.\n * @param registration The `RegisterDeviceExtension`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookDeviceRegistration(\n registration: GenericHookType<RegisterDeviceExtension>,\n options?: Partial<GenericHookOptions>\n) {\n return hookGeneric<RegisterDeviceExtension>(registration, HOOK_DEVICE_REGISTRATION, options);\n}\n\n/**\n * A service which defines device registration options.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RegisterDeviceExtensionService extends ExtensionPointWithoutStateForPlugins<RegisterDeviceItem> {\n constructor(\n rootInjector: Injector,\n private router: Router,\n plugins: PluginsResolveService\n ) {\n super(rootInjector, plugins);\n this.items$ = this.setupItemsObservable();\n }\n\n protected setupItemsObservable(): Observable<RegisterDeviceItem[]> {\n return fromTriggerOnce<RegisterDeviceItem>(this.router, this.refresh$, [\n () =>\n flatten(\n this.injectors.map(injector => injector.get(HOOK_DEVICE_REGISTRATION, [], { self: true }))\n ),\n () => this.factories\n ]).pipe(startWith([]), shareReplay(1));\n }\n}\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { RegisterDeviceService } from '../register-device.service';\nimport { RegisterDeviceExtensionService } from './register-device-extension.service';\n\n@Component({\n selector: 'c8y-register-device-dropdown',\n templateUrl: './register-device-dropdown.component.html'\n})\nexport class RegisterDeviceDropdownComponent {\n single$ = this.registerDeviceExtensionService.items$.pipe(\n map(items =>\n items.filter(item => item.category === 'single').sort((a, b) => b.priority - a.priority)\n )\n );\n\n bulk$ = this.registerDeviceExtensionService.items$.pipe(\n map(items =>\n items.filter(item => item.category === 'bulk').sort((a, b) => b.priority - a.priority)\n )\n );\n\n limit$: Observable<boolean> = this.registerDeviceService.limit$.pipe(\n map(limit => limit.isReached)\n );\n\n constructor(\n private registerDeviceExtensionService: RegisterDeviceExtensionService,\n private registerDeviceService: RegisterDeviceService\n ) {}\n}\n","<div class=\"dropdown\" dropdown>\n <button\n *ngIf=\"!(limit$ | async); else disable\"\n title=\"{{ 'Register device' | translate }}\"\n type=\"button\"\n class=\"dropdown-toggle c8y-dropdown d-flex a-i-center\"\n dropdownToggle\n aria-haspopup=\"true\"\n data-cy=\"register-device--dropdown-button\"\n >\n <span class=\"text-truncate\" translate>Register device</span>\n <i [c8yIcon]=\"'caret-down'\" class=\"m-l-4 text-primary\"></i>\n </button>\n <ng-template #disable>\n <button\n title=\"{{ 'Device registration disabled' | translate }}\"\n type=\"button\"\n class=\"btn btn-clean d-flex p-l-8\"\n disabled\n >\n <span class=\"text-truncate\" translate>Register device</span>\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n </ng-template>\n\n <!-- dropdown for normal screen sizes -->\n <ul class=\"dropdown-menu dropdown-menu-right hidden-xs\" data-cy=\"register-device--dropdown\" *dropdownMenu>\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <!-- fake dropdown for mobile screen sizes. *dropdownMenu is missing by design! -->\n <ul class=\"dropdown-menu dropdown-menu visible-xs\">\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ng-template #dropdown>\n <ng-container *ngIf=\"single$ | async as single\">\n <li class=\"dropdown-header\" *ngIf=\"single.length > 0\" translate data-cy=\"single-group\">Single registration</li>\n <li *ngFor=\"let item of single\">\n <ng-container *c8yOutlet=\"item.template\"></ng-container>\n </li>\n </ng-container>\n <ng-container *ngIf=\"bulk$ | async as bulk\">\n <li class=\"dropdown-header\" *ngIf=\"bulk.length > 0\" translate data-cy=\"bulk-group\">Bulk registration</li>\n <li *ngFor=\"let item of bulk\">\n <ng-container *c8yOutlet=\"item.template\"></ng-container>\n </li>\n </ng-container>\n </ng-template>\n</div>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport {\n DeviceRegistrationSecurityMode,\n DeviceRegistrationStatus,\n IDeviceRegistration,\n IDeviceRegistrationLimit,\n Paging\n} from '@c8y/client';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { filter, map, switchMap, takeUntil } from 'rxjs/operators';\nimport {\n DeviceBootstrapRealtimeService,\n IRealtimeDeviceBootstrap,\n TenantUiService,\n ModalService,\n Status,\n gettext,\n OptionsService\n} from '@c8y/ngx-components';\nimport { RegisterDeviceService } from './register-device.service';\nimport { sortBy } from 'lodash-es';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { GeneralDeviceRegistrationService } from './general/general-device-registration.service';\n\n@Component({\n selector: 'c8y-device-registration-view',\n templateUrl: 'device-registration-view.component.html'\n})\nexport class DeviceRegistrationViewComponent implements OnInit, OnDestroy {\n deviceRequests$: Observable<{\n data: IDeviceRegistration[];\n paging?: Paging<IDeviceRegistration>;\n }>;\n limit$: Observable<IDeviceRegistrationLimit>;\n limitReachedInfo$: Observable<string>;\n requireSecurityToken = false;\n isManagementTenant = false;\n isLoading = false;\n gridOrList: 'interact-list' | 'interact-grid' = 'interact-grid';\n status = DeviceRegistrationStatus;\n\n readonly statusProps = {\n [DeviceRegistrationStatus.WAITING_FOR_CONNECTION]: {\n label: gettext('Waiting for connection'),\n icon: 'unlink',\n cls: 'text-danger'\n },\n [DeviceRegistrationStatus.PENDING_ACCEPTANCE]: {\n label: gettext('Pending acceptance'),\n icon: 'circle',\n cls: 'text-info'\n },\n [DeviceRegistrationStatus.ACCEPTED]: {\n label: gettext('Accepted'),\n icon: 'check-circle',\n cls: 'text-success'\n },\n [DeviceRegistrationStatus.BLOCKED]: {\n label: gettext('Blocked'),\n icon: 'ban',\n cls: 'text-danger'\n }\n };\n\n private unsubscribe$: Subject<void> = new Subject();\n private readonly _securityTokenPolicy: BehaviorSubject<DeviceRegistrationSecurityMode> =\n new BehaviorSubject(DeviceRegistrationSecurityMode.OPTIONAL);\n\n constructor(\n private registerDeviceService: RegisterDeviceService,\n private bootstrapRealtimeService: DeviceBootstrapRealtimeService,\n private tenantUiService: TenantUiService,\n private modalService: ModalService,\n private translateService: TranslateService,\n private optionsService: OptionsService,\n private activatedRoute: ActivatedRoute,\n private generalRegistration: GeneralDeviceRegistrationService\n ) {}\n\n ngOnInit() {\n this.loadAll();\n this.setIsManagementTenant();\n this.setRequireSecurityToken();\n\n this.deviceRequests$ = this.registerDeviceService.deviceRegistrationRequests$.pipe(\n map(req => ({\n data: sortBy(req.data, [\n ({ status }) => (status === DeviceRegistrationStatus.PENDING_ACCEPTANCE ? 0 : 1),\n '-creationTime'\n ]),\n paging: req.paging\n }))\n );\n this.limit$ = this.registerDeviceService.limit$;\n this.limitReachedInfo$ = this.limit$.pipe(\n filter(deviceRegistrationLimit => deviceRegistrationLimit.isReached),\n switchMap(({ limit }) =>\n this.translateService.stream(\n gettext(\n 'You reached the limit of {{ maxDevices }} devices. No more devices can be registered.'\n ),\n { maxDevices: limit }\n )\n )\n );\n this.registerDeviceService.loading$\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(value => (this.isLoading = value));\n\n this.bootstrapRealtimeService\n .onUpdate$()\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((bootstrap: IRealtimeDeviceBootstrap) => {\n this.registerDeviceService.onDeviceBootstrap(bootstrap);\n });\n\n this.handleQueryParams();\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n updateList(data) {\n this.registerDeviceService.internalListUpdate(data);\n }\n\n async handleQueryParams() {\n const { externalId, 'one-time-password': oneTimePassword } =\n this.activatedRoute.snapshot.queryParams;\n\n if (!externalId) {\n return;\n }\n try {\n await this.generalRegistration.open({\n useEST$: new BehaviorSubject<boolean>(!!oneTimePassword),\n model: {\n devicesToCreate: [\n {\n id: externalId,\n oneTimePassword\n }\n ]\n }\n });\n this.loadAll();\n } catch (e) {\n // modal closed\n }\n }\n\n async delete(id: string) {\n const confirmed = await this.modalService.confirm(\n gettext('Cancel device registration'),\n this.translateService.instant(\n gettext(\n 'You are about to cancel device registration for ID \"{{id}}\". Do you want to proceed?'\n ),\n { id }\n ),\n Status.DANGER,\n {\n ok: gettext('Cancel registration'),\n cancel: gettext('Close')\n }\n );\n\n if (confirmed) {\n this.registerDeviceService.remove(id);\n }\n }\n\n accept(request: IDeviceRegistration) {\n this.registerDeviceService.accept(request);\n }\n\n acceptAll() {\n this.registerDeviceService.acceptAll();\n }\n\n canAcceptAll() {\n const pendingRequests = this.registerDeviceService.getRequestByStatus(\n DeviceRegistrationStatus.PENDING_ACCEPTANCE\n );\n return !(pendingRequests.length > 0 && !this.requireSecurityToken);\n }\n\n loadAll() {\n this.registerDeviceService.list();\n }\n\n displayMode(listClass: 'interact-list' | 'interact-grid') {\n this.gridOrList = listClass;\n }\n\n async setRequireSecurityToken() {\n const mode: DeviceRegistrationSecurityMode =\n (await this.optionsService.getTenantOption<DeviceRegistrationSecurityMode>(\n 'device-registration',\n 'security-token.policy',\n DeviceRegistrationSecurityMode.OPTIONAL\n )) as DeviceRegistrationSecurityMode;\n this._securityTokenPolicy.next(mode);\n this.requireSecurityToken = mode === DeviceRegistrationSecurityMode.REQUIRED;\n }\n\n async setIsManagementTenant() {\n this.isManagementTenant = await this.tenantUiService.isManagementTenant();\n }\n\n shouldShowSecurityTokenInput(data: IDeviceRegistration) {\n return (\n data &&\n data.status === DeviceRegistrationStatus.PENDING_ACCEPTANCE &&\n this.showTokenInputBasedOnSecurityMode()\n );\n }\n\n showTokenInputBasedOnSecurityMode() {\n return this._securityTokenPolicy.getValue() !== DeviceRegistrationSecurityMode.IGNORED;\n }\n}\n","<ng-container *ngIf=\"deviceRequests$ | async as deviceRequestList\">\n <c8y-title>\n {{ 'Device registration' | translate }}\n <small *ngIf=\"deviceRequestList.data.length === 1\">1 {{ 'new device' | translate }}</small>\n <small *ngIf=\"deviceRequestList.data.length > 1\">\n {{ deviceRequestList.data.length }} {{ 'new devices' | translate }}\n </small>\n </c8y-title>\n\n <c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'exchange'\"\n [label]=\"'Devices' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-connect'\"\n [label]=\"'Device registration' | translate\"\n ></c8y-breadcrumb-item>\n </c8y-breadcrumb>\n\n <c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n >\n <c8y-list-display-switch (onListClassChange)=\"displayMode($event)\"></c8y-list-display-switch>\n </c8y-action-bar-item>\n\n <ng-container *ngIf=\"limit$ | async as limitStatus\">\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Accept all' | translate }}\"\n type=\"button\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n (click)=\"acceptAll()\"\n [disabled]=\"canAcceptAll() || limitStatus?.isReached\"\n >\n <i [c8yIcon]=\"'check'\"></i>\n {{ 'Accept all' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"9\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadAll()\"\n [disabled]=\"isLoading\"\n >\n <i\n [c8yIcon]=\"'refresh'\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n >\n <c8y-register-device-dropdown></c8y-register-device-dropdown>\n </c8y-action-bar-item>\n\n <c8y-help\n src=\"/docs/device-management-application/registering-devices/#registering-devices\"\n ></c8y-help>\n\n <ng-container *ngIf=\"deviceRequestList.data.length > 0; else noData\">\n <div\n class=\"card-group\"\n [ngClass]=\"gridOrList\"\n >\n <!-- START interact-list sticky header START -->\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"gridOrList === 'interact-list'\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header p-l-40\">\n <p translate>Device</p>\n </div>\n <div class=\"card-block card-column-30 p-l-0 m-l-8\">\n <p translate>Status</p>\n </div>\n <div\n class=\"card-block card-column-30 p-0\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <p translate>Security token</p>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Security token is required if the connected device uses it.' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"card-footer card-column-50\">\n <div\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-30\">\n {{ 'By`user`' | translate }}\n </div>\n <div class=\"card-column-20\">\n {{ 'Tenant ID' | translate }}\n </div>\n </div>\n <ng-template #noManagement>\n <div class=\"d-contents\">\n <div class=\"card-column-50\">\n {{ 'Created' | translate }}\n </div>\n <div class=\"card-column-50\">\n {{ 'By`user`' | translate }}\n </div>\n </div>\n </ng-template>\n </div>\n <div\n class=\"card-actions-group\"\n style=\"min-width: 176px\"\n >\n <div class=\"btn btn-xs invisible\">\n <!--EMPTY by design-->\n </div>\n </div>\n </div>\n </div>\n <!-- END interact-list sticky header END -->\n\n <div\n class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\"\n *ngIf=\"limitStatus?.isReached\"\n >\n <p\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n >\n <strong>\n {{ limitReachedInfo$ | async }}\n </strong>\n <br />\n <span translate>Please contact your platform administrator.</span>\n </p>\n </div>\n\n <ng-container *ngFor=\"let singleRequest of deviceRequestList.data\">\n <div class=\"col-xs-12 col-sm-6 col-md-4 col-lg-3\">\n <div class=\"card\">\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n [class]=\"statusProps[singleRequest.status].cls\"\n [c8yIcon]=\"statusProps[singleRequest.status].icon\"\n ></i>\n </div>\n <p\n class=\"card-title text-truncate\"\n title=\"{{ singleRequest.id }}\"\n >\n {{ singleRequest.id }}\n </p>\n </div>\n\n <div class=\"card-block text-center card-column-30\">\n <span\n class=\"text-label-small\"\n translate\n >\n Status\n </span>\n <p>\n <i\n class=\"icon-spin text-primary\"\n c8yIcon=\"refresh\"\n *ngIf=\"singleRequest.status === status.WAITING_FOR_CONNECTION\"\n ></i>\n {{ statusProps[singleRequest.status].label | translate }}\n </p>\n </div>\n\n <ng-container *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\">\n <div\n class=\"card-block text-center card-column-30 p-t-0\"\n [ngClass]=\"{ 'p-b-0': !shouldShowSecurityTokenInput(singleRequest) }\"\n *ngIf=\"showTokenInputBasedOnSecurityMode()\"\n >\n <ng-container *ngIf=\"shouldShowSecurityTokenInput(singleRequest)\">\n <span\n class=\"text-label-small\"\n *ngIf=\"gridOrList !== 'interact-list'\"\n translate\n >\n Security token\n </span>\n <input\n class=\"form-control\"\n type=\"text\"\n [(ngModel)]=\"singleRequest.securityToken\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'A1e3gh5ds' }\"\n [required]=\"requireSecurityToken\"\n />\n </ng-container>\n </div>\n\n <div\n class=\"card-actions-group d-flex a-i-center j-c-center\"\n style=\"min-width: 176px\"\n >\n <button\n class=\"btn btn-sm\"\n title=\"{{\n singleRequest.status === status.PENDING_ACCEPTANCE\n ? ('Remove' | translate)\n : ('Cancel' | translate)\n }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn-danger': singleRequest.status === status.PENDING_ACCEPTANCE,\n 'btn-default': singleRequest.status !== status.PENDING_ACCEPTANCE\n }\"\n (click)=\"delete(singleRequest.id)\"\n [disabled]=\"isLoading\"\n >\n <span *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\">\n {{ 'Remove' | translate }}\n </span>\n <span *ngIf=\"singleRequest.status !== status.PENDING_ACCEPTANCE\">\n {{ 'Cancel' | translate }}\n </span>\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Accept' | translate }}\"\n type=\"button\"\n (click)=\"accept(singleRequest)\"\n *ngIf=\"singleRequest.status === status.PENDING_ACCEPTANCE\"\n [disabled]=\"\n isLoading ||\n limitStatus?.isReached ||\n (!singleRequest.securityToken && requireSecurityToken)\n \"\n >\n {{ 'Accept' | translate }}\n </button>\n </div>\n </ng-container>\n\n <div class=\"card-footer separator text-center card-column-50\">\n <small\n class=\"d-contents\"\n *ngIf=\"isManagementTenant; else noManagement\"\n >\n <div\n class=\"d-contents\"\n *ngIf=\"singleRequest.creationTime && singleRequest.owner\"\n >\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-30 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n <span class=\"card-column-20\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n in`tenant`\n </span>\n <span>{{ singleRequest.tenantId }}</span>\n </span>\n </div>\n <div\n class=\"d-contents\"\n *ngIf=\"!singleRequest.creationTime || !singleRequest.owner\"\n >\n <div class=\"card-column-50\"></div>\n <div class=\"card-column-30\"></div>\n <span\n class=\"text-label-small\"\n translate\n >\n Created in`tenant`\n </span>\n <div class=\"card-column-20\">\n <span>\n {{ singleRequest.tenantId }}\n </span>\n </div>\n </div>\n </small>\n <ng-template #noManagement>\n <small class=\"d-contents\">\n <span class=\"card-column-50\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n Created on`date`\n </span>\n <span data-cy=\"device-registration--creation-date\">\n {{ singleRequest.creationTime | c8yDate }}\n </span>\n </span>\n <span class=\"card-column-50 text-truncate\">\n <span\n class=\"text-label-small m-l-4 m-r-4\"\n translate\n >\n by`user`\n </span>\n <span\n title=\"{{ singleRequest.owner }}\"\n data-cy=\"device-registration--created-by\"\n >\n {{ singleRequest.owner }}\n </span>\n </span>\n </small>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <c8y-load-more\n [paging]=\"deviceRequestList.paging\"\n [hidden]=\"true\"\n (onLoad)=\"updateList($event)\"\n ></c8y-load-more>\n </ng-container>\n\n <ng-template #noData>\n <div class=\"c8y-empty-state m-t-40 text-center\">\n <h1 class=\"c8y-icon c8y-icon-device-connect c8y-icon-duocolor\"></h1>\n <ng-container *ngIf=\"limitStatus?.isReached; else limitNotReached\">\n <h3>\n {{ limitReachedInfo$ | async }}\n </h3>\n <p translate>Please contact your platform administrator.</p>\n </ng-container>\n <ng-template #limitNotReached>\n <h3 translate>No pending registrations to display.</h3>\n <p\n *c8yIfAllowed=\"['ROLE_DEVICE_CONTROL_ADMIN']\"\n translate\n >\n Use the \"Register device\" dropdown in the top right corner.\n </p>\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n","import { Injectable } from '@angular/core';\nimport { gettext, NavigatorNode, NavigatorNodeFactory, Permissions } from '@c8y/ngx-components';\n\n@Injectable()\nexport class RegisterDeviceNavigationFactory implements NavigatorNodeFactory {\n constructor(private permissions: Permissions) {}\n get() {\n const userHasPermission = this.permissions.hasAnyRole([\n Permissions.ROLE_DEVICE_CONTROL_ADMIN,\n Permissions.ROLE_DEVICE_CONTROL_READ\n ]);\n const nav: NavigatorNode[] = [];\n if (userHasPermission) {\n nav.push(\n new NavigatorNode({\n label: gettext('Registration'),\n icon: 'c8y-device-connect',\n path: '/deviceregistration',\n parent: gettext('Devices'),\n preventDuplicates: true,\n priority: 3000\n })\n );\n }\n return nav;\n }\n}\n","import { ApplicationService, ApplicationType, IApplication } from '@c8y/client';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport { flatMap } from 'lodash-es';\nimport {\n ApplicationExtension,\n ExtensibleDeviceRegistrationProvider\n} from './base-device-registration.model';\n\nexport class BaseExtensibleDeviceRegistrationService {\n constructor(\n protected applicationService: ApplicationService,\n protected stateService: AppStateService\n ) {}\n\n protected getMetadataUrl(contextPath: string): string {\n return `${this.getServiceBaseUrl(contextPath)}/metadata`;\n }\n\n protected getServiceBaseUrl(contextPath: string): string {\n if (!contextPath || contextPath.length === 0) {\n throw new Error(\n gettext('The URL of the microservice is misconfigured. A context path is missing.')\n );\n }\n return `/service/${contextPath}/deviceRegistration`;\n }\n\n protected async getDeviceRegistrationProviders(\n bulk: boolean\n ): Promise<ExtensibleDeviceRegistrationProvider[]> {\n let providers: ExtensibleDeviceRegistrationProvider[] = [];\n const microservices = await this.listMicroservicesByUser();\n if (microservices && microservices.length > 0) {\n providers = this.getProvidersFromManifestExtensions(microservices, bulk).concat(\n this.getProvidersFromExtensions(microservices, bulk)\n );\n }\n return providers;\n }\n\n private async listMicroservicesByUser() {\n const { data } = await this.applicationService.listByUser(\n this.stateService?.currentUser?.value?.userName,\n {\n dropOverwrittenApps: true,\n noPaging: true,\n pageSize: 100,\n withTotalPages: true\n }\n );\n return data?.filter(({ type }) => type === ApplicationType.MICROSERVICE);\n }\n\n private getProvidersFromManifestExtensions(\n applications: IApplication[],\n bulk: boolean\n ): ExtensibleDeviceRegistrationProvider[] {\n return flatMap(applications, application => {\n return application?.manifest?.extensions?.map(extension => {\n return { ...extension, contextPath: application.contextPath } as ApplicationExtension;\n });\n }).filter(provider => this.appSupportingExtensibleDeviceRegistrationForm(provider, bulk));\n }\n\n private getProvidersFromExtensions(\n applications: IApplication[],\n bulk: boolean\n ): ExtensibleDeviceRegistrationProvider[] {\n return flatMap(applications, application => {\n return application.extensions?.map(extension => {\n return {\n ...extension,\n contextPath: application.contextPath\n } as ExtensibleDeviceRegistrationProvider;\n });\n }).filter(provider => this.appSupportingExtensibleDeviceRegistrationForm(provider, bulk));\n }\n\n private appSupportingExtensibleDeviceRegistrationForm(\n extension: ExtensibleDeviceRegistrationProvider,\n bulk: boolean\n ): boolean {\n if (bulk) {\n return extension?.type === 'extensibleBulkDeviceRegistration';\n } else {\n return extension?.type === 'extensibleDeviceRegistration';\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ApplicationService, FetchClient, IResult } from '@c8y/client';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport { BaseExtensibleDeviceRegistrationService } from '../base-extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationSchema } from './extensible-device-registration.model';\nimport { ExtensibleDeviceRegistrationProvider } from '../base-device-registration.model';\n\n@Injectable()\nexport class ExtensibleDeviceRegistrationService extends BaseExtensibleDeviceRegistrationService {\n constructor(\n protected applicationService: ApplicationService,\n protected stateService: AppStateService,\n private client: FetchClient\n ) {\n super(applicationService, stateService);\n }\n\n async getSchema(contextPath: string): Promise<ExtensibleDeviceRegistrationSchema> {\n const response = await this.client.fetch(this.getMetadataUrl(contextPath), {\n params: { lang: this.stateService.state.lang }\n });\n const data = await response.json();\n\n if (!data || !data.c8y_DeviceRegistration) {\n throw new Error(\n gettext(\n 'The response of the microservice is incomplete. The device registration information is missing.'\n )\n );\n }\n\n return data.c8y_DeviceRegistration;\n }\n\n getDeviceRegistrationProviders(): Promise<ExtensibleDeviceRegistrationProvider[]> {\n return super.getDeviceRegistrationProviders(false);\n }\n\n async registerDevice(contextPath: string, model: any): Promise<IResult<any>> {\n const method = 'POST';\n const body = JSON.stringify(model);\n const headers = { 'content-type': 'application/json', accept: 'application/json' };\n const res = await this.client.fetch(this.getServiceBaseUrl(contextPath), {\n method,\n body,\n headers\n });\n const data = await res.json();\n return { res, data };\n }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { C8yStepper, GainsightService, gettext } from '@c8y/ngx-components';\nimport { FormGroup } from '@angular/forms';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ExtensibleDeviceRegistrationService } from './extensible-device-registration.service';\nimport { RegisterDeviceService } from '../../register-device.service';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { STEP_STATE } from '@angular/cdk/stepper';\nimport { PRODUCT_EXPERIENCE_BASE_REGISTRATION } from '../base-device-registration.model';\n\n@Component({\n selector: 'c8y-extensible-device-registration-stepper',\n templateUrl: 'extensible-device-registration-stepper.component.html'\n})\nexport class ExtensibleDeviceRegistrationStepperComponent implements OnInit {\n message: string;\n errorMessage: string;\n pendingStatus = false;\n forms: FormGroup[] = [];\n model: any = {};\n @ViewChild(C8yStepper, { static: true })\n stepper: C8yStepper;\n\n @Input() contextPath: string;\n @Input() labels: string[];\n @Input() steps: FormlyFieldConfig[][];\n\n private readonly SERVER_ERROR = gettext('Cannot register your device.');\n private readonly SUCCESSFUL_REGISTRATION = gettext('Your device was successfully registered.');\n private readonly NO_CONNECTION = gettext('Unable to reach the microservice.');\n\n constructor(\n private customProviderService: ExtensibleDeviceRegistrationService,\n private registerDeviceService: RegisterDeviceService,\n private bsModalRef: BsModalRef,\n private gainsightService: GainsightService\n ) {}\n\n ngOnInit() {\n this.steps.forEach(() => this.forms.push(new FormGroup({})));\n }\n\n async save() {\n this.pendingStatus = true;\n this.errorMessage = null;\n const { res, data } = await this.customProviderService\n .registerDevice(this.contextPath, this.model)\n .catch(() => {\n return {\n res: undefined,\n data: undefined\n };\n })\n .finally(() => {\n this.pendingStatus = false;\n this.stepper.next();\n });\n\n if (res && data) {\n if (res.status >= 400 && res.status < 500) {\n this.handleError(data.message || this.SERVER_ERROR);\n } else if (res.status >= 500) {\n this.handleError(this.SERVER_ERROR);\n } else {\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.SUCCESS,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_SINGLE\n });\n this.message = this.SUCCESSFUL_REGISTRATION;\n }\n } else {\n this.handleError(this.NO_CONNECTION);\n }\n }\n\n close() {\n this.bsModalRef.hide();\n }\n\n complete() {\n this.registerDeviceService.list();\n this.bsModalRef.hide();\n }\n\n goToFirstStep() {\n this.stepper.selectedIndex = 0;\n }\n\n isRegistrationStep() {\n return this.stepper.selectedIndex === this.steps.length - 1;\n }\n\n finalStepStatus() {\n if (this.stepper.selectedIndex === this.steps.length) {\n if (this.errorMessage) {\n return STEP_STATE.ERROR;\n } else {\n return STEP_STATE.DONE;\n }\n } else {\n return STEP_STATE.NUMBER;\n }\n }\n\n private handleError(message: string) {\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_SINGLE\n });\n this.errorMessage = message;\n }\n}\n","<c8y-stepper\n [disableProgressButtons]=\"true\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n [customClasses]=\"['m-40', 'm-t-8', 'm-b-16']\"\n>\n <cdk-step *ngFor=\"let step of steps; let i = index\" [stepControl]=\"forms[i]\" [label]=\"labels[i]\">\n <c8y-form-group class=\"form-group p-24 p-b-0 p-t-16\">\n <formly-form [form]=\"forms[i]\" [fields]=\"step\" [model]=\"model\"></formly-form>\n </c8y-form-group>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block modal-footer separator-top bg-component\"\n *ngIf=\"isRegistrationStep()\"\n [showButtons]=\"{ cancel: true, back: true, next: true }\"\n [labels]=\"{ next: 'Register' }\"\n (onCancel)=\"close()\"\n (onNext)=\"save()\"\n [pending]=\"pendingStatus\"\n [disabled]=\"forms[i].invalid\"\n ></c8y-stepper-buttons>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block modal-footer separator-top bg-component\"\n *ngIf=\"!isRegistrationStep()\"\n [showButtons]=\"{ cancel: true, back: i !== 0, next: true }\"\n [disabled]=\"forms[i].invalid\"\n (onCancel)=\"close()\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step [state]=\"finalStepStatus()\" label=\"{{ 'Summary' | translate }}\">\n <c8y-operation-result\n *ngIf=\"!errorMessage; else errorInfo\"\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n data-cy=\"success\"\n ></c8y-operation-result>\n <ng-template #errorInfo>\n <c8y-operation-result\n text=\"{{ errorMessage | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n data-cy=\"error\"\n ></c8y-operation-result>\n </ng-template>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block modal-footer separator-top bg-component\"\n [showButtons]=\"{ cancel: errorMessage, back: errorMessage, next: !errorMessage }\"\n [labels]=\"{ back: 'Fix issue', next: 'Close' }\"\n (onCancel)=\"close()\"\n (onNext)=\"complete()\"\n (onBack)=\"goToFirstStep()\"\n ></c8y-stepper-buttons>\n </cdk-step>\n</c8y-stepper>\n","import { Component, OnInit } from '@angular/core';\nimport { C8yJSONSchema, gettext } from '@c8y/ngx-components';\nimport { ExtensibleDeviceRegistrationService } from './extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationSchema } from './extensible-device-registration.model';\nimport { JSONSchema7 } from 'json-schema';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'extensible-device-registration-modal',\n templateUrl: 'extensible-device-registration-modal.component.html'\n})\nexport class ExtensibleDeviceRegistrationModalComponent implements OnInit {\n title: string;\n loadingErrorMessage: string;\n pages: FormlyFieldConfig[][];\n labels: string[] = [];\n contextPath: string;\n\n constructor(\n public bsModalRef: BsModalRef,\n private jsonschema: C8yJSONSchema,\n private registrationService: ExtensibleDeviceRegistrationService\n ) {}\n\n async ngOnInit() {\n const { title, pages }: ExtensibleDeviceRegistrationSchema = await this.registrationService\n .getSchema(this.contextPath)\n .catch(error => {\n this.loadingErrorMessage =\n error?.message || gettext('Cannot fetch a form definition from the microservice.');\n return {\n title: gettext('Error')\n };\n });\n this.title = title;\n this.pages = pages?.map((step: JSONSchema7) => {\n this.labels.push(step.title);\n return [this.jsonschema.toFieldConfig(step) as FormlyFieldConfig];\n });\n }\n}\n","<c8y-modal\n [title]=\"title | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span class=\"c8y-icon c8y-icon-device-connect\"></span>\n </ng-container>\n <ng-container *ngIf=\"pages as steps; else loadingOrError\">\n <c8y-extensible-device-registration-stepper\n c8y-modal-body\n [steps]=\"steps\"\n [labels]=\"labels\"\n [contextPath]=\"contextPath\"\n ></c8y-extensible-device-registration-stepper>\n </ng-container>\n <ng-template #loadingOrError>\n <ng-container *ngIf=\"loadingErrorMessage; else loading\">\n <c8y-operation-result\n class=\"lead text-regular\"\n type=\"error\"\n text=\"{{ loadingErrorMessage | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n data-cy=\"error\"\n ></c8y-operation-result>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"bsModalRef.hide()\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-container>\n <ng-template #loading>\n <div class=\"modal-header modal-header-info text-center\">\n <c8y-loading\n class=\"text-center\"\n layout=\"application\"\n [message]=\"'Loading the registration form definition…' | translate\"\n ></c8y-loading>\n </div>\n </ng-template>\n </ng-template>\n</c8y-modal>\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ExtensibleDeviceRegistrationService } from './extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationModalComponent } from './extensible-device-registration-modal.component';\nimport { ExtensibleDeviceRegistrationProvider } from '../base-device-registration.model';\n\n@Component({\n selector: 'extensible-device-registration-provider',\n templateUrl: 'extensible-device-registration-button.component.html'\n})\nexport class ExtensibleDeviceRegistrationButtonComponent implements OnInit {\n providersMetaData: Promise<ExtensibleDeviceRegistrationProvider[]>;\n\n constructor(\n private deviceRegistrationService: ExtensibleDeviceRegistrationService,\n private modalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.providersMetaData = this.deviceRegistrationService.getDeviceRegistrationProviders();\n }\n\n click(providerMetaData: ExtensibleDeviceRegistrationProvider) {\n const { name, contextPath } = providerMetaData;\n this.modalService.show(ExtensibleDeviceRegistrationModalComponent, {\n initialState: { name, contextPath } as Partial<ExtensibleDeviceRegistrationModalComponent>,\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true\n });\n }\n}\n","<div *ngFor=\"let provider of providersMetaData | async\">\n <button title=\"{{ provider.name | translate }}\" type=\"button\" (click)=\"click(provider)\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ provider.name | translate }}\n </button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ApplicationService, FetchClient, IResult } from '@c8y/client';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport { BulkDescription, BulkResult } from './extensible-bulk-device-registration.model';\nimport { BaseExtensibleDeviceRegistrationService } from '../base-extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationProvider } from '../base-device-registration.model';\n\n@Injectable()\nexport class BulkExtensibleDeviceRegistrationService extends BaseExtensibleDeviceRegistrationService {\n constructor(\n protected applicationService: ApplicationService,\n protected stateService: AppStateService,\n private client: FetchClient\n ) {\n super(applicationService, stateService);\n }\n\n getDeviceRegistrationProviders(): Promise<ExtensibleDeviceRegistrationProvider[]> {\n return super.getDeviceRegistrationProviders(true);\n }\n\n async getBulkDescription(contextPath: string): Promise<BulkDescription> {\n const res = await this.client.fetch(this.getMetadataUrl(contextPath), {\n params: { lang: this.stateService.state.lang }\n });\n const { c8y_DeviceRegistration } = await res.json();\n\n if (!c8y_DeviceRegistration || !c8y_DeviceRegistration.bulk) {\n throw new Error(\n gettext(\n 'The response of the microservice is incomplete. The bulk registration information is missing.'\n )\n );\n }\n\n return c8y_DeviceRegistration.bulk;\n }\n\n async upload(csv: File, contextPath): Promise<IResult<BulkResult>> {\n const method = 'POST';\n const body = this.createBinaryRequestBody(csv);\n const res = await this.client.fetch(this.getBulkUrl(contextPath), { method, body });\n const data = await res.json();\n return { res, data };\n }\n\n getBulkUrl(contextPath: string): string {\n return `${this.getServiceBaseUrl(contextPath)}/bulk`;\n }\n\n private createBinaryRequestBody(file: any): FormData {\n const body = new FormData();\n const newFile = new File([file], file.name, { type: 'text/csv' });\n body.append('file', newFile, newFile.name);\n return body;\n }\n}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { IResult } from '@c8y/client';\nimport { C8yJSONSchema, C8yStepper, GainsightService, gettext } from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { RegisterDeviceService } from '../../register-device.service';\nimport { PRODUCT_EXPERIENCE_BASE_REGISTRATION } from '../base-device-registration.model';\nimport {\n BulkDescription,\n BulkFailedResult,\n BulkFileExample,\n BulkResult\n} from './extensible-bulk-device-registration.model';\nimport { BulkExtensibleDeviceRegistrationService } from './extensible-bulk-device-registration.service';\nconst extensibleDeviceRegistrationBulkSchema: object = {\n $schema: 'https://json-schema.org/draft/2019-09/schema',\n type: 'object',\n properties: {\n csvBulkFile: {\n type: 'array',\n title: gettext('CSV file upload'),\n description: gettext(\n 'You can use file upload component to let users send files. This input accepts only a single CSV file.'\n ),\n contentMediaType: 'csv'\n }\n },\n required: ['csvBulkFile'],\n additionalProperties: false\n};\n\n@Component({\n selector: 'extensible-device-registration-modal-component',\n templateUrl: 'extensible-bulk-device-registration-modal.component.html'\n})\nexport class ExtensibleBulkDeviceRegistrationModalComponent implements OnInit {\n @ViewChild(C8yStepper, { static: true }) stepper: C8yStepper;\n title: string;\n examples: BulkFileExample[];\n message: string;\n success: boolean;\n loadingError = false;\n pending = false;\n contextPath: string;\n result: BulkResult | BulkFailedResult;\n form = new FormGroup({});\n model = {};\n template: FormlyFieldConfig[];\n\n constructor(\n private jsonschema: C8yJSONSchema,\n private bulkExtensibleDeviceRegistrationService: BulkExtensibleDeviceRegistrationService,\n private registerDeviceService: RegisterDeviceService,\n private bsModalRef: BsModalRef,\n private gainsightService: GainsightService\n ) {}\n\n async ngOnInit() {\n const { title, exampleFileUrls }: BulkDescription =\n await this.bulkExtensibleDeviceRegistrationService\n .getBulkDescription(this.contextPath)\n .catch(error => {\n this.message = error.message;\n this.loadingError = true;\n\n return {\n title: gettext('Error'),\n exampleFileUrls: []\n };\n });\n\n this.title = title;\n this.template = [this.jsonschema.toFieldConfig(extensibleDeviceRegistrationBulkSchema)];\n this.examples = exampleFileUrls;\n }\n\n async upload() {\n this.pending = true;\n const { res, data }: IResult<BulkResult> = await this.bulkExtensibleDeviceRegistrationService\n .upload(this.getFile(this.model), this.contextPath)\n .catch(() => {\n return {\n res: undefined,\n data: undefined\n };\n })\n .finally(() => {\n this.pending = false;\n this.stepper.next();\n });\n\n this.result = data;\n this.success = res?.status < 400;\n\n if (this.success) {\n this.message = gettext('Device registration created.');\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.SUCCESS,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_BULK\n });\n this.model = {};\n }\n\n if (res) {\n if (res.status >= 400 && res.status < 500) {\n this.message = gettext('Device registration failed.');\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_BULK\n });\n } else if (res.status >= 500) {\n this.message = gettext('Error occurred while processing the uploaded file.');\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_BASE_REGISTRATION.EVENT, {\n result: PRODUCT_EXPERIENCE_BASE_REGISTRATION.RESULT.FAILURE,\n component: PRODUCT_EXPERIENCE_BASE_REGISTRATION.COMPONENT.EXTENSIBLE_BULK\n });\n }\n } else {\n this.message = gettext('No internet connection. Unable to reach the microservice.');\n }\n }\n\n getFile(model) {\n const csvBulkFile = (model as any)?.csvBulkFile;\n return csvBulkFile ? csvBulkFile[0]?.file : undefined;\n }\n\n complete() {\n this.registerDeviceService.list();\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n}\n","<c8y-modal\n [title]=\"title | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <i c8yIcon=\"c8y-device-connect\"></i>\n </ng-container>\n <c8y-stepper [hideStepProgress]=\"true\" linear class=\"p-t-16\" c8y-modal-body>\n <ng-container *ngIf=\"!loadingError\">\n <cdk-step>\n <div class=\"sticky-top bg-component separator-bottom\">\n <p\n class=\"p-l-24 p-r-24 p-t-16 p-b-16 m-b-0 separator-bottom text-16 text-medium text-center bg-component\"\n translate\n >\n Register devices in bulk\n </p>\n <c8y-form-group class=\"p-24 p-t-16 p-b-8 m-b-0\">\n <formly-form [form]=\"form\" [fields]=\"template\" [model]=\"model\"></formly-form>\n </c8y-form-group>\n </div>\n <div\n *ngFor=\"let example of examples\"\n class=\"bg-gray-white separator-bottom p-t-16 p-b-16 p-l-24 p-r-24\"\n >\n <p class=\"m-b-8 text-medium\">\n {{ example.title | translate }}\n </p>\n <p class=\"small m-b-8\">{{ example.description | translate }}</p>\n <a\n title=\"{{ 'Download template' | translate }}\"\n class=\"btn btn-default btn-sm\"\n target=\"_self\"\n [href]=\"example.url\"\n download=\"{{ 'Example bulk registration - template.csv' | translate }}\"\n >\n <i c8yIcon=\"download\"></i>\n <span translate>Download template</span>\n </a>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [disabled]=\"form.invalid\"\n [pending]=\"pending\"\n (onCancel)=\"cancel()\"\n (onNext)=\"upload()\"\n [labels]=\"{ next: 'Upload' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </ng-container>\n <cdk-step state=\"final\">\n <div class=\"p-24\">\n <div *ngIf=\"success; else fail\">\n <c8y-operation-result\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n data-cy=\"success\"\n ></c8y-operation-result>\n <c8y-list-group class=\"separator-top m-t-16\">\n <c8y-li>\n <c8y-li-icon class=\"text-success\" [icon]=\"'check-circle'\"></c8y-li-icon>\n <p translate>File successfully uploaded.</p>\n <c8y-li-collapse>\n <pre><code>{{ result | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n </div>\n <ng-template #fail>\n <c8y-operation-result\n text=\"{{ message | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n data-cy=\"error\"\n ></c8y-operation-result>\n <c8y-list-group *ngIf=\"result\" class=\"separator-top m-t-16\">\n <c8y-li>\n <c8y-li-icon class=\"text-danger\" [icon]=\"'ban'\"></c8y-li-icon>\n <p translate>Bulk operation failed.</p>\n <c8y-li-collapse>\n <pre><code>{{ result | json }}</code></pre>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n </ng-template>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-component\"\n [showButtons]=\"{ next: true }\"\n (onNext)=\"complete()\"\n [labels]=\"{ next: success ? 'Complete' : 'Cancel' }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n</c8y-modal>\n","import { Component, OnInit } from '@angular/core';\nimport { BulkExtensibleDeviceRegistrationService } from './extensible-bulk-device-registration.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ExtensibleBulkDeviceRegistrationModalComponent } from './extensible-bulk-device-registration-modal.component';\nimport { ExtensibleDeviceRegistrationProvider } from '../base-device-registration.model';\n\n@Component({\n selector: 'extensible-device-registration-component',\n templateUrl: 'extensible-bulk-device-registration-button.component.html'\n})\nexport class ExtensibleBulkDeviceRegistrationButtonComponent implements OnInit {\n bulkProvidersMetaData: Promise<ExtensibleDeviceRegistrationProvider[]>;\n\n constructor(\n private bulkExtensibleDeviceRegistrationService: BulkExtensibleDeviceRegistrationService,\n private modalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.bulkProvidersMetaData =\n this.bulkExtensibleDeviceRegistrationService.getDeviceRegistrationProviders();\n }\n\n click(contextPath) {\n this.modalService.show(ExtensibleBulkDeviceRegistrationModalComponent, {\n initialState: { contextPath } as Partial<ExtensibleBulkDeviceRegistrationModalComponent>,\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true\n });\n }\n}\n","<div *ngFor=\"let provider of bulkProvidersMetaData | async\">\n <button\n title=\"{{ provider.name | translate }}\"\n type=\"button\"\n (click)=\"click(provider.contextPath)\"\n >\n <i c8yIcon=\"upload\"></i>\n {{ provider.name | translate }}\n </button>\n</div>\n","import { Component } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkDeviceRegistrationModalComponent } from './bulk-device-registration-modal.component';\nimport { ExtensibleDeviceRegistrationProvider } from '../extensible/base-device-registration.model';\n\n@Component({\n selector: 'extensible-device-registration-component',\n templateUrl: 'bulk-device-registration-button.component.html'\n})\nexport class BulkDeviceRegistrationButtonComponent {\n bulkProvidersMetaData: Promise<ExtensibleDeviceRegistrationProvider[]>;\n\n constructor(private modalService: BsModalService) {}\n\n click() {\n this.modalService.show(BulkDeviceRegistrationModalComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true\n });\n }\n}\n","<button title=\"{{ 'General' | translate }}\" type=\"button\" (click)=\"click()\">\n <i c8yIcon=\"upload\"></i>\n {{ 'General' | translate }}\n</button>\n","import { Injectable } from '@angular/core';\nimport { GeneralDeviceRegistrationButtonComponent } from './general/general-device-registration-button.component';\nimport { ExtensibleDeviceRegistrationButtonComponent } from './extensible/single/extensible-device-registration-button.component';\nimport { ExtensibleBulkDeviceRegistrationButtonComponent } from './extensible/bulk/extensible-bulk-device-registration-button.component';\nimport { BulkDeviceRegistrationButtonComponent } from './bulk/bulk-device-registration-button.component';\nimport { RegisterDeviceItem, RegisterDeviceFactory } from './dropdown/RegisterDeviceItem';\n\n@Injectable()\nexport class DeviceRegistrationFactory implements RegisterDeviceFactory {\n get() {\n return [\n {\n template: GeneralDeviceRegistrationButtonComponent,\n priority: 100,\n category: 'single'\n } as RegisterDeviceItem,\n {\n template: ExtensibleDeviceRegistrationButtonComponent,\n priority: 50,\n category: 'single'\n } as RegisterDeviceItem,\n {\n template: ExtensibleBulkDeviceRegistrationButtonComponent,\n priority: 50,\n category: 'bulk'\n } as RegisterDeviceItem,\n {\n template: BulkDeviceRegistrationButtonComponent,\n priority: 100,\n category: 'bulk'\n } as RegisterDeviceItem\n ];\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport {\n CommonModule,\n CoreModule,\n DeviceBootstrapRealtimeService,\n DynamicFormsModule,\n hookNavigator,\n StepperModule\n} from '@c8y/ngx-components';\nimport { DeviceRegistrationViewComponent } from './device-registration-view.component';\nimport { GeneralDeviceRegistrationComponent } from './general/general-device-registration.component';\nimport { GeneralDeviceRegistrationButtonComponent } from './general/general-device-registration-button.component';\nimport { RegisterDeviceNavigationFactory } from './register-device-navigation.factory';\nimport { ExtensibleDeviceRegistrationButtonComponent } from './extensible/single/extensible-device-registration-button.component';\nimport { ExtensibleDeviceRegistrationModalComponent } from './extensible/single/extensible-device-registration-modal.component';\nimport { ExtensibleDeviceRegistrationService } from './extensible/single/extensible-device-registration.service';\nimport { ExtensibleDeviceRegistrationStepperComponent } from './extensible/single/extensible-device-registration-stepper.component';\nimport { ExtensibleBulkDeviceRegistrationModalComponent } from './extensible/bulk/extensible-bulk-device-registration-modal.component';\nimport { BulkExtensibleDeviceRegistrationService } from './extensible/bulk/extensible-bulk-device-registration.service';\nimport { BulkDeviceRegistrationModalComponent } from './bulk/bulk-device-registration-modal.component';\nimport { ExtensibleBulkDeviceRegistrationButtonComponent } from './extensible/bulk/extensible-bulk-device-registration-button.component';\nimport { BulkDeviceRegistrationButtonComponent } from './bulk/bulk-device-registration-button.component';\nimport { RegisterDeviceDropdownComponent } from './dropdown/register-device-dropdown.component';\nimport { hookDeviceRegistration } from './dropdown/register-device-extension.service';\nimport { DeviceRegistrationFactory } from './register-device.factory';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\n\nconst deviceRegistrationRoutes: Routes = [\n {\n path: 'deviceregistration',\n component: DeviceRegistrationViewComponent\n }\n];\n\n@NgModule({\n imports: [\n BsDropdownModule,\n PopoverModule,\n CommonModule,\n CoreModule,\n StepperModule,\n DynamicFormsModule,\n RouterModule.forChild(deviceRegistrationRoutes)\n ],\n declarations: [\n DeviceRegistrationViewComponent,\n GeneralDeviceRegistrationComponent,\n GeneralDeviceRegistrationButtonComponent,\n BulkDeviceRegistrationModalComponent,\n BulkDeviceRegistrationButtonComponent,\n ExtensibleDeviceRegistrationButtonComponent,\n ExtensibleDeviceRegistrationModalComponent,\n ExtensibleDeviceRegistrationStepperComponent,\n ExtensibleBulkDeviceRegistrationModalComponent,\n ExtensibleBulkDeviceRegistrationButtonComponent,\n RegisterDeviceDropdownComponent\n ],\n providers: [\n hookDeviceRegistration(DeviceRegistrationFactory),\n hookNavigator(RegisterDeviceNavigationFactory),\n DeviceBootstrapRealtimeService,\n ExtensibleDeviceRegistrationService,\n BulkExtensibleDeviceRegistrationService\n ]\n})\nexport class RegisterDeviceModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i1","i3.RegisterDeviceService","i6","i7","i8","i5","i9","i1.GeneralDeviceRegistrationService","i2","i1.RegisterDeviceExtensionService","i2.RegisterDeviceService","i4","i1.RegisterDeviceService","i5.GeneralDeviceRegistrationService","i9.RegisterDeviceDropdownComponent","i1.ExtensibleDeviceRegistrationService","i3.ExtensibleDeviceRegistrationService","i5.ExtensibleDeviceRegistrationStepperComponent","i2.BulkExtensibleDeviceRegistrationService","i1.BulkExtensibleDeviceRegistrationService"],"mappings":"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"}