{"version":3,"file":"c8y-ngx-components-actility-device-registration.mjs","sources":["../../actility-device-registration/actility-device-registration.model.ts","../../actility-device-registration/actility-device-registration.service.ts","../../actility-device-registration/actility-device-registration.component.ts","../../actility-device-registration/actility-device-registration.component.html","../../actility-device-registration/actility-device-registration-button.component.ts","../../actility-device-registration/actility-device-registration-button.component.html","../../actility-device-registration/actility-device-registration.factory.ts","../../actility-device-registration/actility-device-registration.module.ts","../../actility-device-registration/c8y-ngx-components-actility-device-registration.ts"],"sourcesContent":["export interface ConnectivityPlan {\n  grantedConnections: string;\n  id: string;\n  name: string;\n  ref: string;\n  usedConnections: string;\n  message?: string;\n}\n\nexport interface DeviceType {\n  name: string;\n  id: string;\n}\n\nexport interface ActilityDeviceProfile {\n  id: string;\n  name: string;\n  typeMAC: string;\n  message?: string;\n}\n\nexport interface ActilityDeviceRegistration {\n  applicationEUI: string;\n  applicationKey: string;\n  devEUI: string;\n  deviceProfile: ActilityDeviceProfile;\n  connectivityPlan: ConnectivityPlan;\n  deviceType: DeviceType;\n  lnsConnectionName: string;\n  connection: {\n    name: string;\n    description: string;\n    baseUrl: string;\n    profileId: string;\n    username: string;\n    password: string;\n  };\n}\n\nexport const PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION = {\n  EVENT: 'deviceRegistration',\n  COMPONENT: 'actility-registration',\n  RESULT: { SUCCESS: 'registrationSuccess', FAILURE: 'registrationFailure' }\n} as const;\n","import { Injectable } from '@angular/core';\nimport {\n  ApplicationService,\n  FetchClient,\n  IFetchOptions,\n  IManagedObject,\n  IResultList,\n  InventoryService\n} from '@c8y/client';\nimport { AppStateService, OptionsService, gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { some } from 'lodash-es';\nimport {\n  ActilityDeviceProfile,\n  ActilityDeviceRegistration,\n  ConnectivityPlan\n} from './actility-device-registration.model';\n\nexport enum ActilityErrorName {\n  NoConnectivityPlansError = 'NoConnectivityPlansError',\n  NoFreeSlotsInConnectivityPlansError = 'NoFreeSlotsInConnectivityPlansError',\n  NoConnectivitySettingsError = 'NoConnectivitySettingsError',\n  ConnectivitySettingsError = 'ConnectivitySettingsError',\n  NoDeviceProfilesError = 'NoDeviceProfilesError',\n  DeviceProfilesFetchError = 'DeviceProfilesFetchError',\n  NoDeviceProtocolsError = 'NoDeviceProtocolsError',\n  DeviceProtocolsFetchError = 'DeviceProtocolsFetchError',\n  RegistrationError = 'RegistrationError'\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ActilityDeviceRegistrationService {\n  private baseUrl = '/service/actility';\n  private registrationUrl = `${this.baseUrl}/newDeviceRequest`;\n  private connectivityPlansUrl = `${this.baseUrl}/connectivityPlans`;\n  private deviceProfilesUrl = `${this.baseUrl}/deviceProfiles`;\n  private headers: object = {\n    'Content-Type': 'application/json'\n  };\n\n  constructor(\n    private inventoryService: InventoryService,\n    private client: FetchClient,\n    private translateService: TranslateService,\n    private applicationService: ApplicationService,\n    private optionsService: OptionsService,\n    private appState: AppStateService\n  ) {}\n\n  async getConnections() {\n    const options: IFetchOptions = {\n      method: 'GET',\n      headers: this.headers\n    };\n    const res = await this.client.fetch(`${this.baseUrl}/lns-connection`, options);\n    const data = await res.json();\n\n    if (res.status === 200) {\n      if (data.length === 0) {\n        await this.throwNoConnectivitySettingsError();\n      }\n    } else {\n      await this.throwConnectivitySettingsError(data);\n    }\n    return { res, data };\n  }\n  /**\n   * Gets connectivity plans from LoRa platform.\n   * @param connectionName The name of connection for which connectivity plans will be retrieved\n   * @returns The result list with connectivity plans, or throws an error with exception.\n   */\n  async getConnectivityPlans(connectionName: string): Promise<IResultList<ConnectivityPlan>> {\n    const options: IFetchOptions = {\n      method: 'GET',\n      headers: this.headers,\n      params: {\n        actilityConnectionName: connectionName\n      }\n    };\n\n    const res = await this.client.fetch(this.connectivityPlansUrl, options);\n    const data = await res.json();\n\n    if (res.status === 200) {\n      if (data.length === 0) {\n        this.throwNoConnectivityPlansError();\n      } else {\n        if (!this.hasAvailableConnections(data)) {\n          this.throwNoFreeSlotsInConnectivityPlansError();\n        }\n      }\n    } else {\n      await this.throwConnectivitySettingsError(data);\n    }\n\n    return { res, data };\n  }\n\n  /**\n   * Gets the device profiles from LoRa platform.\n   * @param connectionName The name of connection for which device profiles will be retrieved\n   * @returns The result list with device profiles, or throws an error with exception.\n   */\n  async getDeviceProfiles(connectionName: string): Promise<IResultList<ActilityDeviceProfile>> {\n    const options: IFetchOptions = {\n      method: 'GET',\n      headers: this.headers,\n      params: {\n        actilityConnectionName: connectionName\n      }\n    };\n\n    const res = await this.client.fetch(this.deviceProfilesUrl, options);\n    const data = await res.json();\n\n    if (res.status === 200) {\n      if (data.length === 0) {\n        this.throwNoDeviceProfilesError();\n      }\n    } else {\n      this.throwDeviceProfilesFetchError();\n    }\n\n    return { res, data };\n  }\n\n  /**\n   * Gets the device protocols\n   */\n  async getDeviceProtocols(\n    filter: object = { withTotalPages: true }\n  ): Promise<IResultList<IManagedObject>> {\n    const query = {\n      __filter: {\n        __and: [\n          { __has: 'c8y_IsDeviceType' },\n          {\n            type: { __in: ['c8y_ActilityDeviceType', 'c8y_LoraDeviceType', 'c8y_LpwanDeviceType'] }\n          }\n        ]\n      },\n      __orderby: [{ name: 1 }]\n    };\n    const deviceProtocolsList = await this.inventoryService.listQuery(query, filter);\n    const { res, data } = deviceProtocolsList;\n\n    if (res.status === 200) {\n      if (data.length === 0) {\n        this.throwNoDeviceProtocolsError();\n      }\n    } else {\n      this.throwDeviceProtocolsFetchError();\n    }\n\n    return deviceProtocolsList;\n  }\n\n  /**\n   * Creates device registration\n   */\n  async register(registration: ActilityDeviceRegistration) {\n    const options: IFetchOptions = {\n      method: 'POST',\n      headers: this.headers,\n      body: JSON.stringify(registration)\n    };\n\n    const res = await this.client.fetch(this.registrationUrl, options);\n    const data = await res.json();\n\n    if (res.status !== 201) {\n      this.throwRegistrationError(data);\n    }\n\n    return { res, data };\n  }\n\n  /**\n   * checks if used connections is less then granted connections\n   */\n  private hasAvailableConnections(connectivityPlans) {\n    return some(\n      connectivityPlans,\n      plan => parseInt(plan.grantedConnections, 10) > parseInt(plan.usedConnections, 10)\n    );\n  }\n\n  private async throwNoConnectivitySettingsError() {\n    const error = new Error();\n    error.name = ActilityErrorName.NoConnectivitySettingsError;\n\n    if (await this.appState.isApplicationAvailable('administration')) {\n      error.message = this.translateService.instant(\n        gettext(\n          `Could not get connectivity plans from the LoRa platform. Verify the ThingPark credentials in the Administration application under <a href=\"{{ link }}\">Settings</a>.`\n        ),\n        {\n          link: '/apps/administration/index.html#/connectivitySettings/multiple_lns_connectors_actility'\n        }\n      );\n    } else {\n      error.message = gettext(\n        'Could not get connectivity plans from the LoRa platform. Please contact the administrator.'\n      );\n    }\n\n    throw error;\n  }\n\n  private throwConnectivitySettingsError(data: { message: string }) {\n    const error = new Error();\n    error.name = ActilityErrorName.ConnectivitySettingsError;\n    error.message = data.message;\n    throw error;\n  }\n\n  private throwNoConnectivityPlansError() {\n    const error = new Error();\n    error.name = ActilityErrorName.NoConnectivityPlansError;\n    error.message = gettext(\n      'No connectivity plans found. New connectivity plans must be created via the LoRa platform.'\n    );\n    throw error;\n  }\n\n  private throwNoFreeSlotsInConnectivityPlansError() {\n    const companyName = this.optionsService.get('companyName', 'Cumulocity IoT');\n    const error = new Error();\n    error.name = ActilityErrorName.NoFreeSlotsInConnectivityPlansError;\n    error.message = this.translateService.instant(\n      gettext(\n        `No connectivity plans with free slots available. Please contact ThingPark on the device quota limits for your connectivity plans or remove unused devices from ThingPark and retry registering the device in the {{companyName}} platform.`\n      ),\n      {\n        companyName\n      }\n    );\n    throw error;\n  }\n\n  private throwDeviceProfilesFetchError() {\n    const error = new Error();\n    error.name = ActilityErrorName.DeviceProfilesFetchError;\n    error.message = gettext('Could not load device profiles from the LoRa platform.');\n    throw error;\n  }\n\n  private throwNoDeviceProfilesError() {\n    const error = new Error();\n    error.name = ActilityErrorName.NoDeviceProfilesError;\n    error.message = gettext(\n      'No device profiles found. Create a new device profile via the LoRa platform.'\n    );\n    throw error;\n  }\n\n  private throwDeviceProtocolsFetchError() {\n    const error = new Error();\n    error.name = ActilityErrorName.DeviceProtocolsFetchError;\n    error.message = gettext('Could not load device protocols.');\n    throw error;\n  }\n\n  private throwNoDeviceProtocolsError() {\n    const error = new Error();\n    error.name = ActilityErrorName.NoDeviceProtocolsError;\n    error.message = this.translateService.instant(\n      gettext(\n        `No device protocols configured. Create a LoRa device protocol in <a href=\"{{ link }}\">Device protocols</a>.`\n      ),\n      {\n        link: '/apps/devicemanagement/#/deviceprotocols'\n      }\n    );\n    throw error;\n  }\n\n  private throwRegistrationError(data: { message: string }) {\n    const error = new Error();\n    error.name = ActilityErrorName.RegistrationError;\n    error.message = data.message;\n    throw error;\n  }\n}\n","import { CdkStep } from '@angular/cdk/stepper';\nimport { Component } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { C8yStepper, GainsightService, gettext } from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { cloneDeep, uniq } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, defer, forkJoin, from, of, Subject, throwError } from 'rxjs';\nimport { catchError, map, mergeMap, shareReplay, switchMap, takeUntil } from 'rxjs/operators';\nimport {\n  ActilityDeviceRegistration,\n  PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION\n} from './actility-device-registration.model';\nimport {\n  ActilityDeviceRegistrationService,\n  ActilityErrorName\n} from './actility-device-registration.service';\ntype ActilityState =\n  | 'loadPending'\n  | 'loadSuccess'\n  | 'loadError'\n  | 'registrationPending'\n  | 'registrationSuccess'\n  | 'registrationError';\n@Component({\n  selector: 'c8y-actility-registration',\n  templateUrl: 'actility-device-registration.component.html'\n})\nexport class ActilityDeviceRegistrationComponent {\n  stepper: C8yStepper;\n  registrationStepLabels = {\n    next: gettext('Register')\n  };\n  finalStepLabels = {\n    custom: gettext('Close')\n  };\n\n  state: ActilityState = 'loadPending';\n  errors$ = new BehaviorSubject<Error[]>([]);\n  errorMessages$ = this.errors$.pipe(\n    map(errors => errors.map(error => error.message)),\n    map(messages => uniq(messages))\n  );\n\n  connections$ = this.getConnections$();\n  deviceProtocols$ = this.getDeviceProtocols$();\n  unsubscribe$: Subject<void> = new Subject();\n  load$ = this.connections$.pipe(\n    catchError((error: Error) => of(error)),\n    switchMap(connections => {\n      if (\n        connections instanceof Error &&\n        connections.name === ActilityErrorName.NoConnectivitySettingsError\n      ) {\n        return of([connections]);\n      }\n\n      return forkJoin([\n        of(connections),\n        this.deviceProtocols$.pipe(catchError((error: Error) => of(error)))\n      ]);\n    }),\n    map(results => results.filter(result => result instanceof Error)),\n    switchMap(errors => (errors.length === 0 ? of([]) : throwError(errors)))\n  );\n\n  form = new FormGroup({});\n  model = {} as ActilityDeviceRegistration;\n\n  // Formly schema definition to render actility device registration form\n  fields: FormlyFieldConfig[] = [\n    {\n      key: 'connection',\n      type: 'typeahead',\n      templateOptions: {\n        label: gettext('Connection'),\n        required: true,\n        c8yForOptions: this.connections$,\n        displayProperty: 'name',\n        valueProperties: ['name']\n      }\n    },\n    {\n      key: 'deviceProfile',\n      type: 'typeahead',\n      templateOptions: {\n        label: gettext('Device profile'),\n        required: true,\n        displayProperty: 'name',\n        placeholder: 'IWM-LR3',\n        valueProperties: ['id', 'name', 'typeMAC']\n      },\n      hooks: {\n        onInit: field => {\n          const connectionControl = field.form.get('connection');\n          connectionControl.valueChanges\n            .pipe(\n              takeUntil(this.unsubscribe$),\n              mergeMap(({ name }) => this.getDeviceProfiles$(name))\n            )\n            .subscribe(\n              profiles => {\n                field.templateOptions.c8yForOptions = of(profiles);\n                field.formControl.setValue(null);\n              },\n              error => {\n                field.form.get('deviceProfile').setErrors({ deviceProfile: true });\n                field.validators.deviceProfile.message = error.message;\n              }\n            );\n        }\n      },\n      validators: {\n        deviceProfile: {\n          expression: (control: AbstractControl) => {\n            return control.status === 'VALID';\n          },\n          message: () => ''\n        }\n      }\n    },\n    {\n      key: 'deviceType',\n      type: 'typeahead',\n      templateOptions: {\n        label: gettext('Device protocol'),\n        required: true,\n        c8yForOptions: this.deviceProtocols$,\n        displayProperty: 'name',\n        valueProperties: ['id', 'name']\n      }\n    },\n    {\n      key: 'devEUI',\n      type: 'input',\n      templateOptions: {\n        placeholder: '0018A20000000004',\n        label: gettext('Device EUI'),\n        required: true,\n        pattern: '^([a-fA-F0-9]{16})$'\n      },\n      validation: {\n        messages: {\n          pattern: gettext('Must be a valid 16 digit hexadecimal number.')\n        }\n      }\n    },\n    {\n      key: 'applicationEUI',\n      type: 'input',\n      templateOptions: {\n        placeholder: '70B3D53260000003',\n        label: gettext('Application EUI'),\n        required: true,\n        pattern: '^([a-fA-F0-9]{16})$'\n      },\n      validation: {\n        messages: {\n          pattern: gettext('Must be a valid 16 digit hexadecimal number.')\n        }\n      }\n    },\n    {\n      key: 'applicationKey',\n      type: 'input',\n      templateOptions: {\n        label: gettext('Application key'),\n        placeholder: '258DB54023EA74F0D55085F7351737D0',\n        required: true,\n        pattern: '^([a-fA-F0-9]{32})$'\n      },\n      validation: {\n        messages: {\n          pattern: gettext('Must be a valid 32 digit hexadecimal number.')\n        }\n      }\n    },\n    {\n      key: 'connectivityPlan',\n      type: 'typeahead',\n      templateOptions: {\n        label: gettext('Connectivity plan'),\n        description: gettext('Only connectivity plans with free slots are displayed'),\n        required: true,\n        placeholder: 'Dev-ope testing CP',\n        displayProperty: 'name',\n        valueProperties: ['id', 'ref', 'name', 'grantedConnections', 'usedConnections']\n      },\n      hooks: {\n        onInit: field => {\n          const connectionControl = field.form.get('connection');\n          connectionControl.valueChanges\n            .pipe(\n              takeUntil(this.unsubscribe$),\n              mergeMap(({ name }) => this.getConnectivityPlans$(name))\n            )\n            .subscribe(\n              profiles => {\n                field.templateOptions.c8yForOptions = of(profiles);\n                field.formControl.setValue(null);\n              },\n              error => {\n                field.form.get('connectivityPlan').setErrors({ connectivityPlan: true });\n                field.validators.connectivityPlan.message = error.message;\n              }\n            );\n        }\n      },\n      validators: {\n        connectivityPlan: {\n          expression: (control: AbstractControl) => {\n            return control.status === 'VALID';\n          },\n          message: () => ''\n        }\n      }\n    }\n  ];\n\n  constructor(\n    public bsModalRef: BsModalRef,\n    private registrationService: ActilityDeviceRegistrationService,\n    private gainsightService: GainsightService\n  ) {\n    this.load$.subscribe(\n      () => {\n        this.state = 'loadSuccess';\n      },\n      errors => {\n        this.state = 'loadError';\n        this.errors$.next(errors);\n      }\n    );\n  }\n\n  getConnectivityPlans$(name) {\n    return defer(() => from(this.registrationService.getConnectivityPlans(name))).pipe(\n      shareReplay(1)\n    );\n  }\n\n  getDeviceProfiles$(name) {\n    return defer(() => from(this.registrationService.getDeviceProfiles(name))).pipe(shareReplay(1));\n  }\n\n  getDeviceProtocols$() {\n    return defer(() => from(this.registrationService.getDeviceProtocols())).pipe(shareReplay(1));\n  }\n\n  getConnections$() {\n    return defer(() => from(this.registrationService.getConnections())).pipe(shareReplay(1));\n  }\n\n  async register(event: { stepper: C8yStepper; step: CdkStep }) {\n    event.stepper.next();\n    this.state = 'registrationPending';\n    try {\n      const actilityDevice = this.getActilityDeviceToSend();\n      await this.registrationService.register(actilityDevice);\n      this.state = 'registrationSuccess';\n      this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.EVENT, {\n        result: PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.RESULT.SUCCESS,\n        component: PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.COMPONENT\n      });\n    } catch (error) {\n      this.state = 'registrationError';\n      this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.EVENT, {\n        result: PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.RESULT.FAILURE,\n        component: PRODUCT_EXPERIENCE_ACTILITY_REGISTRATION.COMPONENT\n      });\n      this.errors$.next([error]);\n    }\n  }\n\n  getActilityDeviceToSend() {\n    const actilityDevice: ActilityDeviceRegistration = cloneDeep(this.model);\n    actilityDevice.lnsConnectionName = this.model.connection.name;\n    delete (actilityDevice as any).connection;\n    return actilityDevice;\n  }\n  ngOnDestroy(): void {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<c8y-modal\n  [title]=\"'Actility LoRa registration' | translate\"\n  [headerClasses]=\"'dialog-header'\"\n  [customFooter]=\"true\"\n>\n  <ng-container c8y-modal-title>\n    <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n  </ng-container>\n\n  <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n    <div class=\"p-16 text-center\">\n      <c8y-loading></c8y-loading>\n    </div>\n  </ng-container>\n\n  <!--Formly schema is rendered-->\n  <ng-template #registrationForm>\n    <c8y-stepper\n      [hideStepProgress]=\"true\"\n      c8y-modal-body\n      linear\n      *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n    >\n      <cdk-step [stepControl]=\"form\">\n        <div class=\"p-b-16\">\n          <p class=\"modal-subtitle sticky-top\">\n            {{ 'Register a single Actility device' | translate }}\n          </p>\n          <formly-form\n            class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n            [form]=\"form\"\n            [fields]=\"fields\"\n            [model]=\"model\"\n          ></formly-form>\n        </div>\n\n        <c8y-stepper-buttons\n          class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n          [labels]=\"registrationStepLabels\"\n          (onNext)=\"register($event)\"\n          (onCancel)=\"bsModalRef.hide()\"\n          [showButtons]=\"{ cancel: true, next: true }\"\n          [pending]=\"state === 'registrationPending'\"\n          [disabled]=\"!form?.valid\"\n        ></c8y-stepper-buttons>\n      </cdk-step>\n      <cdk-step state=\"final\">\n        <!--success scenario-->\n        <div\n          class=\"p-16 text-center\"\n          *ngIf=\"state === 'registrationPending'\"\n        >\n          <c8y-loading></c8y-loading>\n        </div>\n        <div class=\"m-24\">\n          <c8y-operation-result\n            class=\"lead m-b-0\"\n            type=\"success\"\n            *ngIf=\"state === 'registrationSuccess'\"\n            text=\"{{ 'Device registered' | translate }}\"\n            [size]=\"84\"\n            [vertical]=\"true\"\n          ></c8y-operation-result>\n        </div>\n        <c8y-stepper-buttons\n          class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n          (onCustom)=\"bsModalRef.hide()\"\n          [showButtons]=\"{ custom: true }\"\n          [labels]=\"finalStepLabels\"\n        ></c8y-stepper-buttons>\n      </cdk-step>\n    </c8y-stepper>\n  </ng-template>\n\n  <!--Failure scenario-->\n  <ng-template #errorMessagesPresent>\n    <div class=\"m-24\">\n      <c8y-operation-result\n        class=\"lead\"\n        type=\"error\"\n        *ngIf=\"state === 'registrationError'\"\n        text=\"{{ 'Failed to register' | translate }}\"\n        [size]=\"84\"\n        [vertical]=\"true\"\n      ></c8y-operation-result>\n      <div\n        class=\"m-b-8\"\n        *ngFor=\"let msg of errorMessages$ | async\"\n        data-cy=\"actility-device-registration.component--registration-error\"\n        [ngClass]=\"{\n          'text-center': state === 'registrationError',\n          'alert alert-danger': state === 'loadError'\n        }\"\n      >\n        <span [innerHTML]=\"msg | translate\"></span>\n      </div>\n    </div>\n    <div class=\"modal-footer\">\n      <button\n        class=\"btn btn-default\"\n        title=\"{{ 'Close' | translate }}\"\n        type=\"button\"\n        (click)=\"bsModalRef.hide()\"\n      >\n        {{ 'Close' | translate }}\n      </button>\n    </div>\n  </ng-template>\n</c8y-modal>\n","import { Component } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ActilityDeviceRegistrationComponent } from './actility-device-registration.component';\n\n@Component({\n  selector: 'c8y-actility-registration-button',\n  templateUrl: 'actility-device-registration-button.component.html'\n})\nexport class ActilityDeviceRegistrationButtonComponent {\n  constructor(private modalService: BsModalService) {}\n\n  open() {\n    this.modalService.show(ActilityDeviceRegistrationComponent, {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      ignoreBackdropClick: true\n    });\n  }\n}\n","<button title=\"{{ 'Actility LoRa' | translate }}\" type=\"button\" (click)=\"open()\">\n  <i c8yIcon=\"c8y-device-connect\"></i>\n  {{ 'Actility LoRa' | translate }}\n</button>\n","import { Injectable } from '@angular/core';\nimport { TenantUiService } from '@c8y/ngx-components';\nimport { ActilityDeviceRegistrationButtonComponent } from './actility-device-registration-button.component';\nimport { RegisterDeviceFactory, RegisterDeviceItem } from '@c8y/ngx-components/register-device';\n@Injectable({\n  providedIn: 'root'\n})\nexport class ActilityDeviceRegistrationFactory implements RegisterDeviceFactory {\n  constructor(private tenantService: TenantUiService) {}\n\n  get() {\n    const actions: RegisterDeviceItem[] = [];\n    if (this.tenantService.isMicroserviceSubscribedInCurrentTenant('actility')) {\n      actions.push({\n        template: ActilityDeviceRegistrationButtonComponent,\n        priority: 99,\n        category: 'single'\n      } as RegisterDeviceItem);\n    }\n    return actions;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule } from '@c8y/ngx-components';\nimport { hookDeviceRegistration } from '@c8y/ngx-components/register-device';\nimport { ActilityDeviceRegistrationButtonComponent } from './actility-device-registration-button.component';\nimport { ActilityDeviceRegistrationFactory } from './actility-device-registration.factory';\nimport { ActilityDeviceRegistrationComponent } from './actility-device-registration.component';\nimport { ActilityDeviceRegistrationService } from './actility-device-registration.service';\n\n@NgModule({\n  imports: [CoreModule, CommonModule],\n  declarations: [ActilityDeviceRegistrationButtonComponent, ActilityDeviceRegistrationComponent],\n  providers: [\n    ActilityDeviceRegistrationService,\n    hookDeviceRegistration(ActilityDeviceRegistrationFactory)\n  ]\n})\nexport class ActilityDeviceRegistrationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.ActilityDeviceRegistrationService","i2"],"mappings":"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"}