@c8y/ngx-components 1022.13.0 → 1022.16.2
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/alarms/alarms.helper.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/templates/template.component.d.ts +1 -1
- package/core/asset-property/asset-property.model.d.ts +2 -0
- package/core/asset-property/asset-property.model.d.ts.map +1 -1
- package/core/authentication/authentication.module.d.ts.map +1 -1
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -1
- package/core/drop-area/drop-area.component.d.ts +2 -0
- package/core/drop-area/drop-area.component.d.ts.map +1 -1
- package/core/dynamic-forms/file/file.type.component.d.ts.map +1 -1
- package/core/modal/modal.module.d.ts.map +1 -1
- package/core/plugins/plugins.module.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts +1 -2
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/select/select.component.d.ts.map +1 -1
- package/device-list/devices.breadcrumb-factory.d.ts +1 -0
- package/device-list/devices.breadcrumb-factory.d.ts.map +1 -1
- package/device-parameters/device-parameter-details.component.d.ts +22 -0
- package/device-parameters/device-parameter-details.component.d.ts.map +1 -0
- package/device-parameters/device-parameter-value.component.d.ts +12 -0
- package/device-parameters/device-parameter-value.component.d.ts.map +1 -0
- package/device-parameters/device-parameters-list.component.d.ts +2 -1
- package/device-parameters/device-parameters-list.component.d.ts.map +1 -1
- package/device-parameters/index.d.ts +5 -0
- package/device-parameters/index.d.ts.map +1 -1
- package/device-parameters/parameter-type-cell-renderer.components.d.ts +8 -0
- package/device-parameters/parameter-type-cell-renderer.components.d.ts.map +1 -0
- package/device-profile/add-device-profile.component.d.ts +1 -1
- package/device-profile/add-device-profile.component.d.ts.map +1 -1
- package/device-profile/device-profile-list.component.d.ts +1 -1
- package/device-profile/device-profile-list.component.d.ts.map +1 -1
- package/device-profile/device-profile.component.d.ts +1 -1
- package/device-profile/device-profile.component.d.ts.map +1 -1
- package/device-profile/device-profile.module.d.ts +17 -17
- package/device-profile/device-profile.module.d.ts.map +1 -1
- package/device-profile/device-tab-profile/device-profile-item-list.component.d.ts +1 -1
- package/device-profile/device-tab-profile/device-profile-item-list.component.d.ts.map +1 -1
- package/device-profile/device-tab-profile/device-tab-profile-detail.component.d.ts +1 -1
- package/device-profile/device-tab-profile/device-tab-profile-detail.component.d.ts.map +1 -1
- package/device-profile/device-tab-profile/device-tab-profile.component.d.ts +1 -1
- package/device-profile/device-tab-profile/device-tab-profile.component.d.ts.map +1 -1
- package/device-profile/select-configuration-modal.component.d.ts +1 -1
- package/device-profile/select-configuration-modal.component.d.ts.map +1 -1
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +4 -2
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
- package/device-shell/command-templates/command-templates.component.d.ts +1 -1
- package/device-shell/command-templates/command-templates.component.d.ts.map +1 -1
- package/device-shell/command-templates/command-templates.directive.d.ts +1 -1
- package/device-shell/command-templates/command-templates.directive.d.ts.map +1 -1
- package/device-shell/command-templates/command-templates.module.d.ts +1 -1
- package/device-shell/shell/shell.component.d.ts +1 -1
- package/device-shell/shell/shell.component.d.ts.map +1 -1
- package/device-shell/shell/shell.module.d.ts +7 -7
- package/diagnostics/diagnostics.component.d.ts +1 -1
- package/diagnostics/diagnostics.component.d.ts.map +1 -1
- package/diagnostics/diagnostics.module.d.ts +8 -8
- package/diagnostics/diagnostics.module.d.ts.map +1 -1
- package/events/c8y-ngx-components-events.d.ts.map +1 -0
- package/events/events-timeline/c8y-ngx-components-events-events-timeline.d.ts.map +1 -0
- package/events/events-timeline/events-timeline.component.d.ts +19 -0
- package/events/events-timeline/events-timeline.component.d.ts.map +1 -0
- package/events/events-timeline/index.d.ts +2 -0
- package/events/events-timeline/index.d.ts.map +1 -0
- package/events/events.model.d.ts +6 -0
- package/events/events.model.d.ts.map +1 -0
- package/events/events.service.d.ts +10 -0
- package/events/events.service.d.ts.map +1 -0
- package/events/index.d.ts +3 -0
- package/events/index.d.ts.map +1 -0
- package/fesm2022/c8y-ngx-components-alarms.mjs +2 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -2
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-list.mjs +10 -3
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-parameters.mjs +110 -13
- package/fesm2022/c8y-ngx-components-device-parameters.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +126 -49
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +44 -12
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -22
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +36 -19
- package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +45 -0
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-events.mjs +44 -0
- package/fesm2022/c8y-ngx-components-events.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +8 -14
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +49 -49
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +27 -14
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +27 -33
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +51 -39
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +10 -8
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +16 -11
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +8 -11
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +25 -21
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -9
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +31 -31
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +33 -13
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +19 -13
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +40 -36
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +60 -41
- 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 +122 -109
- 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 +66 -41
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +11 -16
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +212 -83
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +113 -54
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +130 -62
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +37 -28
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +156 -83
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs +32 -19
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +66 -29
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +16 -3
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +1 -14
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-user-roles.mjs +8 -3
- package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +864 -859
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +34 -17
- package/locales/es.po +20 -2
- package/locales/fr.po +20 -2
- package/locales/ja_JP.po +22 -4
- package/locales/ko.po +20 -2
- package/locales/locales.pot +19 -1
- package/locales/nl.po +20 -2
- package/locales/pl.po +20 -2
- package/locales/pt_BR.po +20 -2
- package/locales/zh_CN.po +21 -3
- package/locales/zh_TW.po +20 -2
- package/operations/bulk-operation-from-single/bulk-operation-from-single.component.d.ts +1 -1
- package/operations/bulk-operation-from-single/bulk-operation-from-single.component.d.ts.map +1 -1
- package/operations/bulk-operation-from-single/bulk-operation-from-single.module.d.ts +3 -5
- package/operations/bulk-operation-from-single/bulk-operation-from-single.module.d.ts.map +1 -1
- package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts +1 -1
- package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts.map +1 -1
- package/operations/bulk-operation-list-item/bulk-operation-list-item.module.d.ts +1 -7
- package/operations/bulk-operation-list-item/bulk-operation-list-item.module.d.ts.map +1 -1
- package/operations/bulk-operation-list-item/bulk-operation-wrapper.component.d.ts +1 -1
- package/operations/bulk-operation-list-item/bulk-operation-wrapper.component.d.ts.map +1 -1
- package/operations/bulk-operation-list-item/modal-body-host.directive.d.ts +1 -1
- package/operations/bulk-operation-list-item/modal-body-host.directive.d.ts.map +1 -1
- package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts +1 -1
- package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts.map +1 -1
- package/operations/bulk-operation-scheduler/bulk-operation-scheduler.module.d.ts +6 -6
- package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts +1 -1
- package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
- package/operations/bulk-operation-stepper/base-stepper.component.d.ts +1 -1
- package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts +1 -1
- package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts.map +1 -1
- package/operations/bulk-operation-stepper/bulk-operation-stepper.module.d.ts +1 -5
- package/operations/bulk-operation-stepper/bulk-operation-stepper.module.d.ts.map +1 -1
- package/operations/bulk-operation-stepper/custom-step.directive.d.ts +1 -1
- package/operations/bulk-operation-stepper/custom-step.directive.d.ts.map +1 -1
- package/operations/bulk-operations-list/bulk-operations-list.component.d.ts +1 -1
- package/operations/bulk-operations-list/bulk-operations-list.component.d.ts.map +1 -1
- package/operations/bulk-operations-list/bulk-operations-list.module.d.ts +4 -10
- package/operations/bulk-operations-list/bulk-operations-list.module.d.ts.map +1 -1
- package/operations/bulk-operations-list/modals/bulk-operations-modal.component.d.ts +1 -1
- package/operations/bulk-operations-list/modals/bulk-operations-modal.component.d.ts.map +1 -1
- package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.component.d.ts +1 -1
- package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.component.d.ts.map +1 -1
- package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.module.d.ts +3 -4
- package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.module.d.ts.map +1 -1
- package/operations/create-bulk-operation-details/create-bulk-operation-details.component.d.ts +1 -1
- package/operations/create-bulk-operation-details/create-bulk-operation-details.component.d.ts.map +1 -1
- package/operations/create-bulk-operation-details/create-bulk-operation-details.module.d.ts +1 -4
- package/operations/create-bulk-operation-details/create-bulk-operation-details.module.d.ts.map +1 -1
- package/operations/device-selector/device-selector.component.d.ts +1 -1
- package/operations/device-selector/device-selector.component.d.ts.map +1 -1
- package/operations/device-selector/device-selector.module.d.ts +1 -3
- package/operations/device-selector/device-selector.module.d.ts.map +1 -1
- package/operations/operation-details/operation-details-modal.component.d.ts +1 -1
- package/operations/operation-details/operation-details-modal.component.d.ts.map +1 -1
- package/operations/operation-details/operation-details.component.d.ts +1 -1
- package/operations/operation-details/operation-details.component.d.ts.map +1 -1
- package/operations/operation-details/operation-details.module.d.ts +1 -7
- package/operations/operation-details/operation-details.module.d.ts.map +1 -1
- package/operations/operation-details/operation-details.service.d.ts.map +1 -1
- package/operations/operation-summary/operation-summary.component.d.ts +1 -1
- package/operations/operation-summary/operation-summary.component.d.ts.map +1 -1
- package/operations/operation-summary/operation-summary.module.d.ts +1 -2
- package/operations/operation-summary/operation-summary.module.d.ts.map +1 -1
- package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
- package/operations/operations-list/operations-list.component.d.ts.map +1 -1
- package/operations/operations-list/operations-list.service.d.ts +1 -1
- package/operations/operations-list/operations-list.service.d.ts.map +1 -1
- package/operations/operations-list-item-details/operation-details-tabs.component.d.ts +1 -1
- package/operations/operations-list-item-details/operation-details-tabs.component.d.ts.map +1 -1
- package/operations/operations-list-item-details/operation-details.component.d.ts +1 -1
- package/operations/operations-list-item-details/operation-details.component.d.ts.map +1 -1
- package/operations/operations-list-item-details/operations-list-item-details.module.d.ts +1 -6
- package/operations/operations-list-item-details/operations-list-item-details.module.d.ts.map +1 -1
- package/operations/operations-timeline/operations-timeline.component.d.ts +5 -5
- package/operations/operations-timeline/operations-timeline.component.d.ts.map +1 -1
- package/operations/operations-timeline/operations-timeline.module.d.ts +4 -6
- package/operations/operations-timeline/operations-timeline.module.d.ts.map +1 -1
- package/operations/status-filter/status-filter.component.d.ts +1 -1
- package/operations/status-filter/status-filter.component.d.ts.map +1 -1
- package/operations/status-filter/status-filter.module.d.ts +1 -4
- package/operations/status-filter/status-filter.module.d.ts.map +1 -1
- package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts +1 -1
- package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.module.d.ts +1 -6
- package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.module.d.ts.map +1 -1
- package/operations/stepper-bulk-type-device-profile/confirm-device-profile-selection-step.component.d.ts +1 -1
- package/operations/stepper-bulk-type-device-profile/confirm-device-profile-selection-step.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.d.ts +1 -1
- package/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts +1 -1
- package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.module.d.ts +1 -6
- package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.module.d.ts.map +1 -1
- package/operations/stepper-bulk-type-firmware/select-firmware.component.d.ts +1 -1
- package/operations/stepper-bulk-type-firmware/select-firmware.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts +1 -1
- package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.module.d.ts +1 -6
- package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.module.d.ts.map +1 -1
- package/operations/stepper-bulk-type-firmware/version-or-patch.component.d.ts +1 -1
- package/operations/stepper-bulk-type-firmware/version-or-patch.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-software/confirm-software-selection-step.component.d.ts +1 -1
- package/operations/stepper-bulk-type-software/confirm-software-selection-step.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-software/select-software-step.component.d.ts +1 -1
- package/operations/stepper-bulk-type-software/select-software-step.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts +1 -1
- package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-software/stepper-bulk-type-software.module.d.ts +1 -6
- package/operations/stepper-bulk-type-software/stepper-bulk-type-software.module.d.ts.map +1 -1
- package/operations/stepper-frames/preview-block.directive.d.ts +1 -1
- package/operations/stepper-frames/preview-block.directive.d.ts.map +1 -1
- package/operations/stepper-frames/preview-selection-frame.component.d.ts +1 -1
- package/operations/stepper-frames/preview-selection-frame.component.d.ts.map +1 -1
- package/operations/stepper-frames/select-step-frame.component.d.ts +1 -1
- package/operations/stepper-frames/select-step-frame.component.d.ts.map +1 -1
- package/operations/stepper-frames/stepper-frames.modules.d.ts +1 -2
- package/operations/stepper-frames/stepper-frames.modules.d.ts.map +1 -1
- package/package.json +1 -1
- package/protocol-opcua/opcua-address-space-detail.component.d.ts +1 -1
- package/protocol-opcua/opcua-address-space-detail.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-address-space-tree.component.d.ts +1 -1
- package/protocol-opcua/opcua-address-space-tree.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-address-space.component.d.ts +1 -1
- package/protocol-opcua/opcua-address-space.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-auto-apply-settings.component.d.ts +1 -1
- package/protocol-opcua/opcua-auto-apply-settings.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-device-protocol-browse-path-validation.directive.d.ts +1 -1
- package/protocol-opcua/opcua-device-protocol-browse-path-validation.directive.d.ts.map +1 -1
- package/protocol-opcua/opcua-device-protocol-data-reporting.component.d.ts +1 -1
- package/protocol-opcua/opcua-device-protocol-data-reporting.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-device-protocol-description.component.d.ts +1 -1
- package/protocol-opcua/opcua-device-protocol-description.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-device-protocol-detail.component.d.ts +1 -1
- package/protocol-opcua/opcua-device-protocol-detail.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-device-protocol-mapping.component.d.ts +1 -1
- package/protocol-opcua/opcua-device-protocol-mapping.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-device-protocol-object-mapping-status-icon.component.d.ts +1 -1
- package/protocol-opcua/opcua-device-protocol-object-mapping-status-icon.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-protocol.module.d.ts +26 -26
- package/protocol-opcua/opcua-protocol.module.d.ts.map +1 -1
- package/protocol-opcua/opcua-server-config.component.d.ts +1 -1
- package/protocol-opcua/opcua-server-config.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-server-list.component.d.ts +1 -1
- package/protocol-opcua/opcua-server-list.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-servers.component.d.ts +1 -1
- package/protocol-opcua/opcua-servers.component.d.ts.map +1 -1
- package/repository/configuration/device-tab/configuration-filter.pipe.d.ts +1 -1
- package/repository/configuration/device-tab/configuration-filter.pipe.d.ts.map +1 -1
- package/repository/configuration/device-tab/configuration-preview.component.d.ts +1 -1
- package/repository/configuration/device-tab/configuration-preview.component.d.ts.map +1 -1
- package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts +11 -13
- package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts.map +1 -1
- package/repository/configuration/device-tab/device-configuration-list.component.d.ts +1 -1
- package/repository/configuration/device-tab/device-configuration-list.component.d.ts.map +1 -1
- package/repository/configuration/device-tab/device-configuration.component.d.ts +1 -1
- package/repository/configuration/device-tab/device-configuration.component.d.ts.map +1 -1
- package/repository/configuration/device-tab/save-to-repository.component.d.ts +1 -1
- package/repository/configuration/device-tab/save-to-repository.component.d.ts.map +1 -1
- package/repository/configuration/device-tab/source-code-preview.component.d.ts +1 -1
- package/repository/configuration/device-tab/source-code-preview.component.d.ts.map +1 -1
- package/repository/configuration/device-tab/text-based-configuration.component.d.ts +1 -1
- package/repository/configuration/device-tab/text-based-configuration.component.d.ts.map +1 -1
- package/repository/configuration/list/configuration-detail.component.d.ts +1 -1
- package/repository/configuration/list/configuration-detail.component.d.ts.map +1 -1
- package/repository/configuration/list/configuration-list.component.d.ts +1 -1
- package/repository/configuration/list/configuration-list.component.d.ts.map +1 -1
- package/repository/configuration/list/configuration-repository-list.module.d.ts +4 -7
- package/repository/configuration/list/configuration-repository-list.module.d.ts.map +1 -1
- package/repository/firmware/device-tab/firmware-device-tab.component.d.ts +1 -1
- package/repository/firmware/device-tab/firmware-device-tab.component.d.ts.map +1 -1
- package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts +4 -6
- package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts.map +1 -1
- package/repository/firmware/list/add-firmware-modal.component.d.ts +1 -1
- package/repository/firmware/list/add-firmware-modal.component.d.ts.map +1 -1
- package/repository/firmware/list/add-firmware-patch-modal.component.d.ts +1 -1
- package/repository/firmware/list/add-firmware-patch-modal.component.d.ts.map +1 -1
- package/repository/firmware/list/firmware-details.component.d.ts +1 -1
- package/repository/firmware/list/firmware-details.component.d.ts.map +1 -1
- package/repository/firmware/list/firmware-list.component.d.ts +1 -1
- package/repository/firmware/list/firmware-list.component.d.ts.map +1 -1
- package/repository/firmware/list/firmware-repository-list.module.d.ts +6 -11
- package/repository/firmware/list/firmware-repository-list.module.d.ts.map +1 -1
- package/repository/shared/file-download/file-download.component.d.ts +1 -1
- package/repository/shared/file-download/file-download.component.d.ts.map +1 -1
- package/repository/shared/select-modal/repository-select-modal.component.d.ts +1 -1
- package/repository/shared/select-modal/repository-select-modal.component.d.ts.map +1 -1
- package/repository/shared/shared-repository.module.d.ts +1 -4
- package/repository/shared/shared-repository.module.d.ts.map +1 -1
- package/repository/shared/software-type/software-type.component.d.ts +1 -1
- package/repository/shared/software-type/software-type.component.d.ts.map +1 -1
- package/repository/software/device-tab/device-software-changes.component.d.ts +1 -1
- package/repository/software/device-tab/device-software-changes.component.d.ts.map +1 -1
- package/repository/software/device-tab/device-software-list.component.d.ts +1 -1
- package/repository/software/device-tab/device-software-list.component.d.ts.map +1 -1
- package/repository/software/device-tab/installed-software.component.d.ts +1 -1
- package/repository/software/device-tab/installed-software.component.d.ts.map +1 -1
- package/repository/software/device-tab/software-device-tab.component.d.ts +1 -1
- package/repository/software/device-tab/software-device-tab.component.d.ts.map +1 -1
- package/repository/software/device-tab/software-repository-device-tab.module.d.ts +7 -11
- package/repository/software/device-tab/software-repository-device-tab.module.d.ts.map +1 -1
- package/repository/software/list/add-software-modal.component.d.ts +1 -1
- package/repository/software/list/add-software-modal.component.d.ts.map +1 -1
- package/repository/software/list/software-details.component.d.ts +1 -1
- package/repository/software/list/software-details.component.d.ts.map +1 -1
- package/repository/software/list/software-list.component.d.ts +1 -1
- package/repository/software/list/software-list.component.d.ts.map +1 -1
- package/repository/software/list/software-repository-list.module.d.ts +5 -11
- package/repository/software/list/software-repository-list.module.d.ts.map +1 -1
- package/services/services-device-tab/columns/last-updated-date.cell-renderer.component.d.ts +1 -1
- package/services/services-device-tab/columns/last-updated-date.cell-renderer.component.d.ts.map +1 -1
- package/services/services-device-tab/columns/name.cell-renderer.component.d.ts +1 -1
- package/services/services-device-tab/columns/name.cell-renderer.component.d.ts.map +1 -1
- package/services/services-device-tab/columns/status.cell-renderer.component.d.ts +1 -1
- package/services/services-device-tab/columns/status.cell-renderer.component.d.ts.map +1 -1
- package/services/services-device-tab/services-device-tab.component.d.ts +1 -1
- package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
- package/services/services-device-tab/services-device-tab.module.d.ts +1 -4
- package/services/services-device-tab/services-device-tab.module.d.ts.map +1 -1
- package/trusted-certificates/crl/crl-settings.component.d.ts +5 -1
- package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
- package/trusted-certificates/factories/tabs.factory.d.ts +3 -2
- package/trusted-certificates/factories/tabs.factory.d.ts.map +1 -1
- package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts +2 -0
- package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts +5 -1
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
- package/trusted-certificates/trusted-certificates.guard.d.ts +11 -0
- package/trusted-certificates/trusted-certificates.guard.d.ts.map +1 -0
- package/upgrade/index.d.ts +0 -1
- package/upgrade/index.d.ts.map +1 -1
- package/upgrade/upgrade.module.d.ts.map +1 -1
- package/upgrade/upgraded-services/index.d.ts +1 -0
- package/upgrade/upgraded-services/index.d.ts.map +1 -1
- package/upgrade/upgraded-services/smart-rules.service.d.ts.map +1 -0
- package/upgrade/upgraded-services/upgraded-services.module.d.ts.map +1 -1
- package/user-roles/inventory-role-selector/inventory-role-selector.component.d.ts +2 -1
- package/user-roles/inventory-role-selector/inventory-role-selector.component.d.ts.map +1 -1
- package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts +2 -1
- package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts.map +1 -1
- package/upgrade/smart-rules.service.d.ts.map +0 -1
- /package/upgrade/{smart-rules.service.d.ts → upgraded-services/smart-rules.service.d.ts} +0 -0
|
@@ -4,35 +4,32 @@ import * as i1 from '@c8y/client';
|
|
|
4
4
|
import { OperationStatus } from '@c8y/client';
|
|
5
5
|
import { BehaviorSubject, merge, Subject, debounceTime } from 'rxjs';
|
|
6
6
|
import { omit, isEmpty, some, isEqual, reject, isNil, get, assign, cloneDeep, unset as unset$1, set as set$1, find, findIndex, pick, has } from 'lodash-es';
|
|
7
|
-
import
|
|
7
|
+
import { NgClass, NgFor, NgIf, JsonPipe, KeyValuePipe } from '@angular/common';
|
|
8
8
|
import * as i2$1 from '@c8y/ngx-components';
|
|
9
|
-
import { gettext, Status, DropAreaComponent, ViewContext, CoreModule, FormsModule, DropAreaModule, DeviceStatusModule, DynamicFormsModule, hookRoute } from '@c8y/ngx-components';
|
|
10
|
-
import * as i2
|
|
9
|
+
import { C8yTranslatePipe, IconDirective, LoadingComponent, C8yTranslateDirective, gettext, FormGroupComponent, SelectLegacyComponent, ListItemComponent, FilterInputComponent, ListItemBodyComponent, ListItemCheckboxComponent, InputGroupListContainerDirective, InputGroupListComponent, RequiredInputPlaceholderDirective, MinValidationDirective, DatePipe, MessagesComponent, MessageDirective, TitleComponent, BreadcrumbComponent, BreadcrumbItemComponent, EmptyStateComponent, Status, DeviceStatusComponent, DefaultValidationDirective, DropAreaComponent, ViewContext, CoreModule, FormsModule as FormsModule$1, DropAreaModule, DeviceStatusModule, DynamicFormsModule, hookRoute } from '@c8y/ngx-components';
|
|
10
|
+
import * as i2 from '@angular/router';
|
|
11
11
|
import { RouterModule } from '@angular/router';
|
|
12
|
-
import * as
|
|
13
|
-
import { NG_VALIDATORS, NgModelGroup, ControlContainer, NgForm, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
14
|
-
import
|
|
15
|
-
import { NestedTreeControl, CdkTreeModule } from '@angular/cdk/tree';
|
|
12
|
+
import * as i2$2 from '@angular/forms';
|
|
13
|
+
import { NG_VALIDATORS, FormsModule, NgModelGroup, ControlContainer, NgForm, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
14
|
+
import { NestedTreeControl, CdkTree, CdkTreeNodeDef, CdkNestedTreeNode, CdkTreeNodeToggle, CdkTreeNodeOutlet, CdkTreeModule } from '@angular/cdk/tree';
|
|
16
15
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|
17
|
-
import * as i8 from '@c8y/ngx-components/device-protocol-object-mappings';
|
|
18
16
|
import { BaseObjectMapping, MeasurementObjectMapping, EventObjectMapping, AlarmObjectMapping, ALARM_SEVERITY, ObjectMappingComponent } from '@c8y/ngx-components/device-protocol-object-mappings';
|
|
19
|
-
import
|
|
20
|
-
import {
|
|
21
|
-
import * as i4$2 from 'ngx-bootstrap/buttons';
|
|
22
|
-
import { ButtonsModule } from 'ngx-bootstrap/buttons';
|
|
17
|
+
import { OperationDetailsComponent, OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';
|
|
18
|
+
import { ButtonCheckboxDirective, ButtonsModule } from 'ngx-bootstrap/buttons';
|
|
23
19
|
import * as i4$1 from 'ngx-bootstrap/collapse';
|
|
24
|
-
import { CollapseModule } from 'ngx-bootstrap/collapse';
|
|
25
|
-
import * as
|
|
26
|
-
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
|
|
27
|
-
import * as
|
|
28
|
-
import { PopoverModule } from 'ngx-bootstrap/popover';
|
|
29
|
-
import * as
|
|
30
|
-
import { TooltipModule } from 'ngx-bootstrap/tooltip';
|
|
20
|
+
import { CollapseDirective, CollapseModule } from 'ngx-bootstrap/collapse';
|
|
21
|
+
import * as i5 from 'ngx-bootstrap/dropdown';
|
|
22
|
+
import { BsDropdownDirective, BsDropdownToggleDirective, BsDropdownMenuDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';
|
|
23
|
+
import * as i3$1 from 'ngx-bootstrap/popover';
|
|
24
|
+
import { PopoverDirective, PopoverModule } from 'ngx-bootstrap/popover';
|
|
25
|
+
import * as i2$3 from 'ngx-bootstrap/tooltip';
|
|
26
|
+
import { TooltipDirective, TooltipModule } from 'ngx-bootstrap/tooltip';
|
|
31
27
|
import { clone, toInteger, unset, set, cloneDeep as cloneDeep$1 } from 'lodash';
|
|
32
28
|
import { map, takeUntil, filter } from 'rxjs/operators';
|
|
33
29
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
34
30
|
import { UpgradeComponent, downgradeComponent } from '@angular/upgrade/static';
|
|
35
|
-
import * as
|
|
31
|
+
import * as i4 from '@ngx-formly/core';
|
|
32
|
+
import { FormlyModule } from '@ngx-formly/core';
|
|
36
33
|
import * as i3 from '@ngx-translate/core';
|
|
37
34
|
import * as angular from 'angular';
|
|
38
35
|
import { registerNgModule } from '@c8y/ng1-modules';
|
|
@@ -176,11 +173,11 @@ class OpcuaAddressSpaceDetailComponent {
|
|
|
176
173
|
this.addressSpaceService.triggerNodeToOpen(nodeNavData);
|
|
177
174
|
}
|
|
178
175
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceDetailComponent, deps: [{ token: AddressSpaceService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
179
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceDetailComponent, isStandalone:
|
|
176
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceDetailComponent, isStandalone: true, selector: "opcua-address-space-detail", inputs: { node: "node" }, outputs: { toggleAttrDetail: "toggleAttrDetail" }, ngImport: i0, template: "<div\n class=\"card m-b-4 split-row-2 animated fast pointer-all\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'Attributes' | translate }}</h4>\n <button\n class=\"close m-l-auto visible-sm visible-xs\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"toggleDetail(nodeDataAttr)\"\n >\n ×\n </button>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataAttr | keyvalue\">\n <td>{{ item.key }}</td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'absolutePaths'\"\n >\n {{ item.value | json }}\n </td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'ancestorNodeIds'\"\n >\n <a\n *ngFor=\"let value of item.value\"\n (click)=\"navigateTo(value)\"\n >\n {{ value | json }}\n </a>\n </td>\n <td *ngIf=\"item.key !== 'absolutePaths' && item.key !== 'ancestorNodeIds'\">\n {{ item.value }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n<div\n class=\"card split-row-2 animated fast pointer-all\"\n style=\"height: calc(50% - 4px)\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'References' | translate }}</h4>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataRef\">\n <td>{{ item.referenceLabel }}</td>\n <td class=\"text-break-word\">{{ item.targetLabel }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }] }); }
|
|
180
177
|
}
|
|
181
178
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceDetailComponent, decorators: [{
|
|
182
179
|
type: Component,
|
|
183
|
-
args: [{ selector: 'opcua-address-space-detail',
|
|
180
|
+
args: [{ selector: 'opcua-address-space-detail', imports: [NgClass, NgFor, NgIf, C8yTranslatePipe, JsonPipe, KeyValuePipe], template: "<div\n class=\"card m-b-4 split-row-2 animated fast pointer-all\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'Attributes' | translate }}</h4>\n <button\n class=\"close m-l-auto visible-sm visible-xs\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"toggleDetail(nodeDataAttr)\"\n >\n ×\n </button>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataAttr | keyvalue\">\n <td>{{ item.key }}</td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'absolutePaths'\"\n >\n {{ item.value | json }}\n </td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'ancestorNodeIds'\"\n >\n <a\n *ngFor=\"let value of item.value\"\n (click)=\"navigateTo(value)\"\n >\n {{ value | json }}\n </a>\n </td>\n <td *ngIf=\"item.key !== 'absolutePaths' && item.key !== 'ancestorNodeIds'\">\n {{ item.value }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n<div\n class=\"card split-row-2 animated fast pointer-all\"\n style=\"height: calc(50% - 4px)\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'References' | translate }}</h4>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataRef\">\n <td>{{ item.referenceLabel }}</td>\n <td class=\"text-break-word\">{{ item.targetLabel }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n" }]
|
|
184
181
|
}], ctorParameters: () => [{ type: AddressSpaceService }], propDecorators: { node: [{
|
|
185
182
|
type: Input
|
|
186
183
|
}], toggleAttrDetail: [{
|
|
@@ -369,12 +366,12 @@ class OpcuaService {
|
|
|
369
366
|
}
|
|
370
367
|
}
|
|
371
368
|
}
|
|
372
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaService, deps: [{ token: i1.FetchClient }, { token: i1.InventoryService }, { token: i2
|
|
369
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaService, deps: [{ token: i1.FetchClient }, { token: i1.InventoryService }, { token: i2.Router }, { token: i2$1.AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
373
370
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaService }); }
|
|
374
371
|
}
|
|
375
372
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaService, decorators: [{
|
|
376
373
|
type: Injectable
|
|
377
|
-
}], ctorParameters: () => [{ type: i1.FetchClient }, { type: i1.InventoryService }, { type: i2
|
|
374
|
+
}], ctorParameters: () => [{ type: i1.FetchClient }, { type: i1.InventoryService }, { type: i2.Router }, { type: i2$1.AlertService }] });
|
|
378
375
|
|
|
379
376
|
class OpcuaAgentGuard {
|
|
380
377
|
constructor() {
|
|
@@ -430,7 +427,7 @@ class OpcuaDeviceProtocolBrowsePathValidation {
|
|
|
430
427
|
return found ? true : false;
|
|
431
428
|
}
|
|
432
429
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolBrowsePathValidation, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
433
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolBrowsePathValidation, isStandalone:
|
|
430
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolBrowsePathValidation, isStandalone: true, selector: "[c8yBrowsePathValidator][ngModel]", inputs: { getMappings: "getMappings", model: "model" }, providers: [
|
|
434
431
|
{
|
|
435
432
|
provide: NG_VALIDATORS,
|
|
436
433
|
useExisting: forwardRef(() => OpcuaDeviceProtocolBrowsePathValidation),
|
|
@@ -448,8 +445,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
448
445
|
useExisting: forwardRef(() => OpcuaDeviceProtocolBrowsePathValidation),
|
|
449
446
|
multi: true
|
|
450
447
|
}
|
|
451
|
-
]
|
|
452
|
-
standalone: false
|
|
448
|
+
]
|
|
453
449
|
}]
|
|
454
450
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { getMappings: [{
|
|
455
451
|
type: Input
|
|
@@ -677,11 +673,23 @@ class OpcuaAddressSpaceTreeComponent {
|
|
|
677
673
|
}
|
|
678
674
|
}
|
|
679
675
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceTreeComponent, deps: [{ token: AddressSpaceService }, { token: OpcuaService }, { token: i2$1.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
680
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceTreeComponent, isStandalone:
|
|
676
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceTreeComponent, isStandalone: true, selector: "opcua-address-space-tree", inputs: { moId: "moId", node: "node", focusEmitter: "focusEmitter" }, outputs: { selectedNode: "selectedNode" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"card-block\"\n *ngIf=\"dataSource && !loading\"\n>\n <cdk-tree\n [dataSource]=\"dataSource\"\n [treeControl]=\"nestedTreeControl\"\n >\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node\n class=\"interact\"\n *cdkTreeNodeDef=\"let node\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n <span>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n ></i>\n {{ node.displayName }}\n </span>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let node; when: hasChild\">\n <div role=\"group\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-4\"\n title=\"{{ 'Expand node' | translate }}\"\n cdkTreeNodeToggle\n [disabled]=\"node.currentlyLoadingChildren\"\n >\n <i\n [ngClass]=\"{\n 'dlt-c8y-icon-plus-square': !node.expanded,\n 'dlt-c8y-icon-minus-square': node.expanded\n }\"\n ></i>\n </button>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n ></i>\n <span\n class=\"interact\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n {{ node.displayName }}\n </span>\n <span\n class=\"m-l-4\"\n [style.visibility]=\"node.currentlyLoadingChildren ? 'visible' : 'hidden'\"\n >\n <i class=\"dlt-c8y-icon-circle-o-notch icon-spin\"></i>\n </span>\n </div>\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n<div\n class=\"p-t-8\"\n *ngIf=\"loading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<div\n class=\"alert alert-info m-t-16\"\n *ngIf=\"!dataSource && !loading\"\n translate\n>\n No source data available to fetch address space.\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "levelAccessor", "childrenAccessor", "trackBy", "expansionKey"], exportAs: ["cdkTree"] }, { kind: "directive", type: CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: CdkNestedTreeNode, selector: "cdk-nested-tree-node", exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "directive", type: CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
681
677
|
}
|
|
682
678
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceTreeComponent, decorators: [{
|
|
683
679
|
type: Component,
|
|
684
|
-
args: [{ selector: 'opcua-address-space-tree',
|
|
680
|
+
args: [{ selector: 'opcua-address-space-tree', imports: [
|
|
681
|
+
NgIf,
|
|
682
|
+
CdkTree,
|
|
683
|
+
CdkTreeNodeDef,
|
|
684
|
+
CdkNestedTreeNode,
|
|
685
|
+
NgClass,
|
|
686
|
+
IconDirective,
|
|
687
|
+
CdkTreeNodeToggle,
|
|
688
|
+
CdkTreeNodeOutlet,
|
|
689
|
+
LoadingComponent,
|
|
690
|
+
C8yTranslateDirective,
|
|
691
|
+
C8yTranslatePipe
|
|
692
|
+
], template: "<div\n class=\"card-block\"\n *ngIf=\"dataSource && !loading\"\n>\n <cdk-tree\n [dataSource]=\"dataSource\"\n [treeControl]=\"nestedTreeControl\"\n >\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node\n class=\"interact\"\n *cdkTreeNodeDef=\"let node\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n <span>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n ></i>\n {{ node.displayName }}\n </span>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let node; when: hasChild\">\n <div role=\"group\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-4\"\n title=\"{{ 'Expand node' | translate }}\"\n cdkTreeNodeToggle\n [disabled]=\"node.currentlyLoadingChildren\"\n >\n <i\n [ngClass]=\"{\n 'dlt-c8y-icon-plus-square': !node.expanded,\n 'dlt-c8y-icon-minus-square': node.expanded\n }\"\n ></i>\n </button>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n ></i>\n <span\n class=\"interact\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n {{ node.displayName }}\n </span>\n <span\n class=\"m-l-4\"\n [style.visibility]=\"node.currentlyLoadingChildren ? 'visible' : 'hidden'\"\n >\n <i class=\"dlt-c8y-icon-circle-o-notch icon-spin\"></i>\n </span>\n </div>\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n<div\n class=\"p-t-8\"\n *ngIf=\"loading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<div\n class=\"alert alert-info m-t-16\"\n *ngIf=\"!dataSource && !loading\"\n translate\n>\n No source data available to fetch address space.\n</div>\n" }]
|
|
685
693
|
}], ctorParameters: () => [{ type: AddressSpaceService }, { type: OpcuaService }, { type: i2$1.AlertService }], propDecorators: { moId: [{
|
|
686
694
|
type: Input
|
|
687
695
|
}], node: [{
|
|
@@ -839,11 +847,22 @@ class OpcuaAddressSpaceComponent {
|
|
|
839
847
|
return result;
|
|
840
848
|
}
|
|
841
849
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceComponent, deps: [{ token: AddressSpaceService }, { token: OpcuaService }, { token: i1.OperationService }, { token: i2$1.OperationRealtimeService }, { token: i2$1.AlertService }, { token: i2$1.ModalService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
842
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceComponent, isStandalone:
|
|
850
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceComponent, isStandalone: true, selector: "opcua-address-space", outputs: { focusStatus: "focusStatus" }, ngImport: i0, template: "<div class=\"row split-scroll\">\n <div class=\"col-md-5 col-xs-12 scroll-column no-gutter-r\">\n <div class=\"card bg-level-2 split-scroll overflow-auto\">\n <div class=\"flex-grow\">\n <fieldset\n class=\"card-block large-padding bg-level-2 p-0\"\n id=\"operation-block\"\n *ngIf=\"!!operation\"\n >\n <c8y-operation-details [operation]=\"operation\"></c8y-operation-details>\n </fieldset>\n </div>\n <div class=\"card-block separator sticky-top\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ filterLabel | translate }}\"\n type=\"search\"\n (keydown.enter)=\"searchNodes()\"\n [(ngModel)]=\"searchKey\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"submit\"\n *ngIf=\"!isSearch\"\n (click)=\"searchNodes()\"\n >\n <i c8yIcon=\"search\"></i>\n </button>\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Clear`input`' | translate }}\"\n type=\"button\"\n *ngIf=\"isSearch\"\n (click)=\"clearSearch()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"p-t-16\"\n *ngIf=\"isSearch && !loading\"\n >\n <p *ngIf=\"!searchInProgress\">\n <em>{{ nodeList.resultLabel | translate }}</em>\n \n <span class=\"badge badge-info\">{{ nodeList?.length }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"p-t-8\"\n *ngIf=\"(isSearch && loading) || searchInProgress\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"inner-scroll\"\n *ngIf=\"isSearch && !loading && !searchInProgress\"\n >\n <div\n class=\"list-group list-group-links\"\n *ngIf=\"isSearch && !loading\"\n >\n <button\n *ngFor=\"let nodeItem of nodeList\"\n (click)=\"selectNode(nodeItem)\"\n [ngClass]=\"{ 'list-group-item d-flex': true }\"\n >\n <div class=\"list-group-icon m-r-4\">\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"getIcon(nodeItem.nodeClassName)\"\n ></i>\n </div>\n <div class=\"list-item-body text-truncate\">\n <span tile=\"nodeId\">{{ nodeItem.nodeId }}</span>\n {{ nodeItem.displayName }}\n </div>\n </button>\n </div>\n </div>\n <div\n class=\"inner-scroll\"\n *ngIf=\"!isSearch\"\n >\n <opcua-address-space-tree\n (selectedNode)=\"toggleCurrentNode($event)\"\n [focusEmitter]=\"focusStatus\"\n ></opcua-address-space-tree>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n [class.btn-pending]=\"isOperationRunning()\"\n type=\"button\"\n (click)=\"rescanAddressSpace()\"\n [disabled]=\"isOperationRunning()\"\n >\n {{ 'Rescan' | translate }}\n </button>\n </div>\n </div>\n </div>\n <opcua-address-space-detail\n class=\"col-md-7 col-xs-12 scroll-column no-gutter-l no-pointer\"\n [node]=\"currentNode\"\n (toggleAttrDetail)=\"backHandler($event)\"\n ></opcua-address-space-detail>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OperationDetailsComponent, selector: "c8y-operation-details", inputs: ["operation"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: OpcuaAddressSpaceTreeComponent, selector: "opcua-address-space-tree", inputs: ["moId", "node", "focusEmitter"], outputs: ["selectedNode"] }, { kind: "component", type: OpcuaAddressSpaceDetailComponent, selector: "opcua-address-space-detail", inputs: ["node"], outputs: ["toggleAttrDetail"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
843
851
|
}
|
|
844
852
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceComponent, decorators: [{
|
|
845
853
|
type: Component,
|
|
846
|
-
args: [{ selector: 'opcua-address-space',
|
|
854
|
+
args: [{ selector: 'opcua-address-space', imports: [
|
|
855
|
+
NgIf,
|
|
856
|
+
OperationDetailsComponent,
|
|
857
|
+
FormsModule,
|
|
858
|
+
IconDirective,
|
|
859
|
+
LoadingComponent,
|
|
860
|
+
NgFor,
|
|
861
|
+
NgClass,
|
|
862
|
+
OpcuaAddressSpaceTreeComponent,
|
|
863
|
+
OpcuaAddressSpaceDetailComponent,
|
|
864
|
+
C8yTranslatePipe
|
|
865
|
+
], template: "<div class=\"row split-scroll\">\n <div class=\"col-md-5 col-xs-12 scroll-column no-gutter-r\">\n <div class=\"card bg-level-2 split-scroll overflow-auto\">\n <div class=\"flex-grow\">\n <fieldset\n class=\"card-block large-padding bg-level-2 p-0\"\n id=\"operation-block\"\n *ngIf=\"!!operation\"\n >\n <c8y-operation-details [operation]=\"operation\"></c8y-operation-details>\n </fieldset>\n </div>\n <div class=\"card-block separator sticky-top\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ filterLabel | translate }}\"\n type=\"search\"\n (keydown.enter)=\"searchNodes()\"\n [(ngModel)]=\"searchKey\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"submit\"\n *ngIf=\"!isSearch\"\n (click)=\"searchNodes()\"\n >\n <i c8yIcon=\"search\"></i>\n </button>\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Clear`input`' | translate }}\"\n type=\"button\"\n *ngIf=\"isSearch\"\n (click)=\"clearSearch()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"p-t-16\"\n *ngIf=\"isSearch && !loading\"\n >\n <p *ngIf=\"!searchInProgress\">\n <em>{{ nodeList.resultLabel | translate }}</em>\n \n <span class=\"badge badge-info\">{{ nodeList?.length }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"p-t-8\"\n *ngIf=\"(isSearch && loading) || searchInProgress\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"inner-scroll\"\n *ngIf=\"isSearch && !loading && !searchInProgress\"\n >\n <div\n class=\"list-group list-group-links\"\n *ngIf=\"isSearch && !loading\"\n >\n <button\n *ngFor=\"let nodeItem of nodeList\"\n (click)=\"selectNode(nodeItem)\"\n [ngClass]=\"{ 'list-group-item d-flex': true }\"\n >\n <div class=\"list-group-icon m-r-4\">\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"getIcon(nodeItem.nodeClassName)\"\n ></i>\n </div>\n <div class=\"list-item-body text-truncate\">\n <span tile=\"nodeId\">{{ nodeItem.nodeId }}</span>\n {{ nodeItem.displayName }}\n </div>\n </button>\n </div>\n </div>\n <div\n class=\"inner-scroll\"\n *ngIf=\"!isSearch\"\n >\n <opcua-address-space-tree\n (selectedNode)=\"toggleCurrentNode($event)\"\n [focusEmitter]=\"focusStatus\"\n ></opcua-address-space-tree>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n [class.btn-pending]=\"isOperationRunning()\"\n type=\"button\"\n (click)=\"rescanAddressSpace()\"\n [disabled]=\"isOperationRunning()\"\n >\n {{ 'Rescan' | translate }}\n </button>\n </div>\n </div>\n </div>\n <opcua-address-space-detail\n class=\"col-md-7 col-xs-12 scroll-column no-gutter-l no-pointer\"\n [node]=\"currentNode\"\n (toggleAttrDetail)=\"backHandler($event)\"\n ></opcua-address-space-detail>\n</div>\n" }]
|
|
847
866
|
}], ctorParameters: () => [{ type: AddressSpaceService }, { type: OpcuaService }, { type: i1.OperationService }, { type: i2$1.OperationRealtimeService }, { type: i2$1.AlertService }, { type: i2$1.ModalService }], propDecorators: { focusStatus: [{
|
|
848
867
|
type: Output
|
|
849
868
|
}] } });
|
|
@@ -980,11 +999,27 @@ class OpcuaAutoApplySettingsComponent {
|
|
|
980
999
|
this.updateConstraints(this.selectedItems);
|
|
981
1000
|
}
|
|
982
1001
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAutoApplySettingsComponent, deps: [{ token: i1.InventoryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
983
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAutoApplySettingsComponent, isStandalone: false, selector: "opcua-auto-apply", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <p translate>\n Specifying auto-apply constraints allows you to limit the scope where the device protocols are\n applied, for example by specifying a set of possible servers or node IDs.\n </p>\n <p translate>\n If no constraints are set, device protocols are applied at any fitting location on the OPC UA\n server.\n </p>\n </div>\n\n <div class=\"col-md-6\">\n <ul class=\"list-group\" style=\"box-shadow: none;\">\n <!-- Limit device type to a set of servers -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to a set of servers' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.matchesServerIds !== null && constraints.matchesServerIds.length > 0\n \"\n (change)=\"onChangeShowServerIds($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to a set of servers' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"\n (!showServerIds &&\n (constraints.matchesServerIds !== null && constraints.matchesServerIds.length < 1)) ||\n (!showServerIds && constraints.matchesServerIds === null)\n \"\n [isAnimated]=\"true\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <c8y-select-legacy\n [items]=\"opcuaServers\"\n [selected]=\"selectedItems\"\n [placeholder]=\"placeholderSelectServerIds\"\n (onChange)=\"serverIdsSelected($event)\"\n [updateItems]=\"updateSelectedItem\"\n >\n \n <c8y-li *ngIf=\"opcuaServers.length > sizeToShowFilter\" class=\"sticky-top\">\n <c8y-filter [icon]=\"'search'\" (onSearch)=\"filterItems($event)\"></c8y-filter>\n </c8y-li>\n <c8y-li *ngIf=\"filteredList && filteredList.length === 0\">\n <c8y-li-body> \n <div class=\"c8y-empty-state text-left\">\n <p>{{ 'No items to display.' | translate }}</p>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-li *ngFor=\"let item of filteredList\">\n <c8y-li-checkbox\n [selected]=\"isChecked(item)\"\n (onSelect)=\"onSelect($event, item)\"\n ></c8y-li-checkbox>\n <c8y-li-body>{{ item.name | translate }}<br>\n <span class=\"text-label-small m-r-4\" translate>ID</span> <small>{{ item.id }}</small>\n </c8y-li-body>\n </c8y-li>\n </c8y-select-legacy>\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type scope in the address space -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol scope in the address space' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length > 0\n \"\n (change)=\"onChangeShowBrowsePath($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol scope in the address space' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"\n (!showBrowsePath &&\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length < 1) ||\n (!showBrowsePath && constraints.browsePathMatchesRegex === null)\n \"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"browsePath\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} /objects/devices/.*\"\n [(ngModel)]=\"constraints.browsePathMatchesRegex\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to servers with a certain fragment-->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to servers with a certain fragment' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length > 0\"\n (change)=\"onChangeShowServerFragment($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to servers with a certain fragment' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showServerFragment && constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length < 1) || (!showServerFragment && constraints.serverObjectHasFragment === null)\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"serverFragment\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_SomeServerMarker\"\n [(ngModel)]=\"constraints.serverObjectHasFragment\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to a specific root node ID -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to specific root nodes ID' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length > 0\"\n (change)=\"onChangeNodeId($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to specific root nodes ID' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showRootNodes && constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length < 1) || ( !showRootNodes && constraints.matchesNodeIds === null)\"\n >\n <ul c8yInputGroupListContainer class=\"list-unstyled p-t-16\">\n <li\n class=\"m-b-8\"\n *ngFor=\"let item of constraints.matchesNodeIds; let i = index; trackBy: trackByFn\"\n >\n <c8y-input-group-list [index]=\"i\" (onAdd)=\"add()\" (onRemove)=\"remove($event)\">\n <c8y-form-group class=\"form-group--tooltip-validation\">\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} nodeId\"\n [(ngModel)]=\"constraints.matchesNodeIds[i]\"\n [required]=\"true\"\n />\n </c8y-form-group>\n </c8y-input-group-list>\n </li>\n </ul> \n </div>\n </li>\n </ul>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.SelectLegacyComponent, selector: "c8y-select-legacy", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection", "addDropdownContainerToBody"], outputs: ["onChange"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i2$1.InputGroupListComponent, selector: "c8y-input-group-list", inputs: ["plus", "minus", "index"], outputs: ["onRemove", "onAdd"] }, { kind: "directive", type: i2$1.InputGroupListContainerDirective, selector: "[c8yInputGroupListContainer]" }, { kind: "directive", type: i2$1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2$1.FilterInputComponent, selector: "c8y-filter", inputs: ["icon", "filterTerm"], outputs: ["onSearch"] }, { kind: "component", type: i2$1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2$1.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2$1.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "directive", type: i4$1.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }] }); }
|
|
1002
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAutoApplySettingsComponent, isStandalone: true, selector: "opcua-auto-apply", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <p translate>\n Specifying auto-apply constraints allows you to limit the scope where the device protocols are\n applied, for example by specifying a set of possible servers or node IDs.\n </p>\n <p translate>\n If no constraints are set, device protocols are applied at any fitting location on the OPC UA\n server.\n </p>\n </div>\n\n <div class=\"col-md-6\">\n <ul class=\"list-group\" style=\"box-shadow: none;\">\n <!-- Limit device type to a set of servers -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to a set of servers' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.matchesServerIds !== null && constraints.matchesServerIds.length > 0\n \"\n (change)=\"onChangeShowServerIds($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to a set of servers' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"\n (!showServerIds &&\n (constraints.matchesServerIds !== null && constraints.matchesServerIds.length < 1)) ||\n (!showServerIds && constraints.matchesServerIds === null)\n \"\n [isAnimated]=\"true\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <c8y-select-legacy\n [items]=\"opcuaServers\"\n [selected]=\"selectedItems\"\n [placeholder]=\"placeholderSelectServerIds\"\n (onChange)=\"serverIdsSelected($event)\"\n [updateItems]=\"updateSelectedItem\"\n >\n \n <c8y-li *ngIf=\"opcuaServers.length > sizeToShowFilter\" class=\"sticky-top\">\n <c8y-filter [icon]=\"'search'\" (onSearch)=\"filterItems($event)\"></c8y-filter>\n </c8y-li>\n <c8y-li *ngIf=\"filteredList && filteredList.length === 0\">\n <c8y-li-body> \n <div class=\"c8y-empty-state text-left\">\n <p>{{ 'No items to display.' | translate }}</p>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-li *ngFor=\"let item of filteredList\">\n <c8y-li-checkbox\n [selected]=\"isChecked(item)\"\n (onSelect)=\"onSelect($event, item)\"\n ></c8y-li-checkbox>\n <c8y-li-body>{{ item.name | translate }}<br>\n <span class=\"text-label-small m-r-4\" translate>ID</span> <small>{{ item.id }}</small>\n </c8y-li-body>\n </c8y-li>\n </c8y-select-legacy>\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type scope in the address space -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol scope in the address space' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length > 0\n \"\n (change)=\"onChangeShowBrowsePath($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol scope in the address space' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"\n (!showBrowsePath &&\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length < 1) ||\n (!showBrowsePath && constraints.browsePathMatchesRegex === null)\n \"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"browsePath\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} /objects/devices/.*\"\n [(ngModel)]=\"constraints.browsePathMatchesRegex\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to servers with a certain fragment-->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to servers with a certain fragment' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length > 0\"\n (change)=\"onChangeShowServerFragment($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to servers with a certain fragment' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showServerFragment && constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length < 1) || (!showServerFragment && constraints.serverObjectHasFragment === null)\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"serverFragment\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_SomeServerMarker\"\n [(ngModel)]=\"constraints.serverObjectHasFragment\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to a specific root node ID -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to specific root nodes ID' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length > 0\"\n (change)=\"onChangeNodeId($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to specific root nodes ID' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showRootNodes && constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length < 1) || ( !showRootNodes && constraints.matchesNodeIds === null)\"\n >\n <ul c8yInputGroupListContainer class=\"list-unstyled p-t-16\">\n <li\n class=\"m-b-8\"\n *ngFor=\"let item of constraints.matchesNodeIds; let i = index; trackBy: trackByFn\"\n >\n <c8y-input-group-list [index]=\"i\" (onAdd)=\"add()\" (onRemove)=\"remove($event)\">\n <c8y-form-group class=\"form-group--tooltip-validation\">\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} nodeId\"\n [(ngModel)]=\"constraints.matchesNodeIds[i]\"\n [required]=\"true\"\n />\n </c8y-form-group>\n </c8y-input-group-list>\n </li>\n </ul> \n </div>\n </li>\n </ul>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: SelectLegacyComponent, selector: "c8y-select-legacy", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection", "addDropdownContainerToBody"], outputs: ["onChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: FilterInputComponent, selector: "c8y-filter", inputs: ["icon", "filterTerm"], outputs: ["onSearch"] }, { kind: "component", type: ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputGroupListContainerDirective, selector: "[c8yInputGroupListContainer]" }, { kind: "component", type: InputGroupListComponent, selector: "c8y-input-group-list", inputs: ["plus", "minus", "index"], outputs: ["onRemove", "onAdd"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
984
1003
|
}
|
|
985
1004
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAutoApplySettingsComponent, decorators: [{
|
|
986
1005
|
type: Component,
|
|
987
|
-
args: [{ selector: 'opcua-auto-apply',
|
|
1006
|
+
args: [{ selector: 'opcua-auto-apply', imports: [
|
|
1007
|
+
C8yTranslateDirective,
|
|
1008
|
+
CollapseDirective,
|
|
1009
|
+
FormGroupComponent,
|
|
1010
|
+
SelectLegacyComponent,
|
|
1011
|
+
NgIf,
|
|
1012
|
+
ListItemComponent,
|
|
1013
|
+
FilterInputComponent,
|
|
1014
|
+
ListItemBodyComponent,
|
|
1015
|
+
NgFor,
|
|
1016
|
+
ListItemCheckboxComponent,
|
|
1017
|
+
FormsModule,
|
|
1018
|
+
InputGroupListContainerDirective,
|
|
1019
|
+
InputGroupListComponent,
|
|
1020
|
+
RequiredInputPlaceholderDirective,
|
|
1021
|
+
C8yTranslatePipe
|
|
1022
|
+
], template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <p translate>\n Specifying auto-apply constraints allows you to limit the scope where the device protocols are\n applied, for example by specifying a set of possible servers or node IDs.\n </p>\n <p translate>\n If no constraints are set, device protocols are applied at any fitting location on the OPC UA\n server.\n </p>\n </div>\n\n <div class=\"col-md-6\">\n <ul class=\"list-group\" style=\"box-shadow: none;\">\n <!-- Limit device type to a set of servers -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to a set of servers' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.matchesServerIds !== null && constraints.matchesServerIds.length > 0\n \"\n (change)=\"onChangeShowServerIds($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to a set of servers' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"\n (!showServerIds &&\n (constraints.matchesServerIds !== null && constraints.matchesServerIds.length < 1)) ||\n (!showServerIds && constraints.matchesServerIds === null)\n \"\n [isAnimated]=\"true\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <c8y-select-legacy\n [items]=\"opcuaServers\"\n [selected]=\"selectedItems\"\n [placeholder]=\"placeholderSelectServerIds\"\n (onChange)=\"serverIdsSelected($event)\"\n [updateItems]=\"updateSelectedItem\"\n >\n \n <c8y-li *ngIf=\"opcuaServers.length > sizeToShowFilter\" class=\"sticky-top\">\n <c8y-filter [icon]=\"'search'\" (onSearch)=\"filterItems($event)\"></c8y-filter>\n </c8y-li>\n <c8y-li *ngIf=\"filteredList && filteredList.length === 0\">\n <c8y-li-body> \n <div class=\"c8y-empty-state text-left\">\n <p>{{ 'No items to display.' | translate }}</p>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-li *ngFor=\"let item of filteredList\">\n <c8y-li-checkbox\n [selected]=\"isChecked(item)\"\n (onSelect)=\"onSelect($event, item)\"\n ></c8y-li-checkbox>\n <c8y-li-body>{{ item.name | translate }}<br>\n <span class=\"text-label-small m-r-4\" translate>ID</span> <small>{{ item.id }}</small>\n </c8y-li-body>\n </c8y-li>\n </c8y-select-legacy>\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type scope in the address space -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol scope in the address space' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length > 0\n \"\n (change)=\"onChangeShowBrowsePath($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol scope in the address space' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"\n (!showBrowsePath &&\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length < 1) ||\n (!showBrowsePath && constraints.browsePathMatchesRegex === null)\n \"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"browsePath\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} /objects/devices/.*\"\n [(ngModel)]=\"constraints.browsePathMatchesRegex\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to servers with a certain fragment-->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to servers with a certain fragment' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length > 0\"\n (change)=\"onChangeShowServerFragment($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to servers with a certain fragment' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showServerFragment && constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length < 1) || (!showServerFragment && constraints.serverObjectHasFragment === null)\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"serverFragment\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_SomeServerMarker\"\n [(ngModel)]=\"constraints.serverObjectHasFragment\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to a specific root node ID -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to specific root nodes ID' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length > 0\"\n (change)=\"onChangeNodeId($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to specific root nodes ID' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showRootNodes && constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length < 1) || ( !showRootNodes && constraints.matchesNodeIds === null)\"\n >\n <ul c8yInputGroupListContainer class=\"list-unstyled p-t-16\">\n <li\n class=\"m-b-8\"\n *ngFor=\"let item of constraints.matchesNodeIds; let i = index; trackBy: trackByFn\"\n >\n <c8y-input-group-list [index]=\"i\" (onAdd)=\"add()\" (onRemove)=\"remove($event)\">\n <c8y-form-group class=\"form-group--tooltip-validation\">\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} nodeId\"\n [(ngModel)]=\"constraints.matchesNodeIds[i]\"\n [required]=\"true\"\n />\n </c8y-form-group>\n </c8y-input-group-list>\n </li>\n </ul> \n </div>\n </li>\n </ul>\n </div>\n</div>\n" }]
|
|
988
1023
|
}], ctorParameters: () => [{ type: i1.InventoryService }], propDecorators: { model: [{
|
|
989
1024
|
type: Input
|
|
990
1025
|
}] } });
|
|
@@ -1074,11 +1109,20 @@ class OpcuaDeviceProtocolDataReportingComponent {
|
|
|
1074
1109
|
});
|
|
1075
1110
|
}
|
|
1076
1111
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDataReportingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1077
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDataReportingComponent, isStandalone:
|
|
1112
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDataReportingComponent, isStandalone: true, selector: "opcua-device-protocol-data-reporting", inputs: { model: "model", groupName: "groupName" }, outputs: { onSubscriptionChange: "onSubscriptionChange" }, ngImport: i0, template: "<c8y-form-group>\n <label translate>Mechanism</label>\n <label\n title=\"{{ mechanism.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n *ngFor=\"let mechanism of types\"\n >\n <input\n type=\"radio\"\n name=\"{{subscriptionTypeName}}\"\n [value]=\"mechanism.value\"\n [(ngModel)]=\"subscription.type\"\n (change)=\"updateModel()\"\n required\n [attr.data-cy]=\"mechanism.value\"\n />\n <span></span>\n <span>{{ mechanism.label | translate }}</span>\n </label>\n</c8y-form-group>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'CyclicRead'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-md-4 col-lg-3\">\n <c8y-form-group>\n <label translate>Reading interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"rate\"\n [(ngModel)]=\"cyclicReadParameters.rate\"\n placeholder=\"{{ 'e.g.' | translate }} 50\"\n [required]=\"requireCyclic\"\n min=\"50\"\n [attr.data-cy]=\"'cyclicReadRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\">\n {{ 'msec' | translate }}\n </span>\n </div>\n </c8y-form-group>\n </div>\n</div>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'Subscription'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Sampling interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"samplingRate\"\n [(ngModel)]=\"subscriptionParameters.samplingRate\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n [required]=\"requireSubscription\"\n min=\"0\"\n [attr.data-cy]=\"'subscriptionSamplingRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\" translate>\n msec\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Queue size</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"queueSize\"\n [(ngModel)]=\"subscriptionParameters.queueSize\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n min=\"1\"\n [attr.data-cy]=\"'subscriptionQueueSize'\"\n />\n <span class=\"input-group-addon\">\n <strong translate>Discard</strong> \n <label\n *ngFor=\"let discardOption of discard\"\n title=\"{{ discardOption.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"discard{{ _model.id }}\"\n [value]=\"discardOption.value\"\n [(ngModel)]=\"subscriptionParameters.discardOldest\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"discardOption.label\"\n [attr.data-name]=\"'discard' + _model.id\"\n />\n <span></span>\n <span>{{ discardOption.label | translate }}</span>\n </label>\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"clearfix\"></div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Data change trigger</label>\n <label\n *ngFor=\"let trigger of triggers\"\n title=\"{{ trigger.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"dataChangeTrigger{{ _model.id }}\"\n [value]=\"trigger.value\"\n [(ngModel)]=\"subscriptionParameters.dataChangeTrigger\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"trigger.label\"\n [attr.data-name]=\"'dataChangeTrigger' + _model.id\"\n />\n <span></span>\n <span>{{ trigger.label | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Deadband filter</label>\n <label\n *ngFor=\"let deadbandFilter of filters\"\n title=\"{{ deadbandFilter.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"deadbandType{{ _model.id }}\"\n [value]=\"deadbandFilter.value\"\n [(ngModel)]=\"subscriptionParameters.deadbandType\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"deadbandFilter.label\"\n [attr.data-name]=\"'deadbandType' + _model.id\"\n />\n <span></span>\n <span>{{ deadbandFilter.label | translate }}</span>\n </label>\n </c8y-form-group>\n <div [collapse]=\"subscriptionParameters.deadbandType == 'None'\" [isAnimated]=\"true\">\n <c8y-form-group>\n <label translate>Deadband value</label>\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"deadbandValue\"\n [(ngModel)]=\"subscriptionParameters.deadbandValue\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n [required]=\"subscriptionParameters.deadbandType != 'None'\"\n min=\"0\"\n [attr.data-cy]=\"'deadbandValue'\"\n />\n </c8y-form-group>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "directive", type: MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }] }); }
|
|
1078
1113
|
}
|
|
1079
1114
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDataReportingComponent, decorators: [{
|
|
1080
1115
|
type: Component,
|
|
1081
|
-
args: [{ selector: 'opcua-device-protocol-data-reporting', viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }],
|
|
1116
|
+
args: [{ selector: 'opcua-device-protocol-data-reporting', viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }], imports: [
|
|
1117
|
+
FormGroupComponent,
|
|
1118
|
+
C8yTranslateDirective,
|
|
1119
|
+
NgFor,
|
|
1120
|
+
FormsModule,
|
|
1121
|
+
RequiredInputPlaceholderDirective,
|
|
1122
|
+
CollapseDirective,
|
|
1123
|
+
MinValidationDirective,
|
|
1124
|
+
C8yTranslatePipe
|
|
1125
|
+
], template: "<c8y-form-group>\n <label translate>Mechanism</label>\n <label\n title=\"{{ mechanism.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n *ngFor=\"let mechanism of types\"\n >\n <input\n type=\"radio\"\n name=\"{{subscriptionTypeName}}\"\n [value]=\"mechanism.value\"\n [(ngModel)]=\"subscription.type\"\n (change)=\"updateModel()\"\n required\n [attr.data-cy]=\"mechanism.value\"\n />\n <span></span>\n <span>{{ mechanism.label | translate }}</span>\n </label>\n</c8y-form-group>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'CyclicRead'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-md-4 col-lg-3\">\n <c8y-form-group>\n <label translate>Reading interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"rate\"\n [(ngModel)]=\"cyclicReadParameters.rate\"\n placeholder=\"{{ 'e.g.' | translate }} 50\"\n [required]=\"requireCyclic\"\n min=\"50\"\n [attr.data-cy]=\"'cyclicReadRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\">\n {{ 'msec' | translate }}\n </span>\n </div>\n </c8y-form-group>\n </div>\n</div>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'Subscription'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Sampling interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"samplingRate\"\n [(ngModel)]=\"subscriptionParameters.samplingRate\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n [required]=\"requireSubscription\"\n min=\"0\"\n [attr.data-cy]=\"'subscriptionSamplingRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\" translate>\n msec\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Queue size</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"queueSize\"\n [(ngModel)]=\"subscriptionParameters.queueSize\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n min=\"1\"\n [attr.data-cy]=\"'subscriptionQueueSize'\"\n />\n <span class=\"input-group-addon\">\n <strong translate>Discard</strong> \n <label\n *ngFor=\"let discardOption of discard\"\n title=\"{{ discardOption.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"discard{{ _model.id }}\"\n [value]=\"discardOption.value\"\n [(ngModel)]=\"subscriptionParameters.discardOldest\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"discardOption.label\"\n [attr.data-name]=\"'discard' + _model.id\"\n />\n <span></span>\n <span>{{ discardOption.label | translate }}</span>\n </label>\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"clearfix\"></div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Data change trigger</label>\n <label\n *ngFor=\"let trigger of triggers\"\n title=\"{{ trigger.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"dataChangeTrigger{{ _model.id }}\"\n [value]=\"trigger.value\"\n [(ngModel)]=\"subscriptionParameters.dataChangeTrigger\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"trigger.label\"\n [attr.data-name]=\"'dataChangeTrigger' + _model.id\"\n />\n <span></span>\n <span>{{ trigger.label | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Deadband filter</label>\n <label\n *ngFor=\"let deadbandFilter of filters\"\n title=\"{{ deadbandFilter.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"deadbandType{{ _model.id }}\"\n [value]=\"deadbandFilter.value\"\n [(ngModel)]=\"subscriptionParameters.deadbandType\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"deadbandFilter.label\"\n [attr.data-name]=\"'deadbandType' + _model.id\"\n />\n <span></span>\n <span>{{ deadbandFilter.label | translate }}</span>\n </label>\n </c8y-form-group>\n <div [collapse]=\"subscriptionParameters.deadbandType == 'None'\" [isAnimated]=\"true\">\n <c8y-form-group>\n <label translate>Deadband value</label>\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"deadbandValue\"\n [(ngModel)]=\"subscriptionParameters.deadbandValue\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n [required]=\"subscriptionParameters.deadbandType != 'None'\"\n min=\"0\"\n [attr.data-cy]=\"'deadbandValue'\"\n />\n </c8y-form-group>\n </div>\n </div>\n</div>\n" }]
|
|
1082
1126
|
}], propDecorators: { model: [{
|
|
1083
1127
|
type: Input
|
|
1084
1128
|
}], groupName: [{
|
|
@@ -1100,11 +1144,20 @@ class OpcuaDeviceProtocolDescription {
|
|
|
1100
1144
|
this._model.enabled = data !== '0' ? true : false;
|
|
1101
1145
|
}
|
|
1102
1146
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDescription, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1103
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDescription, isStandalone:
|
|
1147
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDescription, isStandalone: true, selector: "opcua-device-protocol-description", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-protocols\"></i>\n <p>\n <small class=\"label label-info\">{{ _model.fieldbusType }}</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-9\">\n <div class=\"form-group form-group-lg m-b-0\">\n <label class=\"sr-only\" translate>Name</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlName.dirty }\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n #ctrlName=\"ngModel\"\n [(ngModel)]=\"_model.name\"\n style=\"max-width:calc( {{ _model.name.length || 10 }} * 1ch + 14px)\"\n />\n </label>\n </div>\n <div class=\"form-group\">\n <label class=\"sr-only\" translate>Description</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlDescription.dirty }\">\n <textarea\n class=\"form-control\"\n rows=\"1\"\n name=\"description\"\n placeholder=\"{{ 'e.g. My protocol description' | translate }}\"\n #ctrlDescription=\"ngModel\"\n [(ngModel)]=\"_model.description\"\n style=\"max-width:calc( {{ _model.description?.length || 25 }} * 1ch + 14px)\"\n ></textarea>\n <span *ngIf=\"_model.description\">\n {{ _model.description }}\n </span>\n </label>\n </div>\n <div class=\"d-flex\">\n <div>\n <button\n type=\"button\"\n class=\"btn\"\n name=\"autoScanAddressSpace\"\n [(ngModel)]=\"autoScan\"\n (ngModelChange)=\"setAutoScanOption($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n ngDefaultControl\n >\n <i *ngIf=\"autoScan === '1'\" c8yIcon=\"check\" class=\"text-success\"></i>\n <span *ngIf=\"autoScan === '1'\">\n {{ 'Active`auto scanning`' | translate }}\n </span>\n\n <i *ngIf=\"autoScan === '0'\" c8yIcon=\"ban\" class=\"text-danger\"></i>\n <span *ngIf=\"autoScan === '0'\">\n {{ 'Inactive`auto scanning`' | translate }}\n </span>\n </button>\n </div>\n <small class=\"m-l-16 text-muted\">\n {{\n 'When active, the gateway scans the address space of all servers and automatically applies this device protocol to all nodes matching the criteria.'\n | translate\n }}\n </small>\n </div>\n </div>\n <div class=\"flex-grow\">\n <ul class=\"list-unstyled small\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>ID</label>\n <span class=\"m-l-auto\">{{ _model.id }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Date created</label>\n <span class=\"m-l-auto\">{{ _model.creationTime | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Last update</label>\n <span class=\"m-l-auto\">{{ _model.lastUpdated | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Fieldbus version</label>\n <span class=\"m-l-auto\">{{ _model.fieldbusVersion }}</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
|
|
1104
1148
|
}
|
|
1105
1149
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDescription, decorators: [{
|
|
1106
1150
|
type: Component,
|
|
1107
|
-
args: [{ selector: 'opcua-device-protocol-description', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],
|
|
1151
|
+
args: [{ selector: 'opcua-device-protocol-description', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], imports: [
|
|
1152
|
+
C8yTranslateDirective,
|
|
1153
|
+
NgClass,
|
|
1154
|
+
FormsModule,
|
|
1155
|
+
NgIf,
|
|
1156
|
+
ButtonCheckboxDirective,
|
|
1157
|
+
IconDirective,
|
|
1158
|
+
C8yTranslatePipe,
|
|
1159
|
+
DatePipe
|
|
1160
|
+
], template: "<div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-protocols\"></i>\n <p>\n <small class=\"label label-info\">{{ _model.fieldbusType }}</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-9\">\n <div class=\"form-group form-group-lg m-b-0\">\n <label class=\"sr-only\" translate>Name</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlName.dirty }\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n #ctrlName=\"ngModel\"\n [(ngModel)]=\"_model.name\"\n style=\"max-width:calc( {{ _model.name.length || 10 }} * 1ch + 14px)\"\n />\n </label>\n </div>\n <div class=\"form-group\">\n <label class=\"sr-only\" translate>Description</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlDescription.dirty }\">\n <textarea\n class=\"form-control\"\n rows=\"1\"\n name=\"description\"\n placeholder=\"{{ 'e.g. My protocol description' | translate }}\"\n #ctrlDescription=\"ngModel\"\n [(ngModel)]=\"_model.description\"\n style=\"max-width:calc( {{ _model.description?.length || 25 }} * 1ch + 14px)\"\n ></textarea>\n <span *ngIf=\"_model.description\">\n {{ _model.description }}\n </span>\n </label>\n </div>\n <div class=\"d-flex\">\n <div>\n <button\n type=\"button\"\n class=\"btn\"\n name=\"autoScanAddressSpace\"\n [(ngModel)]=\"autoScan\"\n (ngModelChange)=\"setAutoScanOption($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n ngDefaultControl\n >\n <i *ngIf=\"autoScan === '1'\" c8yIcon=\"check\" class=\"text-success\"></i>\n <span *ngIf=\"autoScan === '1'\">\n {{ 'Active`auto scanning`' | translate }}\n </span>\n\n <i *ngIf=\"autoScan === '0'\" c8yIcon=\"ban\" class=\"text-danger\"></i>\n <span *ngIf=\"autoScan === '0'\">\n {{ 'Inactive`auto scanning`' | translate }}\n </span>\n </button>\n </div>\n <small class=\"m-l-16 text-muted\">\n {{\n 'When active, the gateway scans the address space of all servers and automatically applies this device protocol to all nodes matching the criteria.'\n | translate\n }}\n </small>\n </div>\n </div>\n <div class=\"flex-grow\">\n <ul class=\"list-unstyled small\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>ID</label>\n <span class=\"m-l-auto\">{{ _model.id }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Date created</label>\n <span class=\"m-l-auto\">{{ _model.creationTime | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Last update</label>\n <span class=\"m-l-auto\">{{ _model.lastUpdated | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Fieldbus version</label>\n <span class=\"m-l-auto\">{{ _model.fieldbusVersion }}</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
1108
1161
|
}], propDecorators: { model: [{
|
|
1109
1162
|
type: Input
|
|
1110
1163
|
}] } });
|
|
@@ -1266,14 +1319,11 @@ class OpcuaDeviceProtocolObjectMappingStatus extends UpgradeComponent {
|
|
|
1266
1319
|
super('c8yObjectMappingStatusIcons', elementRef, injector);
|
|
1267
1320
|
}
|
|
1268
1321
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolObjectMappingStatus, deps: [{ token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1269
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolObjectMappingStatus, isStandalone:
|
|
1322
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolObjectMappingStatus, isStandalone: true, selector: "c8y-object-mapping-status-icons", inputs: { mapping: "mapping" }, usesInheritance: true, ngImport: i0 }); }
|
|
1270
1323
|
}
|
|
1271
1324
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolObjectMappingStatus, decorators: [{
|
|
1272
1325
|
type: Directive,
|
|
1273
|
-
args: [{
|
|
1274
|
-
selector: 'c8y-object-mapping-status-icons',
|
|
1275
|
-
standalone: false
|
|
1276
|
-
}]
|
|
1326
|
+
args: [{ selector: 'c8y-object-mapping-status-icons' }]
|
|
1277
1327
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Injector }], propDecorators: { mapping: [{
|
|
1278
1328
|
type: Input
|
|
1279
1329
|
}] } });
|
|
@@ -1472,11 +1522,32 @@ class OpcuaDeviceProtocolMapping {
|
|
|
1472
1522
|
this.mapping.subscriptionType = value;
|
|
1473
1523
|
}
|
|
1474
1524
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolMapping, deps: [{ token: AddressSpaceService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1475
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolMapping, isStandalone: false, selector: "opcua-device-protocol-mapping", inputs: { _model: ["resource", "_model"], index: "index", getParentAttr: "getParentAttr", referencedServerId: "referencedServerId", referencedRootNodeId: "referencedRootNodeId" }, outputs: { onAction: "onAction" }, viewQueries: [{ propertyName: "subFormRef", first: true, predicate: ["variableForm"], descendants: true }, { propertyName: "browsePathModel", first: true, predicate: ["browsePathModel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"c8y-list__item\"\n [ngClass]=\"{ expanded: isDetailOpen }\"\n [attr.data-cy]=\"mapping.browsePath | json\"\n>\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"sliders\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-70\">\n <div class=\"col-5\">\n <p\n class=\"text-truncate\"\n title=\" {{ nodeDisplayName }} {{\n mapping.browsePath.length > 0 ? (mapping.browsePath | json) : ''\n }}\"\n (click)=\"toggleDetail()\"\n >\n {{ nodeDisplayName }}\n <small\n class=\"text-muted\"\n *ngIf=\"mapping.browsePath.length > 0\"\n >\n {{ mapping.browsePath | json }}\n </small>\n </p>\n </div>\n <div class=\"col-5\">\n <div class=\"list-functionalities\">\n <label class=\"small m-r-8 m-b-0 hidden-xs\">\n {{ 'Functionalities' | translate }}\n </label>\n <c8y-object-mapping-status-icons [mapping]=\"mapping\"></c8y-object-mapping-status-icons>\n </div>\n </div>\n <div class=\"flex-grow d-flex p-r-8\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n c8yIcon=\"minus-circle\"\n (click)=\"onDelete()\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\">\n <button\n class=\"collapse-btn\"\n title=\"{{ 'Expand' | translate }}\"\n type=\"button\"\n [ngClass]=\"{ active: isDetailOpen }\"\n (click)=\"toggleDetail()\"\n [attr.data-cy]=\"'toggleDetail'\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"collapse\"\n [collapse]=\"!isDetailOpen\"\n [isAnimated]=\"true\"\n >\n <div class=\"c8y-list__item__collapse--container\">\n <div\n class=\"form\"\n [ngModelGroup]=\"index\"\n #variableForm=\"ngModelGroup\"\n *ngIf=\"isDetailOpen\"\n >\n <div class=\"row p-t-8\">\n <c8y-form-group\n class=\"col-md-4\"\n [status]=\"!isBrowsePathUniq ? 'error' : ''\"\n *ngIf=\"showAddressSpaceTree(); else simpleInput\"\n >\n <label>{{ 'Path' | translate }}</label>\n <div\n class=\"dropdown fit-w\"\n dropdown\n #dropdown=\"bs-dropdown\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n (focus)=\"setTreeFromRefNode()\"\n #browsePathModel=\"ngModel\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Toggle address space' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"dropdown-menu panel-inner-scroll fit-w\"\n style=\"max-height: 240px\"\n *dropdownMenu\n >\n <opcua-address-space-tree\n [node]=\"referencedNode\"\n [moId]=\"referencedServerId\"\n (selectedNode)=\"updateBrowsePath($event); dropdown.hide()\"\n ></opcua-address-space-tree>\n </div>\n </div>\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <ng-template #simpleInput>\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Path' | translate }}</label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n #browsePathModel=\"ngModel\"\n />\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </ng-template>\n\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Name' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. childDevice2' | translate }} \"\n name=\"displayName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"nodeDisplayName\"\n (change)=\"updateDisplayname()\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div\n class=\"row\"\n ngModelGroup=\"dataReportingSection\"\n >\n <c8y-form-group class=\"col-sm-4 col-md-3 col-lg-2\">\n <label>\n <span>{{ 'Data reporting' | translate }}</span>\n </label>\n <div class=\"input-group\">\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Default' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"default\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Default' | translate }}</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Custom' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"custom\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Custom' | translate }}</span>\n </label>\n </div>\n </c8y-form-group>\n <div\n class=\"col-sm-8 col-md-9 col-lg-10\"\n *ngIf=\"dataReporting === 'custom'\"\n ngModelGroup=\"overriddenSubscription\"\n >\n <opcua-device-protocol-data-reporting\n [model]=\"mapping\"\n (onSubscriptionChange)=\"updateSubscriptionType($event)\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n\n <c8y-device-protocol-object-mappings\n [data]=\"mapping\"\n [objectMappingTypes]=\"mappingTypes\"\n (onUpdate)=\"onMappingUpdate($event)\">\n </c8y-device-protocol-object-mappings>\n\n <button\n class=\"btn btn-default m-t-16 m-b-16\"\n title=\"{{ 'Cancel' | translate }}\"\n id=\"cancelBtn\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary m-t-16 m-b-16\"\n title=\"{{ 'Save' | translate }}\"\n id=\"saveBtn\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"!canSave(variableForm)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "component", type: i2$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2$1.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2$1.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i2$1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i5$1.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i4$1.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "directive", type: i7$1.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i7$1.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i7$1.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i8.ObjectMappingComponent, selector: "c8y-device-protocol-object-mappings", inputs: ["data", "objectMappingTypes"], outputs: ["onUpdate"] }, { kind: "component", type: OpcuaAddressSpaceTreeComponent, selector: "opcua-address-space-tree", inputs: ["moId", "node", "focusEmitter"], outputs: ["selectedNode"] }, { kind: "component", type: OpcuaDeviceProtocolDataReportingComponent, selector: "opcua-device-protocol-data-reporting", inputs: ["model", "groupName"], outputs: ["onSubscriptionChange"] }, { kind: "directive", type: OpcuaDeviceProtocolObjectMappingStatus, selector: "c8y-object-mapping-status-icons", inputs: ["mapping"] }, { kind: "directive", type: OpcuaDeviceProtocolBrowsePathValidation, selector: "[c8yBrowsePathValidator][ngModel]", inputs: ["getMappings", "model"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.JsonPipe, name: "json" }], viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }] }); }
|
|
1525
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolMapping, isStandalone: true, selector: "opcua-device-protocol-mapping", inputs: { _model: ["resource", "_model"], index: "index", getParentAttr: "getParentAttr", referencedServerId: "referencedServerId", referencedRootNodeId: "referencedRootNodeId" }, outputs: { onAction: "onAction" }, viewQueries: [{ propertyName: "subFormRef", first: true, predicate: ["variableForm"], descendants: true }, { propertyName: "browsePathModel", first: true, predicate: ["browsePathModel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"c8y-list__item\"\n [ngClass]=\"{ expanded: isDetailOpen }\"\n [attr.data-cy]=\"mapping.browsePath | json\"\n>\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"sliders\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-70\">\n <div class=\"col-5\">\n <p\n class=\"text-truncate\"\n title=\" {{ nodeDisplayName }} {{\n mapping.browsePath.length > 0 ? (mapping.browsePath | json) : ''\n }}\"\n (click)=\"toggleDetail()\"\n >\n {{ nodeDisplayName }}\n <small\n class=\"text-muted\"\n *ngIf=\"mapping.browsePath.length > 0\"\n >\n {{ mapping.browsePath | json }}\n </small>\n </p>\n </div>\n <div class=\"col-5\">\n <div class=\"list-functionalities\">\n <label class=\"small m-r-8 m-b-0 hidden-xs\">\n {{ 'Functionalities' | translate }}\n </label>\n <c8y-object-mapping-status-icons [mapping]=\"mapping\"></c8y-object-mapping-status-icons>\n </div>\n </div>\n <div class=\"flex-grow d-flex p-r-8\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n c8yIcon=\"minus-circle\"\n (click)=\"onDelete()\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\">\n <button\n class=\"collapse-btn\"\n title=\"{{ 'Expand' | translate }}\"\n type=\"button\"\n [ngClass]=\"{ active: isDetailOpen }\"\n (click)=\"toggleDetail()\"\n [attr.data-cy]=\"'toggleDetail'\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"collapse\"\n [collapse]=\"!isDetailOpen\"\n [isAnimated]=\"true\"\n >\n <div class=\"c8y-list__item__collapse--container\">\n <div\n class=\"form\"\n [ngModelGroup]=\"index\"\n #variableForm=\"ngModelGroup\"\n *ngIf=\"isDetailOpen\"\n >\n <div class=\"row p-t-8\">\n <c8y-form-group\n class=\"col-md-4\"\n [status]=\"!isBrowsePathUniq ? 'error' : ''\"\n *ngIf=\"showAddressSpaceTree(); else simpleInput\"\n >\n <label>{{ 'Path' | translate }}</label>\n <div\n class=\"dropdown fit-w\"\n dropdown\n #dropdown=\"bs-dropdown\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n (focus)=\"setTreeFromRefNode()\"\n #browsePathModel=\"ngModel\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Toggle address space' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"dropdown-menu panel-inner-scroll fit-w\"\n style=\"max-height: 240px\"\n *dropdownMenu\n >\n <opcua-address-space-tree\n [node]=\"referencedNode\"\n [moId]=\"referencedServerId\"\n (selectedNode)=\"updateBrowsePath($event); dropdown.hide()\"\n ></opcua-address-space-tree>\n </div>\n </div>\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <ng-template #simpleInput>\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Path' | translate }}</label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n #browsePathModel=\"ngModel\"\n />\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </ng-template>\n\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Name' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. childDevice2' | translate }} \"\n name=\"displayName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"nodeDisplayName\"\n (change)=\"updateDisplayname()\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div\n class=\"row\"\n ngModelGroup=\"dataReportingSection\"\n >\n <c8y-form-group class=\"col-sm-4 col-md-3 col-lg-2\">\n <label>\n <span>{{ 'Data reporting' | translate }}</span>\n </label>\n <div class=\"input-group\">\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Default' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"default\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Default' | translate }}</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Custom' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"custom\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Custom' | translate }}</span>\n </label>\n </div>\n </c8y-form-group>\n <div\n class=\"col-sm-8 col-md-9 col-lg-10\"\n *ngIf=\"dataReporting === 'custom'\"\n ngModelGroup=\"overriddenSubscription\"\n >\n <opcua-device-protocol-data-reporting\n [model]=\"mapping\"\n (onSubscriptionChange)=\"updateSubscriptionType($event)\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n\n <c8y-device-protocol-object-mappings\n [data]=\"mapping\"\n [objectMappingTypes]=\"mappingTypes\"\n (onUpdate)=\"onMappingUpdate($event)\">\n </c8y-device-protocol-object-mappings>\n\n <button\n class=\"btn btn-default m-t-16 m-b-16\"\n title=\"{{ 'Cancel' | translate }}\"\n id=\"cancelBtn\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary m-t-16 m-b-16\"\n title=\"{{ 'Save' | translate }}\"\n id=\"saveBtn\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"!canSave(variableForm)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: OpcuaDeviceProtocolObjectMappingStatus, selector: "c8y-object-mapping-status-icons", inputs: ["mapping"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$2.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: OpcuaDeviceProtocolBrowsePathValidation, selector: "[c8yBrowsePathValidator][ngModel]", inputs: ["getMappings", "model"] }, { kind: "directive", type: BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "component", type: OpcuaAddressSpaceTreeComponent, selector: "opcua-address-space-tree", inputs: ["moId", "node", "focusEmitter"], outputs: ["selectedNode"] }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: OpcuaDeviceProtocolDataReportingComponent, selector: "opcua-device-protocol-data-reporting", inputs: ["model", "groupName"], outputs: ["onSubscriptionChange"] }, { kind: "component", type: ObjectMappingComponent, selector: "c8y-device-protocol-object-mappings", inputs: ["data", "objectMappingTypes"], outputs: ["onUpdate"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: JsonPipe, name: "json" }], viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }] }); }
|
|
1476
1526
|
}
|
|
1477
1527
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolMapping, decorators: [{
|
|
1478
1528
|
type: Component,
|
|
1479
|
-
args: [{ selector: 'opcua-device-protocol-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }],
|
|
1529
|
+
args: [{ selector: 'opcua-device-protocol-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }], imports: [
|
|
1530
|
+
NgClass,
|
|
1531
|
+
IconDirective,
|
|
1532
|
+
NgIf,
|
|
1533
|
+
OpcuaDeviceProtocolObjectMappingStatus,
|
|
1534
|
+
TooltipDirective,
|
|
1535
|
+
CollapseDirective,
|
|
1536
|
+
FormsModule,
|
|
1537
|
+
FormGroupComponent,
|
|
1538
|
+
BsDropdownDirective,
|
|
1539
|
+
RequiredInputPlaceholderDirective,
|
|
1540
|
+
OpcuaDeviceProtocolBrowsePathValidation,
|
|
1541
|
+
BsDropdownToggleDirective,
|
|
1542
|
+
BsDropdownMenuDirective,
|
|
1543
|
+
OpcuaAddressSpaceTreeComponent,
|
|
1544
|
+
MessagesComponent,
|
|
1545
|
+
MessageDirective,
|
|
1546
|
+
OpcuaDeviceProtocolDataReportingComponent,
|
|
1547
|
+
ObjectMappingComponent,
|
|
1548
|
+
C8yTranslatePipe,
|
|
1549
|
+
JsonPipe
|
|
1550
|
+
], template: "<div\n class=\"c8y-list__item\"\n [ngClass]=\"{ expanded: isDetailOpen }\"\n [attr.data-cy]=\"mapping.browsePath | json\"\n>\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"sliders\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-70\">\n <div class=\"col-5\">\n <p\n class=\"text-truncate\"\n title=\" {{ nodeDisplayName }} {{\n mapping.browsePath.length > 0 ? (mapping.browsePath | json) : ''\n }}\"\n (click)=\"toggleDetail()\"\n >\n {{ nodeDisplayName }}\n <small\n class=\"text-muted\"\n *ngIf=\"mapping.browsePath.length > 0\"\n >\n {{ mapping.browsePath | json }}\n </small>\n </p>\n </div>\n <div class=\"col-5\">\n <div class=\"list-functionalities\">\n <label class=\"small m-r-8 m-b-0 hidden-xs\">\n {{ 'Functionalities' | translate }}\n </label>\n <c8y-object-mapping-status-icons [mapping]=\"mapping\"></c8y-object-mapping-status-icons>\n </div>\n </div>\n <div class=\"flex-grow d-flex p-r-8\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n c8yIcon=\"minus-circle\"\n (click)=\"onDelete()\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\">\n <button\n class=\"collapse-btn\"\n title=\"{{ 'Expand' | translate }}\"\n type=\"button\"\n [ngClass]=\"{ active: isDetailOpen }\"\n (click)=\"toggleDetail()\"\n [attr.data-cy]=\"'toggleDetail'\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"collapse\"\n [collapse]=\"!isDetailOpen\"\n [isAnimated]=\"true\"\n >\n <div class=\"c8y-list__item__collapse--container\">\n <div\n class=\"form\"\n [ngModelGroup]=\"index\"\n #variableForm=\"ngModelGroup\"\n *ngIf=\"isDetailOpen\"\n >\n <div class=\"row p-t-8\">\n <c8y-form-group\n class=\"col-md-4\"\n [status]=\"!isBrowsePathUniq ? 'error' : ''\"\n *ngIf=\"showAddressSpaceTree(); else simpleInput\"\n >\n <label>{{ 'Path' | translate }}</label>\n <div\n class=\"dropdown fit-w\"\n dropdown\n #dropdown=\"bs-dropdown\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n (focus)=\"setTreeFromRefNode()\"\n #browsePathModel=\"ngModel\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Toggle address space' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"dropdown-menu panel-inner-scroll fit-w\"\n style=\"max-height: 240px\"\n *dropdownMenu\n >\n <opcua-address-space-tree\n [node]=\"referencedNode\"\n [moId]=\"referencedServerId\"\n (selectedNode)=\"updateBrowsePath($event); dropdown.hide()\"\n ></opcua-address-space-tree>\n </div>\n </div>\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <ng-template #simpleInput>\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Path' | translate }}</label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n #browsePathModel=\"ngModel\"\n />\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </ng-template>\n\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Name' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. childDevice2' | translate }} \"\n name=\"displayName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"nodeDisplayName\"\n (change)=\"updateDisplayname()\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div\n class=\"row\"\n ngModelGroup=\"dataReportingSection\"\n >\n <c8y-form-group class=\"col-sm-4 col-md-3 col-lg-2\">\n <label>\n <span>{{ 'Data reporting' | translate }}</span>\n </label>\n <div class=\"input-group\">\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Default' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"default\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Default' | translate }}</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Custom' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"custom\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Custom' | translate }}</span>\n </label>\n </div>\n </c8y-form-group>\n <div\n class=\"col-sm-8 col-md-9 col-lg-10\"\n *ngIf=\"dataReporting === 'custom'\"\n ngModelGroup=\"overriddenSubscription\"\n >\n <opcua-device-protocol-data-reporting\n [model]=\"mapping\"\n (onSubscriptionChange)=\"updateSubscriptionType($event)\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n\n <c8y-device-protocol-object-mappings\n [data]=\"mapping\"\n [objectMappingTypes]=\"mappingTypes\"\n (onUpdate)=\"onMappingUpdate($event)\">\n </c8y-device-protocol-object-mappings>\n\n <button\n class=\"btn btn-default m-t-16 m-b-16\"\n title=\"{{ 'Cancel' | translate }}\"\n id=\"cancelBtn\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary m-t-16 m-b-16\"\n title=\"{{ 'Save' | translate }}\"\n id=\"saveBtn\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"!canSave(variableForm)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
1480
1551
|
}], ctorParameters: () => [{ type: AddressSpaceService }], propDecorators: { subFormRef: [{
|
|
1481
1552
|
type: ViewChild,
|
|
1482
1553
|
args: ['variableForm', { static: false }]
|
|
@@ -1674,13 +1745,28 @@ class OpcuaDeviceProtocolDetailComponent {
|
|
|
1674
1745
|
}
|
|
1675
1746
|
return !deviceTypeForm.form.valid;
|
|
1676
1747
|
}
|
|
1677
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDetailComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: OpcuaService }, { token: i2$1.AlertService }, { token: i2
|
|
1678
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDetailComponent, isStandalone:
|
|
1748
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDetailComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: OpcuaService }, { token: i2$1.AlertService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1749
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDetailComponent, isStandalone: true, selector: "opcua-device-protocol-detail", viewQueries: [{ propertyName: "instanceList", predicate: OpcuaDeviceProtocolMapping, descendants: true }], ngImport: i0, template: "<c8y-title *ngIf=\"!isLoaded\">{{ model.name }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device types' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device protocols' | translate\"\n [path]=\"'deviceprotocols'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'c8y-device-protocols'\" [label]=\"model?.name\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form #deviceTypeForm=\"ngForm\" name=\"detailForm\" *ngIf=\"!isLoaded\" class=\"card card--fullpage\">\n <opcua-device-protocol-description [model]=\"model\"></opcua-device-protocol-description>\n <div class=\"inner-scroll\">\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Variables</div>\n </div>\n <div class=\"p-l-16 p-r-16\">\n <div class=\"c8y-list__group\" *ngIf=\"model.mappings.length > 0\" ngModelGroup=\"variable\">\n <opcua-device-protocol-mapping\n *ngFor=\"let resource of getMapping(); index as i; trackBy: trackById\"\n [index]=\"i\"\n [referencedServerId]=\"model.referencedServerId\"\n [referencedRootNodeId]=\"model.referencedRootNodeId\"\n [resource]=\"getStructuredResource(resource)\"\n [getParentAttr]=\"getParentAttr\"\n (onAction)=\"actionHandler($event)\"\n ></opcua-device-protocol-mapping>\n </div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\">\n <c8y-ui-empty-state\n *ngIf=\"model.mappings.length === 0\"\n [icon]=\"'sliders'\"\n [title]=\"'No variables to display.' | translate\"\n [subtitle]=\"'Click below to add your first variable.' | translate\"\n ></c8y-ui-empty-state>\n\n <div class=\"card-footer\">\n <button\n type=\"button\"\n title=\"{{ 'Add variable' | translate }}\"\n class=\"btn btn-default addVariableBtn\"\n (click)=\"addVariable()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add variable' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Data reporting</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\" ngModelGroup=\"subscription\">\n <opcua-device-protocol-data-reporting\n [groupName]=\"'subscription'\"\n [model]=\"model\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom sticky-top\">\n <div class=\"h4\" translate>Auto apply constraints</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16 overflow-visible\" ngModelGroup=\"autoApply\">\n <opcua-auto-apply [model]=\"model\"></opcua-auto-apply>\n </div>\n </div>\n\n <div class=\"card-footer sticky-bottom separator\" style=\"z-index: 101\">\n <button\n title=\"{{ 'Save' | translate }}\"\n id=\"deviceTypeSave\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"canSave(deviceTypeForm)\"\n type=\"button\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "directive", type: i2$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: OpcuaDeviceProtocolDescription, selector: "opcua-device-protocol-description", inputs: ["model"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: OpcuaDeviceProtocolMapping, selector: "opcua-device-protocol-mapping", inputs: ["resource", "index", "getParentAttr", "referencedServerId", "referencedRootNodeId"], outputs: ["onAction"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: OpcuaDeviceProtocolDataReportingComponent, selector: "opcua-device-protocol-data-reporting", inputs: ["model", "groupName"], outputs: ["onSubscriptionChange"] }, { kind: "component", type: OpcuaAutoApplySettingsComponent, selector: "opcua-auto-apply", inputs: ["model"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
1679
1750
|
}
|
|
1680
1751
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDetailComponent, decorators: [{
|
|
1681
1752
|
type: Component,
|
|
1682
|
-
args: [{ selector: 'opcua-device-protocol-detail',
|
|
1683
|
-
|
|
1753
|
+
args: [{ selector: 'opcua-device-protocol-detail', imports: [
|
|
1754
|
+
NgIf,
|
|
1755
|
+
TitleComponent,
|
|
1756
|
+
BreadcrumbComponent,
|
|
1757
|
+
BreadcrumbItemComponent,
|
|
1758
|
+
FormsModule,
|
|
1759
|
+
OpcuaDeviceProtocolDescription,
|
|
1760
|
+
C8yTranslateDirective,
|
|
1761
|
+
NgFor,
|
|
1762
|
+
OpcuaDeviceProtocolMapping,
|
|
1763
|
+
EmptyStateComponent,
|
|
1764
|
+
IconDirective,
|
|
1765
|
+
OpcuaDeviceProtocolDataReportingComponent,
|
|
1766
|
+
OpcuaAutoApplySettingsComponent,
|
|
1767
|
+
C8yTranslatePipe
|
|
1768
|
+
], template: "<c8y-title *ngIf=\"!isLoaded\">{{ model.name }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device types' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device protocols' | translate\"\n [path]=\"'deviceprotocols'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'c8y-device-protocols'\" [label]=\"model?.name\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form #deviceTypeForm=\"ngForm\" name=\"detailForm\" *ngIf=\"!isLoaded\" class=\"card card--fullpage\">\n <opcua-device-protocol-description [model]=\"model\"></opcua-device-protocol-description>\n <div class=\"inner-scroll\">\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Variables</div>\n </div>\n <div class=\"p-l-16 p-r-16\">\n <div class=\"c8y-list__group\" *ngIf=\"model.mappings.length > 0\" ngModelGroup=\"variable\">\n <opcua-device-protocol-mapping\n *ngFor=\"let resource of getMapping(); index as i; trackBy: trackById\"\n [index]=\"i\"\n [referencedServerId]=\"model.referencedServerId\"\n [referencedRootNodeId]=\"model.referencedRootNodeId\"\n [resource]=\"getStructuredResource(resource)\"\n [getParentAttr]=\"getParentAttr\"\n (onAction)=\"actionHandler($event)\"\n ></opcua-device-protocol-mapping>\n </div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\">\n <c8y-ui-empty-state\n *ngIf=\"model.mappings.length === 0\"\n [icon]=\"'sliders'\"\n [title]=\"'No variables to display.' | translate\"\n [subtitle]=\"'Click below to add your first variable.' | translate\"\n ></c8y-ui-empty-state>\n\n <div class=\"card-footer\">\n <button\n type=\"button\"\n title=\"{{ 'Add variable' | translate }}\"\n class=\"btn btn-default addVariableBtn\"\n (click)=\"addVariable()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add variable' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Data reporting</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\" ngModelGroup=\"subscription\">\n <opcua-device-protocol-data-reporting\n [groupName]=\"'subscription'\"\n [model]=\"model\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom sticky-top\">\n <div class=\"h4\" translate>Auto apply constraints</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16 overflow-visible\" ngModelGroup=\"autoApply\">\n <opcua-auto-apply [model]=\"model\"></opcua-auto-apply>\n </div>\n </div>\n\n <div class=\"card-footer sticky-bottom separator\" style=\"z-index: 101\">\n <button\n title=\"{{ 'Save' | translate }}\"\n id=\"deviceTypeSave\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"canSave(deviceTypeForm)\"\n type=\"button\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n" }]
|
|
1769
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: OpcuaService }, { type: i2$1.AlertService }, { type: i2.Router }], propDecorators: { instanceList: [{
|
|
1684
1770
|
type: ViewChildren,
|
|
1685
1771
|
args: [OpcuaDeviceProtocolMapping]
|
|
1686
1772
|
}] } });
|
|
@@ -2129,11 +2215,30 @@ class OpcuaServerConfigComponent {
|
|
|
2129
2215
|
];
|
|
2130
2216
|
}
|
|
2131
2217
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServerConfigComponent, deps: [{ token: OpcuaService }, { token: i2$1.ModalService }, { token: i2$1.AlertService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2132
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServerConfigComponent, isStandalone: false, selector: "opcua-server-config", inputs: { server: "server" }, outputs: { canceled: "canceled", removed: "removed", saved: "saved", updated: "updated" }, viewQueries: [{ propertyName: "opcuaConfigForm", first: true, predicate: ["opcuaConfigForm"], descendants: true }, { propertyName: "dropArea", first: true, predicate: DropAreaComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-ui-empty-state\n [icon]=\"'server'\"\n [title]=\"'No server to display.' | translate\"\n [subtitle]=\"'Add or select a server.' | translate\"\n *ngIf=\"!server\"\n></c8y-ui-empty-state>\n\n<form\n class=\"d-contents\"\n #opcuaConfigForm=\"ngForm\"\n *ngIf=\"server\"\n>\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>{{ 'Server name' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"model.name\"\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label\n class=\"fit-w\"\n translate\n >\n Server connection\n </label>\n <button\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n type=\"button\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span\n title=\"{{ 'Enabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '1'\"\n >\n {{ 'Enabled' | translate }}\n </span>\n <span\n title=\"{{ 'Disabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '0'\"\n >\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status\n class=\"p-r-8\"\n [mo]=\"server\"\n ></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label\n for=\"configServerUrl\"\n translate\n >\n Server URL\n </label>\n <input\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n type=\"text\"\n required\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n />\n </c8y-form-group>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label\n for=\"config.securityMode\"\n translate\n >\n Security mode\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n name=\"securityMode\"\n required\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n >\n <option\n *ngFor=\"let mode of securityModes\"\n [ngValue]=\"mode\"\n >\n {{ mode }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode === NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <input\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n />\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode !== NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN_ENC\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign_enc\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"row tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.authenticationMode\"\n translate\n >\n Authentication\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n name=\"authenticationMode\"\n required\n [(ngModel)]=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n >\n <option\n *ngFor=\"let auth of authenticationModes\"\n [ngValue]=\"auth\"\n >\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n <!-- User/Pw-->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 2\"\n >\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.userName\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"config.userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n name=\"userName\"\n type=\"text\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userName\"\n />\n </div>\n </div>\n\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div\n class=\"form-group\"\n *ngIf=\"!initialPasswordRequired\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"toggleChangePassword()\"\n >\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label\n for=\"config.password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userPassword\"\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n\n <!-- Key-based -->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 3\"\n >\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.keystorePass\"\n translate\n >\n Keystore password\n </label>\n <input\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.keystorePass\"\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.certificatePass\"\n translate\n >\n Certificate password\n </label>\n <input\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.certificatePass\"\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label\n for=\"certificateUpload\"\n translate\n >\n Upload keystore\n </label>\n <input\n class=\"form-control m-b-8\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n name=\"certificateUpload\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [ngModel]=\"fileName\"\n />\n <c8y-drop-area\n [title]=\"'Import keystore with jks file extension' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n\n <div class=\"form-group m-b-0 d-flex a-i-center\">\n <button\n class=\"btn btn-dot collapse-btn\"\n title=\"{{ (advancedSettings ? collapse : expand) | translate }}\"\n [attr.aria-label]=\"(advancedSettings ? collapse : expand) | translate\"\n [attr.aria-expanded]=\"advancedSettings\"\n [ngClass]=\"{ active: advancedSettings }\"\n (click)=\"advancedSettings = !advancedSettings\"\n data-cy=\"opcua-server-config--advanced-settings-toggle\"\n >\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n <label class=\"m-0\">\n <span>{{ 'Advanced settings' | translate }}</span>\n </label>\n </div>\n </div>\n\n <div\n class=\"card-block collapse\"\n [collapse]=\"!advancedSettings\"\n [isAnimated]=\"true\"\n [ngClass]=\"{ 'bg-level-1': advancedSettings }\"\n >\n <formly-form\n [form]=\"advancedSettingsForm\"\n [fields]=\"advancedSettingsFields\"\n [model]=\"model.config\"\n ></formly-form>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"isNew()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid || !advancedSettingsForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "component", type: i2$1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: i2$1.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2$1.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2$1.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i2$1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2$1.DeviceStatusComponent, selector: "device-status, c8y-device-status", inputs: ["mo", "size"] }, { kind: "component", type: i5$2.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "directive", type: i4$2.ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "directive", type: i4$1.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }] }); }
|
|
2218
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServerConfigComponent, isStandalone: true, selector: "opcua-server-config", inputs: { server: "server" }, outputs: { canceled: "canceled", removed: "removed", saved: "saved", updated: "updated" }, viewQueries: [{ propertyName: "opcuaConfigForm", first: true, predicate: ["opcuaConfigForm"], descendants: true }, { propertyName: "dropArea", first: true, predicate: DropAreaComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-ui-empty-state\n [icon]=\"'server'\"\n [title]=\"'No server to display.' | translate\"\n [subtitle]=\"'Add or select a server.' | translate\"\n *ngIf=\"!server\"\n></c8y-ui-empty-state>\n\n<form\n class=\"d-contents\"\n #opcuaConfigForm=\"ngForm\"\n *ngIf=\"server\"\n>\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>{{ 'Server name' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"model.name\"\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label\n class=\"fit-w\"\n translate\n >\n Server connection\n </label>\n <button\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n type=\"button\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span\n title=\"{{ 'Enabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '1'\"\n >\n {{ 'Enabled' | translate }}\n </span>\n <span\n title=\"{{ 'Disabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '0'\"\n >\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status\n class=\"p-r-8\"\n [mo]=\"server\"\n ></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label\n for=\"configServerUrl\"\n translate\n >\n Server URL\n </label>\n <input\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n type=\"text\"\n required\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n />\n </c8y-form-group>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label\n for=\"config.securityMode\"\n translate\n >\n Security mode\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n name=\"securityMode\"\n required\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n >\n <option\n *ngFor=\"let mode of securityModes\"\n [ngValue]=\"mode\"\n >\n {{ mode }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode === NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <input\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n />\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode !== NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN_ENC\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign_enc\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"row tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.authenticationMode\"\n translate\n >\n Authentication\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n name=\"authenticationMode\"\n required\n [(ngModel)]=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n >\n <option\n *ngFor=\"let auth of authenticationModes\"\n [ngValue]=\"auth\"\n >\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n <!-- User/Pw-->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 2\"\n >\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.userName\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"config.userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n name=\"userName\"\n type=\"text\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userName\"\n />\n </div>\n </div>\n\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div\n class=\"form-group\"\n *ngIf=\"!initialPasswordRequired\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"toggleChangePassword()\"\n >\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label\n for=\"config.password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userPassword\"\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n\n <!-- Key-based -->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 3\"\n >\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.keystorePass\"\n translate\n >\n Keystore password\n </label>\n <input\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.keystorePass\"\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.certificatePass\"\n translate\n >\n Certificate password\n </label>\n <input\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.certificatePass\"\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label\n for=\"certificateUpload\"\n translate\n >\n Upload keystore\n </label>\n <input\n class=\"form-control m-b-8\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n name=\"certificateUpload\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [ngModel]=\"fileName\"\n />\n <c8y-drop-area\n [title]=\"'Import keystore with jks file extension' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n\n <div class=\"form-group m-b-0 d-flex a-i-center\">\n <button\n class=\"btn btn-dot collapse-btn\"\n title=\"{{ (advancedSettings ? collapse : expand) | translate }}\"\n [attr.aria-label]=\"(advancedSettings ? collapse : expand) | translate\"\n [attr.aria-expanded]=\"advancedSettings\"\n [ngClass]=\"{ active: advancedSettings }\"\n (click)=\"advancedSettings = !advancedSettings\"\n data-cy=\"opcua-server-config--advanced-settings-toggle\"\n >\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n <label class=\"m-0\">\n <span>{{ 'Advanced settings' | translate }}</span>\n </label>\n </div>\n </div>\n\n <div\n class=\"card-block collapse\"\n [collapse]=\"!advancedSettings\"\n [isAnimated]=\"true\"\n [ngClass]=\"{ 'bg-level-1': advancedSettings }\"\n >\n <formly-form\n [form]=\"advancedSettingsForm\"\n [fields]=\"advancedSettingsFields\"\n [model]=\"model.config\"\n ></formly-form>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"isNew()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid || !advancedSettingsForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "component", type: DeviceStatusComponent, selector: "device-status, c8y-device-status", inputs: ["mo", "size"] }, { kind: "directive", type: DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
2133
2219
|
}
|
|
2134
2220
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServerConfigComponent, decorators: [{
|
|
2135
2221
|
type: Component,
|
|
2136
|
-
args: [{ selector: 'opcua-server-config', standalone: false, template: "<c8y-ui-empty-state\n [icon]=\"'server'\"\n [title]=\"'No server to display.' | translate\"\n [subtitle]=\"'Add or select a server.' | translate\"\n *ngIf=\"!server\"\n></c8y-ui-empty-state>\n\n<form\n class=\"d-contents\"\n #opcuaConfigForm=\"ngForm\"\n *ngIf=\"server\"\n>\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>{{ 'Server name' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"model.name\"\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label\n class=\"fit-w\"\n translate\n >\n Server connection\n </label>\n <button\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n type=\"button\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span\n title=\"{{ 'Enabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '1'\"\n >\n {{ 'Enabled' | translate }}\n </span>\n <span\n title=\"{{ 'Disabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '0'\"\n >\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status\n class=\"p-r-8\"\n [mo]=\"server\"\n ></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label\n for=\"configServerUrl\"\n translate\n >\n Server URL\n </label>\n <input\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n type=\"text\"\n required\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n />\n </c8y-form-group>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label\n for=\"config.securityMode\"\n translate\n >\n Security mode\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n name=\"securityMode\"\n required\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n >\n <option\n *ngFor=\"let mode of securityModes\"\n [ngValue]=\"mode\"\n >\n {{ mode }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode === NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <input\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n />\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode !== NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN_ENC\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign_enc\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"row tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.authenticationMode\"\n translate\n >\n Authentication\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n name=\"authenticationMode\"\n required\n [(ngModel)]=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n >\n <option\n *ngFor=\"let auth of authenticationModes\"\n [ngValue]=\"auth\"\n >\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n <!-- User/Pw-->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 2\"\n >\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.userName\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"config.userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n name=\"userName\"\n type=\"text\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userName\"\n />\n </div>\n </div>\n\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div\n class=\"form-group\"\n *ngIf=\"!initialPasswordRequired\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"toggleChangePassword()\"\n >\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label\n for=\"config.password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userPassword\"\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n\n <!-- Key-based -->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 3\"\n >\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.keystorePass\"\n translate\n >\n Keystore password\n </label>\n <input\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.keystorePass\"\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.certificatePass\"\n translate\n >\n Certificate password\n </label>\n <input\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.certificatePass\"\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label\n for=\"certificateUpload\"\n translate\n >\n Upload keystore\n </label>\n <input\n class=\"form-control m-b-8\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n name=\"certificateUpload\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [ngModel]=\"fileName\"\n />\n <c8y-drop-area\n [title]=\"'Import keystore with jks file extension' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n\n <div class=\"form-group m-b-0 d-flex a-i-center\">\n <button\n class=\"btn btn-dot collapse-btn\"\n title=\"{{ (advancedSettings ? collapse : expand) | translate }}\"\n [attr.aria-label]=\"(advancedSettings ? collapse : expand) | translate\"\n [attr.aria-expanded]=\"advancedSettings\"\n [ngClass]=\"{ active: advancedSettings }\"\n (click)=\"advancedSettings = !advancedSettings\"\n data-cy=\"opcua-server-config--advanced-settings-toggle\"\n >\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n <label class=\"m-0\">\n <span>{{ 'Advanced settings' | translate }}</span>\n </label>\n </div>\n </div>\n\n <div\n class=\"card-block collapse\"\n [collapse]=\"!advancedSettings\"\n [isAnimated]=\"true\"\n [ngClass]=\"{ 'bg-level-1': advancedSettings }\"\n >\n <formly-form\n [form]=\"advancedSettingsForm\"\n [fields]=\"advancedSettingsFields\"\n [model]=\"model.config\"\n ></formly-form>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"isNew()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid || !advancedSettingsForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
|
|
2222
|
+
args: [{ selector: 'opcua-server-config', imports: [
|
|
2223
|
+
NgIf,
|
|
2224
|
+
EmptyStateComponent,
|
|
2225
|
+
FormsModule,
|
|
2226
|
+
IconDirective,
|
|
2227
|
+
FormGroupComponent,
|
|
2228
|
+
RequiredInputPlaceholderDirective,
|
|
2229
|
+
MessagesComponent,
|
|
2230
|
+
MessageDirective,
|
|
2231
|
+
C8yTranslateDirective,
|
|
2232
|
+
ButtonCheckboxDirective,
|
|
2233
|
+
DeviceStatusComponent,
|
|
2234
|
+
DefaultValidationDirective,
|
|
2235
|
+
NgFor,
|
|
2236
|
+
DropAreaComponent,
|
|
2237
|
+
NgClass,
|
|
2238
|
+
CollapseDirective,
|
|
2239
|
+
FormlyModule,
|
|
2240
|
+
C8yTranslatePipe
|
|
2241
|
+
], template: "<c8y-ui-empty-state\n [icon]=\"'server'\"\n [title]=\"'No server to display.' | translate\"\n [subtitle]=\"'Add or select a server.' | translate\"\n *ngIf=\"!server\"\n></c8y-ui-empty-state>\n\n<form\n class=\"d-contents\"\n #opcuaConfigForm=\"ngForm\"\n *ngIf=\"server\"\n>\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>{{ 'Server name' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"model.name\"\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label\n class=\"fit-w\"\n translate\n >\n Server connection\n </label>\n <button\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n type=\"button\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span\n title=\"{{ 'Enabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '1'\"\n >\n {{ 'Enabled' | translate }}\n </span>\n <span\n title=\"{{ 'Disabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '0'\"\n >\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status\n class=\"p-r-8\"\n [mo]=\"server\"\n ></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label\n for=\"configServerUrl\"\n translate\n >\n Server URL\n </label>\n <input\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n type=\"text\"\n required\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n />\n </c8y-form-group>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label\n for=\"config.securityMode\"\n translate\n >\n Security mode\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n name=\"securityMode\"\n required\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n >\n <option\n *ngFor=\"let mode of securityModes\"\n [ngValue]=\"mode\"\n >\n {{ mode }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode === NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <input\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n />\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode !== NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN_ENC\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign_enc\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"row tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.authenticationMode\"\n translate\n >\n Authentication\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n name=\"authenticationMode\"\n required\n [(ngModel)]=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n >\n <option\n *ngFor=\"let auth of authenticationModes\"\n [ngValue]=\"auth\"\n >\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n <!-- User/Pw-->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 2\"\n >\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.userName\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"config.userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n name=\"userName\"\n type=\"text\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userName\"\n />\n </div>\n </div>\n\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div\n class=\"form-group\"\n *ngIf=\"!initialPasswordRequired\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"toggleChangePassword()\"\n >\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label\n for=\"config.password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userPassword\"\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n\n <!-- Key-based -->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 3\"\n >\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.keystorePass\"\n translate\n >\n Keystore password\n </label>\n <input\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.keystorePass\"\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.certificatePass\"\n translate\n >\n Certificate password\n </label>\n <input\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.certificatePass\"\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label\n for=\"certificateUpload\"\n translate\n >\n Upload keystore\n </label>\n <input\n class=\"form-control m-b-8\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n name=\"certificateUpload\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [ngModel]=\"fileName\"\n />\n <c8y-drop-area\n [title]=\"'Import keystore with jks file extension' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n\n <div class=\"form-group m-b-0 d-flex a-i-center\">\n <button\n class=\"btn btn-dot collapse-btn\"\n title=\"{{ (advancedSettings ? collapse : expand) | translate }}\"\n [attr.aria-label]=\"(advancedSettings ? collapse : expand) | translate\"\n [attr.aria-expanded]=\"advancedSettings\"\n [ngClass]=\"{ active: advancedSettings }\"\n (click)=\"advancedSettings = !advancedSettings\"\n data-cy=\"opcua-server-config--advanced-settings-toggle\"\n >\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n <label class=\"m-0\">\n <span>{{ 'Advanced settings' | translate }}</span>\n </label>\n </div>\n </div>\n\n <div\n class=\"card-block collapse\"\n [collapse]=\"!advancedSettings\"\n [isAnimated]=\"true\"\n [ngClass]=\"{ 'bg-level-1': advancedSettings }\"\n >\n <formly-form\n [form]=\"advancedSettingsForm\"\n [fields]=\"advancedSettingsFields\"\n [model]=\"model.config\"\n ></formly-form>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"isNew()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid || !advancedSettingsForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
|
|
2137
2242
|
}], ctorParameters: () => [{ type: OpcuaService }, { type: i2$1.ModalService }, { type: i2$1.AlertService }, { type: i0.ChangeDetectorRef }], propDecorators: { opcuaConfigForm: [{
|
|
2138
2243
|
type: ViewChild,
|
|
2139
2244
|
args: ['opcuaConfigForm', { static: false }]
|
|
@@ -2162,11 +2267,19 @@ class OpcuaServerListComponent {
|
|
|
2162
2267
|
this.present.emit(server);
|
|
2163
2268
|
}
|
|
2164
2269
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServerListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2165
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServerListComponent, isStandalone:
|
|
2270
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServerListComponent, isStandalone: true, selector: "opcua-server-list", inputs: { serverList: "serverList" }, outputs: { present: "present" }, ngImport: i0, template: "<!-- add active class to c8y-stacked-item when clicked -->\n<div class=\"card-block\" *ngIf=\"serverList.length === 0\">\n <c8y-ui-empty-state\n class=\"m-l-auto p-l-8 d-flex p-r-16\"\n [icon]=\"'server'\"\n [title]=\"'No servers found.' | translate\"\n [subtitle]=\"'Click below to add a new server.' | translate\"\n ></c8y-ui-empty-state>\n</div>\n<div\n class=\"c8y-stacked-item\"\n [class.active]=\"server.active\"\n *ngFor=\"let server of serverList\"\n (click)=\"presentConfig(server)\"\n>\n <i [c8yIcon]=\"'server'\" class=\"icon-20\"></i>\n <div class=\"p-l-16 text-truncate\">\n <p id=\"serverName\" class=\"text-truncate\">{{ server.name }}</p>\n <small id=\"serverUrl\" class=\"text-truncate text-muted\">{{ server.config.serverUrl }}</small>\n </div>\n <div class=\"m-l-auto p-l-8 d-flex p-r-16 a-i-center\">\n <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n <button\n class=\"btn btn-dot text-gray-darker\"\n type=\"button\"\n [attr.aria-label]=\"server.quickInfo.padlockMsg | translate\"\n tooltip=\"{{ server.quickInfo.padlockMsg | translate }}\"\n placement=\"left\"\n container=\"body\"\n >\n <i [c8yIcon]=\"server.quickInfo.padlock\"></i>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: DeviceStatusComponent, selector: "device-status, c8y-device-status", inputs: ["mo", "size"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
2166
2271
|
}
|
|
2167
2272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServerListComponent, decorators: [{
|
|
2168
2273
|
type: Component,
|
|
2169
|
-
args: [{ selector: 'opcua-server-list',
|
|
2274
|
+
args: [{ selector: 'opcua-server-list', imports: [
|
|
2275
|
+
NgIf,
|
|
2276
|
+
EmptyStateComponent,
|
|
2277
|
+
NgFor,
|
|
2278
|
+
IconDirective,
|
|
2279
|
+
DeviceStatusComponent,
|
|
2280
|
+
TooltipDirective,
|
|
2281
|
+
C8yTranslatePipe
|
|
2282
|
+
], template: "<!-- add active class to c8y-stacked-item when clicked -->\n<div class=\"card-block\" *ngIf=\"serverList.length === 0\">\n <c8y-ui-empty-state\n class=\"m-l-auto p-l-8 d-flex p-r-16\"\n [icon]=\"'server'\"\n [title]=\"'No servers found.' | translate\"\n [subtitle]=\"'Click below to add a new server.' | translate\"\n ></c8y-ui-empty-state>\n</div>\n<div\n class=\"c8y-stacked-item\"\n [class.active]=\"server.active\"\n *ngFor=\"let server of serverList\"\n (click)=\"presentConfig(server)\"\n>\n <i [c8yIcon]=\"'server'\" class=\"icon-20\"></i>\n <div class=\"p-l-16 text-truncate\">\n <p id=\"serverName\" class=\"text-truncate\">{{ server.name }}</p>\n <small id=\"serverUrl\" class=\"text-truncate text-muted\">{{ server.config.serverUrl }}</small>\n </div>\n <div class=\"m-l-auto p-l-8 d-flex p-r-16 a-i-center\">\n <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n <button\n class=\"btn btn-dot text-gray-darker\"\n type=\"button\"\n [attr.aria-label]=\"server.quickInfo.padlockMsg | translate\"\n tooltip=\"{{ server.quickInfo.padlockMsg | translate }}\"\n placement=\"left\"\n container=\"body\"\n >\n <i [c8yIcon]=\"server.quickInfo.padlock\"></i>\n </button>\n </div>\n</div>\n" }]
|
|
2170
2283
|
}], propDecorators: { serverList: [{
|
|
2171
2284
|
type: Input
|
|
2172
2285
|
}], present: [{
|
|
@@ -2375,11 +2488,18 @@ class OpcuaServersComponent {
|
|
|
2375
2488
|
}
|
|
2376
2489
|
}
|
|
2377
2490
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServersComponent, deps: [{ token: OpcuaService }, { token: i2$1.AlertService }, { token: i3.TranslateService }, { token: i2$1.ContextRouteComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2378
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServersComponent, isStandalone:
|
|
2491
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServersComponent, isStandalone: true, selector: "opcua-servers", ngImport: i0, template: "<div class=\"card content-fullpage split-view--5-7\">\n <div class=\"card-header grid__col--fullspan separator\">\n <div class=\"h4 card-title\">OPC UA servers</div>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Below you can configure one or more OPC UA servers. The OPC UA agent will connect to these servers if they are enabled and the connection state is set to connected.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"c8y-nav-stacked\">\n <opcua-server-list\n [serverList]=\"serverObjectList\"\n (present)=\"onPresent($event)\"\n ></opcua-server-list>\n </div>\n </div>\n <div class=\"card-footer separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add server' | translate }}\"\n type=\"button\"\n [disabled]=\"localServerObjectExist()\"\n (click)=\"addServer()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add server' | translate }}\n </button>\n </div>\n </div>\n\n <opcua-server-config\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': server }\"\n (canceled)=\"onCanceled($event)\"\n (removed)=\"onRemoved($event)\"\n (saved)=\"onSaved($event)\"\n (updated)=\"onUpdated($event)\"\n [server]=\"server\"\n ></opcua-server-config>\n</div>\n", dependencies: [{ kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: OpcuaServerListComponent, selector: "opcua-server-list", inputs: ["serverList"], outputs: ["present"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: OpcuaServerConfigComponent, selector: "opcua-server-config", inputs: ["server"], outputs: ["canceled", "removed", "saved", "updated"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
2379
2492
|
}
|
|
2380
2493
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServersComponent, decorators: [{
|
|
2381
2494
|
type: Component,
|
|
2382
|
-
args: [{ selector: 'opcua-servers',
|
|
2495
|
+
args: [{ selector: 'opcua-servers', imports: [
|
|
2496
|
+
PopoverDirective,
|
|
2497
|
+
OpcuaServerListComponent,
|
|
2498
|
+
IconDirective,
|
|
2499
|
+
OpcuaServerConfigComponent,
|
|
2500
|
+
NgClass,
|
|
2501
|
+
C8yTranslatePipe
|
|
2502
|
+
], template: "<div class=\"card content-fullpage split-view--5-7\">\n <div class=\"card-header grid__col--fullspan separator\">\n <div class=\"h4 card-title\">OPC UA servers</div>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Below you can configure one or more OPC UA servers. The OPC UA agent will connect to these servers if they are enabled and the connection state is set to connected.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"c8y-nav-stacked\">\n <opcua-server-list\n [serverList]=\"serverObjectList\"\n (present)=\"onPresent($event)\"\n ></opcua-server-list>\n </div>\n </div>\n <div class=\"card-footer separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add server' | translate }}\"\n type=\"button\"\n [disabled]=\"localServerObjectExist()\"\n (click)=\"addServer()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add server' | translate }}\n </button>\n </div>\n </div>\n\n <opcua-server-config\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': server }\"\n (canceled)=\"onCanceled($event)\"\n (removed)=\"onRemoved($event)\"\n (saved)=\"onSaved($event)\"\n (updated)=\"onUpdated($event)\"\n [server]=\"server\"\n ></opcua-server-config>\n</div>\n" }]
|
|
2383
2503
|
}], ctorParameters: () => [{ type: OpcuaService }, { type: i2$1.AlertService }, { type: i3.TranslateService }, { type: i2$1.ContextRouteComponent, decorators: [{
|
|
2384
2504
|
type: Optional
|
|
2385
2505
|
}] }] });
|
|
@@ -2410,7 +2530,16 @@ const deviceProtocolRoutes = [
|
|
|
2410
2530
|
];
|
|
2411
2531
|
class OpcuaProtocolModule {
|
|
2412
2532
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
2413
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule,
|
|
2533
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule, imports: [CoreModule,
|
|
2534
|
+
FormsModule$1,
|
|
2535
|
+
ReactiveFormsModule,
|
|
2536
|
+
DropAreaModule,
|
|
2537
|
+
ButtonsModule,
|
|
2538
|
+
CdkTreeModule, i2.RouterModule, i2$3.TooltipModule, i3$1.PopoverModule, DeviceStatusModule,
|
|
2539
|
+
OperationDetailsModule,
|
|
2540
|
+
BrowserAnimationsModule, i4$1.CollapseModule, i5.BsDropdownModule, ObjectMappingComponent,
|
|
2541
|
+
DynamicFormsModule,
|
|
2542
|
+
OpcuaServersComponent,
|
|
2414
2543
|
OpcuaServerListComponent,
|
|
2415
2544
|
OpcuaServerConfigComponent,
|
|
2416
2545
|
OpcuaAddressSpaceComponent,
|
|
@@ -2422,15 +2551,7 @@ class OpcuaProtocolModule {
|
|
|
2422
2551
|
OpcuaDeviceProtocolMapping,
|
|
2423
2552
|
OpcuaDeviceProtocolObjectMappingStatus,
|
|
2424
2553
|
OpcuaAutoApplySettingsComponent,
|
|
2425
|
-
OpcuaDeviceProtocolBrowsePathValidation]
|
|
2426
|
-
FormsModule,
|
|
2427
|
-
ReactiveFormsModule,
|
|
2428
|
-
DropAreaModule,
|
|
2429
|
-
ButtonsModule,
|
|
2430
|
-
CdkTreeModule, i2$2.RouterModule, i5$1.TooltipModule, i5$3.PopoverModule, DeviceStatusModule,
|
|
2431
|
-
OperationDetailsModule,
|
|
2432
|
-
BrowserAnimationsModule, i4$1.CollapseModule, i7$1.BsDropdownModule, ObjectMappingComponent,
|
|
2433
|
-
DynamicFormsModule] }); }
|
|
2554
|
+
OpcuaDeviceProtocolBrowsePathValidation] }); }
|
|
2434
2555
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule, providers: [
|
|
2435
2556
|
OpcuaAgentGuard,
|
|
2436
2557
|
OpcuaServerGuard,
|
|
@@ -2439,7 +2560,7 @@ class OpcuaProtocolModule {
|
|
|
2439
2560
|
AddressSpaceService,
|
|
2440
2561
|
hookRoute(opcuaRoutes)
|
|
2441
2562
|
], imports: [CoreModule,
|
|
2442
|
-
FormsModule,
|
|
2563
|
+
FormsModule$1,
|
|
2443
2564
|
ReactiveFormsModule,
|
|
2444
2565
|
DropAreaModule,
|
|
2445
2566
|
ButtonsModule,
|
|
@@ -2453,29 +2574,24 @@ class OpcuaProtocolModule {
|
|
|
2453
2574
|
CollapseModule.forRoot(),
|
|
2454
2575
|
BsDropdownModule.forRoot(),
|
|
2455
2576
|
ObjectMappingComponent,
|
|
2456
|
-
DynamicFormsModule
|
|
2577
|
+
DynamicFormsModule,
|
|
2578
|
+
OpcuaServersComponent,
|
|
2579
|
+
OpcuaServerListComponent,
|
|
2580
|
+
OpcuaServerConfigComponent,
|
|
2581
|
+
OpcuaAddressSpaceComponent,
|
|
2582
|
+
OpcuaAddressSpaceTreeComponent,
|
|
2583
|
+
OpcuaDeviceProtocolDescription,
|
|
2584
|
+
OpcuaDeviceProtocolDetailComponent,
|
|
2585
|
+
OpcuaDeviceProtocolDataReportingComponent,
|
|
2586
|
+
OpcuaDeviceProtocolMapping,
|
|
2587
|
+
OpcuaAutoApplySettingsComponent] }); }
|
|
2457
2588
|
}
|
|
2458
2589
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule, decorators: [{
|
|
2459
2590
|
type: NgModule,
|
|
2460
2591
|
args: [{
|
|
2461
|
-
declarations: [
|
|
2462
|
-
OpcuaServersComponent,
|
|
2463
|
-
OpcuaServerListComponent,
|
|
2464
|
-
OpcuaServerConfigComponent,
|
|
2465
|
-
OpcuaAddressSpaceComponent,
|
|
2466
|
-
OpcuaAddressSpaceTreeComponent,
|
|
2467
|
-
OpcuaAddressSpaceDetailComponent,
|
|
2468
|
-
OpcuaDeviceProtocolDescription,
|
|
2469
|
-
OpcuaDeviceProtocolDetailComponent,
|
|
2470
|
-
OpcuaDeviceProtocolDataReportingComponent,
|
|
2471
|
-
OpcuaDeviceProtocolMapping,
|
|
2472
|
-
OpcuaDeviceProtocolObjectMappingStatus,
|
|
2473
|
-
OpcuaAutoApplySettingsComponent,
|
|
2474
|
-
OpcuaDeviceProtocolBrowsePathValidation
|
|
2475
|
-
],
|
|
2476
2592
|
imports: [
|
|
2477
2593
|
CoreModule,
|
|
2478
|
-
FormsModule,
|
|
2594
|
+
FormsModule$1,
|
|
2479
2595
|
ReactiveFormsModule,
|
|
2480
2596
|
DropAreaModule,
|
|
2481
2597
|
ButtonsModule,
|
|
@@ -2489,7 +2605,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
2489
2605
|
CollapseModule.forRoot(),
|
|
2490
2606
|
BsDropdownModule.forRoot(),
|
|
2491
2607
|
ObjectMappingComponent,
|
|
2492
|
-
DynamicFormsModule
|
|
2608
|
+
DynamicFormsModule,
|
|
2609
|
+
OpcuaServersComponent,
|
|
2610
|
+
OpcuaServerListComponent,
|
|
2611
|
+
OpcuaServerConfigComponent,
|
|
2612
|
+
OpcuaAddressSpaceComponent,
|
|
2613
|
+
OpcuaAddressSpaceTreeComponent,
|
|
2614
|
+
OpcuaAddressSpaceDetailComponent,
|
|
2615
|
+
OpcuaDeviceProtocolDescription,
|
|
2616
|
+
OpcuaDeviceProtocolDetailComponent,
|
|
2617
|
+
OpcuaDeviceProtocolDataReportingComponent,
|
|
2618
|
+
OpcuaDeviceProtocolMapping,
|
|
2619
|
+
OpcuaDeviceProtocolObjectMappingStatus,
|
|
2620
|
+
OpcuaAutoApplySettingsComponent,
|
|
2621
|
+
OpcuaDeviceProtocolBrowsePathValidation
|
|
2493
2622
|
],
|
|
2494
2623
|
providers: [
|
|
2495
2624
|
OpcuaAgentGuard,
|