@c8y/ngx-components 1023.14.174 → 1023.14.175
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-advanced-software-management.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +9 -9
- package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +12 -12
- package/fesm2022/c8y-ngx-components-ai.mjs +3 -3
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +34 -34
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +4 -4
- package/fesm2022/c8y-ngx-components-alarms.mjs +76 -76
- package/fesm2022/c8y-ngx-components-api.mjs +7 -7
- package/fesm2022/c8y-ngx-components-app-logs.mjs +10 -10
- package/fesm2022/c8y-ngx-components-asset-properties.mjs +39 -39
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-f-_aEo66.mjs → c8y-ngx-components-asset-property-grid.component-BZ3PAyuR.mjs} +13 -13
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-f-_aEo66.mjs.map → c8y-ngx-components-asset-property-grid.component-BZ3PAyuR.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +32 -32
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +120 -120
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs +7 -7
- package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -13
- package/fesm2022/c8y-ngx-components-branding-base-branding.mjs +4 -4
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs +3 -3
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +17 -17
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +6 -6
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +36 -36
- package/fesm2022/c8y-ngx-components-branding-shared.mjs +13 -13
- package/fesm2022/c8y-ngx-components-child-devices.mjs +13 -13
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs +40 -40
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-LHAUigva.mjs → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-GG2zPxo7.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-LHAUigva.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-GG2zPxo7.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-LtP3NmEZ.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B5jQE945.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-LtP3NmEZ.mjs.map → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B5jQE945.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-DVCbhO9J.mjs → c8y-ngx-components-computed-asset-properties-event-count-config.component-CoxLRePT.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-DVCbhO9J.mjs.map → c8y-ngx-components-computed-asset-properties-event-count-config.component-CoxLRePT.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-B2arQ9BP.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-Cp2nq21L.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-B2arQ9BP.mjs.map → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-Cp2nq21L.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +6 -6
- package/fesm2022/c8y-ngx-components-connectivity.mjs +53 -53
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs +7 -7
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +11 -11
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-JMTpQkY3.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-Cbimsi_L.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-JMTpQkY3.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-Cbimsi_L.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-CIOgylW-.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DatFnIwp.mjs} +10 -10
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-CIOgylW-.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DatFnIwp.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-1xx4pGiq.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-Cqy2OUcS.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-1xx4pGiq.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-Cqy2OUcS.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +7 -7
- package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +3 -3
- package/fesm2022/c8y-ngx-components-context-dashboard-state.mjs +3 -3
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +102 -102
- package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-DoXvIpvX.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CiiQzFm8.mjs} +16 -16
- package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-DoXvIpvX.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CiiQzFm8.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +12 -12
- package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs +6 -6
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +22 -22
- package/fesm2022/c8y-ngx-components-data-broker.mjs +7 -7
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +3 -3
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +24 -24
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +13 -13
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs +4 -4
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +40 -40
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +33 -33
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +16 -16
- package/fesm2022/c8y-ngx-components-device-enrolment-modal.mjs +9 -9
- package/fesm2022/c8y-ngx-components-device-enrolment.mjs +6 -6
- package/fesm2022/c8y-ngx-components-device-grid.mjs +43 -43
- package/fesm2022/c8y-ngx-components-device-list.mjs +22 -22
- package/fesm2022/c8y-ngx-components-device-map.mjs +12 -12
- package/fesm2022/c8y-ngx-components-device-profile.mjs +34 -34
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -3
- package/fesm2022/c8y-ngx-components-device-protocols.mjs +16 -16
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +13 -13
- package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -31
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +13 -13
- package/fesm2022/c8y-ngx-components-echart.mjs +30 -30
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +43 -43
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +10 -10
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +46 -46
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +82 -82
- package/fesm2022/c8y-ngx-components-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +3 -3
- package/fesm2022/c8y-ngx-components-events.mjs +3 -3
- package/fesm2022/c8y-ngx-components-exports-list.mjs +6 -6
- package/fesm2022/c8y-ngx-components-file-preview.mjs +7 -7
- package/fesm2022/c8y-ngx-components-files-repository.mjs +19 -19
- package/fesm2022/c8y-ngx-components-global-context.mjs +130 -130
- package/fesm2022/c8y-ngx-components-icon-selector.mjs +19 -19
- package/fesm2022/c8y-ngx-components-interval-picker.mjs +3 -3
- package/fesm2022/c8y-ngx-components-location.mjs +28 -28
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-map.mjs +19 -19
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +55 -55
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +19 -19
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-shared.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations.mjs +7 -7
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +7 -7
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs +10 -10
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +38 -38
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +58 -58
- package/fesm2022/c8y-ngx-components-register-device.mjs +58 -58
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +9 -9
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +3 -3
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +6 -6
- package/fesm2022/c8y-ngx-components-replace-device.mjs +10 -10
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +16 -16
- package/fesm2022/c8y-ngx-components-reports.mjs +19 -19
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +48 -48
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +33 -33
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +34 -34
- package/fesm2022/c8y-ngx-components-repository-software.mjs +42 -42
- package/fesm2022/c8y-ngx-components-repository.mjs +4 -4
- package/fesm2022/c8y-ngx-components-search.mjs +19 -19
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +6 -6
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs +7 -7
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +3 -3
- package/fesm2022/c8y-ngx-components-services-shared.mjs +3 -3
- package/fesm2022/c8y-ngx-components-services.mjs +29 -29
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs +7 -7
- package/fesm2022/c8y-ngx-components-static-assets-data.mjs +6 -8
- package/fesm2022/c8y-ngx-components-static-assets-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +9 -9
- package/fesm2022/c8y-ngx-components-static-assets.mjs +6 -6
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +60 -60
- package/fesm2022/c8y-ngx-components-tenants.mjs +40 -40
- package/fesm2022/c8y-ngx-components-time-context.mjs +6 -6
- package/fesm2022/c8y-ngx-components-tracking.mjs +12 -12
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +4 -5
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +12 -12
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +33 -33
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +4 -4
- package/fesm2022/c8y-ngx-components-upgrade.mjs +41 -41
- package/fesm2022/c8y-ngx-components-user-roles.mjs +10 -10
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +19 -19
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +27 -27
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +10 -10
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +24 -24
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +9 -9
- package/fesm2022/c8y-ngx-components.mjs +1338 -1338
- package/package.json +1 -1
- package/static-assets/data/index.d.ts.map +1 -1
- package/translation-editor/data/index.d.ts.map +1 -1
|
@@ -95,10 +95,10 @@ class TrackingService {
|
|
|
95
95
|
compareEvents(a, b) {
|
|
96
96
|
return Date.parse(a?.time) - Date.parse(b?.time);
|
|
97
97
|
}
|
|
98
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
99
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
98
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingService, deps: [{ token: i1.EventService }, { token: i2.GeoService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
99
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingService, providedIn: 'root' }); }
|
|
100
100
|
}
|
|
101
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingService, decorators: [{
|
|
102
102
|
type: Injectable,
|
|
103
103
|
args: [{
|
|
104
104
|
providedIn: 'root'
|
|
@@ -123,10 +123,10 @@ class TrackingMarkerPopupComponent {
|
|
|
123
123
|
this.date = this.context.time;
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
127
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
126
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingMarkerPopupComponent, deps: [{ token: TrackingService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
127
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TrackingMarkerPopupComponent, isStandalone: true, selector: "c8y-tracking-marker-popup", inputs: { context: "context", showTrackingLink: "showTrackingLink" }, ngImport: i0, template: "<div class=\"map-marker\">\n @if (isDevice) {\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n }\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <div class=\"text-muted\">\n <p class=\"m-b-0\">{{ context?.c8y_Position?.lat }},</p>\n <p class=\"m-t-0\">{{ context?.c8y_Position?.lng }}</p>\n </div>\n @if (!!context?.c8y_Position?.alt || context?.c8y_Position?.alt === 0) {\n <p class=\"m-0\">{{ 'Altitude:' | translate }}</p>\n <div class=\"text-muted\">\n <p\n class=\"m-b-0\"\n [translate]=\"'{{alt}} m`meters, altitude`'\"\n [translateParams]=\"{ alt: context?.c8y_Position?.alt }\"\n ></p>\n </div>\n }\n @if (!!date) {\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n }\n </div>\n\n @if (isDevice) {\n @if (showTrackingLink) {\n <span>\n Go to\n <a [routerLink]=\"['/device', context?.id, 'tracking']\">Tracking</a>\n </span>\n } @else {\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n }\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }] }); }
|
|
128
128
|
}
|
|
129
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingMarkerPopupComponent, decorators: [{
|
|
130
130
|
type: Component,
|
|
131
131
|
args: [{ standalone: true, selector: 'c8y-tracking-marker-popup', imports: [CoreModule, RouterModule, FormsModule], template: "<div class=\"map-marker\">\n @if (isDevice) {\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n }\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <div class=\"text-muted\">\n <p class=\"m-b-0\">{{ context?.c8y_Position?.lat }},</p>\n <p class=\"m-t-0\">{{ context?.c8y_Position?.lng }}</p>\n </div>\n @if (!!context?.c8y_Position?.alt || context?.c8y_Position?.alt === 0) {\n <p class=\"m-0\">{{ 'Altitude:' | translate }}</p>\n <div class=\"text-muted\">\n <p\n class=\"m-b-0\"\n [translate]=\"'{{alt}} m`meters, altitude`'\"\n [translateParams]=\"{ alt: context?.c8y_Position?.alt }\"\n ></p>\n </div>\n }\n @if (!!date) {\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n }\n </div>\n\n @if (isDevice) {\n @if (showTrackingLink) {\n <span>\n Go to\n <a [routerLink]=\"['/device', context?.id, 'tracking']\">Tracking</a>\n </span>\n } @else {\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n }\n }\n</div>\n" }]
|
|
132
132
|
}], ctorParameters: () => [{ type: TrackingService }], propDecorators: { context: [{
|
|
@@ -145,10 +145,10 @@ class TrackingTabFactory {
|
|
|
145
145
|
return (contextData?.context === ViewContext.Device &&
|
|
146
146
|
!isEmpty(this.geoService.getLatLong(contextData?.contextData)));
|
|
147
147
|
}
|
|
148
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
149
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
148
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingTabFactory, deps: [{ token: i2.ContextRouteService }, { token: i2.GeoService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
149
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingTabFactory, providedIn: 'root' }); }
|
|
150
150
|
}
|
|
151
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingTabFactory, decorators: [{
|
|
152
152
|
type: Injectable,
|
|
153
153
|
args: [{
|
|
154
154
|
providedIn: 'root'
|
|
@@ -212,10 +212,10 @@ class TrackingComponent {
|
|
|
212
212
|
this.realtime.stop();
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
216
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
215
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingComponent, deps: [{ token: TrackingService }, { token: i2.EventRealtimeService }, { token: i2.ContextRouteService }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
216
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TrackingComponent, isStandalone: true, selector: "c8y-tracking", providers: [EventRealtimeService], viewQueries: [{ propertyName: "map", first: true, predicate: MapComponent, descendants: true }], ngImport: i0, template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"100\"\n>\n <c8y-realtime-btn\n [service]=\"realtime\"\n [disabled]=\"realtimeDisabled\"\n (onToggle)=\"togglePositionRealtime($event)\"\n ></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"60\"\n>\n <c8y-time-interval\n [maxCustomDate]=\"maxDate\"\n [dateRangePickerConfig]=\"dateRangePickerConfig\"\n (interval)=\"service.setInterval($event); toggleRealtime($event)\"\n ></c8y-time-interval>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid content-fullpage d-grid grid__col--8-4--md\">\n <div\n class=\"bg-white p-relative\"\n style=\"min-height: 30vh\"\n >\n <c8y-map\n [config]=\"config\"\n [assets]=\"device\"\n [polyline$]=\"service.polyline$\"\n [polylineOptions]=\"{ color: 'darkblue' }\"\n >\n <div *c8yMapPopup=\"let context\">\n <c8y-tracking-marker-popup [context]=\"context\"></c8y-tracking-marker-popup>\n </div>\n </c8y-map>\n </div>\n\n <div class=\"d-flex d-col bg-inherit content-fullpage bg-gray-white\">\n <div class=\"card-header large-padding separator sticky-top\">\n <span\n class=\"card-title\"\n translate\n >\n Tracking events\n </span>\n </div>\n <div class=\"inner-scroll\">\n <c8y-list-group class=\"c8y-list__group--strip\">\n <ng-template\n c8yFor\n let-event\n [c8yForOf]=\"service.events$\"\n [c8yForPipe]=\"service.pipe\"\n [c8yForRealtime]=\"realtime\"\n [c8yForRealtimeOptions]=\"{ entityOrId: device }\"\n [c8yForLoadMore]=\"'hidden'\"\n [c8yForNotFound]=\"empty\"\n (c8yForLoadMoreComponent)=\"\n loadMoreComponent = $event; loadMoreComponent.useIntersection = false\n \"\n >\n <c8y-li\n class=\"pointer\"\n [ngClass]=\"{ 'text-primary text-bold': activeMarkers['p' + event?.id] }\"\n (click)=\"toggleMarker(event)\"\n [attr.data-cy]=\"'c8y-tracking--tracking-event-item-' + event?.id\"\n >\n <c8y-li-icon [ngClass]=\"{ 'text-primary': activeMarkers['p' + event?.id] }\">\n <i c8yIcon=\"c8y-location\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex\">\n <span>\n {{ event.time | date: 'mediumDate' }}\n </span>\n <span class=\"m-l-auto\">\n {{ event.time | date: 'mediumTime' }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </ng-template>\n </c8y-list-group>\n </div>\n\n <!-- empty state -->\n <ng-template #empty>\n @if (!service.hasEvents) {\n <c8y-ui-empty-state\n icon=\"c8y-location\"\n [title]=\"'No tracking events found.' | translate\"\n [subtitle]=\"'Select another time range.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n </ng-template>\n\n @if (loadMoreComponent?.hasMore) {\n <div>\n <button\n class=\"btn btn-link fit-w sticky-bottom separator-top\"\n [title]=\"'Load more' | translate\"\n type=\"button\"\n [disabled]=\"loadMoreComponent?.isLoading\"\n (click)=\"loadMoreComponent.loadMore()\"\n data-cy=\"c8y-tracking--load-more\"\n >\n {{ 'Load more' | translate }}\n </button>\n </div>\n }\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n [title]=\"'Deselect all markers' | translate\"\n type=\"button\"\n [disabled]=\"(activeMarkers | json) === '{}'\"\n (click)=\"map.clearMarkers('event'); activeMarkers = {}\"\n >\n {{ 'Deselect all markers' | translate }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MapModule }, { kind: "component", type: i4.MapComponent, selector: "c8y-map", inputs: ["config", "assets", "polyline$", "polylineOptions"], outputs: ["onRealtimeUpdate", "onMove", "onMoveEnd", "onZoomStart", "onZoomEnd", "onMap", "onInit"] }, { kind: "directive", type: i4.MapPopupDirective, selector: "[c8yMapPopup]" }, { kind: "ngmodule", type: ActionBarModule }, { kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title", "disabled"], outputs: ["onToggle"] }, { kind: "component", type: i2.TimeIntervalComponent, selector: "c8y-time-interval", inputs: ["minCustomDate", "maxCustomDate", "dateRangePickerConfig", "selectedInterval"], outputs: ["interval"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: TrackingMarkerPopupComponent, selector: "c8y-tracking-marker-popup", inputs: ["context", "showTrackingLink"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i5.DatePipe, name: "date" }] }); }
|
|
217
217
|
}
|
|
218
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
218
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TrackingComponent, decorators: [{
|
|
219
219
|
type: Component,
|
|
220
220
|
args: [{ standalone: true, imports: [
|
|
221
221
|
MapModule,
|
|
@@ -159,18 +159,17 @@ class TranslationStoreService {
|
|
|
159
159
|
return this.getFileFromPath(`/apps/public/${this.translationAppContextPath}/${file}`);
|
|
160
160
|
}
|
|
161
161
|
async getFileFromPath(path) {
|
|
162
|
-
const finalPath = `${path}?nocache=${Date.now()}`;
|
|
163
162
|
// using fetch client instead of fetch directly here to ensure loading indicator is shown during these requests
|
|
164
|
-
const response = await this.fetchClient.fetch(
|
|
163
|
+
const response = await this.fetchClient.fetch(path, { cache: 'no-cache' });
|
|
165
164
|
if (response.status !== 200) {
|
|
166
165
|
throw new Error(`Failed to fetch file from ${path}`);
|
|
167
166
|
}
|
|
168
167
|
return response.json();
|
|
169
168
|
}
|
|
170
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
171
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
169
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationStoreService, deps: [{ token: i1.ApplicationService }, { token: i2.AppStateService }, { token: i2.ZipService }, { token: i1.FetchClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
170
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationStoreService, providedIn: 'root' }); }
|
|
172
171
|
}
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
172
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationStoreService, decorators: [{
|
|
174
173
|
type: Injectable,
|
|
175
174
|
args: [{
|
|
176
175
|
providedIn: 'root'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-translation-editor-data.mjs","sources":["../../translation-editor/data/translation-store.service.ts","../../translation-editor/data/c8y-ngx-components-translation-editor-data.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n ApplicationAvailability,\n ApplicationService,\n ApplicationType,\n FetchClient,\n IApplication\n} from '@c8y/client';\nimport { AppStateService, ZipService } from '@c8y/ngx-components';\nimport { uniq } from 'lodash-es';\n\nexport interface TranslationLocale {\n label: string;\n locale: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationStoreService {\n protected readonly translationAppName = 'User defined translations';\n protected readonly translationAppContextPath = 'user-defined-translations';\n\n constructor(\n private appService: ApplicationService,\n private appState: AppStateService,\n private zip: ZipService,\n private fetchClient: FetchClient\n ) {}\n\n /**\n * Retrieves a list of available translations for the given locales from all the hosted apps available on the tenant.\n */\n async getAvailableTranslations(locales: string[]) {\n const { data: hostedApps } = await this.appService.list({\n tenant: this.appState.currentTenant.value.name,\n type: 'HOSTED',\n pageSize: 2000\n });\n\n const uniqueContextPaths = uniq(\n hostedApps\n .filter(app => app.contextPath && app.manifest?.webSdkVersion)\n .map(app => app.contextPath)\n );\n\n const translations: { [key: string]: { [locale: string]: string } } = {};\n for (const contextPath of uniqueContextPaths) {\n for (const locale of locales) {\n try {\n const translationsForLanguageAndApp = await this.getFileFromPath(\n `/apps/${contextPath}/${locale}.json`\n );\n const translationsForLang = translationsForLanguageAndApp[locale];\n for (const key of Object.keys(translationsForLang)) {\n if (!translations[key]) {\n translations[key] = {};\n }\n translations[key][locale] = translationsForLang[key];\n }\n } catch (e) {\n continue;\n }\n }\n }\n\n return translations;\n }\n\n /**\n * Retrieves the translations for the given locale from the translation app.\n */\n async getTranslationsForLocale<T extends string>(locale: T): Promise<{ [key: string]: string }> {\n try {\n const translations = await this.getFileFromTranslationApp(`${locale}.json`);\n if (translations[locale]) {\n return translations[locale];\n }\n } catch (e) {\n // do nothing.\n }\n return {};\n }\n\n /**\n * Retrieves the translations for the given locales from the translation app.\n */\n async loadTranslationsForLocales(locales: string[]): Promise<{\n [key: string]: {\n [key: string]: string;\n };\n }> {\n const translations: {\n [key: string]: { [key: string]: string };\n } = {};\n\n const loadAndAddLocale = async (locale: string) => {\n translations[locale] = await this.getTranslationsForLocale(locale);\n };\n\n await Promise.all(locales.map(loadAndAddLocale));\n\n return translations;\n }\n\n /**\n * Retrieves a combined list of translations for all the provided locales.\n * The locales are combined into a single object per key and an array of these objects is returned.\n */\n async getCombinedListOfTranslationsForPerKey(\n locales: string[]\n ): Promise<{ key: string; [locale: string]: string }[]> {\n const translations = await this.loadTranslationsForLocales(locales);\n const translationMap: { [key: string]: { [locale: string]: string } } = {};\n\n for (const locale of Object.keys(translations)) {\n for (const key of Object.keys(translations[locale])) {\n let translationsForKey = translationMap[key];\n if (!translationsForKey) {\n translationsForKey = {};\n translationMap[key] = translationsForKey;\n }\n\n translationsForKey[locale] = translations[locale][key];\n }\n }\n\n const keys = Object.keys(translationMap).sort((a, b) => a.localeCompare(b));\n\n return keys.map(key => Object.assign({ key }, translationMap[key]));\n }\n\n /**\n * Updates the files of the translation application with the provided translations.\n */\n async updateTranslations(\n translations: { key: string; [locale: string]: string }[]\n ): Promise<void> {\n const filesToUpload = new Array<{ path: string; contents: File }>();\n const translationsPerLocale: { [locale: string]: { [key: string]: string } } = {};\n for (const entry of translations) {\n const key = entry.key;\n for (const locale of Object.keys(entry)) {\n if (locale === 'key') {\n continue;\n }\n if (!translationsPerLocale[locale]) {\n translationsPerLocale[locale] = {};\n }\n\n if (entry[locale]) {\n translationsPerLocale[locale][key] = entry[locale];\n }\n }\n }\n\n const langs = this.appState.state.langs as string[];\n\n for (const locale of langs) {\n const fileName = `${locale}.json`;\n filesToUpload.push({\n path: fileName,\n contents: new File(\n [JSON.stringify({ [locale]: translationsPerLocale[locale] || {} })],\n fileName\n )\n });\n }\n const app = await this.getOrCreateTranslationApp();\n await this.appService.binary(app).updateFiles(filesToUpload);\n }\n\n /**\n * @returns The translation app for the current tenant. If it does not exist, it will be created.\n */\n async getOrCreateTranslationApp(): Promise<IApplication> {\n const { data: apps } = await this.appService.listByName(this.translationAppName);\n const ownApp = apps.find(\n app =>\n app.contextPath === this.translationAppContextPath &&\n app.owner.tenant.id === this.appState.currentTenant.value.name\n );\n if (ownApp) {\n return ownApp;\n }\n\n const { data: app } = await this.appService.create({\n name: this.translationAppName,\n contextPath: this.translationAppContextPath,\n key: `${this.translationAppContextPath}-app-key`,\n type: ApplicationType.HOSTED,\n availability: ApplicationAvailability.MARKET,\n config: {\n icon: {\n class: 'language1'\n }\n },\n noAppSwitcher: true,\n description: 'Providing user defined translations'\n });\n const zip = await this.zip.createZip([]);\n\n const { data: binary } = await this.appService.binary(app).upload(zip, 'translations.zip');\n const { data: updatedApp } = await this.appService.update({\n id: app.id,\n activeVersionId: binary.id as string\n });\n return updatedApp;\n }\n\n private async getFileFromTranslationApp(file: string) {\n return this.getFileFromPath(`/apps/public/${this.translationAppContextPath}/${file}`);\n }\n\n private async getFileFromPath(path: string) {\n const finalPath = `${path}?nocache=${Date.now()}`;\n\n // using fetch client instead of fetch directly here to ensure loading indicator is shown during these requests\n const response = await this.fetchClient.fetch(finalPath);\n\n if (response.status !== 200) {\n throw new Error(`Failed to fetch file from ${path}`);\n }\n\n return response.json();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-translation-editor-data.mjs","sources":["../../translation-editor/data/translation-store.service.ts","../../translation-editor/data/c8y-ngx-components-translation-editor-data.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n ApplicationAvailability,\n ApplicationService,\n ApplicationType,\n FetchClient,\n IApplication\n} from '@c8y/client';\nimport { AppStateService, ZipService } from '@c8y/ngx-components';\nimport { uniq } from 'lodash-es';\n\nexport interface TranslationLocale {\n label: string;\n locale: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationStoreService {\n protected readonly translationAppName = 'User defined translations';\n protected readonly translationAppContextPath = 'user-defined-translations';\n\n constructor(\n private appService: ApplicationService,\n private appState: AppStateService,\n private zip: ZipService,\n private fetchClient: FetchClient\n ) {}\n\n /**\n * Retrieves a list of available translations for the given locales from all the hosted apps available on the tenant.\n */\n async getAvailableTranslations(locales: string[]) {\n const { data: hostedApps } = await this.appService.list({\n tenant: this.appState.currentTenant.value.name,\n type: 'HOSTED',\n pageSize: 2000\n });\n\n const uniqueContextPaths = uniq(\n hostedApps\n .filter(app => app.contextPath && app.manifest?.webSdkVersion)\n .map(app => app.contextPath)\n );\n\n const translations: { [key: string]: { [locale: string]: string } } = {};\n for (const contextPath of uniqueContextPaths) {\n for (const locale of locales) {\n try {\n const translationsForLanguageAndApp = await this.getFileFromPath(\n `/apps/${contextPath}/${locale}.json`\n );\n const translationsForLang = translationsForLanguageAndApp[locale];\n for (const key of Object.keys(translationsForLang)) {\n if (!translations[key]) {\n translations[key] = {};\n }\n translations[key][locale] = translationsForLang[key];\n }\n } catch (e) {\n continue;\n }\n }\n }\n\n return translations;\n }\n\n /**\n * Retrieves the translations for the given locale from the translation app.\n */\n async getTranslationsForLocale<T extends string>(locale: T): Promise<{ [key: string]: string }> {\n try {\n const translations = await this.getFileFromTranslationApp(`${locale}.json`);\n if (translations[locale]) {\n return translations[locale];\n }\n } catch (e) {\n // do nothing.\n }\n return {};\n }\n\n /**\n * Retrieves the translations for the given locales from the translation app.\n */\n async loadTranslationsForLocales(locales: string[]): Promise<{\n [key: string]: {\n [key: string]: string;\n };\n }> {\n const translations: {\n [key: string]: { [key: string]: string };\n } = {};\n\n const loadAndAddLocale = async (locale: string) => {\n translations[locale] = await this.getTranslationsForLocale(locale);\n };\n\n await Promise.all(locales.map(loadAndAddLocale));\n\n return translations;\n }\n\n /**\n * Retrieves a combined list of translations for all the provided locales.\n * The locales are combined into a single object per key and an array of these objects is returned.\n */\n async getCombinedListOfTranslationsForPerKey(\n locales: string[]\n ): Promise<{ key: string; [locale: string]: string }[]> {\n const translations = await this.loadTranslationsForLocales(locales);\n const translationMap: { [key: string]: { [locale: string]: string } } = {};\n\n for (const locale of Object.keys(translations)) {\n for (const key of Object.keys(translations[locale])) {\n let translationsForKey = translationMap[key];\n if (!translationsForKey) {\n translationsForKey = {};\n translationMap[key] = translationsForKey;\n }\n\n translationsForKey[locale] = translations[locale][key];\n }\n }\n\n const keys = Object.keys(translationMap).sort((a, b) => a.localeCompare(b));\n\n return keys.map(key => Object.assign({ key }, translationMap[key]));\n }\n\n /**\n * Updates the files of the translation application with the provided translations.\n */\n async updateTranslations(\n translations: { key: string; [locale: string]: string }[]\n ): Promise<void> {\n const filesToUpload = new Array<{ path: string; contents: File }>();\n const translationsPerLocale: { [locale: string]: { [key: string]: string } } = {};\n for (const entry of translations) {\n const key = entry.key;\n for (const locale of Object.keys(entry)) {\n if (locale === 'key') {\n continue;\n }\n if (!translationsPerLocale[locale]) {\n translationsPerLocale[locale] = {};\n }\n\n if (entry[locale]) {\n translationsPerLocale[locale][key] = entry[locale];\n }\n }\n }\n\n const langs = this.appState.state.langs as string[];\n\n for (const locale of langs) {\n const fileName = `${locale}.json`;\n filesToUpload.push({\n path: fileName,\n contents: new File(\n [JSON.stringify({ [locale]: translationsPerLocale[locale] || {} })],\n fileName\n )\n });\n }\n const app = await this.getOrCreateTranslationApp();\n await this.appService.binary(app).updateFiles(filesToUpload);\n }\n\n /**\n * @returns The translation app for the current tenant. If it does not exist, it will be created.\n */\n async getOrCreateTranslationApp(): Promise<IApplication> {\n const { data: apps } = await this.appService.listByName(this.translationAppName);\n const ownApp = apps.find(\n app =>\n app.contextPath === this.translationAppContextPath &&\n app.owner.tenant.id === this.appState.currentTenant.value.name\n );\n if (ownApp) {\n return ownApp;\n }\n\n const { data: app } = await this.appService.create({\n name: this.translationAppName,\n contextPath: this.translationAppContextPath,\n key: `${this.translationAppContextPath}-app-key`,\n type: ApplicationType.HOSTED,\n availability: ApplicationAvailability.MARKET,\n config: {\n icon: {\n class: 'language1'\n }\n },\n noAppSwitcher: true,\n description: 'Providing user defined translations'\n });\n const zip = await this.zip.createZip([]);\n\n const { data: binary } = await this.appService.binary(app).upload(zip, 'translations.zip');\n const { data: updatedApp } = await this.appService.update({\n id: app.id,\n activeVersionId: binary.id as string\n });\n return updatedApp;\n }\n\n private async getFileFromTranslationApp(file: string) {\n return this.getFileFromPath(`/apps/public/${this.translationAppContextPath}/${file}`);\n }\n\n private async getFileFromPath(path: string) {\n // using fetch client instead of fetch directly here to ensure loading indicator is shown during these requests\n const response = await this.fetchClient.fetch(path, { cache: 'no-cache' });\n\n if (response.status !== 200) {\n throw new Error(`Failed to fetch file from ${path}`);\n }\n\n return response.json();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -42,10 +42,10 @@ class ManageTranslationCellRendererComponent {
|
|
|
42
42
|
this.cellInput.nativeElement.focus();
|
|
43
43
|
}, this.FOCUS_RENDER_WAIT_TIME_IN_MS);
|
|
44
44
|
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
46
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ManageTranslationCellRendererComponent, deps: [{ token: i1.CellRendererContext }, { token: i1.Permissions }, { token: TranslationEditorComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: ManageTranslationCellRendererComponent, isStandalone: true, selector: "c8y-manage-translation-cell-renderer", viewQueries: [{ propertyName: "cellInput", first: true, predicate: ["cellInput"], descendants: true }], ngImport: i0, template: "<div\n class=\"text-truncate pointer d-flex\"\n title=\"{{ context.value }}\"\n data-cy=\"c8y-manage-translation-cell-renderer--edit\"\n (click)=\"!isCreateDisabled ? editCell() : ''\"\n *ngIf=\"!isCellEditable\"\n>\n <span\n class=\"text-truncate\"\n *ngIf=\"!isCellEditable && context.value !== ''\"\n >\n {{ context.value }}\n </span>\n <span\n class=\"text-truncate\"\n title=\"{{ 'Add translation' | translate }}\"\n *ngIf=\"!isCellEditable && context.value === ''\"\n >\n <em class=\"text-muted\">{{ 'Add translation' | translate }}</em>\n </span>\n <i\n class=\"showOnHover text-primary m-l-4\"\n c8yIcon=\"pencil\"\n title=\"{{ 'Edit translation' | translate }}\"\n *ngIf=\"!isCreateDisabled\"\n ></i>\n</div>\n\n<div\n class=\"input-group input-group-sm\"\n *ngIf=\"isCellEditable && !isCreateDisabled\"\n>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Add translation' | translate }}\"\n type=\"text\"\n #cellInput\n data-cy=\"c8y-manage-translation-cell-renderer--input\"\n [(ngModel)]=\"cellValue\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n data-cy=\"c8y-manage-translation-cell-renderer--cancel\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"times\"\n ></i>\n </button>\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n data-cy=\"c8y-manage-translation-cell-renderer--save\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"check\"\n ></i>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
47
47
|
}
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ManageTranslationCellRendererComponent, decorators: [{
|
|
49
49
|
type: Component,
|
|
50
50
|
args: [{ selector: 'c8y-manage-translation-cell-renderer', standalone: true, imports: [NgIf, C8yTranslatePipe, IconDirective, FormsModule], template: "<div\n class=\"text-truncate pointer d-flex\"\n title=\"{{ context.value }}\"\n data-cy=\"c8y-manage-translation-cell-renderer--edit\"\n (click)=\"!isCreateDisabled ? editCell() : ''\"\n *ngIf=\"!isCellEditable\"\n>\n <span\n class=\"text-truncate\"\n *ngIf=\"!isCellEditable && context.value !== ''\"\n >\n {{ context.value }}\n </span>\n <span\n class=\"text-truncate\"\n title=\"{{ 'Add translation' | translate }}\"\n *ngIf=\"!isCellEditable && context.value === ''\"\n >\n <em class=\"text-muted\">{{ 'Add translation' | translate }}</em>\n </span>\n <i\n class=\"showOnHover text-primary m-l-4\"\n c8yIcon=\"pencil\"\n title=\"{{ 'Edit translation' | translate }}\"\n *ngIf=\"!isCreateDisabled\"\n ></i>\n</div>\n\n<div\n class=\"input-group input-group-sm\"\n *ngIf=\"isCellEditable && !isCreateDisabled\"\n>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Add translation' | translate }}\"\n type=\"text\"\n #cellInput\n data-cy=\"c8y-manage-translation-cell-renderer--input\"\n [(ngModel)]=\"cellValue\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n data-cy=\"c8y-manage-translation-cell-renderer--cancel\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"times\"\n ></i>\n </button>\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n data-cy=\"c8y-manage-translation-cell-renderer--save\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"check\"\n ></i>\n </button>\n </div>\n</div>\n" }]
|
|
51
51
|
}], ctorParameters: () => [{ type: i1.CellRendererContext }, { type: i1.Permissions }, { type: TranslationEditorComponent, decorators: [{
|
|
@@ -99,10 +99,10 @@ class AddTranslationModalComponent {
|
|
|
99
99
|
return null;
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
103
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
102
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AddTranslationModalComponent, deps: [{ token: i1$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
103
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: AddTranslationModalComponent, isStandalone: true, selector: "c8y-add-translation-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Add' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'language1'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"label\"\n translate\n >\n Translation key\n </label>\n <input\n class=\"form-control\"\n name=\"key\"\n id=\"key\"\n type=\"text\"\n formControlName=\"key\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'Home' } }}\"\n />\n <c8y-messages>\n <c8y-message\n name=\"keyAlreadyTaken\"\n [text]=\"alreadyTakenMsg | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group *ngFor=\"let language of availableLangs\">\n <label\n [for]=\"language.lang\"\n >\n {{ language.nativeLanguage }} ({{ language.lang }})\n </label>\n <input\n class=\"form-control\"\n [name]=\"language.lang\"\n [id]=\"language.lang\"\n type=\"text\"\n [formControlName]=\"language.lang\"\n />\n </c8y-form-group>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: ModalModule }, { kind: "component", type: i1.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { 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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
104
104
|
}
|
|
105
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AddTranslationModalComponent, decorators: [{
|
|
106
106
|
type: Component,
|
|
107
107
|
args: [{ selector: 'c8y-add-translation-modal', standalone: true, imports: [
|
|
108
108
|
ModalModule,
|
|
@@ -213,10 +213,10 @@ class TranslationEditorComponent {
|
|
|
213
213
|
})));
|
|
214
214
|
return columns;
|
|
215
215
|
}
|
|
216
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
217
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
216
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationEditorComponent, deps: [{ token: i1$2.TranslationStoreService }, { token: i2.BsModalService }, { token: i1.AlertService }, { token: i1.AppStateService }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
217
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TranslationEditorComponent, isStandalone: true, selector: "c8y-translation-editor", ngImport: i0, template: "<c8y-title>{{ 'Localization' | translate }}</c8y-title>\n\n@if (isLoading) {\n <c8y-loading></c8y-loading>\n} @else {\n <c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEntry()\"\n data-cy=\"c8y-translation-editor--add-translation\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add translation</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n (click)=\"saveTranslations()\"\n data-cy=\"c8y-translation-editor--save-and-apply\"\n >\n <i c8yIcon=\"save\"></i>\n <span translate>Save and apply</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-help src=\"/docs/standard-tenant/changing-settings/#localization\"></c8y-help>\n\n <c8y-data-grid\n class=\"content-fullpage d-flex d-col\"\n [title]=\"'Translations' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"items\"\n ></c8y-data-grid>\n}\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "loading", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
218
218
|
}
|
|
219
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
219
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationEditorComponent, decorators: [{
|
|
220
220
|
type: Component,
|
|
221
221
|
args: [{ selector: 'c8y-translation-editor', standalone: true, imports: [
|
|
222
222
|
TitleComponent,
|
|
@@ -333,10 +333,10 @@ class AdvancedTranslationEditorComponent {
|
|
|
333
333
|
this.alert.addServerFailure(e);
|
|
334
334
|
}
|
|
335
335
|
}
|
|
336
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
337
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
336
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdvancedTranslationEditorComponent, deps: [{ token: i1.AppStateService }, { token: i1$2.TranslationStoreService }, { token: i1.AlertService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
337
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: AdvancedTranslationEditorComponent, isStandalone: true, selector: "c8y-advanced-translation-editor", viewQueries: [{ propertyName: "editorComponent", first: true, predicate: EditorComponent, descendants: true }], ngImport: i0, template: "<c8y-title>{{ 'Localization' | translate }}</c8y-title>\n\n@if (isLoading()) {\n <c8y-loading></c8y-loading>\n} @else {\n <c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"!isValidJSON()\"\n (click)=\"saveTranslations()\"\n data-cy=\"c8y-translation-editor--save-and-apply\"\n >\n <i c8yIcon=\"save\"></i>\n <span translate>Save and apply</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"!isValidJSON()\"\n (click)=\"importTranslationKeys()\"\n data-cy=\"c8y-translation-editor--import-translation-keys\"\n >\n <i [c8yIcon]=\"'import'\"></i>\n <span translate>Import translation keys from apps</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"card card--fullpage content-fullpage\">\n <c8y-editor\n class=\"flex-grow\"\n [editorOptions]=\"editorOptions\"\n [ngModel]=\"valueString()\"\n (ngModelChange)=\"onValueChange($event)\"\n (editorInit)=\"onEditorInit($event)\"\n monacoEditorMarkerValidator\n ></c8y-editor>\n </div>\n}\n", dependencies: [{ kind: "component", type: EditorComponent, selector: "c8y-editor", inputs: ["editorOptions", "theme"], outputs: ["editorInit"] }, { kind: "directive", type: MonacoEditorMarkerValidatorDirective, selector: "c8y-editor [monacoEditorMarkerValidator]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
338
338
|
}
|
|
339
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
339
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdvancedTranslationEditorComponent, decorators: [{
|
|
340
340
|
type: Component,
|
|
341
341
|
args: [{ selector: 'c8y-advanced-translation-editor', standalone: true, imports: [
|
|
342
342
|
EditorComponent,
|
|
@@ -21,10 +21,10 @@ class TranslationEditorNaviagtorFactoryService {
|
|
|
21
21
|
}
|
|
22
22
|
return this.node;
|
|
23
23
|
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
25
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, deps: [{ token: i1.Permissions }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, providedIn: 'root' }); }
|
|
26
26
|
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, decorators: [{
|
|
28
28
|
type: Injectable,
|
|
29
29
|
args: [{
|
|
30
30
|
providedIn: 'root'
|
|
@@ -59,10 +59,10 @@ class TranslationEditorTabFactoryService {
|
|
|
59
59
|
}
|
|
60
60
|
return [];
|
|
61
61
|
}
|
|
62
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
63
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
62
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationEditorTabFactoryService, deps: [{ token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
63
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationEditorTabFactoryService, providedIn: 'root' }); }
|
|
64
64
|
}
|
|
65
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TranslationEditorTabFactoryService, decorators: [{
|
|
66
66
|
type: Injectable,
|
|
67
67
|
args: [{
|
|
68
68
|
providedIn: 'root'
|