@c8y/ngx-components 1023.6.3 → 1023.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-app-logs.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-asset-properties.mjs +2 -2
- package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-asset-property-grid.component-B1q7kXRu.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Bl18pHcM.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C5QMFdX1.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-C-Lc5Ble.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BXfM7hTQ.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DN-f35bA.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-m7YeEj9R.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +1 -1
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-global-context.mjs +12 -12
- package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +1 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +1 -1
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-time-context.mjs +1 -1
- package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +4 -4
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +2 -2
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-protocol-lpwan.mjs","sources":["../../protocol-lpwan/multiple-lns-connectors/no-connections-found.component.ts","../../protocol-lpwan/multiple-lns-connectors/no-connections-found.component.html","../../protocol-lpwan/multiple-lns-connectors/multiple-lns-connector.model.ts","../../protocol-lpwan/multiple-lns-connectors/multiple-lns-connector.service.ts","../../protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.ts","../../protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.html","../../protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.ts","../../protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.html","../../protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.ts","../../protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.html","../../protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.ts","../../protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.html","../../protocol-lpwan/multiple-lns-connectors/multiple-lns-connectors.module.ts","../../protocol-lpwan/lpwan-set-device-protocol.service.ts","../../protocol-lpwan/lpwan-set-connections.component.ts","../../protocol-lpwan/lpwan-set-connections.component.html","../../protocol-lpwan/lpwan-set-device-protocol.component.ts","../../protocol-lpwan/lpwan-set-device-protocol.component.html","../../protocol-lpwan/lpwan-agent.guard.ts","../../protocol-lpwan/lpwan-protocol.module.ts","../../protocol-lpwan/c8y-ngx-components-protocol-lpwan.ts"],"sourcesContent":["import { Component, EventEmitter, Output, Input } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { EmptyStateComponent, IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\n\n@Component({\n selector: 'no-connections-found',\n templateUrl: './no-connections-found.component.html',\n imports: [EmptyStateComponent, IconDirective, C8yTranslatePipe]\n})\nexport class NoConnectionsFoundComponent {\n @Output() onAction: EventEmitter<void> = new EventEmitter();\n @Input() header: string = gettext('Connections');\n addConnection() {\n this.onAction.emit();\n }\n}\n","<div class=\"card content-fullpage split-view--5-7\">\n <div class=\"card-header separator grid__col--fullspan\">\n <h4>{{ header | translate}}</h4>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-ui-empty-state\n [icon]=\"'plug'\"\n [title]=\"'No connections found.' | translate\"\n [subtitle]=\"'Click below to add a new connection.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n title=\"{{ 'Add connection' | translate }}\"\n class=\"btn btn-primary\"\n (click)=\"addConnection()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add connection' | translate }}\n </button>\n </div>\n </div>\n <div class=\"inner-scroll split-view__detail\">\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-ui-empty-state\n [icon]=\"'more-details'\"\n [title]=\"'No settings to display.' | translate\"\n [subtitle]=\"'Add a connection.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n </div>\n</div>\n","export enum ConnectionType {\n ACTILITY,\n SIGFOX,\n LORIOT\n}\nexport interface Connection {\n name: string;\n baseUrl: string;\n username: string;\n password: string;\n description: string;\n}\nexport interface SigfoxConnection extends Connection {\n parentGroupId: string;\n}\nexport interface ActilityConnection extends Connection {\n profileId: string;\n routeApplicationServerId?: string;\n routeApplicationServerKey?: string;\n adminApiVersion: string;\n coreApiVersion: string;\n enterpriseConnection: boolean;\n}\n\nexport interface LoriotConnection extends Connection {\n providerType: string;\n}\n\nexport function isSigfoxConnection(\n connection: SigfoxConnection | ActilityConnection | LoriotConnection\n): connection is SigfoxConnection {\n return typeof (connection as SigfoxConnection).parentGroupId !== 'undefined';\n}\nexport function isActilityConnection(\n connection: SigfoxConnection | ActilityConnection | LoriotConnection\n): connection is ActilityConnection {\n return typeof (connection as ActilityConnection).profileId !== 'undefined';\n}\n\nexport function isLoriotConnection(\n connection: SigfoxConnection | ActilityConnection | LoriotConnection\n): connection is LoriotConnection {\n return typeof (connection as LoriotConnection).providerType !== 'undefined';\n}\n\nexport type LpwanState =\n | 'loadingConnection'\n | 'loadingError'\n | 'connectionAvailable'\n | 'connectionNotAvailable'\n | 'addConnections'\n | 'savedSuccessfully'\n | 'updateConnection';\n","import { Injectable } from '@angular/core';\nimport { FetchClient, IApplication, IFetchOptions, IFetchResponse } from '@c8y/client';\nimport { AlertService, AppStateService } from '@c8y/ngx-components';\nimport {\n ActilityConnection,\n isActilityConnection,\n isSigfoxConnection,\n SigfoxConnection,\n ConnectionType,\n LoriotConnection,\n isLoriotConnection\n} from './multiple-lns-connector.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MultipleLnsConnectorService {\n private headers: any;\n constructor(\n private client: FetchClient,\n private appStateService: AppStateService,\n private alertService: AlertService\n ) {\n this.headers = { 'Content-Type': 'application/json' };\n }\n\n async list(connectionType: ConnectionType) {\n const url = `${this.getBaseUrlByType(connectionType)}/lns-connection`;\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers\n };\n return this.client.fetch(url, options);\n }\n\n /**\n * Saves the connection.\n * @param connection The connection to be saved.\n * @param originalName The original name of the connection, required to perform an update.\n */\n async save(\n connection: ActilityConnection | SigfoxConnection | LoriotConnection,\n originalName: string = null\n ) {\n if (originalName) {\n return this.update(connection, originalName);\n }\n return this.create(connection);\n }\n\n async detail(\n connectionType: ConnectionType,\n connectionName: string\n ): Promise<ActilityConnection | SigfoxConnection | LoriotConnection | null> {\n const name = connectionName.toLocaleLowerCase();\n const url = `${this.getBaseUrlByType(connectionType)}/lns-connection/${encodeURIComponent(\n String(name)\n )}`;\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers\n };\n const res = await this.client.fetch(url, options);\n if (res.status === 200) {\n return await res.json();\n }\n return null;\n }\n\n async exists(connectionType: ConnectionType, connectionName: string): Promise<boolean> {\n const connection = await this.detail(connectionType, connectionName);\n return connection !== null;\n }\n\n async create(connection: ActilityConnection | SigfoxConnection | LoriotConnection) {\n connection.name = connection.name.toLocaleLowerCase();\n const url = `${this.getBaseUrlByConnection(connection)}/lns-connection`;\n const options: IFetchOptions = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(connection)\n };\n return this.client.fetch(url, options);\n }\n\n async update(\n connection: ActilityConnection | SigfoxConnection | LoriotConnection,\n originalName: string\n ) {\n connection.name = connection.name.toLocaleLowerCase();\n const url = `${this.getBaseUrlByConnection(connection)}/lns-connection/${encodeURIComponent(\n String(originalName)\n )}`;\n const options: IFetchOptions = {\n method: 'PUT',\n headers: this.headers,\n body: JSON.stringify(connection)\n };\n return this.client.fetch(url, options);\n }\n\n getBaseUrlByConnection(connection: ActilityConnection | SigfoxConnection | LoriotConnection) {\n return isSigfoxConnection(connection)\n ? 'service/sigfox-agent'\n : isActilityConnection(connection)\n ? 'service/actility'\n : isLoriotConnection(connection)\n ? 'service/loriot'\n : '';\n }\n\n getBaseUrlByType(connectionType: ConnectionType) {\n return connectionType === ConnectionType.SIGFOX\n ? 'service/sigfox-agent'\n : connectionType === ConnectionType.ACTILITY\n ? 'service/actility'\n : connectionType === ConnectionType.LORIOT\n ? 'service/loriot'\n : '';\n }\n\n async delete(connection: ActilityConnection | SigfoxConnection | LoriotConnection) {\n const url = `${this.getBaseUrlByConnection(connection)}/lns-connection`;\n const options: IFetchOptions = {\n method: 'DELETE'\n };\n return this.client.fetch(`${url}/${encodeURIComponent(String(connection.name))}`, options);\n }\n\n getApplication(name: string): Partial<IApplication> {\n const { references } = this.appStateService.currentTenant.value.applications;\n return references.find(({ application }) => application.name === name).application;\n }\n\n async download(url: string): Promise<IFetchResponse> {\n try {\n const options: IFetchOptions = {\n method: 'GET'\n };\n return this.client.fetch(url, options);\n } catch (e) {\n this.alertService.addServerFailure(e);\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { saveAs } from 'file-saver';\nimport { IApplication } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'connection-info-with-download-csv',\n templateUrl: './connection-info-with-download-csv.component.html',\n imports: [C8yTranslatePipe]\n})\nexport class ConnectionInfoWithDownloadCsvComponent {\n @Input() messageData: any;\n @Input() appData: IApplication;\n @Input() modalTitle: string;\n @Input() connectionName: string;\n\n constructor(\n private modal: BsModalRef,\n private connectorService: MultipleLnsConnectorService,\n private alertService: AlertService,\n private translateService: TranslateService\n ) {}\n\n dismiss() {\n this.modal.hide();\n }\n\n async download() {\n const url = `/service/${this.appData.contextPath}${this.messageData.attrs.URL}`;\n const res = await this.connectorService.download(url);\n if (res && res.status === 200) {\n const streamData = await res.blob();\n saveAs(\n streamData,\n this.translateService.instant(gettext('{{ connectionName }} - devices.csv'), {\n connectionName: this.connectionName\n })\n );\n } else {\n this.alertService.danger(gettext('A server error occurred.'));\n }\n }\n}\n","<div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"c8y-prompt alert alert-danger\">\n <h3 class=\"m-b-16\">\n <i class=\"dlt-c8y-icon-exclamation-circle\"></i>\n <span>{{ modalTitle | translate }}</span>\n </h3>\n <p class=\"text-break-word\">\n {{ messageData.message | translate }}\n </p>\n <br>\n <span class=\"btn-default\" (click)=\"download()\">{{\n 'Click the link to download the file with the affected devices.' | translate\n }}</span>\n <div class=\"alert-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"dismiss()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ModalService,\n Status,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, escapeRegExp, find, head, orderBy } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConnectionInfoWithDownloadCsvComponent } from './connection-info-with-download-csv.component';\nimport { ConnectionType, LpwanState, SigfoxConnection } from './multiple-lns-connector.model';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { NgIf, NgFor } from '@angular/common';\nimport { NoConnectionsFoundComponent } from './no-connections-found.component';\n\n@Component({\n selector: 'sigfox-multiple-lns-connector',\n templateUrl: './sigfox-multiple-lns-connector.component.html',\n imports: [\n NgIf,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NoConnectionsFoundComponent,\n ListGroupComponent,\n NgFor,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormsModule,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ]\n})\nexport class SigfoxMultipleLnsConnectorComponent implements OnInit {\n state: LpwanState = 'loadingConnection';\n cloneDeep = cloneDeep;\n connection: SigfoxConnection;\n connections = Array<SigfoxConnection>();\n showPassword = false;\n @ViewChild('connectorsForm', { static: false }) connectorsForm: NgForm;\n cardHeader = gettext('Sigfox connections');\n allowedSpecialCharacters = '~!@$^(){}[]|:,<+=,.`_ -';\n namePattern = `^[a-zA-Z0-9 ${escapeRegExp(this.allowedSpecialCharacters)}]*$`;\n namePatternError = this.translateService.instant(\n gettext(\n 'Connection name can only contain letters, numbers, spaces, and the following symbols: {{ symbols }}'\n ),\n {\n symbols: this.allowedSpecialCharacters\n }\n );\n originalConnection: SigfoxConnection;\n constructor(\n private connectorService: MultipleLnsConnectorService,\n private alertService: AlertService,\n private translateService: TranslateService,\n private modalService: BsModalService,\n private modal: ModalService\n ) {}\n\n async ngOnInit() {\n await this.loadConnections();\n }\n\n async loadConnections() {\n const res = await this.connectorService.list(ConnectionType.SIGFOX);\n if (res && res.status !== 200) {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n this.state = 'loadingError';\n } else {\n const list = await res.json();\n this.connections = orderBy(list, ['name'], ['asc']);\n await this.setModel();\n }\n }\n\n async setModel(connectionObj = null) {\n const resetConnection = await this.resetEditedUnsavedConnection();\n this.connection = connectionObj\n ? connectionObj\n : this.state === 'savedSuccessfully'\n ? this.connection\n : (resetConnection ?? cloneDeep(head(this.connections)));\n this.state = 'updateConnection';\n this.showPassword = false;\n this.originalConnection = this.connection ? cloneDeep(this.connection) : undefined;\n }\n\n async resetEditedUnsavedConnection(): Promise<SigfoxConnection | undefined> {\n if (this.state !== 'updateConnection' || !this.originalConnection) {\n return;\n }\n\n const { name } = this.originalConnection;\n const originalData = find(this.connections, { name });\n if (originalData) {\n return cloneDeep(originalData);\n }\n }\n\n async addConnection() {\n await this.resetEditedUnsavedConnection();\n this.connection = {} as SigfoxConnection;\n this.originalConnection = {} as SigfoxConnection;\n this.state = 'addConnections';\n this.showPassword = true;\n }\n\n async save() {\n const checkForConnectionName =\n this.originalConnection && this.originalConnection.name && this.originalConnection.name !== ''\n ? this.originalConnection.name\n : this.connection.name;\n const isConnectionExist = await this.connectorService.exists(\n ConnectionType.SIGFOX,\n checkForConnectionName\n );\n if (this.state === 'addConnections' && isConnectionExist) {\n const mesg = this.translateService.instant(\n gettext(`Connection with name \"{{ name }}\" already exists.`),\n { name: this.connection.name }\n );\n this.alertService.danger(mesg);\n } else {\n return this.saveConnection();\n }\n }\n\n async deleteConnection(originalConnection) {\n const { name } = originalConnection;\n const mesg = this.translateService.instant(\n gettext(`You are about to delete the connection \"{{ name }}\". Do you want to proceed?`),\n { name }\n );\n\n try {\n await this.modal.confirm(gettext('Delete connection'), mesg, Status.DANGER, {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n });\n\n await this.delete(originalConnection);\n } catch (error) {\n // empty catch block\n }\n }\n\n changePassword() {\n this.showPassword = !this.showPassword;\n if (this.connectorsForm.controls.password) {\n this.connectorsForm.controls.password.setValue(null);\n }\n }\n\n private async saveConnection() {\n const res = await this.connectorService.save(this.connection, this.originalConnection?.name);\n if (res && (res.status === 201 || res.status === 200)) {\n this.state = 'savedSuccessfully';\n this.alertService.success(gettext('Connection saved.'));\n await this.loadConnections();\n } else if (res && res.status === 500) {\n const data = res.json ? await res.json() : undefined;\n const app = this.connectorService.getApplication('sigfox-agent');\n const initialState = {\n messageData: data,\n appData: app,\n modalTitle: gettext('Failed to update the connection'),\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n connectionName: this.connection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n }\n }\n\n private async delete(originalConnection) {\n try {\n const response = await this.connectorService.delete(originalConnection);\n\n if (response.ok && response.status === 204) {\n this.alertService.success(gettext('Connection deleted.'));\n await this.loadConnections();\n } else if (response && response.status === 500) {\n const data = response.json ? await response.json() : undefined;\n const app = this.connectorService.getApplication('sigfox-agent');\n const initialState = {\n messageData: data,\n appData: app,\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n modalTitle: gettext('Failed to delete the connection'),\n connectionName: originalConnection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = response.json ? await response.json() : undefined;\n this.alertService.addServerFailure({ data, response });\n }\n } catch (error) {\n // empty catch block\n }\n }\n}\n","<ng-container *ngIf=\"state === 'loadingConnection'; else renderListAndForm\">\n <c8y-loading></c8y-loading>\n</ng-container>\n<c8y-title>{{ 'Connectivity' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Connectivity' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Sigfox' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-template #renderListAndForm>\n <no-connections-found\n (onAction)=\"addConnection()\"\n *ngIf=\"connections.length === 0 && state !== 'addConnections'\"\n [header]=\"cardHeader | translate\"\n ></no-connections-found>\n <div>\n <div\n class=\"card content-fullpage split-view--5-7\"\n *ngIf=\"connections.length !== 0 || state === 'addConnections'\"\n >\n <div class=\"card-header separator grid__col--fullspan\">\n <div class=\"card-title\">{{ cardHeader | translate }}</div>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <c8y-list-group class=\"nav c8y-nav-stacked\">\n <c8y-li\n class=\"c8y-stacked-item p-0\"\n [class.active]=\"connection.name === connectionBeingEdited\"\n *ngFor=\"let connection of connections; let index = index\"\n (click)=\"setModel(cloneDeep(connection))\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n <span title=\"{{ connection.name }}\">\n {{ connection.name }}\n </span>\n </c8y-li>\n\n <c8y-li\n class=\"c8y-nav-stacked active\"\n *ngIf=\"state === 'addConnections'\"\n (click)=\"addConnection()\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n {{ 'New connection' | translate }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add connection' | translate }}\"\n [disabled]=\"state === 'addConnections'\"\n (click)=\"addConnection()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add connection' | translate }}\n </button>\n </div>\n </div>\n\n <!-- 'split-view__detail--selected' condition needs to be fixed. this is needed so that both columns are visible in tablet format -->\n\n <div\n class=\"inner-scroll split-view__detail\"\n ng-class=\"{ 'split-view__detail--selected': vm.selected && vm.jsonSchemaObjects }\"\n >\n <div class=\"card-header separator visible-sm visible-xs fit-w sticky-top\">\n <button\n class=\"btn btn-clean text-primary\"\n title=\"{{ 'Back' | translate }}\"\n ng-click=\"vm.deselect()\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n </div>\n <form\n class=\"d-contents\"\n #connectorsForm=\"ngForm\"\n >\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-form-group>\n <label for=\"name\">\n {{ 'Name' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"name\"\n name=\"name\"\n type=\"text\"\n required\n [placeholder]=\"'e.g. Sigfox connection' | translate\"\n [(ngModel)]=\"connection.name\"\n [pattern]=\"namePattern\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n [text]=\"namePatternError\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"description\">\n {{ 'Description' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n type=\"text\"\n [placeholder]=\"\n 'e.g. This connection has a built-in functionality to…' | translate\n \"\n [(ngModel)]=\"connection.description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"baseUrl\">\n {{ 'URL' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"baseUrl\"\n name=\"baseUrl\"\n type=\"text\"\n required\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://backend.sigfox.com/api' }\n \"\n [(ngModel)]=\"connection.baseUrl\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"parentGroupId\">\n {{ 'Parent group ID' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"parentGroupId\"\n name=\"parentGroupId\"\n type=\"text\"\n required\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: '58c1793b9e93a15370f71caa' }\n \"\n [(ngModel)]=\"connection.parentGroupId\"\n pattern=\"[a-z\\d]+\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n text=\"{{ 'Must be a valid Parent group ID' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"username\">\n {{ 'Username' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"username\"\n placeholder=\"{{ 'e.g. joe`LOCALIZE`' | translate }}\"\n name=\"username\"\n type=\"text\"\n required\n [(ngModel)]=\"connection.username\"\n />\n </c8y-form-group>\n <c8y-form-group *ngIf=\"showPassword\">\n <label for=\"password\">\n {{ 'Password' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"password\"\n placeholder=\"{{ 'e.g. my_password' | translate }}\"\n name=\"password\"\n type=\"password\"\n required\n [(ngModel)]=\"connection.password\"\n />\n </c8y-form-group>\n\n <button\n class=\"btn btn-default\"\n name=\"changePassword\"\n type=\"button\"\n *ngIf=\"state === 'updateConnection'\"\n (click)=\"changePassword()\"\n >\n <span\n title=\"{{ 'Change password' | translate }}\"\n *ngIf=\"!showPassword\"\n >\n {{ 'Change password' | translate }}\n </span>\n <span\n title=\"{{ 'Cancel password change' | translate }}\"\n *ngIf=\"showPassword\"\n >\n {{ 'Cancel password change' | translate }}\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"setModel()\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n data-cy=\"sigfox-multiple-lns-connector.component--delete-connectivity\"\n *ngIf=\"state === 'updateConnection'\"\n (click)=\"deleteConnection(originalConnection)\"\n translate\n >\n Delete\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n data-cy=\"sigfox-multiple-lns-connector.component--save-connectivity\"\n type=\"submit\"\n [disabled]=\"!connectorsForm.form.valid || connectorsForm.form.pristine\"\n (click)=\"save()\"\n translate\n >\n Save\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ModalService,\n Status,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { head, orderBy, findIndex, escapeRegExp, cloneDeep } from 'lodash-es';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ActilityConnection, ConnectionType, LpwanState } from './multiple-lns-connector.model';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConnectionInfoWithDownloadCsvComponent } from './connection-info-with-download-csv.component';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { NgIf, NgFor } from '@angular/common';\nimport { NoConnectionsFoundComponent } from './no-connections-found.component';\n\n@Component({\n selector: 'actility-multiple-lns-connector',\n templateUrl: './actility-multiple-lns-connector.component.html',\n imports: [\n NgIf,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NoConnectionsFoundComponent,\n ListGroupComponent,\n NgFor,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormsModule,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ]\n})\nexport class ActilityMultipleLnsConnectorComponent implements OnInit {\n state: LpwanState = 'loadingConnection';\n connection: ActilityConnection;\n connections = Array<ActilityConnection>();\n @ViewChild('connectorsForm', { static: false }) connectorsForm: NgForm;\n showPassword = false;\n cardHeader = gettext('Actility connections');\n allowedSpecialCharacters = '~!@$^(){}[]|:,<+=,.`_ -';\n namePattern = `^[a-zA-Z0-9 ${escapeRegExp(this.allowedSpecialCharacters)}]*$`;\n namePatternError = this.translateService.instant(\n gettext(\n 'Connection name can only contain letters, numbers, spaces, and the following symbols: {{ symbols }}'\n ),\n {\n symbols: this.allowedSpecialCharacters\n }\n );\n originalConnection: ActilityConnection;\n constructor(\n private connectorService: MultipleLnsConnectorService,\n private alertService: AlertService,\n private translateService: TranslateService,\n private modal: ModalService,\n private modalService: BsModalService\n ) {}\n\n async ngOnInit() {\n await this.loadConnections();\n }\n\n async loadConnections() {\n const res = await this.connectorService.list(ConnectionType.ACTILITY);\n if (res && res.status !== 200) {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n this.state = 'loadingError';\n } else {\n const list = await res.json();\n this.connections = orderBy(list, ['name'], ['asc']);\n await this.setModel();\n }\n }\n\n async setModel(connectionObj = null) {\n await this.resetEditedUnsavedConnection();\n this.connection = connectionObj\n ? connectionObj\n : this.state === 'savedSuccessfully'\n ? this.connection\n : head(this.connections);\n this.state = 'updateConnection';\n this.showPassword = false;\n this.originalConnection = this.connection ? cloneDeep(this.connection) : undefined;\n }\n\n async setAdminAndCoreApiVersion() {\n this.connection.adminApiVersion = 'latest';\n this.connection.coreApiVersion = 'latest';\n }\n\n async resetEditedUnsavedConnection() {\n if (this.state !== 'updateConnection' || !this.originalConnection) {\n return;\n }\n\n const { name } = this.originalConnection;\n const index = findIndex(this.connections, { name });\n if (index !== -1) {\n const originalData = (await this.connectorService.detail(\n ConnectionType.ACTILITY,\n name\n )) as ActilityConnection;\n this.connections[index] = originalData;\n }\n }\n\n async addConnection() {\n await this.resetEditedUnsavedConnection();\n this.connection = {} as ActilityConnection;\n this.originalConnection = {} as ActilityConnection;\n this.state = 'addConnections';\n this.showPassword = true;\n await this.setAdminAndCoreApiVersion();\n }\n\n async save() {\n const checkForConnectionName =\n this.originalConnection && this.originalConnection.name && this.originalConnection.name !== ''\n ? this.originalConnection.name\n : this.connection.name;\n const isConnectionExist = await this.connectorService.exists(\n ConnectionType.ACTILITY,\n checkForConnectionName\n );\n if (this.state === 'addConnections' && isConnectionExist) {\n const mesg = this.translateService.instant(\n gettext(`Connection with name \"{{ name }}\" already exists.`),\n { name: this.connection.name }\n );\n this.alertService.danger(mesg);\n } else {\n return this.saveConnection();\n }\n }\n\n async deleteConnection(originalConnection) {\n const { name } = originalConnection;\n const mesg = this.translateService.instant(\n gettext(`You are about to delete the connection \"{{ name }}\". Do you want to proceed?`),\n { name }\n );\n\n try {\n await this.modal.confirm(gettext('Delete connection'), mesg, Status.DANGER, {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n });\n\n await this.delete(originalConnection);\n } catch (error) {\n // empty catch block\n }\n }\n\n changePassword() {\n this.showPassword = !this.showPassword;\n if (this.connectorsForm.controls.password) {\n this.connectorsForm.controls.password.setValue(null);\n }\n }\n\n async saveConnection() {\n const res = await this.connectorService.save(this.connection, this.originalConnection?.name);\n if (res && (res.status === 201 || res.status === 200)) {\n this.state = 'savedSuccessfully';\n this.alertService.success(gettext('Connection saved.'));\n await this.loadConnections();\n } else if (res && res.status === 500) {\n const data = res.json ? await res.json() : undefined;\n const app = this.connectorService.getApplication('actility');\n const initialState = {\n messageData: data,\n appData: app,\n modalTitle: gettext('Failed to update the connection'),\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n connectionName: this.connection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n }\n }\n\n private async delete(originalConnection) {\n try {\n const response = await this.connectorService.delete(originalConnection);\n\n if (response.ok && response.status === 204) {\n this.alertService.success(gettext('Connection deleted.'));\n await this.loadConnections();\n } else if (response && response.status === 500) {\n const data = response.json ? await response.json() : undefined;\n const app = this.connectorService.getApplication('actility');\n const initialState = {\n messageData: data,\n appData: app,\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n modalTitle: gettext('Failed to delete the connection'),\n connectionName: originalConnection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = response.json ? await response.json() : undefined;\n this.alertService.addServerFailure({ data, response });\n }\n } catch (error) {\n // empty catch block\n }\n }\n}\n","<ng-container *ngIf=\"state === 'loadingConnection'; else renderListAndForm\">\n <c8y-loading></c8y-loading>\n</ng-container>\n\n<c8y-title>{{ 'Connectivity' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [label]=\"'Settings' | translate\"\n [icon]=\"'cog'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Connectivity' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Actility' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-template #renderListAndForm>\n <no-connections-found\n (onAction)=\"addConnection()\"\n *ngIf=\"connections.length === 0 && state !== 'addConnections'\"\n [header]=\"cardHeader | translate\"\n ></no-connections-found>\n <div>\n <div\n class=\"card content-fullpage split-view--5-7\"\n *ngIf=\"connections.length !== 0 || state === 'addConnections'\"\n >\n <div class=\"card-header separator grid__col--fullspan\">\n <div class=\"card-title\">{{ cardHeader | translate }}</div>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <c8y-list-group class=\"nav c8y-nav-stacked\">\n <c8y-li\n class=\"c8y-stacked-item p-0\"\n [class.active]=\"connection.name === connectionBeingEdited\"\n *ngFor=\"let connection of connections; let index = index\"\n (click)=\"setModel(connection)\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n <span title=\"{{ connection.name }}\">\n {{ connection.name }}\n </span>\n </c8y-li>\n\n <c8y-li\n *ngIf=\"state === 'addConnections'\"\n class=\"c8y-nav-stacked active\"\n (click)=\"addConnection()\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n {{ 'New connection' | translate }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n [disabled]=\"state === 'addConnections'\"\n title=\"{{ 'Add connection' | translate }}\"\n class=\"btn btn-default\"\n (click)=\"addConnection()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add connection' | translate }}\n </button>\n </div>\n </div>\n\n <!-- 'split-view__detail--selected' condition needs to be fixed. this is needed so that both columns are visible in tablet format -->\n\n <div\n class=\"inner-scroll split-view__detail\"\n ng-class=\"{ 'split-view__detail--selected': vm.selected && vm.jsonSchemaObjects }\"\n >\n <div class=\"card-header separator visible-sm visible-xs fit-w sticky-top\">\n <button\n title=\"{{ 'Back' | translate }}\"\n class=\"btn btn-clean text-primary\"\n ng-click=\"vm.deselect()\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n </div>\n <form #connectorsForm=\"ngForm\" class=\"d-contents\">\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-form-group>\n <label for=\"name\">\n {{ 'Name' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. Actility connection' | translate\"\n id=\"name\"\n name=\"name\"\n [(ngModel)]=\"connection.name\"\n required\n [pattern]=\"namePattern\"\n />\n <c8y-messages>\n <c8y-message name=\"pattern\" [text]=\"namePatternError\"></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"description\">\n {{ 'Description' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"\n 'e.g. This connection has a built-in functionality to…' | translate\n \"\n id=\"description\"\n name=\"description\"\n [(ngModel)]=\"connection.description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"baseUrl\">\n {{ 'URL' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: 'https://dx-api.thingpark.io' }\n \"\n id=\"baseUrl\"\n name=\"baseUrl\"\n [(ngModel)]=\"connection.baseUrl\"\n required\n />\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"profileId\">\n {{ 'Profile ID' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'dev1-api' }\"\n id=\"profileId\"\n name=\"profileId\"\n [(ngModel)]=\"connection.profileId\"\n required\n />\n </c8y-form-group>\n <!-- DM-1171 start-->\n <c8y-form-group>\n <label for=\"applicationServerId\">\n {{ 'Application server ID' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. Application Server' | translate\"\n id=\"applicationServerId\"\n name=\"applicationServerId\"\n [(ngModel)]=\"connection.routeApplicationServerId\"\n [required]=\"connection.routeApplicationServerKey ? 'required' : null\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"applicationServerKey\">\n {{ 'Application server key' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate: { example: '0011AEDF0011AEDF0011AEDF0011AEDF' }\n \"\n id=\"applicationServerKey\"\n name=\"applicationServerKey\"\n [(ngModel)]=\"connection.routeApplicationServerKey\"\n [required]=\"connection.routeApplicationServerId ? 'required' : null\"\n pattern=\"[A-Fa-f0-9]{32}\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n text=\"{{ 'Must be a valid server key' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"adminApiVersion\">\n {{ 'Admin API version' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'v102' }\"\n id=\"adminApiVersion\"\n name=\"adminApiVersion\"\n [(ngModel)]=\"connection.adminApiVersion\"\n required\n pattern=\"^v\\d+$|latest\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n text=\"{{ 'Must be a valid API version' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"coreApiVersion\">\n {{ 'Core API version' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'v121' }\"\n id=\"coreApiVersion\"\n name=\"coreApiVersion\"\n [(ngModel)]=\"connection.coreApiVersion\"\n required\n pattern=\"^v\\d+$|latest\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n text=\"{{ 'Must be a valid API version' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <!-- DM-1171 end-->\n <c8y-form-group>\n <label for=\"username\">\n {{ 'Username' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. joe`LOCALIZE`' | translate }}\"\n id=\"username\"\n name=\"username\"\n [(ngModel)]=\"connection.username\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"showPassword\">\n <label for=\"password\">\n {{ 'Password' | translate }}\n </label>\n <input\n type=\"password\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. my_password' | translate }}\"\n id=\"password\"\n name=\"password\"\n [(ngModel)]=\"connection.password\"\n required\n />\n </c8y-form-group>\n \n <!-- DM-1254 begins -->\n <c8y-form-group>\n <label title=\"{{ 'Connection type' | translate }}\">\n {{ 'Connection type' | translate }}\n </label>\n <label title=\"{{ 'Thingpark Enterprise' }}\" class=\"c8y-radio radio-inline\">\n <input type=\"radio\" name=\"c8y-group\" [value]=\"true\"\n [(ngModel)]=\"connection.enterpriseConnection\" required>\n <span></span> \n <span>{{ 'Thingpark Enterprise' }}</span>\n </label>\n <label title=\"{{ 'Thingpark Wireless' }}\" class=\"c8y-radio radio-inline\">\n <input type=\"radio\" name=\"c8y-group\" [value]=\"false\"\n [(ngModel)]=\"connection.enterpriseConnection\" required>\n <span></span> \n <span>{{ 'Thingpark Wireless' }}</span>\n </label>\n </c8y-form-group>\n <!-- DM-1254 ends -->\n <button\n *ngIf=\"state === 'updateConnection'\"\n type=\"button\"\n class=\"btn btn-default\"\n name=\"changePassword\"\n (click)=\"changePassword()\"\n >\n <span title=\"{{ 'Change password' | translate }}\" *ngIf=\"!showPassword\">\n {{ 'Change password' | translate }}\n </span>\n <span title=\"{{ 'Cancel password change' | translate }}\" *ngIf=\"showPassword\">\n {{ 'Cancel password change' | translate }}\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"card-footer separator-top\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n (click)=\"setModel()\"\n translate\n type=\"button\"\n >\n Cancel\n </button>\n <button\n *ngIf=\"state === 'updateConnection'\"\n title=\"{{ 'Delete' | translate }}\"\n class=\"btn btn-danger\"\n data-cy=\"actility-multiple-lns-connector--delete-connectivity\"\n (click)=\"deleteConnection(originalConnection)\"\n translate\n type=\"button\"\n >\n Delete\n </button>\n <button\n [disabled]=\"!connectorsForm.form.valid || connectorsForm.form.pristine\"\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n data-cy=\"actility-multiple-lns-connector.component--save-connectivity\"\n (click)=\"save()\"\n translate\n type=\"submit\"\n >\n Save\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ModalService,\n Status,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, escapeRegExp, find, head, orderBy } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConnectionInfoWithDownloadCsvComponent } from '../connection-info-with-download-csv.component';\nimport { ConnectionType, LoriotConnection, LpwanState } from '../multiple-lns-connector.model';\nimport { MultipleLnsConnectorService } from '../multiple-lns-connector.service';\nimport { NgIf, NgFor } from '@angular/common';\nimport { NoConnectionsFoundComponent } from '../no-connections-found.component';\n\n@Component({\n selector: 'loriot-multiple-lns-connector',\n templateUrl: './loriot-multiple-lns-connector.component.html',\n imports: [\n NgIf,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NoConnectionsFoundComponent,\n ListGroupComponent,\n NgFor,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormsModule,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ]\n})\nexport class LoriotMultipleLnsConnectorComponent implements OnInit {\n state: LpwanState = 'loadingConnection';\n cloneDeep = cloneDeep;\n connection: LoriotConnection;\n connections = Array<LoriotConnection>();\n showPassword = false;\n @ViewChild('connectorsForm', { static: false }) connectorsForm: NgForm;\n cardHeader = gettext('LORIOT connections');\n allowedSpecialCharacters = '~!@$^(){}[]|:,<+=,.`_ -';\n namePattern = `^[a-zA-Z0-9 ${escapeRegExp(this.allowedSpecialCharacters)}]*$`;\n namePatternError = this.translateService.instant(\n gettext(\n 'Connection name can only contain letters, numbers, spaces, and the following symbols: {{ symbols }}'\n ),\n {\n symbols: this.allowedSpecialCharacters\n }\n );\n originalConnection: LoriotConnection;\n constructor(\n private connectorService: MultipleLnsConnectorService,\n private alertService: AlertService,\n private translateService: TranslateService,\n private modalService: BsModalService,\n private modal: ModalService\n ) {}\n\n async ngOnInit() {\n await this.loadConnections();\n }\n\n async loadConnections() {\n const res = await this.connectorService.list(ConnectionType.LORIOT);\n if (res && res.status !== 200) {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n this.state = 'loadingError';\n } else {\n const list = await res.json();\n this.connections = orderBy(list, ['name'], ['asc']);\n await this.setModel();\n }\n }\n\n async setModel(connectionObj = null) {\n const resetConnection = await this.resetEditedUnsavedConnection();\n this.connection = connectionObj\n ? connectionObj\n : this.state === 'savedSuccessfully'\n ? this.connection\n : (resetConnection ?? cloneDeep(head(this.connections)));\n this.state = 'updateConnection';\n this.showPassword = false;\n this.originalConnection = this.connection ? cloneDeep(this.connection) : undefined;\n this.connection.providerType = 'loriotType';\n }\n\n async resetEditedUnsavedConnection(): Promise<LoriotConnection | undefined> {\n if (this.state !== 'updateConnection' || !this.originalConnection) {\n return;\n }\n\n const { name } = this.originalConnection;\n const originalData = find(this.connections, { name });\n if (originalData) {\n return cloneDeep(originalData);\n }\n }\n\n async addConnection() {\n await this.resetEditedUnsavedConnection();\n this.connection = {} as LoriotConnection;\n this.originalConnection = {} as LoriotConnection;\n this.state = 'addConnections';\n this.showPassword = true;\n this.connection.providerType = 'loriotType';\n }\n\n async save() {\n const checkForConnectionName =\n this.originalConnection && this.originalConnection.name && this.originalConnection.name !== ''\n ? this.originalConnection.name\n : this.connection.name;\n const isConnectionExist = await this.connectorService.exists(\n ConnectionType.LORIOT,\n checkForConnectionName\n );\n if (this.state === 'addConnections' && isConnectionExist) {\n const msg = this.translateService.instant(\n gettext(`Connection with name \"{{ name }}\" already exists.`),\n { name: this.connection.name }\n );\n this.alertService.danger(msg);\n } else {\n return this.saveConnection();\n }\n }\n\n async deleteConnection(originalConnection) {\n const { name } = originalConnection;\n const msg = this.translateService.instant(\n gettext(`You are about to delete the connection \"{{ name }}\". Do you want to proceed?`),\n { name }\n );\n\n try {\n await this.modal.confirm(gettext('Delete connection'), msg, Status.DANGER, {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n });\n\n await this.delete(originalConnection);\n } catch (error) {\n // empty catch block\n }\n }\n\n changePassword() {\n this.showPassword = !this.showPassword;\n if (this.connectorsForm.controls.password) {\n this.connectorsForm.controls.password.setValue(null);\n }\n }\n\n private async saveConnection() {\n const res = await this.connectorService.save(this.connection, this.originalConnection?.name);\n if (res && (res.status === 201 || res.status === 200)) {\n this.state = 'savedSuccessfully';\n this.alertService.success(gettext('Connection saved.'));\n await this.loadConnections();\n } else if (res && res.status === 500) {\n const data = res.json ? await res.json() : undefined;\n const app = this.connectorService.getApplication('loriot-agent');\n const initialState = {\n messageData: data,\n appData: app,\n modalTitle: gettext('Failed to update the connection'),\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n connectionName: this.connection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n }\n }\n\n private async delete(originalConnection) {\n if (!originalConnection.providerType) originalConnection.providerType = 'loriotType';\n try {\n const response = await this.connectorService.delete(originalConnection);\n\n if (response.ok && response.status === 204) {\n this.alertService.success(gettext('Connection deleted.'));\n await this.loadConnections();\n } else if (response && response.status === 500) {\n const data = response.json ? await response.json() : undefined;\n const app = this.connectorService.getApplication('loriot-agent');\n const initialState = {\n messageData: data,\n appData: app,\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n modalTitle: gettext('Failed to delete the connection'),\n connectionName: originalConnection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = response.json ? await response.json() : undefined;\n this.alertService.addServerFailure({ data, response });\n }\n } catch (error) {\n // empty catch block\n }\n }\n}\n","<ng-container *ngIf=\"state === 'loadingConnection'; else renderListAndForm\">\n <c8y-loading></c8y-loading>\n</ng-container>\n\n<c8y-title>{{ 'Connectivity' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Connectivity' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'LORIOT' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-template #renderListAndForm>\n <no-connections-found\n (onAction)=\"addConnection()\"\n *ngIf=\"connections.length === 0 && state !== 'addConnections'\"\n [header]=\"cardHeader | translate\"\n ></no-connections-found>\n <div>\n <div\n class=\"card content-fullpage split-view--5-7\"\n *ngIf=\"connections.length !== 0 || state === 'addConnections'\"\n >\n <div class=\"card-header separator grid__col--fullspan\">\n <div class=\"card-title\">{{ cardHeader | translate }}</div>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-gray-white flex-grow\">\n <c8y-list-group class=\"nav c8y-nav-stacked\">\n <c8y-li\n class=\"c8y-stacked-item p-0\"\n [class.active]=\"connection.name === connectionBeingEdited\"\n *ngFor=\"let connection of connections; let index = index\"\n (click)=\"setModel(cloneDeep(connection))\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n <span title=\"{{ connection.name }}\">\n {{ connection.name }}\n </span>\n </c8y-li>\n\n <c8y-li\n class=\"c8y-nav-stacked active\"\n *ngIf=\"state === 'addConnections'\"\n (click)=\"addConnection()\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n {{ 'New connection' | translate }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add connection' | translate }}\"\n [disabled]=\"state === 'addConnections'\"\n (click)=\"addConnection()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add connection' | translate }}\n </button>\n </div>\n </div>\n\n <!-- 'split-view__detail--selected' condition needs to be fixed. this is needed so that both columns are visible in tablet format -->\n\n <div\n class=\"inner-scroll split-view__detail\"\n [class]=\"{ 'split-view__detail--selected': connection }\"\n >\n <div class=\"card-header separator visible-sm visible-xs fit-w sticky-top\">\n <button\n class=\"btn btn-clean text-primary\"\n title=\"{{ 'Back' | translate }}\"\n (click)=\"resetEditedUnsavedConnection()\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n </div>\n <form\n class=\"d-contents\"\n #connectorsForm=\"ngForm\"\n >\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-form-group>\n <label for=\"name\">\n {{ 'Name' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"name\"\n name=\"name\"\n type=\"text\"\n required\n [placeholder]=\"'e.g. LORIOT connection' | translate\"\n [(ngModel)]=\"connection.name\"\n [pattern]=\"namePattern\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n [text]=\"namePatternError\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"description\">\n {{ 'Description' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n type=\"text\"\n [placeholder]=\"\n 'e.g. This connection has a built-in functionality to…' | translate\n \"\n [(ngModel)]=\"connection.description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"baseUrl\">\n {{ 'URL' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"baseUrl\"\n name=\"baseUrl\"\n type=\"text\"\n required\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://ap3.loriot.io' }\n \"\n [(ngModel)]=\"connection.baseUrl\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"username\">\n {{ 'Username' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"username\"\n placeholder=\"{{ 'e.g. joe`LOCALIZE`' | translate }}\"\n name=\"username\"\n type=\"text\"\n required\n [(ngModel)]=\"connection.username\"\n />\n </c8y-form-group>\n <c8y-form-group *ngIf=\"showPassword\">\n <label for=\"password\">\n {{ 'Password' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"password\"\n placeholder=\"{{ 'e.g. my_password' | translate }}\"\n name=\"password\"\n type=\"password\"\n required\n [(ngModel)]=\"connection.password\"\n />\n </c8y-form-group>\n\n <button\n class=\"btn btn-default\"\n name=\"changePassword\"\n type=\"button\"\n *ngIf=\"state === 'updateConnection'\"\n (click)=\"changePassword()\"\n >\n <span\n title=\"{{ 'Change password' | translate }}\"\n *ngIf=\"!showPassword\"\n >\n {{ 'Change password' | translate }}\n </span>\n <span\n title=\"{{ 'Cancel password change' | translate }}\"\n *ngIf=\"showPassword\"\n >\n {{ 'Cancel password change' | translate }}\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"setModel()\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n data-cy=\"loriot-multiple-lns-connector.component--delete-connectivity\"\n *ngIf=\"state === 'updateConnection'\"\n (click)=\"deleteConnection(originalConnection)\"\n translate\n >\n Delete\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n [disabled]=\"!connectorsForm.form.valid || connectorsForm.form.pristine\"\n (click)=\"save()\"\n data-cy=\"loriot-multiple-lns-connector.component--button-save\"\n translate\n >\n Save\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule, FormsModule, Route } from '@c8y/ngx-components';\nimport { NoConnectionsFoundComponent } from './no-connections-found.component';\nimport { RouterModule } from '@angular/router';\nimport { SigfoxMultipleLnsConnectorComponent } from './sigfox-multiple-lns-connector.component';\nimport { ActilityMultipleLnsConnectorComponent } from './actility-multiple-lns-connector.component';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { ConnectionInfoWithDownloadCsvComponent } from './connection-info-with-download-csv.component';\nimport { LoriotMultipleLnsConnectorComponent } from './loriot/loriot-multiple-lns-connector.component';\n\nconst settingsRoutes: Route[] = [\n {\n path: 'connectivitySettings/multiple_lns_connectors_sigfox',\n component: SigfoxMultipleLnsConnectorComponent\n },\n {\n path: 'connectivitySettings/multiple_lns_connectors_actility',\n component: ActilityMultipleLnsConnectorComponent\n },\n {\n path: 'connectivitySettings/multiple_lns_connectors_loriot',\n component: LoriotMultipleLnsConnectorComponent\n }\n];\n@NgModule({\n imports: [\n CoreModule,\n CommonModule,\n FormsModule,\n RouterModule.forChild(settingsRoutes),\n SigfoxMultipleLnsConnectorComponent,\n NoConnectionsFoundComponent,\n ActilityMultipleLnsConnectorComponent,\n LoriotMultipleLnsConnectorComponent,\n ConnectionInfoWithDownloadCsvComponent\n ],\n providers: [MultipleLnsConnectorService]\n})\nexport class MultipleLnsConnectorsModule {}\n","import { Injectable } from '@angular/core';\nimport {\n IManagedObject,\n InventoryService,\n IResultList,\n FetchClient,\n IFetchOptions,\n IdentityService\n} from '@c8y/client';\nimport { get, orderBy } from 'lodash-es';\nimport { MultipleLnsConnectorService } from './multiple-lns-connectors';\nimport {\n ActilityConnection,\n ConnectionType,\n SigfoxConnection\n} from './multiple-lns-connectors/multiple-lns-connector.model';\n\n@Injectable()\nexport class LpwanSetDeviceProtocolService {\n supportedDevicesCfgs = [\n {\n name: 'actility',\n match: device =>\n get(device, 'c8y_LpwanDevice.lpwanDeviceType') === 'Lora' &&\n get(device, 'c8y_LpwanDevice.serviceProvider') === 'Actility',\n protocolTypes: ['c8y_ActilityDeviceType', 'c8y_LoraDeviceType', 'c8y_LpwanDeviceType'],\n externalIdTypes: ['c8y_LoriotEUI', 'c8y_Serial'],\n connectionType: ConnectionType.ACTILITY\n },\n {\n name: 'loriot',\n match: device =>\n get(device, 'c8y_LpwanDevice.lpwanDeviceType') === 'Lora' &&\n get(device, 'c8y_LpwanDevice.serviceProvider') === 'Loriot',\n protocolTypes: ['c8y_LoraDeviceType', 'c8y_LpwanDeviceType'],\n externalIdTypes: ['c8y_LoriotEUI', 'c8y_Serial'],\n connectionType: ConnectionType.LORIOT\n },\n {\n name: 'sigfox',\n match: device => get(device, 'c8y_LpwanDevice.serviceProvider') === 'Sigfox',\n protocolTypes: ['c8y_SigfoxDeviceType', 'c8y_LpwanDeviceType'],\n externalIdTypes: ['com.sigfox.deviceId'],\n connectionType: ConnectionType.SIGFOX\n }\n ];\n\n private readonly header: any = { 'Content-Type': 'application/json' };\n\n constructor(\n private inventoryService: InventoryService,\n private client: FetchClient,\n private identityService: IdentityService,\n private lnsService: MultipleLnsConnectorService\n ) {}\n\n async refreshCache(device) {\n const externalId = await this.getExternalId(device);\n if (externalId) {\n const url = `${this.getMicroserviceUrl(device)}/refreshCache/${externalId}`;\n const options: IFetchOptions = {\n method: 'POST',\n headers: this.header,\n body: JSON.stringify({})\n };\n return this.client.fetch(url, options);\n }\n }\n\n getMicroserviceUrl(device) {\n const { serviceProvider } = device.c8y_LpwanDevice;\n\n let serviceName = serviceProvider.toLowerCase();\n if (serviceProvider === 'Sigfox') {\n serviceName = 'sigfox-agent';\n }\n\n return `/service/${serviceName}`;\n }\n\n isSupportedDevice(device: IManagedObject): boolean {\n return this.supportedDevicesCfgs.some(({ match }) => match(device));\n }\n\n async getCurrentProtocol(device: IManagedObject) {\n const lpwanDevice = device.c8y_LpwanDevice;\n let protocolId;\n\n if (lpwanDevice.typeExternalId) {\n const externalId = (await this.identityService.detail(lpwanDevice.typeExternalId)).data;\n protocolId = externalId.managedObject.id;\n }\n\n if (!protocolId && lpwanDevice.type) {\n protocolId = lpwanDevice.type.split('/')[2];\n }\n\n if (!protocolId) {\n return null;\n }\n\n return (await this.inventoryService.detail(protocolId)).data;\n }\n\n async applyProtocol(device: IManagedObject, selectedProtocol: IManagedObject) {\n const [protocolExternalId] = (await this.identityService.list(selectedProtocol.id)).data;\n const { externalId, type } = protocolExternalId;\n device.c8y_LpwanDevice.typeExternalId = { externalId, type };\n device.c8y_LpwanDevice.type = 'inventory/managedObjects/' + selectedProtocol.id;\n device.type = selectedProtocol.name;\n return this.inventoryService.update(device);\n }\n\n async getAvailableProtocols(device: IManagedObject): Promise<IResultList<IManagedObject>> {\n const query = {\n __filter: {\n type: { __in: this.getProtocolTypesMatchingDevice(device) }\n },\n __orderby: [{ name: 1 }]\n };\n return this.inventoryService.listQuery(query, { withTotalPages: true, pageSize: 5 });\n }\n\n async getAvailableConnections(\n device: IManagedObject\n ): Promise<IResultList<ActilityConnection | SigfoxConnection>> {\n let list;\n const matchingCfg = this.supportedDevicesCfgs.find(({ match }) => match(device));\n const response = await this.lnsService.list(matchingCfg.connectionType);\n if (response && response.status === 200) {\n list = await response.json();\n list = orderBy(list, ['name'], ['asc']);\n return { res: response, data: list };\n }\n }\n\n private getProtocolTypesMatchingDevice(device: IManagedObject): string[] {\n const matchingCfg = this.supportedDevicesCfgs.find(({ match }) => match(device));\n return matchingCfg ? matchingCfg.protocolTypes : [];\n }\n\n private async getExternalId(device: IManagedObject): Promise<string> {\n const matchingCfg = this.supportedDevicesCfgs.find(({ match }) => match(device));\n const externalIds = (await this.identityService.list(device.id)).data;\n const externalId = externalIds.find(({ type }) => matchingCfg.externalIdTypes.includes(type));\n return externalId ? externalId.externalId : null;\n }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ForOfFilterPipe,\n PopoverConfirmButtons,\n PopoverConfirmComponent,\n C8yTranslateDirective,\n FormGroupComponent,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n MessagesComponent,\n MessageDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { find } from 'lodash-es';\nimport {\n ActilityConnection,\n SigfoxConnection\n} from './multiple-lns-connectors/multiple-lns-connector.model';\nimport { NgIf } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'set-lns-connections',\n templateUrl: './lpwan-set-connections.component.html',\n imports: [\n C8yTranslateDirective,\n NgIf,\n FormGroupComponent,\n PopoverConfirmComponent,\n TypeaheadComponent,\n FormsModule,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n MessagesComponent,\n MessageDirective,\n C8yTranslatePipe\n ]\n})\nexport class LpwanAssignLnsConnectionsComponent implements OnInit {\n loading: boolean;\n @Input() device: IManagedObject;\n buttons: PopoverConfirmButtons[] = [\n { label: gettext('Cancel'), action: () => Promise.reject() },\n { label: gettext('Re-register'), action: () => this.deviceReregister(), status: 'default' }\n ];\n reRegisterMsg = gettext('To change provider connection, you need to re-register device first.');\n filterConnection: ForOfFilterPipe<ActilityConnection | SigfoxConnection> = pipe();\n pattern = '';\n @ViewChild(PopoverConfirmComponent, { static: true }) popoverConfirm: PopoverConfirmComponent;\n\n newConnection: ActilityConnection | SigfoxConnection;\n availableConnections: IResultList<ActilityConnection | SigfoxConnection>;\n currentConnection: ActilityConnection | SigfoxConnection;\n\n constructor(\n private lpwanService: LpwanSetDeviceProtocolService,\n private alertService: AlertService\n ) {}\n async ngOnInit() {\n await this.reload();\n this.setConnectionPipe('');\n }\n\n setConnectionPipe(filterStr: string) {\n this.pattern = filterStr;\n this.filterConnection = pipe(\n map(connections =>\n connections.filter(\n connection =>\n (!this.currentConnection || this.currentConnection.name !== connection.name) &&\n (!filterStr || connection.name.toLowerCase().indexOf(filterStr.toLowerCase()) > -1)\n )\n )\n );\n }\n\n async reload() {\n this.loading = true;\n this.newConnection = null;\n try {\n this.availableConnections = await this.lpwanService.getAvailableConnections(this.device);\n this.currentConnection = find(this.availableConnections.data, {\n name: this.device.c8y_LpwanDevice.lnsConnectionName\n });\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n } finally {\n this.loading = false;\n }\n }\n\n togglePopover(popoverCfrm) {\n popoverCfrm.show();\n this.setConnectionPipe('');\n }\n\n deviceReregister() {\n return new Promise(resolve => {\n window.location.href = `#/deviceregistration`;\n resolve(true);\n });\n }\n}\n","<div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current connection</label>\n <p class=\"form-control-static\" *ngIf=\"!currentConnection\">\n {{ 'Connection is not set. Select connection for this device' | translate }}\n </p>\n <p class=\"form-control-static text-truncate\" *ngIf=\"currentConnection\" title=\"{{ currentConnection.name }}\">\n {{ currentConnection.name }}\n </p>\n </div>\n\n <c8y-form-group>\n <c8y-popover-confirm\n outsideClick=\"true\"\n containerClass=\"lns-connection-popover\"\n [message]=\"reRegisterMsg\"\n [buttons]=\"buttons\"\n [placement]=\"'bottom'\"\n ></c8y-popover-confirm>\n <c8y-typeahead\n *ngIf=\"!loading\"\n [(ngModel)]=\"newConnection\"\n placeholder=\"{{ 'Select new connection' | translate }}\"\n name=\"newConnection\"\n (onSearch)=\"setConnectionPipe($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"let connection of availableConnections; loadMore: 'hidden'; pipe: filterConnection\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"togglePopover(popoverConfirm)\"\n >\n <c8y-highlight [text]=\"connection.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the connections.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n</div>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ForOfFilterPipe,\n LoadingComponent,\n C8yTranslateDirective,\n FormGroupComponent,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n MessagesComponent,\n MessageDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\nimport { Router } from '@angular/router';\nimport { pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { NgIf } from '@angular/common';\nimport { LpwanAssignLnsConnectionsComponent } from './lpwan-set-connections.component';\n\n@Component({\n selector: 'set-device-protocol',\n templateUrl: './lpwan-set-device-protocol.component.html',\n imports: [\n FormsModule,\n NgIf,\n LoadingComponent,\n C8yTranslateDirective,\n FormGroupComponent,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n MessagesComponent,\n MessageDirective,\n LpwanAssignLnsConnectionsComponent,\n C8yTranslatePipe\n ]\n})\nexport class LpwanAssignDeviceProtocolComponent implements OnInit {\n loading: boolean;\n device: IManagedObject;\n currentProtocol: IManagedObject;\n availableProtocols: IResultList<IManagedObject>;\n newProtocol: IManagedObject;\n filterProtocols: ForOfFilterPipe<IManagedObject> = pipe();\n pattern = '';\n @ViewChild('lpwanSetDeviceProtocolForm', { static: false }) lpwanSetDeviceProtocolForm: NgForm;\n\n constructor(\n private lpwanService: LpwanSetDeviceProtocolService,\n private alertService: AlertService,\n private router: Router,\n private inventoryService: InventoryService\n ) {}\n async ngOnInit() {\n await this.reload();\n this.setPipe('');\n }\n\n setPipe(filterStr: string) {\n this.pattern = filterStr;\n this.filterProtocols = pipe(\n map(protocols =>\n protocols.filter(\n protocol =>\n (!this.currentProtocol || this.currentProtocol.id !== protocol.id) &&\n (!filterStr || protocol.name.toLowerCase().indexOf(filterStr.toLowerCase()) > -1)\n )\n )\n );\n }\n\n async reload() {\n this.loading = true;\n this.newProtocol = null;\n try {\n await this.loadDevice();\n this.availableProtocols = await this.lpwanService.getAvailableProtocols(this.device);\n this.currentProtocol = await this.lpwanService.getCurrentProtocol(this.device);\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n } finally {\n this.loading = false;\n }\n }\n\n async loadDevice() {\n const deviceId = this.router.routerState.snapshot.url.match(/\\d+/)[0];\n const { data } = await this.inventoryService.detail(deviceId);\n this.device = data;\n }\n\n async apply(selectedProtocol) {\n try {\n const moUpdated =\n (await this.lpwanService.applyProtocol(this.device, selectedProtocol)).res.status === 200;\n await this.reload();\n this.alertService.success(gettext('Device protocol set.'));\n this.lpwanSetDeviceProtocolForm.reset('dirty');\n if (moUpdated) {\n this.refreshCache();\n }\n } catch (ex) {\n this.alertService.danger(gettext('Could not set device protocol.'));\n }\n }\n\n async refreshCache() {\n try {\n await this.lpwanService.refreshCache(this.device);\n } catch (ex) {\n // do nothing (refreshing is an optional step)\n }\n }\n}\n","<form #lpwanSetDeviceProtocolForm=\"ngForm\">\n <div class=\"row\">\n <div class=\"col-md-9\">\n <div class=\"card card--fullpage\">\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'LPWAN configuration' | translate }}\n </div>\n </div>\n\n <div class=\"card-block p-t-24 p-b-8 overflow-visible\">\n <div *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!loading\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current device protocol</label>\n <p class=\"form-control-static\" *ngIf=\"!currentProtocol\">\n {{ device.type }}\n </p>\n <p\n class=\"form-control-static text-truncate\"\n *ngIf=\"currentProtocol\"\n title=\"{{ currentProtocol.name }}\"\n >\n {{ currentProtocol.name }}\n </p>\n </div>\n <c8y-form-group>\n <c8y-typeahead\n [(ngModel)]=\"newProtocol\"\n placeholder=\"{{ 'Select new device protocol' | translate }}\"\n (onSearch)=\"setPipe($event)\"\n name=\"newProtocol\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"\n let protocol of availableProtocols;\n loadMore: 'hidden';\n pipe: filterProtocols\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"newProtocol = protocol; setPipe('')\"\n >\n <c8y-highlight [text]=\"protocol.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the protocols.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <set-lns-connections [device]=\"device\"></set-lns-connections>\n </div>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"apply(newProtocol)\"\n [disabled]=\"!newProtocol\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</form>\n\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\n@Injectable()\nexport class LpwanAgentGuard {\n constructor(private lpwanService: LpwanSetDeviceProtocolService) {}\n\n canActivate(route: ActivatedRouteSnapshot): boolean {\n const device = route.data.contextData || route.parent.data.contextData;\n return this.lpwanService.isSupportedDevice(device);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, FormsModule, hookRoute, Route, ViewContext } from '@c8y/ngx-components';\nimport { LpwanAssignDeviceProtocolComponent } from './lpwan-set-device-protocol.component';\nimport { LpwanAgentGuard } from './lpwan-agent.guard';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\nimport { LpwanAssignLnsConnectionsComponent } from './lpwan-set-connections.component';\n\nconst lpwanRoutes: Route[] = [\n {\n context: ViewContext.Device,\n path: 'assign-protocol',\n component: LpwanAssignDeviceProtocolComponent,\n label: gettext('LPWAN'),\n icon: 'c8y-device-protocols',\n canActivate: [LpwanAgentGuard]\n }\n];\n\n@NgModule({\n imports: [\n CoreModule,\n FormsModule,\n LpwanAssignDeviceProtocolComponent,\n LpwanAssignLnsConnectionsComponent\n ],\n providers: [LpwanAgentGuard, LpwanSetDeviceProtocolService, hookRoute(lpwanRoutes)]\n})\nexport class LpwanProtocolModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.MultipleLnsConnectorService","i3","i4","i1.MultipleLnsConnectorService","FormsModule","i1.LpwanSetDeviceProtocolService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-protocol-lpwan.mjs","sources":["../../protocol-lpwan/multiple-lns-connectors/no-connections-found.component.ts","../../protocol-lpwan/multiple-lns-connectors/no-connections-found.component.html","../../protocol-lpwan/multiple-lns-connectors/multiple-lns-connector.model.ts","../../protocol-lpwan/multiple-lns-connectors/multiple-lns-connector.service.ts","../../protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.ts","../../protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.html","../../protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.ts","../../protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.html","../../protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.ts","../../protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.html","../../protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.ts","../../protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.html","../../protocol-lpwan/multiple-lns-connectors/multiple-lns-connectors.module.ts","../../protocol-lpwan/lpwan-set-device-protocol.service.ts","../../protocol-lpwan/lpwan-set-connections.component.ts","../../protocol-lpwan/lpwan-set-connections.component.html","../../protocol-lpwan/lpwan-set-device-protocol.component.ts","../../protocol-lpwan/lpwan-set-device-protocol.component.html","../../protocol-lpwan/lpwan-agent.guard.ts","../../protocol-lpwan/lpwan-protocol.module.ts","../../protocol-lpwan/c8y-ngx-components-protocol-lpwan.ts"],"sourcesContent":["import { Component, EventEmitter, Output, Input } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { EmptyStateComponent, IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\n\n@Component({\n selector: 'no-connections-found',\n templateUrl: './no-connections-found.component.html',\n imports: [EmptyStateComponent, IconDirective, C8yTranslatePipe]\n})\nexport class NoConnectionsFoundComponent {\n @Output() onAction: EventEmitter<void> = new EventEmitter();\n @Input() header: string = gettext('Connections');\n addConnection() {\n this.onAction.emit();\n }\n}\n","<div class=\"card content-fullpage split-view--5-7\">\n <div class=\"card-header separator grid__col--fullspan\">\n <h4>{{ header | translate}}</h4>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-ui-empty-state\n [icon]=\"'plug'\"\n [title]=\"'No connections found.' | translate\"\n [subtitle]=\"'Click below to add a new connection.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n title=\"{{ 'Add connection' | translate }}\"\n class=\"btn btn-primary\"\n (click)=\"addConnection()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add connection' | translate }}\n </button>\n </div>\n </div>\n <div class=\"inner-scroll split-view__detail\">\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-ui-empty-state\n [icon]=\"'more-details'\"\n [title]=\"'No settings to display.' | translate\"\n [subtitle]=\"'Add a connection.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n </div>\n</div>\n","export enum ConnectionType {\n ACTILITY,\n SIGFOX,\n LORIOT\n}\nexport interface Connection {\n name: string;\n baseUrl: string;\n username: string;\n password: string;\n description: string;\n}\nexport interface SigfoxConnection extends Connection {\n parentGroupId: string;\n}\nexport interface ActilityConnection extends Connection {\n profileId: string;\n routeApplicationServerId?: string;\n routeApplicationServerKey?: string;\n adminApiVersion: string;\n coreApiVersion: string;\n enterpriseConnection: boolean;\n}\n\nexport interface LoriotConnection extends Connection {\n providerType: string;\n}\n\nexport function isSigfoxConnection(\n connection: SigfoxConnection | ActilityConnection | LoriotConnection\n): connection is SigfoxConnection {\n return typeof (connection as SigfoxConnection).parentGroupId !== 'undefined';\n}\nexport function isActilityConnection(\n connection: SigfoxConnection | ActilityConnection | LoriotConnection\n): connection is ActilityConnection {\n return typeof (connection as ActilityConnection).profileId !== 'undefined';\n}\n\nexport function isLoriotConnection(\n connection: SigfoxConnection | ActilityConnection | LoriotConnection\n): connection is LoriotConnection {\n return typeof (connection as LoriotConnection).providerType !== 'undefined';\n}\n\nexport type LpwanState =\n | 'loadingConnection'\n | 'loadingError'\n | 'connectionAvailable'\n | 'connectionNotAvailable'\n | 'addConnections'\n | 'savedSuccessfully'\n | 'updateConnection';\n","import { Injectable } from '@angular/core';\nimport { FetchClient, IApplication, IFetchOptions, IFetchResponse } from '@c8y/client';\nimport { AlertService, AppStateService } from '@c8y/ngx-components';\nimport {\n ActilityConnection,\n isActilityConnection,\n isSigfoxConnection,\n SigfoxConnection,\n ConnectionType,\n LoriotConnection,\n isLoriotConnection\n} from './multiple-lns-connector.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MultipleLnsConnectorService {\n private headers: any;\n constructor(\n private client: FetchClient,\n private appStateService: AppStateService,\n private alertService: AlertService\n ) {\n this.headers = { 'Content-Type': 'application/json' };\n }\n\n async list(connectionType: ConnectionType) {\n const url = `${this.getBaseUrlByType(connectionType)}/lns-connection`;\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers\n };\n return this.client.fetch(url, options);\n }\n\n /**\n * Saves the connection.\n * @param connection The connection to be saved.\n * @param originalName The original name of the connection, required to perform an update.\n */\n async save(\n connection: ActilityConnection | SigfoxConnection | LoriotConnection,\n originalName: string = null\n ) {\n if (originalName) {\n return this.update(connection, originalName);\n }\n return this.create(connection);\n }\n\n async detail(\n connectionType: ConnectionType,\n connectionName: string\n ): Promise<ActilityConnection | SigfoxConnection | LoriotConnection | null> {\n const name = connectionName.toLocaleLowerCase();\n const url = `${this.getBaseUrlByType(connectionType)}/lns-connection/${encodeURIComponent(\n String(name)\n )}`;\n const options: IFetchOptions = {\n method: 'GET',\n headers: this.headers\n };\n const res = await this.client.fetch(url, options);\n if (res.status === 200) {\n return await res.json();\n }\n return null;\n }\n\n async exists(connectionType: ConnectionType, connectionName: string): Promise<boolean> {\n const connection = await this.detail(connectionType, connectionName);\n return connection !== null;\n }\n\n async create(connection: ActilityConnection | SigfoxConnection | LoriotConnection) {\n connection.name = connection.name.toLocaleLowerCase();\n const url = `${this.getBaseUrlByConnection(connection)}/lns-connection`;\n const options: IFetchOptions = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(connection)\n };\n return this.client.fetch(url, options);\n }\n\n async update(\n connection: ActilityConnection | SigfoxConnection | LoriotConnection,\n originalName: string\n ) {\n connection.name = connection.name.toLocaleLowerCase();\n const url = `${this.getBaseUrlByConnection(connection)}/lns-connection/${encodeURIComponent(\n String(originalName)\n )}`;\n const options: IFetchOptions = {\n method: 'PUT',\n headers: this.headers,\n body: JSON.stringify(connection)\n };\n return this.client.fetch(url, options);\n }\n\n getBaseUrlByConnection(connection: ActilityConnection | SigfoxConnection | LoriotConnection) {\n return isSigfoxConnection(connection)\n ? 'service/sigfox-agent'\n : isActilityConnection(connection)\n ? 'service/actility'\n : isLoriotConnection(connection)\n ? 'service/loriot'\n : '';\n }\n\n getBaseUrlByType(connectionType: ConnectionType) {\n return connectionType === ConnectionType.SIGFOX\n ? 'service/sigfox-agent'\n : connectionType === ConnectionType.ACTILITY\n ? 'service/actility'\n : connectionType === ConnectionType.LORIOT\n ? 'service/loriot'\n : '';\n }\n\n async delete(connection: ActilityConnection | SigfoxConnection | LoriotConnection) {\n const url = `${this.getBaseUrlByConnection(connection)}/lns-connection`;\n const options: IFetchOptions = {\n method: 'DELETE'\n };\n return this.client.fetch(`${url}/${encodeURIComponent(String(connection.name))}`, options);\n }\n\n getApplication(name: string): Partial<IApplication> {\n const { references } = this.appStateService.currentTenant.value.applications;\n return references.find(({ application }) => application.name === name).application;\n }\n\n async download(url: string): Promise<IFetchResponse> {\n try {\n const options: IFetchOptions = {\n method: 'GET'\n };\n return this.client.fetch(url, options);\n } catch (e) {\n this.alertService.addServerFailure(e);\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { saveAs } from 'file-saver';\nimport { IApplication } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'connection-info-with-download-csv',\n templateUrl: './connection-info-with-download-csv.component.html',\n imports: [C8yTranslatePipe]\n})\nexport class ConnectionInfoWithDownloadCsvComponent {\n @Input() messageData: any;\n @Input() appData: IApplication;\n @Input() modalTitle: string;\n @Input() connectionName: string;\n\n constructor(\n private modal: BsModalRef,\n private connectorService: MultipleLnsConnectorService,\n private alertService: AlertService,\n private translateService: TranslateService\n ) {}\n\n dismiss() {\n this.modal.hide();\n }\n\n async download() {\n const url = `/service/${this.appData.contextPath}${this.messageData.attrs.URL}`;\n const res = await this.connectorService.download(url);\n if (res && res.status === 200) {\n const streamData = await res.blob();\n saveAs(\n streamData,\n this.translateService.instant(gettext('{{ connectionName }} - devices.csv'), {\n connectionName: this.connectionName\n })\n );\n } else {\n this.alertService.danger(gettext('A server error occurred.'));\n }\n }\n}\n","<div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"c8y-prompt alert alert-danger\">\n <h3 class=\"m-b-16\">\n <i class=\"dlt-c8y-icon-exclamation-circle\"></i>\n <span>{{ modalTitle | translate }}</span>\n </h3>\n <p class=\"text-break-word\">\n {{ messageData.message | translate }}\n </p>\n <br>\n <span class=\"btn-default\" (click)=\"download()\">{{\n 'Click the link to download the file with the affected devices.' | translate\n }}</span>\n <div class=\"alert-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"dismiss()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ModalService,\n Status,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, escapeRegExp, find, head, orderBy } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConnectionInfoWithDownloadCsvComponent } from './connection-info-with-download-csv.component';\nimport { ConnectionType, LpwanState, SigfoxConnection } from './multiple-lns-connector.model';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { NgIf, NgFor } from '@angular/common';\nimport { NoConnectionsFoundComponent } from './no-connections-found.component';\n\n@Component({\n selector: 'sigfox-multiple-lns-connector',\n templateUrl: './sigfox-multiple-lns-connector.component.html',\n imports: [\n NgIf,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NoConnectionsFoundComponent,\n ListGroupComponent,\n NgFor,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormsModule,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ]\n})\nexport class SigfoxMultipleLnsConnectorComponent implements OnInit {\n state: LpwanState = 'loadingConnection';\n cloneDeep = cloneDeep;\n connection: SigfoxConnection;\n connections = Array<SigfoxConnection>();\n showPassword = false;\n @ViewChild('connectorsForm', { static: false }) connectorsForm: NgForm;\n cardHeader = gettext('Sigfox connections');\n allowedSpecialCharacters = '~!@$^(){}[]|:,<+=,.`_ -';\n namePattern = `^[a-zA-Z0-9 ${escapeRegExp(this.allowedSpecialCharacters)}]*$`;\n namePatternError = this.translateService.instant(\n gettext(\n 'Connection name can only contain letters, numbers, spaces, and the following symbols: {{ symbols }}'\n ),\n {\n symbols: this.allowedSpecialCharacters\n }\n );\n originalConnection: SigfoxConnection;\n constructor(\n private connectorService: MultipleLnsConnectorService,\n private alertService: AlertService,\n private translateService: TranslateService,\n private modalService: BsModalService,\n private modal: ModalService\n ) {}\n\n async ngOnInit() {\n await this.loadConnections();\n }\n\n async loadConnections() {\n const res = await this.connectorService.list(ConnectionType.SIGFOX);\n if (res && res.status !== 200) {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n this.state = 'loadingError';\n } else {\n const list = await res.json();\n this.connections = orderBy(list, ['name'], ['asc']);\n await this.setModel();\n }\n }\n\n async setModel(connectionObj = null) {\n const resetConnection = await this.resetEditedUnsavedConnection();\n this.connection = connectionObj\n ? connectionObj\n : this.state === 'savedSuccessfully'\n ? this.connection\n : (resetConnection ?? cloneDeep(head(this.connections)));\n this.state = 'updateConnection';\n this.showPassword = false;\n this.originalConnection = this.connection ? cloneDeep(this.connection) : undefined;\n }\n\n async resetEditedUnsavedConnection(): Promise<SigfoxConnection | undefined> {\n if (this.state !== 'updateConnection' || !this.originalConnection) {\n return;\n }\n\n const { name } = this.originalConnection;\n const originalData = find(this.connections, { name });\n if (originalData) {\n return cloneDeep(originalData);\n }\n }\n\n async addConnection() {\n await this.resetEditedUnsavedConnection();\n this.connection = {} as SigfoxConnection;\n this.originalConnection = {} as SigfoxConnection;\n this.state = 'addConnections';\n this.showPassword = true;\n }\n\n async save() {\n const checkForConnectionName =\n this.originalConnection && this.originalConnection.name && this.originalConnection.name !== ''\n ? this.originalConnection.name\n : this.connection.name;\n const isConnectionExist = await this.connectorService.exists(\n ConnectionType.SIGFOX,\n checkForConnectionName\n );\n if (this.state === 'addConnections' && isConnectionExist) {\n const mesg = this.translateService.instant(\n gettext(`Connection with name \"{{ name }}\" already exists.`),\n { name: this.connection.name }\n );\n this.alertService.danger(mesg);\n } else {\n return this.saveConnection();\n }\n }\n\n async deleteConnection(originalConnection) {\n const { name } = originalConnection;\n const mesg = this.translateService.instant(\n gettext(`You are about to delete the connection \"{{ name }}\". Do you want to proceed?`),\n { name }\n );\n\n try {\n await this.modal.confirm(gettext('Delete connection'), mesg, Status.DANGER, {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n });\n\n await this.delete(originalConnection);\n } catch (error) {\n // empty catch block\n }\n }\n\n changePassword() {\n this.showPassword = !this.showPassword;\n if (this.connectorsForm.controls.password) {\n this.connectorsForm.controls.password.setValue(null);\n }\n }\n\n private async saveConnection() {\n const res = await this.connectorService.save(this.connection, this.originalConnection?.name);\n if (res && (res.status === 201 || res.status === 200)) {\n this.state = 'savedSuccessfully';\n this.alertService.success(gettext('Connection saved.'));\n await this.loadConnections();\n } else if (res && res.status === 500) {\n const data = res.json ? await res.json() : undefined;\n const app = this.connectorService.getApplication('sigfox-agent');\n const initialState = {\n messageData: data,\n appData: app,\n modalTitle: gettext('Failed to update the connection'),\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n connectionName: this.connection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n }\n }\n\n private async delete(originalConnection) {\n try {\n const response = await this.connectorService.delete(originalConnection);\n\n if (response.ok && response.status === 204) {\n this.alertService.success(gettext('Connection deleted.'));\n await this.loadConnections();\n } else if (response && response.status === 500) {\n const data = response.json ? await response.json() : undefined;\n const app = this.connectorService.getApplication('sigfox-agent');\n const initialState = {\n messageData: data,\n appData: app,\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n modalTitle: gettext('Failed to delete the connection'),\n connectionName: originalConnection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = response.json ? await response.json() : undefined;\n this.alertService.addServerFailure({ data, response });\n }\n } catch (error) {\n // empty catch block\n }\n }\n}\n","<ng-container *ngIf=\"state === 'loadingConnection'; else renderListAndForm\">\n <c8y-loading></c8y-loading>\n</ng-container>\n<c8y-title>{{ 'Connectivity' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Connectivity' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Sigfox' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-template #renderListAndForm>\n <no-connections-found\n (onAction)=\"addConnection()\"\n *ngIf=\"connections.length === 0 && state !== 'addConnections'\"\n [header]=\"cardHeader | translate\"\n ></no-connections-found>\n <div>\n <div\n class=\"card content-fullpage split-view--5-7\"\n *ngIf=\"connections.length !== 0 || state === 'addConnections'\"\n >\n <div class=\"card-header separator grid__col--fullspan\">\n <div class=\"card-title\">{{ cardHeader | translate }}</div>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <c8y-list-group class=\"nav c8y-nav-stacked\">\n <c8y-li\n class=\"c8y-stacked-item p-0\"\n [class.active]=\"connection.name === connectionBeingEdited\"\n *ngFor=\"let connection of connections; let index = index\"\n (click)=\"setModel(cloneDeep(connection))\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n <span title=\"{{ connection.name }}\">\n {{ connection.name }}\n </span>\n </c8y-li>\n\n <c8y-li\n class=\"c8y-nav-stacked active\"\n *ngIf=\"state === 'addConnections'\"\n (click)=\"addConnection()\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n {{ 'New connection' | translate }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add connection' | translate }}\"\n [disabled]=\"state === 'addConnections'\"\n (click)=\"addConnection()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add connection' | translate }}\n </button>\n </div>\n </div>\n\n <!-- 'split-view__detail--selected' condition needs to be fixed. this is needed so that both columns are visible in tablet format -->\n\n <div\n class=\"inner-scroll split-view__detail\"\n ng-class=\"{ 'split-view__detail--selected': vm.selected && vm.jsonSchemaObjects }\"\n >\n <div class=\"card-header separator visible-sm visible-xs fit-w sticky-top\">\n <button\n class=\"btn btn-clean text-primary\"\n title=\"{{ 'Back' | translate }}\"\n ng-click=\"vm.deselect()\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n </div>\n <form\n class=\"d-contents\"\n #connectorsForm=\"ngForm\"\n >\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-form-group>\n <label for=\"name\">\n {{ 'Name' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"name\"\n name=\"name\"\n type=\"text\"\n required\n [placeholder]=\"'e.g. Sigfox connection' | translate\"\n [(ngModel)]=\"connection.name\"\n [pattern]=\"namePattern\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n [text]=\"namePatternError\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"description\">\n {{ 'Description' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n type=\"text\"\n [placeholder]=\"\n 'e.g. This connection has a built-in functionality to…' | translate\n \"\n [(ngModel)]=\"connection.description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"baseUrl\">\n {{ 'URL' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"baseUrl\"\n name=\"baseUrl\"\n type=\"text\"\n required\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://backend.sigfox.com/api' }\n \"\n [(ngModel)]=\"connection.baseUrl\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"parentGroupId\">\n {{ 'Parent group ID' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"parentGroupId\"\n name=\"parentGroupId\"\n type=\"text\"\n required\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: '58c1793b9e93a15370f71caa' }\n \"\n [(ngModel)]=\"connection.parentGroupId\"\n pattern=\"[a-z\\d]+\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n text=\"{{ 'Must be a valid Parent group ID' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"username\">\n {{ 'Username' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"username\"\n placeholder=\"{{ 'e.g. joe`LOCALIZE`' | translate }}\"\n name=\"username\"\n type=\"text\"\n required\n [(ngModel)]=\"connection.username\"\n />\n </c8y-form-group>\n <c8y-form-group *ngIf=\"showPassword\">\n <label for=\"password\">\n {{ 'Password' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"password\"\n placeholder=\"{{ 'e.g. my_password' | translate }}\"\n name=\"password\"\n type=\"password\"\n required\n [(ngModel)]=\"connection.password\"\n />\n </c8y-form-group>\n\n <button\n class=\"btn btn-default\"\n name=\"changePassword\"\n type=\"button\"\n *ngIf=\"state === 'updateConnection'\"\n (click)=\"changePassword()\"\n >\n <span\n title=\"{{ 'Change password' | translate }}\"\n *ngIf=\"!showPassword\"\n >\n {{ 'Change password' | translate }}\n </span>\n <span\n title=\"{{ 'Cancel password change' | translate }}\"\n *ngIf=\"showPassword\"\n >\n {{ 'Cancel password change' | translate }}\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"setModel()\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n data-cy=\"sigfox-multiple-lns-connector.component--delete-connectivity\"\n *ngIf=\"state === 'updateConnection'\"\n (click)=\"deleteConnection(originalConnection)\"\n translate\n >\n Delete\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n data-cy=\"sigfox-multiple-lns-connector.component--save-connectivity\"\n type=\"submit\"\n [disabled]=\"!connectorsForm.form.valid || connectorsForm.form.pristine\"\n (click)=\"save()\"\n translate\n >\n Save\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ModalService,\n Status,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { head, orderBy, findIndex, escapeRegExp, cloneDeep } from 'lodash-es';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ActilityConnection, ConnectionType, LpwanState } from './multiple-lns-connector.model';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConnectionInfoWithDownloadCsvComponent } from './connection-info-with-download-csv.component';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { NgIf, NgFor } from '@angular/common';\nimport { NoConnectionsFoundComponent } from './no-connections-found.component';\n\n@Component({\n selector: 'actility-multiple-lns-connector',\n templateUrl: './actility-multiple-lns-connector.component.html',\n imports: [\n NgIf,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NoConnectionsFoundComponent,\n ListGroupComponent,\n NgFor,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormsModule,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ]\n})\nexport class ActilityMultipleLnsConnectorComponent implements OnInit {\n state: LpwanState = 'loadingConnection';\n connection: ActilityConnection;\n connections = Array<ActilityConnection>();\n @ViewChild('connectorsForm', { static: false }) connectorsForm: NgForm;\n showPassword = false;\n cardHeader = gettext('Actility connections');\n allowedSpecialCharacters = '~!@$^(){}[]|:,<+=,.`_ -';\n namePattern = `^[a-zA-Z0-9 ${escapeRegExp(this.allowedSpecialCharacters)}]*$`;\n namePatternError = this.translateService.instant(\n gettext(\n 'Connection name can only contain letters, numbers, spaces, and the following symbols: {{ symbols }}'\n ),\n {\n symbols: this.allowedSpecialCharacters\n }\n );\n originalConnection: ActilityConnection;\n constructor(\n private connectorService: MultipleLnsConnectorService,\n private alertService: AlertService,\n private translateService: TranslateService,\n private modal: ModalService,\n private modalService: BsModalService\n ) {}\n\n async ngOnInit() {\n await this.loadConnections();\n }\n\n async loadConnections() {\n const res = await this.connectorService.list(ConnectionType.ACTILITY);\n if (res && res.status !== 200) {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n this.state = 'loadingError';\n } else {\n const list = await res.json();\n this.connections = orderBy(list, ['name'], ['asc']);\n await this.setModel();\n }\n }\n\n async setModel(connectionObj = null) {\n await this.resetEditedUnsavedConnection();\n this.connection = connectionObj\n ? connectionObj\n : this.state === 'savedSuccessfully'\n ? this.connection\n : head(this.connections);\n this.state = 'updateConnection';\n this.showPassword = false;\n this.originalConnection = this.connection ? cloneDeep(this.connection) : undefined;\n }\n\n async setAdminAndCoreApiVersion() {\n this.connection.adminApiVersion = 'latest';\n this.connection.coreApiVersion = 'latest';\n }\n\n async resetEditedUnsavedConnection() {\n if (this.state !== 'updateConnection' || !this.originalConnection) {\n return;\n }\n\n const { name } = this.originalConnection;\n const index = findIndex(this.connections, { name });\n if (index !== -1) {\n const originalData = (await this.connectorService.detail(\n ConnectionType.ACTILITY,\n name\n )) as ActilityConnection;\n this.connections[index] = originalData;\n }\n }\n\n async addConnection() {\n await this.resetEditedUnsavedConnection();\n this.connection = {} as ActilityConnection;\n this.originalConnection = {} as ActilityConnection;\n this.state = 'addConnections';\n this.showPassword = true;\n await this.setAdminAndCoreApiVersion();\n }\n\n async save() {\n const checkForConnectionName =\n this.originalConnection && this.originalConnection.name && this.originalConnection.name !== ''\n ? this.originalConnection.name\n : this.connection.name;\n const isConnectionExist = await this.connectorService.exists(\n ConnectionType.ACTILITY,\n checkForConnectionName\n );\n if (this.state === 'addConnections' && isConnectionExist) {\n const mesg = this.translateService.instant(\n gettext(`Connection with name \"{{ name }}\" already exists.`),\n { name: this.connection.name }\n );\n this.alertService.danger(mesg);\n } else {\n return this.saveConnection();\n }\n }\n\n async deleteConnection(originalConnection) {\n const { name } = originalConnection;\n const mesg = this.translateService.instant(\n gettext(`You are about to delete the connection \"{{ name }}\". Do you want to proceed?`),\n { name }\n );\n\n try {\n await this.modal.confirm(gettext('Delete connection'), mesg, Status.DANGER, {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n });\n\n await this.delete(originalConnection);\n } catch (error) {\n // empty catch block\n }\n }\n\n changePassword() {\n this.showPassword = !this.showPassword;\n if (this.connectorsForm.controls.password) {\n this.connectorsForm.controls.password.setValue(null);\n }\n }\n\n async saveConnection() {\n const res = await this.connectorService.save(this.connection, this.originalConnection?.name);\n if (res && (res.status === 201 || res.status === 200)) {\n this.state = 'savedSuccessfully';\n this.alertService.success(gettext('Connection saved.'));\n await this.loadConnections();\n } else if (res && res.status === 500) {\n const data = res.json ? await res.json() : undefined;\n const app = this.connectorService.getApplication('actility');\n const initialState = {\n messageData: data,\n appData: app,\n modalTitle: gettext('Failed to update the connection'),\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n connectionName: this.connection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n }\n }\n\n private async delete(originalConnection) {\n try {\n const response = await this.connectorService.delete(originalConnection);\n\n if (response.ok && response.status === 204) {\n this.alertService.success(gettext('Connection deleted.'));\n await this.loadConnections();\n } else if (response && response.status === 500) {\n const data = response.json ? await response.json() : undefined;\n const app = this.connectorService.getApplication('actility');\n const initialState = {\n messageData: data,\n appData: app,\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n modalTitle: gettext('Failed to delete the connection'),\n connectionName: originalConnection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = response.json ? await response.json() : undefined;\n this.alertService.addServerFailure({ data, response });\n }\n } catch (error) {\n // empty catch block\n }\n }\n}\n","<ng-container *ngIf=\"state === 'loadingConnection'; else renderListAndForm\">\n <c8y-loading></c8y-loading>\n</ng-container>\n\n<c8y-title>{{ 'Connectivity' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [label]=\"'Settings' | translate\"\n [icon]=\"'cog'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Connectivity' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Actility' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-template #renderListAndForm>\n <no-connections-found\n (onAction)=\"addConnection()\"\n *ngIf=\"connections.length === 0 && state !== 'addConnections'\"\n [header]=\"cardHeader | translate\"\n ></no-connections-found>\n <div>\n <div\n class=\"card content-fullpage split-view--5-7\"\n *ngIf=\"connections.length !== 0 || state === 'addConnections'\"\n >\n <div class=\"card-header separator grid__col--fullspan\">\n <div class=\"card-title\">{{ cardHeader | translate }}</div>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <c8y-list-group class=\"nav c8y-nav-stacked\">\n <c8y-li\n class=\"c8y-stacked-item p-0\"\n [class.active]=\"connection.name === connectionBeingEdited\"\n *ngFor=\"let connection of connections; let index = index\"\n (click)=\"setModel(connection)\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n <span title=\"{{ connection.name }}\">\n {{ connection.name }}\n </span>\n </c8y-li>\n\n <c8y-li\n *ngIf=\"state === 'addConnections'\"\n class=\"c8y-nav-stacked active\"\n (click)=\"addConnection()\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n {{ 'New connection' | translate }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n [disabled]=\"state === 'addConnections'\"\n title=\"{{ 'Add connection' | translate }}\"\n class=\"btn btn-default\"\n (click)=\"addConnection()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add connection' | translate }}\n </button>\n </div>\n </div>\n\n <!-- 'split-view__detail--selected' condition needs to be fixed. this is needed so that both columns are visible in tablet format -->\n\n <div\n class=\"inner-scroll split-view__detail\"\n ng-class=\"{ 'split-view__detail--selected': vm.selected && vm.jsonSchemaObjects }\"\n >\n <div class=\"card-header separator visible-sm visible-xs fit-w sticky-top\">\n <button\n title=\"{{ 'Back' | translate }}\"\n class=\"btn btn-clean text-primary\"\n ng-click=\"vm.deselect()\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n </div>\n <form #connectorsForm=\"ngForm\" class=\"d-contents\">\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-form-group>\n <label for=\"name\">\n {{ 'Name' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. Actility connection' | translate\"\n id=\"name\"\n name=\"name\"\n [(ngModel)]=\"connection.name\"\n required\n [pattern]=\"namePattern\"\n />\n <c8y-messages>\n <c8y-message name=\"pattern\" [text]=\"namePatternError\"></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"description\">\n {{ 'Description' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"\n 'e.g. This connection has a built-in functionality to…' | translate\n \"\n id=\"description\"\n name=\"description\"\n [(ngModel)]=\"connection.description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"baseUrl\">\n {{ 'URL' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"\n 'e.g. {{ example }}' | translate: { example: 'https://dx-api.thingpark.io' }\n \"\n id=\"baseUrl\"\n name=\"baseUrl\"\n [(ngModel)]=\"connection.baseUrl\"\n required\n />\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"profileId\">\n {{ 'Profile ID' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'dev1-api' }\"\n id=\"profileId\"\n name=\"profileId\"\n [(ngModel)]=\"connection.profileId\"\n required\n />\n </c8y-form-group>\n <!-- DM-1171 start-->\n <c8y-form-group>\n <label for=\"applicationServerId\">\n {{ 'Application server ID' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. Application Server' | translate\"\n id=\"applicationServerId\"\n name=\"applicationServerId\"\n [(ngModel)]=\"connection.routeApplicationServerId\"\n [required]=\"connection.routeApplicationServerKey ? 'required' : null\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"applicationServerKey\">\n {{ 'Application server key' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate: { example: '0011AEDF0011AEDF0011AEDF0011AEDF' }\n \"\n id=\"applicationServerKey\"\n name=\"applicationServerKey\"\n [(ngModel)]=\"connection.routeApplicationServerKey\"\n [required]=\"connection.routeApplicationServerId ? 'required' : null\"\n pattern=\"[A-Fa-f0-9]{32}\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n text=\"{{ 'Must be a valid server key' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"adminApiVersion\">\n {{ 'Admin API version' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'v102' }\"\n id=\"adminApiVersion\"\n name=\"adminApiVersion\"\n [(ngModel)]=\"connection.adminApiVersion\"\n required\n pattern=\"^v\\d+$|latest\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n text=\"{{ 'Must be a valid API version' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"coreApiVersion\">\n {{ 'Core API version' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'v121' }\"\n id=\"coreApiVersion\"\n name=\"coreApiVersion\"\n [(ngModel)]=\"connection.coreApiVersion\"\n required\n pattern=\"^v\\d+$|latest\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n text=\"{{ 'Must be a valid API version' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <!-- DM-1171 end-->\n <c8y-form-group>\n <label for=\"username\">\n {{ 'Username' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. joe`LOCALIZE`' | translate }}\"\n id=\"username\"\n name=\"username\"\n [(ngModel)]=\"connection.username\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"showPassword\">\n <label for=\"password\">\n {{ 'Password' | translate }}\n </label>\n <input\n type=\"password\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. my_password' | translate }}\"\n id=\"password\"\n name=\"password\"\n [(ngModel)]=\"connection.password\"\n required\n />\n </c8y-form-group>\n \n <!-- DM-1254 begins -->\n <c8y-form-group>\n <label title=\"{{ 'Connection type' | translate }}\">\n {{ 'Connection type' | translate }}\n </label>\n <label title=\"{{ 'Thingpark Enterprise' }}\" class=\"c8y-radio radio-inline\">\n <input type=\"radio\" name=\"c8y-group\" [value]=\"true\"\n [(ngModel)]=\"connection.enterpriseConnection\" required>\n <span></span> \n <span>{{ 'Thingpark Enterprise' }}</span>\n </label>\n <label title=\"{{ 'Thingpark Wireless' }}\" class=\"c8y-radio radio-inline\">\n <input type=\"radio\" name=\"c8y-group\" [value]=\"false\"\n [(ngModel)]=\"connection.enterpriseConnection\" required>\n <span></span> \n <span>{{ 'Thingpark Wireless' }}</span>\n </label>\n </c8y-form-group>\n <!-- DM-1254 ends -->\n <button\n *ngIf=\"state === 'updateConnection'\"\n type=\"button\"\n class=\"btn btn-default\"\n name=\"changePassword\"\n (click)=\"changePassword()\"\n >\n <span title=\"{{ 'Change password' | translate }}\" *ngIf=\"!showPassword\">\n {{ 'Change password' | translate }}\n </span>\n <span title=\"{{ 'Cancel password change' | translate }}\" *ngIf=\"showPassword\">\n {{ 'Cancel password change' | translate }}\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"card-footer separator-top\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n (click)=\"setModel()\"\n translate\n type=\"button\"\n >\n Cancel\n </button>\n <button\n *ngIf=\"state === 'updateConnection'\"\n title=\"{{ 'Delete' | translate }}\"\n class=\"btn btn-danger\"\n data-cy=\"actility-multiple-lns-connector--delete-connectivity\"\n (click)=\"deleteConnection(originalConnection)\"\n translate\n type=\"button\"\n >\n Delete\n </button>\n <button\n [disabled]=\"!connectorsForm.form.valid || connectorsForm.form.pristine\"\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n data-cy=\"actility-multiple-lns-connector.component--save-connectivity\"\n (click)=\"save()\"\n translate\n type=\"submit\"\n >\n Save\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ModalService,\n Status,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, escapeRegExp, find, head, orderBy } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConnectionInfoWithDownloadCsvComponent } from '../connection-info-with-download-csv.component';\nimport { ConnectionType, LoriotConnection, LpwanState } from '../multiple-lns-connector.model';\nimport { MultipleLnsConnectorService } from '../multiple-lns-connector.service';\nimport { NgIf, NgFor } from '@angular/common';\nimport { NoConnectionsFoundComponent } from '../no-connections-found.component';\n\n@Component({\n selector: 'loriot-multiple-lns-connector',\n templateUrl: './loriot-multiple-lns-connector.component.html',\n imports: [\n NgIf,\n LoadingComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NoConnectionsFoundComponent,\n ListGroupComponent,\n NgFor,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n FormsModule,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ]\n})\nexport class LoriotMultipleLnsConnectorComponent implements OnInit {\n state: LpwanState = 'loadingConnection';\n cloneDeep = cloneDeep;\n connection: LoriotConnection;\n connections = Array<LoriotConnection>();\n showPassword = false;\n @ViewChild('connectorsForm', { static: false }) connectorsForm: NgForm;\n cardHeader = gettext('LORIOT connections');\n allowedSpecialCharacters = '~!@$^(){}[]|:,<+=,.`_ -';\n namePattern = `^[a-zA-Z0-9 ${escapeRegExp(this.allowedSpecialCharacters)}]*$`;\n namePatternError = this.translateService.instant(\n gettext(\n 'Connection name can only contain letters, numbers, spaces, and the following symbols: {{ symbols }}'\n ),\n {\n symbols: this.allowedSpecialCharacters\n }\n );\n originalConnection: LoriotConnection;\n constructor(\n private connectorService: MultipleLnsConnectorService,\n private alertService: AlertService,\n private translateService: TranslateService,\n private modalService: BsModalService,\n private modal: ModalService\n ) {}\n\n async ngOnInit() {\n await this.loadConnections();\n }\n\n async loadConnections() {\n const res = await this.connectorService.list(ConnectionType.LORIOT);\n if (res && res.status !== 200) {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n this.state = 'loadingError';\n } else {\n const list = await res.json();\n this.connections = orderBy(list, ['name'], ['asc']);\n await this.setModel();\n }\n }\n\n async setModel(connectionObj = null) {\n const resetConnection = await this.resetEditedUnsavedConnection();\n this.connection = connectionObj\n ? connectionObj\n : this.state === 'savedSuccessfully'\n ? this.connection\n : (resetConnection ?? cloneDeep(head(this.connections)));\n this.state = 'updateConnection';\n this.showPassword = false;\n this.originalConnection = this.connection ? cloneDeep(this.connection) : undefined;\n this.connection.providerType = 'loriotType';\n }\n\n async resetEditedUnsavedConnection(): Promise<LoriotConnection | undefined> {\n if (this.state !== 'updateConnection' || !this.originalConnection) {\n return;\n }\n\n const { name } = this.originalConnection;\n const originalData = find(this.connections, { name });\n if (originalData) {\n return cloneDeep(originalData);\n }\n }\n\n async addConnection() {\n await this.resetEditedUnsavedConnection();\n this.connection = {} as LoriotConnection;\n this.originalConnection = {} as LoriotConnection;\n this.state = 'addConnections';\n this.showPassword = true;\n this.connection.providerType = 'loriotType';\n }\n\n async save() {\n const checkForConnectionName =\n this.originalConnection && this.originalConnection.name && this.originalConnection.name !== ''\n ? this.originalConnection.name\n : this.connection.name;\n const isConnectionExist = await this.connectorService.exists(\n ConnectionType.LORIOT,\n checkForConnectionName\n );\n if (this.state === 'addConnections' && isConnectionExist) {\n const msg = this.translateService.instant(\n gettext(`Connection with name \"{{ name }}\" already exists.`),\n { name: this.connection.name }\n );\n this.alertService.danger(msg);\n } else {\n return this.saveConnection();\n }\n }\n\n async deleteConnection(originalConnection) {\n const { name } = originalConnection;\n const msg = this.translateService.instant(\n gettext(`You are about to delete the connection \"{{ name }}\". Do you want to proceed?`),\n { name }\n );\n\n try {\n await this.modal.confirm(gettext('Delete connection'), msg, Status.DANGER, {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n });\n\n await this.delete(originalConnection);\n } catch (error) {\n // empty catch block\n }\n }\n\n changePassword() {\n this.showPassword = !this.showPassword;\n if (this.connectorsForm.controls.password) {\n this.connectorsForm.controls.password.setValue(null);\n }\n }\n\n private async saveConnection() {\n const res = await this.connectorService.save(this.connection, this.originalConnection?.name);\n if (res && (res.status === 201 || res.status === 200)) {\n this.state = 'savedSuccessfully';\n this.alertService.success(gettext('Connection saved.'));\n await this.loadConnections();\n } else if (res && res.status === 500) {\n const data = res.json ? await res.json() : undefined;\n const app = this.connectorService.getApplication('loriot-agent');\n const initialState = {\n messageData: data,\n appData: app,\n modalTitle: gettext('Failed to update the connection'),\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n connectionName: this.connection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = res.json ? await res.json() : undefined;\n this.alertService.addServerFailure({ data, res });\n }\n }\n\n private async delete(originalConnection) {\n if (!originalConnection.providerType) originalConnection.providerType = 'loriotType';\n try {\n const response = await this.connectorService.delete(originalConnection);\n\n if (response.ok && response.status === 204) {\n this.alertService.success(gettext('Connection deleted.'));\n await this.loadConnections();\n } else if (response && response.status === 500) {\n const data = response.json ? await response.json() : undefined;\n const app = this.connectorService.getApplication('loriot-agent');\n const initialState = {\n messageData: data,\n appData: app,\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n modalTitle: gettext('Failed to delete the connection'),\n connectionName: originalConnection.name\n };\n this.modalService.show(ConnectionInfoWithDownloadCsvComponent, { initialState });\n } else {\n const data = response.json ? await response.json() : undefined;\n this.alertService.addServerFailure({ data, response });\n }\n } catch (error) {\n // empty catch block\n }\n }\n}\n","<ng-container *ngIf=\"state === 'loadingConnection'; else renderListAndForm\">\n <c8y-loading></c8y-loading>\n</ng-container>\n\n<c8y-title>{{ 'Connectivity' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Connectivity' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'LORIOT' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-template #renderListAndForm>\n <no-connections-found\n (onAction)=\"addConnection()\"\n *ngIf=\"connections.length === 0 && state !== 'addConnections'\"\n [header]=\"cardHeader | translate\"\n ></no-connections-found>\n <div>\n <div\n class=\"card content-fullpage split-view--5-7\"\n *ngIf=\"connections.length !== 0 || state === 'addConnections'\"\n >\n <div class=\"card-header separator grid__col--fullspan\">\n <div class=\"card-title\">{{ cardHeader | translate }}</div>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-gray-white flex-grow\">\n <c8y-list-group class=\"nav c8y-nav-stacked\">\n <c8y-li\n class=\"c8y-stacked-item p-0\"\n [class.active]=\"connection.name === connectionBeingEdited\"\n *ngFor=\"let connection of connections; let index = index\"\n (click)=\"setModel(cloneDeep(connection))\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n <span title=\"{{ connection.name }}\">\n {{ connection.name }}\n </span>\n </c8y-li>\n\n <c8y-li\n class=\"c8y-nav-stacked active\"\n *ngIf=\"state === 'addConnections'\"\n (click)=\"addConnection()\"\n >\n <c8y-li-icon [icon]=\"'plug'\"></c8y-li-icon>\n {{ 'New connection' | translate }}\n </c8y-li>\n </c8y-list-group>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add connection' | translate }}\"\n [disabled]=\"state === 'addConnections'\"\n (click)=\"addConnection()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add connection' | translate }}\n </button>\n </div>\n </div>\n\n <!-- 'split-view__detail--selected' condition needs to be fixed. this is needed so that both columns are visible in tablet format -->\n\n <div\n class=\"inner-scroll split-view__detail\"\n [class]=\"{ 'split-view__detail--selected': connection }\"\n >\n <div class=\"card-header separator visible-sm visible-xs fit-w sticky-top\">\n <button\n class=\"btn btn-clean text-primary\"\n title=\"{{ 'Back' | translate }}\"\n (click)=\"resetEditedUnsavedConnection()\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n </div>\n <form\n class=\"d-contents\"\n #connectorsForm=\"ngForm\"\n >\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <c8y-form-group>\n <label for=\"name\">\n {{ 'Name' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"name\"\n name=\"name\"\n type=\"text\"\n required\n [placeholder]=\"'e.g. LORIOT connection' | translate\"\n [(ngModel)]=\"connection.name\"\n [pattern]=\"namePattern\"\n />\n <c8y-messages>\n <c8y-message\n name=\"pattern\"\n [text]=\"namePatternError\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"description\">\n {{ 'Description' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n type=\"text\"\n [placeholder]=\"\n 'e.g. This connection has a built-in functionality to…' | translate\n \"\n [(ngModel)]=\"connection.description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"baseUrl\">\n {{ 'URL' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"baseUrl\"\n name=\"baseUrl\"\n type=\"text\"\n required\n [placeholder]=\"\n 'e.g. {{ example }}' | translate : { example: 'https://ap3.loriot.io' }\n \"\n [(ngModel)]=\"connection.baseUrl\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label for=\"username\">\n {{ 'Username' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"username\"\n placeholder=\"{{ 'e.g. joe`LOCALIZE`' | translate }}\"\n name=\"username\"\n type=\"text\"\n required\n [(ngModel)]=\"connection.username\"\n />\n </c8y-form-group>\n <c8y-form-group *ngIf=\"showPassword\">\n <label for=\"password\">\n {{ 'Password' | translate }}\n </label>\n <input\n class=\"form-control\"\n id=\"password\"\n placeholder=\"{{ 'e.g. my_password' | translate }}\"\n name=\"password\"\n type=\"password\"\n required\n [(ngModel)]=\"connection.password\"\n />\n </c8y-form-group>\n\n <button\n class=\"btn btn-default\"\n name=\"changePassword\"\n type=\"button\"\n *ngIf=\"state === 'updateConnection'\"\n (click)=\"changePassword()\"\n >\n <span\n title=\"{{ 'Change password' | translate }}\"\n *ngIf=\"!showPassword\"\n >\n {{ 'Change password' | translate }}\n </span>\n <span\n title=\"{{ 'Cancel password change' | translate }}\"\n *ngIf=\"showPassword\"\n >\n {{ 'Cancel password change' | translate }}\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"setModel()\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n data-cy=\"loriot-multiple-lns-connector.component--delete-connectivity\"\n *ngIf=\"state === 'updateConnection'\"\n (click)=\"deleteConnection(originalConnection)\"\n translate\n >\n Delete\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n [disabled]=\"!connectorsForm.form.valid || connectorsForm.form.pristine\"\n (click)=\"save()\"\n data-cy=\"loriot-multiple-lns-connector.component--button-save\"\n translate\n >\n Save\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule, FormsModule, Route } from '@c8y/ngx-components';\nimport { NoConnectionsFoundComponent } from './no-connections-found.component';\nimport { RouterModule } from '@angular/router';\nimport { SigfoxMultipleLnsConnectorComponent } from './sigfox-multiple-lns-connector.component';\nimport { ActilityMultipleLnsConnectorComponent } from './actility-multiple-lns-connector.component';\nimport { MultipleLnsConnectorService } from './multiple-lns-connector.service';\nimport { ConnectionInfoWithDownloadCsvComponent } from './connection-info-with-download-csv.component';\nimport { LoriotMultipleLnsConnectorComponent } from './loriot/loriot-multiple-lns-connector.component';\n\nconst settingsRoutes: Route[] = [\n {\n path: 'connectivitySettings/multiple_lns_connectors_sigfox',\n component: SigfoxMultipleLnsConnectorComponent\n },\n {\n path: 'connectivitySettings/multiple_lns_connectors_actility',\n component: ActilityMultipleLnsConnectorComponent\n },\n {\n path: 'connectivitySettings/multiple_lns_connectors_loriot',\n component: LoriotMultipleLnsConnectorComponent\n }\n];\n@NgModule({\n imports: [\n CoreModule,\n CommonModule,\n FormsModule,\n RouterModule.forChild(settingsRoutes),\n SigfoxMultipleLnsConnectorComponent,\n NoConnectionsFoundComponent,\n ActilityMultipleLnsConnectorComponent,\n LoriotMultipleLnsConnectorComponent,\n ConnectionInfoWithDownloadCsvComponent\n ],\n providers: [MultipleLnsConnectorService]\n})\nexport class MultipleLnsConnectorsModule {}\n","import { Injectable } from '@angular/core';\nimport {\n IManagedObject,\n InventoryService,\n IResultList,\n FetchClient,\n IFetchOptions,\n IdentityService\n} from '@c8y/client';\nimport { get, orderBy } from 'lodash-es';\nimport { MultipleLnsConnectorService } from './multiple-lns-connectors';\nimport {\n ActilityConnection,\n ConnectionType,\n SigfoxConnection\n} from './multiple-lns-connectors/multiple-lns-connector.model';\n\n@Injectable()\nexport class LpwanSetDeviceProtocolService {\n supportedDevicesCfgs = [\n {\n name: 'actility',\n match: device =>\n get(device, 'c8y_LpwanDevice.lpwanDeviceType') === 'Lora' &&\n get(device, 'c8y_LpwanDevice.serviceProvider') === 'Actility',\n protocolTypes: ['c8y_ActilityDeviceType', 'c8y_LoraDeviceType', 'c8y_LpwanDeviceType'],\n externalIdTypes: ['c8y_LoriotEUI', 'c8y_Serial'],\n connectionType: ConnectionType.ACTILITY\n },\n {\n name: 'loriot',\n match: device =>\n get(device, 'c8y_LpwanDevice.lpwanDeviceType') === 'Lora' &&\n get(device, 'c8y_LpwanDevice.serviceProvider') === 'Loriot',\n protocolTypes: ['c8y_LoraDeviceType', 'c8y_LpwanDeviceType'],\n externalIdTypes: ['c8y_LoriotEUI', 'c8y_Serial'],\n connectionType: ConnectionType.LORIOT\n },\n {\n name: 'sigfox',\n match: device => get(device, 'c8y_LpwanDevice.serviceProvider') === 'Sigfox',\n protocolTypes: ['c8y_SigfoxDeviceType', 'c8y_LpwanDeviceType'],\n externalIdTypes: ['com.sigfox.deviceId'],\n connectionType: ConnectionType.SIGFOX\n }\n ];\n\n private readonly header: any = { 'Content-Type': 'application/json' };\n\n constructor(\n private inventoryService: InventoryService,\n private client: FetchClient,\n private identityService: IdentityService,\n private lnsService: MultipleLnsConnectorService\n ) {}\n\n async refreshCache(device) {\n const externalId = await this.getExternalId(device);\n if (externalId) {\n const url = `${this.getMicroserviceUrl(device)}/refreshCache/${externalId}`;\n const options: IFetchOptions = {\n method: 'POST',\n headers: this.header,\n body: JSON.stringify({})\n };\n return this.client.fetch(url, options);\n }\n }\n\n getMicroserviceUrl(device) {\n const { serviceProvider } = device.c8y_LpwanDevice;\n\n let serviceName = serviceProvider.toLowerCase();\n if (serviceProvider === 'Sigfox') {\n serviceName = 'sigfox-agent';\n }\n\n return `/service/${serviceName}`;\n }\n\n isSupportedDevice(device: IManagedObject): boolean {\n return this.supportedDevicesCfgs.some(({ match }) => match(device));\n }\n\n async getCurrentProtocol(device: IManagedObject) {\n const lpwanDevice = device.c8y_LpwanDevice;\n let protocolId;\n\n if (lpwanDevice.typeExternalId) {\n const externalId = (await this.identityService.detail(lpwanDevice.typeExternalId)).data;\n protocolId = externalId.managedObject.id;\n }\n\n if (!protocolId && lpwanDevice.type) {\n protocolId = lpwanDevice.type.split('/')[2];\n }\n\n if (!protocolId) {\n return null;\n }\n\n return (await this.inventoryService.detail(protocolId)).data;\n }\n\n async applyProtocol(device: IManagedObject, selectedProtocol: IManagedObject) {\n const [protocolExternalId] = (await this.identityService.list(selectedProtocol.id)).data;\n const { externalId, type } = protocolExternalId;\n device.c8y_LpwanDevice.typeExternalId = { externalId, type };\n device.c8y_LpwanDevice.type = 'inventory/managedObjects/' + selectedProtocol.id;\n device.type = selectedProtocol.name;\n return this.inventoryService.update(device);\n }\n\n async getAvailableProtocols(device: IManagedObject): Promise<IResultList<IManagedObject>> {\n const query = {\n __filter: {\n type: { __in: this.getProtocolTypesMatchingDevice(device) }\n },\n __orderby: [{ name: 1 }]\n };\n return this.inventoryService.listQuery(query, { withTotalPages: true, pageSize: 5 });\n }\n\n async getAvailableConnections(\n device: IManagedObject\n ): Promise<IResultList<ActilityConnection | SigfoxConnection>> {\n let list;\n const matchingCfg = this.supportedDevicesCfgs.find(({ match }) => match(device));\n const response = await this.lnsService.list(matchingCfg.connectionType);\n if (response && response.status === 200) {\n list = await response.json();\n list = orderBy(list, ['name'], ['asc']);\n return { res: response, data: list };\n }\n }\n\n private getProtocolTypesMatchingDevice(device: IManagedObject): string[] {\n const matchingCfg = this.supportedDevicesCfgs.find(({ match }) => match(device));\n return matchingCfg ? matchingCfg.protocolTypes : [];\n }\n\n private async getExternalId(device: IManagedObject): Promise<string> {\n const matchingCfg = this.supportedDevicesCfgs.find(({ match }) => match(device));\n const externalIds = (await this.identityService.list(device.id)).data;\n const externalId = externalIds.find(({ type }) => matchingCfg.externalIdTypes.includes(type));\n return externalId ? externalId.externalId : null;\n }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ForOfFilterPipe,\n PopoverConfirmButtons,\n PopoverConfirmComponent,\n C8yTranslateDirective,\n FormGroupComponent,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n MessagesComponent,\n MessageDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { find } from 'lodash-es';\nimport {\n ActilityConnection,\n SigfoxConnection\n} from './multiple-lns-connectors/multiple-lns-connector.model';\nimport { NgIf } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'set-lns-connections',\n templateUrl: './lpwan-set-connections.component.html',\n imports: [\n C8yTranslateDirective,\n NgIf,\n FormGroupComponent,\n PopoverConfirmComponent,\n TypeaheadComponent,\n FormsModule,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n MessagesComponent,\n MessageDirective,\n C8yTranslatePipe\n ]\n})\nexport class LpwanAssignLnsConnectionsComponent implements OnInit {\n loading: boolean;\n @Input() device: IManagedObject;\n buttons: PopoverConfirmButtons[] = [\n { label: gettext('Cancel'), action: () => Promise.reject() },\n { label: gettext('Re-register'), action: () => this.deviceReregister(), status: 'default' }\n ];\n reRegisterMsg = gettext('To change provider connection, you need to re-register device first.');\n filterConnection: ForOfFilterPipe<ActilityConnection | SigfoxConnection> = pipe();\n pattern = '';\n @ViewChild(PopoverConfirmComponent, { static: true }) popoverConfirm: PopoverConfirmComponent;\n\n newConnection: ActilityConnection | SigfoxConnection;\n availableConnections: IResultList<ActilityConnection | SigfoxConnection>;\n currentConnection: ActilityConnection | SigfoxConnection;\n\n constructor(\n private lpwanService: LpwanSetDeviceProtocolService,\n private alertService: AlertService\n ) {}\n async ngOnInit() {\n await this.reload();\n this.setConnectionPipe('');\n }\n\n setConnectionPipe(filterStr: string) {\n this.pattern = filterStr;\n this.filterConnection = pipe(\n map(connections =>\n connections.filter(\n connection =>\n (!this.currentConnection || this.currentConnection.name !== connection.name) &&\n (!filterStr || connection.name.toLowerCase().indexOf(filterStr.toLowerCase()) > -1)\n )\n )\n );\n }\n\n async reload() {\n this.loading = true;\n this.newConnection = null;\n try {\n this.availableConnections = await this.lpwanService.getAvailableConnections(this.device);\n this.currentConnection = find(this.availableConnections.data, {\n name: this.device.c8y_LpwanDevice.lnsConnectionName\n });\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n } finally {\n this.loading = false;\n }\n }\n\n togglePopover(popoverCfrm) {\n popoverCfrm.show();\n this.setConnectionPipe('');\n }\n\n deviceReregister() {\n return new Promise(resolve => {\n window.location.href = `#/deviceregistration`;\n resolve(true);\n });\n }\n}\n","<div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current connection</label>\n <p class=\"form-control-static\" *ngIf=\"!currentConnection\">\n {{ 'Connection is not set. Select connection for this device' | translate }}\n </p>\n <p class=\"form-control-static text-truncate\" *ngIf=\"currentConnection\" title=\"{{ currentConnection.name }}\">\n {{ currentConnection.name }}\n </p>\n </div>\n\n <c8y-form-group>\n <c8y-popover-confirm\n outsideClick=\"true\"\n containerClass=\"lns-connection-popover\"\n [message]=\"reRegisterMsg\"\n [buttons]=\"buttons\"\n [placement]=\"'bottom'\"\n ></c8y-popover-confirm>\n <c8y-typeahead\n *ngIf=\"!loading\"\n [(ngModel)]=\"newConnection\"\n placeholder=\"{{ 'Select new connection' | translate }}\"\n name=\"newConnection\"\n (onSearch)=\"setConnectionPipe($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"let connection of availableConnections; loadMore: 'hidden'; pipe: filterConnection\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"togglePopover(popoverConfirm)\"\n >\n <c8y-highlight [text]=\"connection.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the connections.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n</div>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ForOfFilterPipe,\n LoadingComponent,\n C8yTranslateDirective,\n FormGroupComponent,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n MessagesComponent,\n MessageDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\nimport { Router } from '@angular/router';\nimport { pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { NgIf } from '@angular/common';\nimport { LpwanAssignLnsConnectionsComponent } from './lpwan-set-connections.component';\n\n@Component({\n selector: 'set-device-protocol',\n templateUrl: './lpwan-set-device-protocol.component.html',\n imports: [\n FormsModule,\n NgIf,\n LoadingComponent,\n C8yTranslateDirective,\n FormGroupComponent,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n MessagesComponent,\n MessageDirective,\n LpwanAssignLnsConnectionsComponent,\n C8yTranslatePipe\n ]\n})\nexport class LpwanAssignDeviceProtocolComponent implements OnInit {\n loading: boolean;\n device: IManagedObject;\n currentProtocol: IManagedObject;\n availableProtocols: IResultList<IManagedObject>;\n newProtocol: IManagedObject;\n filterProtocols: ForOfFilterPipe<IManagedObject> = pipe();\n pattern = '';\n @ViewChild('lpwanSetDeviceProtocolForm', { static: false }) lpwanSetDeviceProtocolForm: NgForm;\n\n constructor(\n private lpwanService: LpwanSetDeviceProtocolService,\n private alertService: AlertService,\n private router: Router,\n private inventoryService: InventoryService\n ) {}\n async ngOnInit() {\n await this.reload();\n this.setPipe('');\n }\n\n setPipe(filterStr: string) {\n this.pattern = filterStr;\n this.filterProtocols = pipe(\n map(protocols =>\n protocols.filter(\n protocol =>\n (!this.currentProtocol || this.currentProtocol.id !== protocol.id) &&\n (!filterStr || protocol.name.toLowerCase().indexOf(filterStr.toLowerCase()) > -1)\n )\n )\n );\n }\n\n async reload() {\n this.loading = true;\n this.newProtocol = null;\n try {\n await this.loadDevice();\n this.availableProtocols = await this.lpwanService.getAvailableProtocols(this.device);\n this.currentProtocol = await this.lpwanService.getCurrentProtocol(this.device);\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n } finally {\n this.loading = false;\n }\n }\n\n async loadDevice() {\n const deviceId = this.router.routerState.snapshot.url.match(/\\d+/)[0];\n const { data } = await this.inventoryService.detail(deviceId);\n this.device = data;\n }\n\n async apply(selectedProtocol) {\n try {\n const moUpdated =\n (await this.lpwanService.applyProtocol(this.device, selectedProtocol)).res.status === 200;\n await this.reload();\n this.alertService.success(gettext('Device protocol set.'));\n this.lpwanSetDeviceProtocolForm.reset('dirty');\n if (moUpdated) {\n this.refreshCache();\n }\n } catch (ex) {\n this.alertService.danger(gettext('Could not set device protocol.'));\n }\n }\n\n async refreshCache() {\n try {\n await this.lpwanService.refreshCache(this.device);\n } catch (ex) {\n // do nothing (refreshing is an optional step)\n }\n }\n}\n","<form #lpwanSetDeviceProtocolForm=\"ngForm\">\n <div class=\"row\">\n <div class=\"col-md-9\">\n <div class=\"card card--fullpage\">\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'LPWAN configuration' | translate }}\n </div>\n </div>\n\n <div class=\"card-block p-t-24 p-b-8 overflow-visible\">\n <div *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!loading\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current device protocol</label>\n <p class=\"form-control-static\" *ngIf=\"!currentProtocol\">\n {{ device.type }}\n </p>\n <p\n class=\"form-control-static text-truncate\"\n *ngIf=\"currentProtocol\"\n title=\"{{ currentProtocol.name }}\"\n >\n {{ currentProtocol.name }}\n </p>\n </div>\n <c8y-form-group>\n <c8y-typeahead\n [(ngModel)]=\"newProtocol\"\n placeholder=\"{{ 'Select new device protocol' | translate }}\"\n (onSearch)=\"setPipe($event)\"\n name=\"newProtocol\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"\n let protocol of availableProtocols;\n loadMore: 'hidden';\n pipe: filterProtocols\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"newProtocol = protocol; setPipe('')\"\n >\n <c8y-highlight [text]=\"protocol.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the protocols.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <set-lns-connections [device]=\"device\"></set-lns-connections>\n </div>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"apply(newProtocol)\"\n [disabled]=\"!newProtocol\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</form>\n\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\n@Injectable()\nexport class LpwanAgentGuard {\n constructor(private lpwanService: LpwanSetDeviceProtocolService) {}\n\n canActivate(route: ActivatedRouteSnapshot): boolean {\n const device = route.data.contextData || route.parent.data.contextData;\n return this.lpwanService.isSupportedDevice(device);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, FormsModule, hookRoute, Route, ViewContext } from '@c8y/ngx-components';\nimport { LpwanAssignDeviceProtocolComponent } from './lpwan-set-device-protocol.component';\nimport { LpwanAgentGuard } from './lpwan-agent.guard';\nimport { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';\nimport { LpwanAssignLnsConnectionsComponent } from './lpwan-set-connections.component';\n\nconst lpwanRoutes: Route[] = [\n {\n context: ViewContext.Device,\n path: 'assign-protocol',\n component: LpwanAssignDeviceProtocolComponent,\n label: gettext('LPWAN'),\n icon: 'c8y-device-protocols',\n canActivate: [LpwanAgentGuard]\n }\n];\n\n@NgModule({\n imports: [\n CoreModule,\n FormsModule,\n LpwanAssignDeviceProtocolComponent,\n LpwanAssignLnsConnectionsComponent\n ],\n providers: [LpwanAgentGuard, LpwanSetDeviceProtocolService, hookRoute(lpwanRoutes)]\n})\nexport class LpwanProtocolModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.MultipleLnsConnectorService","i3","i4","i1.MultipleLnsConnectorService","FormsModule","i1.LpwanSetDeviceProtocolService"],"mappings":"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"}
|