@c8y/ngx-components 1021.13.3 → 1021.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/alarms/alarms-list.component.d.ts +2 -17
- package/alarms/alarms-list.component.d.ts.map +1 -1
- package/alarms/alarms-view.service.d.ts +1 -0
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.model.d.ts +30 -0
- package/alarms/alarms.model.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.model.d.ts +1 -0
- package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts +7 -5
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.component.d.ts +4 -7
- package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.service.d.ts +4 -4
- package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts +2 -2
- package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts +19 -6
- package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
- package/core/action-bar/action-bar-item.component.d.ts +1 -1
- package/core/action-bar/action-bar-item.component.d.ts.map +1 -1
- package/core/action-bar/action-bar.module.d.ts +6 -6
- package/core/action-bar/action-bar.module.d.ts.map +1 -1
- package/core/bootstrap/bootstrap.component.d.ts +3 -1
- package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
- package/core/common/aggregation/aggregation.model.d.ts +39 -0
- package/core/common/aggregation/aggregation.model.d.ts.map +1 -0
- package/core/common/aggregation/aggregation.service.d.ts +17 -0
- package/core/common/aggregation/aggregation.service.d.ts.map +1 -0
- package/core/common/index.d.ts +4 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/inter-app.service.d.ts +48 -0
- package/core/common/inter-app.service.d.ts.map +1 -0
- package/core/common/interval-based-reload.abstract.d.ts +120 -0
- package/core/common/interval-based-reload.abstract.d.ts.map +1 -0
- package/core/dashboard/dashboard.module.d.ts +24 -18
- package/core/dashboard/dashboard.module.d.ts.map +1 -1
- package/core/dashboard/index.d.ts +3 -0
- package/core/dashboard/index.d.ts.map +1 -1
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +31 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts +17 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts +4 -0
- package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/index.d.ts +8 -0
- package/core/dashboard/widget-auto-refresh-context/index.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts +7 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +29 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts +15 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts +169 -0
- package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts.map +1 -0
- package/core/dashboard/widgets-dashboard.component.d.ts +6 -3
- package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +11 -8
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +6 -12
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
- package/core/header/header.module.d.ts +18 -18
- package/core/header/header.module.d.ts.map +1 -1
- package/core/header/title/title.component.d.ts +1 -1
- package/core/header/title/title.component.d.ts.map +1 -1
- package/core/i18n/cached-locale-dictionary.service.d.ts +5 -1
- package/core/i18n/cached-locale-dictionary.service.d.ts.map +1 -1
- package/core/i18n/i18n.module.d.ts +0 -4
- package/core/i18n/i18n.module.d.ts.map +1 -1
- package/core/i18n/index.d.ts +2 -1
- package/core/i18n/index.d.ts.map +1 -1
- package/core/i18n/translation-loader.service.d.ts +50 -0
- package/core/i18n/translation-loader.service.d.ts.map +1 -0
- package/core/i18n/translation-utils.d.ts +14 -0
- package/core/i18n/translation-utils.d.ts.map +1 -0
- package/core/plugins/plugins-resolve.service.d.ts +7 -10
- package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts +2 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +11 -2
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selection.model.d.ts +6 -0
- package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
- package/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +117 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts +90 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +160 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +89 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts +11 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts +27 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts +12 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts +22 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts +3 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts +9 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts +56 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts +21 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts +14 -0
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +232 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -0
- package/datapoints-export-selector/index.d.ts +15 -0
- package/datapoints-export-selector/index.d.ts.map +1 -0
- package/device-list/device-list.module.d.ts +4 -2
- package/device-list/device-list.module.d.ts.map +1 -1
- package/esm2022/alarms/alarms-list.component.mjs +5 -16
- package/esm2022/alarms/alarms-view.service.mjs +2 -1
- package/esm2022/alarms/alarms.model.mjs +1 -1
- package/esm2022/context-dashboard/context-dashboard.component.mjs +4 -4
- package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
- package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -21
- package/esm2022/context-dashboard/dashboard-detail.component.mjs +8 -16
- package/esm2022/context-dashboard/dashboard-detail.service.mjs +13 -6
- package/esm2022/context-dashboard/dashboard-settings/dashboard-general-settings.component.mjs +3 -3
- package/esm2022/context-dashboard/dashboard-settings/typed-dashboard-settings.component.mjs +32 -11
- package/esm2022/core/action-bar/action-bar-item.component.mjs +3 -3
- package/esm2022/core/action-bar/action-bar.module.mjs +16 -5
- package/esm2022/core/bootstrap/bootstrap.component.mjs +21 -16
- package/esm2022/core/common/aggregation/aggregation.model.mjs +46 -0
- package/esm2022/core/common/aggregation/aggregation.service.mjs +34 -0
- package/esm2022/core/common/humanize-app-name.model.mjs +2 -2
- package/esm2022/core/common/humanize-app-name.pipe.mjs +2 -2
- package/esm2022/core/common/index.mjs +5 -1
- package/esm2022/core/common/inter-app.service.mjs +76 -0
- package/esm2022/core/common/interval-based-reload.abstract.mjs +110 -0
- package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
- package/esm2022/core/dashboard/dashboard-child.component.mjs +6 -5
- package/esm2022/core/dashboard/dashboard.module.mjs +18 -1
- package/esm2022/core/dashboard/index.mjs +4 -1
- package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +101 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.mjs +50 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.mjs +7 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/index.mjs +8 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.mjs +18 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +127 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.mjs +5 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs +233 -0
- package/esm2022/core/dashboard/widgets-dashboard.component.mjs +35 -30
- package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +4 -4
- package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +2 -2
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +5 -5
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +7 -4
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +37 -37
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -28
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +3 -3
- package/esm2022/core/header/header.module.mjs +7 -5
- package/esm2022/core/header/title/title.component.mjs +3 -3
- package/esm2022/core/i18n/cached-locale-dictionary.service.mjs +1 -1
- package/esm2022/core/i18n/i18n.module.mjs +7 -14
- package/esm2022/core/i18n/index.mjs +3 -2
- package/esm2022/core/i18n/translate.parser.mjs +2 -2
- package/esm2022/core/i18n/translation-loader.service.mjs +132 -0
- package/esm2022/core/i18n/translation-utils.mjs +24 -0
- package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -37
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.mjs +13 -6
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +22 -5
- package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
- package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.mjs +5 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +407 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +207 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +467 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +187 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +27 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +41 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +23 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.mjs +42 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.mjs +120 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.mjs +282 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.mjs +76 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.mjs +46 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +42 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +43 -0
- package/esm2022/datapoints-export-selector/index.mjs +15 -0
- package/esm2022/device-list/add-smart-group.component.mjs +4 -3
- package/esm2022/device-list/device-list.module.mjs +22 -4
- package/esm2022/map/cluster-map.component.mjs +41 -13
- package/esm2022/map/map-status.component.mjs +6 -5
- package/esm2022/map/map.component.mjs +9 -5
- package/esm2022/map/map.model.mjs +1 -1
- package/esm2022/translation-editor/c8y-ngx-components-translation-editor.mjs +5 -0
- package/esm2022/translation-editor/data/c8y-ngx-components-translation-editor-data.mjs +5 -0
- package/esm2022/translation-editor/data/index.mjs +2 -0
- package/esm2022/translation-editor/data/translation-store.service.mjs +175 -0
- package/esm2022/translation-editor/index.mjs +10 -0
- package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs +70 -0
- package/esm2022/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.mjs +5 -0
- package/esm2022/translation-editor/lazy/index.mjs +2 -0
- package/esm2022/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.mjs +53 -0
- package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +124 -0
- package/esm2022/translation-editor/translation-editor-naviagtor-factory.service.mjs +31 -0
- package/esm2022/widgets/cockpit/index.mjs +4 -2
- package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
- package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +6 -2
- package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +6 -2
- package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +6 -2
- package/esm2022/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +5 -0
- package/esm2022/widgets/definitions/datapoints-table/index.mjs +34 -0
- package/esm2022/widgets/definitions/index.mjs +2 -1
- package/esm2022/widgets/definitions/map/index.mjs +4 -2
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +29 -15
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +57 -25
- package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +2 -1
- package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +19 -21
- package/esm2022/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +5 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +383 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +124 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.mjs +191 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.mjs +36 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.mjs +45 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +116 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +116 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.mjs +43 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +282 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +430 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.mjs +75 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +76 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +52 -0
- package/esm2022/widgets/implementations/datapoints-table/date-range-picker.component.mjs +68 -0
- package/esm2022/widgets/implementations/datapoints-table/index.mjs +10 -0
- package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +19 -11
- package/esm2022/widgets/implementations/map/map-widget.component.mjs +20 -2
- package/esm2022/widgets/implementations/map/map-widget.model.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +5 -15
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +135 -91
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +37 -13
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1928 -0
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-device-list.mjs +24 -5
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +52 -19
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +181 -0
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +236 -0
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +46 -0
- package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +3 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +41 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +3 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +101 -58
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1967 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +37 -11
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +5080 -4272
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +289 -18
- package/locales/en.po +12 -0
- package/locales/en_US.po +3 -0
- package/locales/es.po +253 -18
- package/locales/fr.po +253 -18
- package/locales/ja_JP.po +282 -18
- package/locales/locales.pot +257 -18
- package/locales/nl.po +253 -18
- package/locales/pl.po +253 -18
- package/locales/pt_BR.po +253 -18
- package/map/cluster-map.component.d.ts +8 -3
- package/map/cluster-map.component.d.ts.map +1 -1
- package/map/map-status.component.d.ts +0 -3
- package/map/map-status.component.d.ts.map +1 -1
- package/map/map.component.d.ts +4 -2
- package/map/map.component.d.ts.map +1 -1
- package/map/map.model.d.ts +2 -1
- package/map/map.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/translation-editor/c8y-ngx-components-translation-editor.d.ts.map +1 -0
- package/translation-editor/data/c8y-ngx-components-translation-editor-data.d.ts.map +1 -0
- package/translation-editor/data/index.d.ts +2 -0
- package/translation-editor/data/index.d.ts.map +1 -0
- package/translation-editor/data/translation-store.service.d.ts +61 -0
- package/translation-editor/data/translation-store.service.d.ts.map +1 -0
- package/translation-editor/index.d.ts +2 -0
- package/translation-editor/index.d.ts.map +1 -0
- package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts +30 -0
- package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts.map +1 -0
- package/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.d.ts.map +1 -0
- package/translation-editor/lazy/index.d.ts +2 -0
- package/translation-editor/lazy/index.d.ts.map +1 -0
- package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts +22 -0
- package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts.map +1 -0
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts +34 -0
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -0
- package/translation-editor/translation-editor-naviagtor-factory.service.d.ts +11 -0
- package/translation-editor/translation-editor-naviagtor-factory.service.d.ts.map +1 -0
- package/widgets/cockpit/index.d.ts +13 -0
- package/widgets/cockpit/index.d.ts.map +1 -1
- package/widgets/cockpit-exports/index.d.ts +6 -0
- package/widgets/cockpit-exports/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts +2 -0
- package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +2 -0
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/recent-alarms/index.d.ts +2 -0
- package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.d.ts.map +1 -0
- package/widgets/definitions/datapoints-table/index.d.ts +14 -0
- package/widgets/definitions/datapoints-table/index.d.ts.map +1 -0
- package/widgets/definitions/index.d.ts +1 -0
- package/widgets/definitions/index.d.ts.map +1 -1
- package/widgets/definitions/map/index.d.ts +2 -1
- package/widgets/definitions/map/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +5 -9
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +17 -10
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +5 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +5 -11
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +129 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +56 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts +88 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts +19 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts +26 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +63 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts +38 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts +13 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +123 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +196 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts +41 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +175 -0
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +12 -0
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts +34 -0
- package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/index.d.ts +10 -0
- package/widgets/implementations/datapoints-table/index.d.ts.map +1 -0
- package/widgets/implementations/map/map-widget-config.component.d.ts +4 -4
- package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget.component.d.ts +8 -3
- package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget.model.d.ts +4 -3
- package/widgets/implementations/map/map-widget.model.d.ts.map +1 -1
- package/core/i18n/translate.loader.d.ts +0 -31
- package/core/i18n/translate.loader.d.ts.map +0 -1
- package/esm2022/core/i18n/translate.loader.mjs +0 -71
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { ApplicationAvailability, ApplicationService, ApplicationType } from '@c8y/client';
|
|
3
|
+
import { AppStateService, ZipService } from '@c8y/ngx-components';
|
|
4
|
+
import { uniq } from 'lodash-es';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@c8y/client";
|
|
7
|
+
import * as i2 from "@c8y/ngx-components";
|
|
8
|
+
export class TranslationStoreService {
|
|
9
|
+
constructor(appService, appState, zip) {
|
|
10
|
+
this.appService = appService;
|
|
11
|
+
this.appState = appState;
|
|
12
|
+
this.zip = zip;
|
|
13
|
+
this.translationAppName = 'User defined translations';
|
|
14
|
+
this.translationAppContextPath = 'user-defined-translations';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Retrieves a list of available translations for the given locales from all the hosted apps available on the tenant.
|
|
18
|
+
*/
|
|
19
|
+
async getAvailableTranslations(locales) {
|
|
20
|
+
const { data: hostedApps } = await this.appService.list({
|
|
21
|
+
tenant: this.appState.currentTenant.value.name,
|
|
22
|
+
type: 'HOSTED',
|
|
23
|
+
pageSize: 2000
|
|
24
|
+
});
|
|
25
|
+
const uniqueContextPaths = uniq(hostedApps
|
|
26
|
+
.filter(app => app.contextPath && app.manifest?.webSdkVersion)
|
|
27
|
+
.map(app => app.contextPath));
|
|
28
|
+
const translations = {};
|
|
29
|
+
for (const contextPath of uniqueContextPaths) {
|
|
30
|
+
for (const locale of locales) {
|
|
31
|
+
try {
|
|
32
|
+
const translationsForLanguageAndApp = await this.getFileFromPath(`/apps/${contextPath}/${locale}.json`);
|
|
33
|
+
for (const key of Object.keys(translationsForLanguageAndApp)) {
|
|
34
|
+
if (!translations[key]) {
|
|
35
|
+
translations[key] = {};
|
|
36
|
+
}
|
|
37
|
+
translations[key][locale] = translationsForLanguageAndApp[key];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return translations;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Retrieves the translations for the given locale from the translation app.
|
|
49
|
+
*/
|
|
50
|
+
async getTranslationsForLocale(locale) {
|
|
51
|
+
try {
|
|
52
|
+
const translations = await this.getFileFromTranslationApp(`${locale}.json`);
|
|
53
|
+
if (translations[locale]) {
|
|
54
|
+
return translations[locale];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
// do nothing.
|
|
59
|
+
}
|
|
60
|
+
return {};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Retrieves the translations for the given locales from the translation app.
|
|
64
|
+
*/
|
|
65
|
+
async loadTranslationsForLocales(locales) {
|
|
66
|
+
const translations = {};
|
|
67
|
+
const loadAndAddLocale = async (locale) => {
|
|
68
|
+
translations[locale] = await this.getTranslationsForLocale(locale);
|
|
69
|
+
};
|
|
70
|
+
await Promise.all(locales.map(loadAndAddLocale));
|
|
71
|
+
return translations;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Retrieves a combined list of translations for all the provided locales.
|
|
75
|
+
* The locales are combined into a single object per key and an array of these objects is returned.
|
|
76
|
+
*/
|
|
77
|
+
async getCombinedListOfTranslationsForPerKey(locales) {
|
|
78
|
+
const translations = await this.loadTranslationsForLocales(locales);
|
|
79
|
+
const translationMap = {};
|
|
80
|
+
for (const locale of Object.keys(translations)) {
|
|
81
|
+
for (const key of Object.keys(translations[locale])) {
|
|
82
|
+
let translationsForKey = translationMap[key];
|
|
83
|
+
if (!translationsForKey) {
|
|
84
|
+
translationsForKey = {};
|
|
85
|
+
translationMap[key] = translationsForKey;
|
|
86
|
+
}
|
|
87
|
+
translationsForKey[locale] = translations[locale][key];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const keys = Object.keys(translationMap).sort((a, b) => a.localeCompare(b));
|
|
91
|
+
return keys.map(key => Object.assign({ key }, translationMap[key]));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Updates the files of the translation application with the provided translations.
|
|
95
|
+
*/
|
|
96
|
+
async updateTranslations(translations) {
|
|
97
|
+
const filesToUpload = new Array();
|
|
98
|
+
const translationsPerLocale = {};
|
|
99
|
+
for (const entry of translations) {
|
|
100
|
+
const key = entry.key;
|
|
101
|
+
for (const locale of Object.keys(entry)) {
|
|
102
|
+
if (locale === 'key') {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (!translationsPerLocale[locale]) {
|
|
106
|
+
translationsPerLocale[locale] = {};
|
|
107
|
+
}
|
|
108
|
+
if (entry[locale]) {
|
|
109
|
+
translationsPerLocale[locale][key] = entry[locale];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
for (const locale of Object.keys(translationsPerLocale)) {
|
|
114
|
+
const fileName = `${locale}.json`;
|
|
115
|
+
filesToUpload.push({
|
|
116
|
+
path: fileName,
|
|
117
|
+
contents: new File([JSON.stringify({ [locale]: translationsPerLocale[locale] })], fileName)
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
const app = await this.getOrCreateTranslationApp();
|
|
121
|
+
await this.appService.binary(app).updateFiles(filesToUpload);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* @returns The translation app for the current tenant. If it does not exist, it will be created.
|
|
125
|
+
*/
|
|
126
|
+
async getOrCreateTranslationApp() {
|
|
127
|
+
const { data: apps } = await this.appService.listByName(this.translationAppName);
|
|
128
|
+
const ownApp = apps.find(app => app.contextPath === this.translationAppContextPath &&
|
|
129
|
+
app.owner.tenant.id === this.appState.currentTenant.value.name);
|
|
130
|
+
if (ownApp) {
|
|
131
|
+
return ownApp;
|
|
132
|
+
}
|
|
133
|
+
const { data: app } = await this.appService.create({
|
|
134
|
+
name: this.translationAppName,
|
|
135
|
+
contextPath: this.translationAppContextPath,
|
|
136
|
+
key: `${this.translationAppContextPath}-app-key`,
|
|
137
|
+
type: ApplicationType.HOSTED,
|
|
138
|
+
availability: ApplicationAvailability.MARKET,
|
|
139
|
+
config: {
|
|
140
|
+
icon: {
|
|
141
|
+
class: 'language1'
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
noAppSwitcher: true,
|
|
145
|
+
description: 'Providing user defined translations'
|
|
146
|
+
});
|
|
147
|
+
const zip = await this.zip.createZip([]);
|
|
148
|
+
const { data: binary } = await this.appService.binary(app).upload(zip, 'translations.zip');
|
|
149
|
+
const { data: updatedApp } = await this.appService.update({
|
|
150
|
+
id: app.id,
|
|
151
|
+
activeVersionId: binary.id
|
|
152
|
+
});
|
|
153
|
+
return updatedApp;
|
|
154
|
+
}
|
|
155
|
+
async getFileFromTranslationApp(file) {
|
|
156
|
+
return this.getFileFromPath(`/apps/public/${this.translationAppContextPath}/${file}`);
|
|
157
|
+
}
|
|
158
|
+
async getFileFromPath(path) {
|
|
159
|
+
const finalPath = `${path}?nocache=${Date.now()}`;
|
|
160
|
+
const response = await fetch(finalPath);
|
|
161
|
+
if (response.status !== 200) {
|
|
162
|
+
throw new Error(`Failed to fetch file from ${path}`);
|
|
163
|
+
}
|
|
164
|
+
return response.json();
|
|
165
|
+
}
|
|
166
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationStoreService, deps: [{ token: i1.ApplicationService }, { token: i2.AppStateService }, { token: i2.ZipService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
167
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationStoreService, providedIn: 'root' }); }
|
|
168
|
+
}
|
|
169
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationStoreService, decorators: [{
|
|
170
|
+
type: Injectable,
|
|
171
|
+
args: [{
|
|
172
|
+
providedIn: 'root'
|
|
173
|
+
}]
|
|
174
|
+
}], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i2.AppStateService }, { type: i2.ZipService }] });
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tc3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9kYXRhL3RyYW5zbGF0aW9uLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixlQUFlLEVBRWhCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQVVqQyxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFlBQ1UsVUFBOEIsRUFDOUIsUUFBeUIsRUFDekIsR0FBZTtRQUZmLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFOTix1QkFBa0IsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCw4QkFBeUIsR0FBRywyQkFBMkIsQ0FBQztJQU14RSxDQUFDO0lBRUo7O09BRUc7SUFDSCxLQUFLLENBQUMsd0JBQXdCLENBQUMsT0FBaUI7UUFDOUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3RELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUM5QyxJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQzdCLFVBQVU7YUFDUCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFH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QUcsR0FBRyxJQUFJLFlBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDbEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBck1VLHVCQUF1QjtrSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25TZXJ2aWNlLFxuICBBcHBsaWNhdGlvblR5cGUsXG4gIElBcHBsaWNhdGlvblxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UsIFppcFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IHVuaXEgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uTG9jYWxlIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbG9jYWxlOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uU3RvcmVTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zbGF0aW9uQXBwTmFtZSA9ICdVc2VyIGRlZmluZWQgdHJhbnNsYXRpb25zJztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zbGF0aW9uQXBwQ29udGV4dFBhdGggPSAndXNlci1kZWZpbmVkLXRyYW5zbGF0aW9ucyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwOiBaaXBTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhdmFpbGFibGUgdHJhbnNsYXRpb25zIGZvciB0aGUgZ2l2ZW4gbG9jYWxlcyBmcm9tIGFsbCB0aGUgaG9zdGVkIGFwcHMgYXZhaWxhYmxlIG9uIHRoZSB0ZW5hbnQuXG4gICAqL1xuICBhc3luYyBnZXRBdmFpbGFibGVUcmFuc2xhdGlvbnMobG9jYWxlczogc3RyaW5nW10pIHtcbiAgICBjb25zdCB7IGRhdGE6IGhvc3RlZEFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwU2VydmljZS5saXN0KHtcbiAgICAgIHRlbmFudDogdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlLm5hbWUsXG4gICAgICB0eXBlOiAnSE9TVEVEJyxcbiAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmlxdWVDb250ZXh0UGF0aHMgPSB1bmlxKFxuICAgICAgaG9zdGVkQXBwc1xuICAgICAgICAuZmlsdGVyKGFwcCA9PiBhcHAuY29udGV4dFBhdGggJiYgYXBwLm1hbmlmZXN0Py53ZWJTZGtWZXJzaW9uKVxuICAgICAgICAubWFwKGFwcCA9PiBhcHAuY29udGV4dFBhdGgpXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0aW9uczogeyBba2V5OiBzdHJpbmddOiB7IFtsb2NhbGU6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGNvbnRleHRQYXRoIG9mIHVuaXF1ZUNvbnRleHRQYXRocykge1xuICAgICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uc0Zvckxhbmd1YWdlQW5kQXBwID0gYXdhaXQgdGhpcy5nZXRGaWxlRnJvbVBhdGgoXG4gICAgICAgICAgICBgL2FwcHMvJHtjb250ZXh0UGF0aH0vJHtsb2NhbGV9Lmpzb25gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnNGb3JMYW5ndWFnZUFuZEFwcCkpIHtcbiAgICAgICAgICAgIGlmICghdHJhbnNsYXRpb25zW2tleV0pIHtcbiAgICAgICAgICAgICAgdHJhbnNsYXRpb25zW2tleV0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uc1trZXldW2xvY2FsZV0gPSB0cmFuc2xhdGlvbnNGb3JMYW5ndWFnZUFuZEFwcFtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zbGF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGdpdmVuIGxvY2FsZSBmcm9tIHRoZSB0cmFuc2xhdGlvbiBhcHAuXG4gICAqL1xuICBhc3luYyBnZXRUcmFuc2xhdGlvbnNGb3JMb2NhbGU8VCBleHRlbmRzIHN0cmluZz4obG9jYWxlOiBUKTogUHJvbWlzZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0RmlsZUZyb21UcmFuc2xhdGlvbkFwcChgJHtsb2NhbGV9Lmpzb25gKTtcbiAgICAgIGlmICh0cmFuc2xhdGlvbnNbbG9jYWxlXSkge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25zW2xvY2FsZV07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZy5cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgZ2l2ZW4gbG9jYWxlcyBmcm9tIHRoZSB0cmFuc2xhdGlvbiBhcHAuXG4gICAqL1xuICBhc3luYyBsb2FkVHJhbnNsYXRpb25zRm9yTG9jYWxlcyhsb2NhbGVzOiBzdHJpbmdbXSk6IFByb21pc2U8e1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuICB9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIH0gPSB7fTtcblxuICAgIGNvbnN0IGxvYWRBbmRBZGRMb2NhbGUgPSBhc3luYyAobG9jYWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyYW5zbGF0aW9uc1tsb2NhbGVdID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbnNGb3JMb2NhbGUobG9jYWxlKTtcbiAgICB9O1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwobG9jYWxlcy5tYXAobG9hZEFuZEFkZExvY2FsZSkpO1xuXG4gICAgcmV0dXJuIHRyYW5zbGF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBjb21iaW5lZCBsaXN0IG9mIHRyYW5zbGF0aW9ucyBmb3IgYWxsIHRoZSBwcm92aWRlZCBsb2NhbGVzLlxuICAgKiBUaGUgbG9jYWxlcyBhcmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBvYmplY3QgcGVyIGtleSBhbmQgYW4gYXJyYXkgb2YgdGhlc2Ugb2JqZWN0cyBpcyByZXR1cm5lZC5cbiAgICovXG4gIGFzeW5jIGdldENvbWJpbmVkTGlzdE9mVHJhbnNsYXRpb25zRm9yUGVyS2V5KFxuICAgIGxvY2FsZXM6IHN0cmluZ1tdXG4gICk6IFByb21pc2U8eyBrZXk6IHN0cmluZzsgW2xvY2FsZTogc3RyaW5nXTogc3RyaW5nIH1bXT4ge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMubG9hZFRyYW5zbGF0aW9uc0ZvckxvY2FsZXMobG9jYWxlcyk7XG4gICAgY29uc3QgdHJhbnNsYXRpb25NYXA6IHsgW2tleTogc3RyaW5nXTogeyBbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnNbbG9jYWxlXSkpIHtcbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uc0ZvcktleSA9IHRyYW5zbGF0aW9uTWFwW2tleV07XG4gICAgICAgIGlmICghdHJhbnNsYXRpb25zRm9yS2V5KSB7XG4gICAgICAgICAgdHJhbnNsYXRpb25zRm9yS2V5ID0ge307XG4gICAgICAgICAgdHJhbnNsYXRpb25NYXBba2V5XSA9IHRyYW5zbGF0aW9uc0ZvcktleTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYW5zbGF0aW9uc0ZvcktleVtsb2NhbGVdID0gdHJhbnNsYXRpb25zW2xvY2FsZV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModHJhbnNsYXRpb25NYXApLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cbiAgICByZXR1cm4ga2V5cy5tYXAoa2V5ID0+IE9iamVjdC5hc3NpZ24oeyBrZXkgfSwgdHJhbnNsYXRpb25NYXBba2V5XSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGZpbGVzIG9mIHRoZSB0cmFuc2xhdGlvbiBhcHBsaWNhdGlvbiB3aXRoIHRoZSBwcm92aWRlZCB0cmFuc2xhdGlvbnMuXG4gICAqL1xuICBhc3luYyB1cGRhdGVUcmFuc2xhdGlvbnMoXG4gICAgdHJhbnNsYXRpb25zOiB7IGtleTogc3RyaW5nOyBbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmcgfVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBuZXcgQXJyYXk8eyBwYXRoOiBzdHJpbmc7IGNvbnRlbnRzOiBGaWxlIH0+KCk7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zUGVyTG9jYWxlOiB7IFtsb2NhbGU6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdHJhbnNsYXRpb25zKSB7XG4gICAgICBjb25zdCBrZXkgPSBlbnRyeS5rZXk7XG4gICAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBPYmplY3Qua2V5cyhlbnRyeSkpIHtcbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRyYW5zbGF0aW9uc1BlckxvY2FsZVtsb2NhbGVdKSB7XG4gICAgICAgICAgdHJhbnNsYXRpb25zUGVyTG9jYWxlW2xvY2FsZV0gPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeVtsb2NhbGVdKSB7XG4gICAgICAgICAgdHJhbnNsYXRpb25zUGVyTG9jYWxlW2xvY2FsZV1ba2V5XSA9IGVudHJ5W2xvY2FsZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnNQZXJMb2NhbGUpKSB7XG4gICAgICBjb25zdCBmaWxlTmFtZSA9IGAke2xvY2FsZX0uanNvbmA7XG4gICAgICBmaWxlc1RvVXBsb2FkLnB1c2goe1xuICAgICAgICBwYXRoOiBmaWxlTmFtZSxcbiAgICAgICAgY29udGVudHM6IG5ldyBGaWxlKFtKU09OLnN0cmluZ2lmeSh7IFtsb2NhbGVdOiB0cmFuc2xhdGlvbnNQZXJMb2NhbGVbbG9jYWxlXSB9KV0sIGZpbGVOYW1lKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGFwcCA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVUcmFuc2xhdGlvbkFwcCgpO1xuICAgIGF3YWl0IHRoaXMuYXBwU2VydmljZS5iaW5hcnkoYXBwKS51cGRhdGVGaWxlcyhmaWxlc1RvVXBsb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb24gYXBwIGZvciB0aGUgY3VycmVudCB0ZW5hbnQuIElmIGl0IGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBhc3luYyBnZXRPckNyZWF0ZVRyYW5zbGF0aW9uQXBwKCk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgY29uc3QgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcFNlcnZpY2UubGlzdEJ5TmFtZSh0aGlzLnRyYW5zbGF0aW9uQXBwTmFtZSk7XG4gICAgY29uc3Qgb3duQXBwID0gYXBwcy5maW5kKFxuICAgICAgYXBwID0+XG4gICAgICAgIGFwcC5jb250ZXh0UGF0aCA9PT0gdGhpcy50cmFuc2xhdGlvbkFwcENvbnRleHRQYXRoICYmXG4gICAgICAgIGFwcC5vd25lci50ZW5hbnQuaWQgPT09IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lXG4gICAgKTtcbiAgICBpZiAob3duQXBwKSB7XG4gICAgICByZXR1cm4gb3duQXBwO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGF0YTogYXBwIH0gPSBhd2FpdCB0aGlzLmFwcFNlcnZpY2UuY3JlYXRlKHtcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRpb25BcHBOYW1lLFxuICAgICAgY29udGV4dFBhdGg6IHRoaXMudHJhbnNsYXRpb25BcHBDb250ZXh0UGF0aCxcbiAgICAgIGtleTogYCR7dGhpcy50cmFuc2xhdGlvbkFwcENvbnRleHRQYXRofS1hcHAta2V5YCxcbiAgICAgIHR5cGU6IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQsXG4gICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5Lk1BUktFVCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBpY29uOiB7XG4gICAgICAgICAgY2xhc3M6ICdsYW5ndWFnZTEnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBub0FwcFN3aXRjaGVyOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246ICdQcm92aWRpbmcgdXNlciBkZWZpbmVkIHRyYW5zbGF0aW9ucydcbiAgICB9KTtcbiAgICBjb25zdCB6aXAgPSBhd2FpdCB0aGlzLnppcC5jcmVhdGVaaXAoW10pO1xuXG4gICAgY29uc3QgeyBkYXRhOiBiaW5hcnkgfSA9IGF3YWl0IHRoaXMuYXBwU2VydmljZS5iaW5hcnkoYXBwKS51cGxvYWQoemlwLCAndHJhbnNsYXRpb25zLnppcCcpO1xuICAgIGNvbnN0IHsgZGF0YTogdXBkYXRlZEFwcCB9ID0gYXdhaXQgdGhpcy5hcHBTZXJ2aWNlLnVwZGF0ZSh7XG4gICAgICBpZDogYXBwLmlkLFxuICAgICAgYWN0aXZlVmVyc2lvbklkOiBiaW5hcnkuaWQgYXMgc3RyaW5nXG4gICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZWRBcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEZpbGVGcm9tVHJhbnNsYXRpb25BcHAoZmlsZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmlsZUZyb21QYXRoKGAvYXBwcy9wdWJsaWMvJHt0aGlzLnRyYW5zbGF0aW9uQXBwQ29udGV4dFBhdGh9LyR7ZmlsZX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RmlsZUZyb21QYXRoKHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbmFsUGF0aCA9IGAke3BhdGh9P25vY2FjaGU9JHtEYXRlLm5vdygpfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmaW5hbFBhdGgpO1xuXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBmaWxlIGZyb20gJHtwYXRofWApO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { hookNavigator, hookRoute } from '@c8y/ngx-components';
|
|
2
|
+
import { TranslationEditorNaviagtorFactoryService } from './translation-editor-naviagtor-factory.service';
|
|
3
|
+
export const tranlationEditorProviders = [
|
|
4
|
+
hookRoute({
|
|
5
|
+
path: 'localization',
|
|
6
|
+
loadComponent: () => import('@c8y/ngx-components/translation-editor/lazy').then(m => m.TranslationEditorComponent)
|
|
7
|
+
}),
|
|
8
|
+
hookNavigator(TranslationEditorNaviagtorFactoryService)
|
|
9
|
+
];
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxTQUFTLENBQUM7UUFDUixJQUFJLEVBQUUsY0FBYztRQUNwQixhQUFhLEVBQUUsR0FBRyxFQUFFLENBQ2xCLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztLQUNoRyxDQUFDO0lBQ0YsYUFBYSxDQUFDLHdDQUF3QyxDQUFDO0NBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob29rTmF2aWdhdG9yLCBob29rUm91dGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uRWRpdG9yTmF2aWFndG9yRmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0aW9uLWVkaXRvci1uYXZpYWd0b3ItZmFjdG9yeS5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IHRyYW5sYXRpb25FZGl0b3JQcm92aWRlcnMgPSBbXG4gIGhvb2tSb3V0ZSh7XG4gICAgcGF0aDogJ2xvY2FsaXphdGlvbicsXG4gICAgbG9hZENvbXBvbmVudDogKCkgPT5cbiAgICAgIGltcG9ydCgnQGM4eS9uZ3gtY29tcG9uZW50cy90cmFuc2xhdGlvbi1lZGl0b3IvbGF6eScpLnRoZW4obSA9PiBtLlRyYW5zbGF0aW9uRWRpdG9yQ29tcG9uZW50KVxuICB9KSxcbiAgaG9va05hdmlnYXRvcihUcmFuc2xhdGlvbkVkaXRvck5hdmlhZ3RvckZhY3RvcnlTZXJ2aWNlKVxuXTtcbiJdfQ==
|
package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { NgForOf } from '@angular/common';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
4
|
+
import { C8yTranslateDirective, C8yTranslatePipe, FormGroupComponent, IconDirective, MessageDirective, MessagesComponent, ModalModule } from '@c8y/ngx-components';
|
|
5
|
+
import { gettext } from '@c8y/ngx-components/gettext';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/forms";
|
|
8
|
+
import * as i2 from "@c8y/ngx-components";
|
|
9
|
+
export class AddTranslationModalComponent {
|
|
10
|
+
constructor(formBuilder) {
|
|
11
|
+
this.formBuilder = formBuilder;
|
|
12
|
+
this.title = gettext('Add translation');
|
|
13
|
+
this.result = new Promise((resolve, reject) => {
|
|
14
|
+
this._resovle = resolve;
|
|
15
|
+
this._reject = reject;
|
|
16
|
+
});
|
|
17
|
+
this.alreadyTakenMsg = gettext('The provided translation key has already been defined.');
|
|
18
|
+
this.alreadyDefinedKeys = [];
|
|
19
|
+
this.availableLangs = [];
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
this.form = this.initForm();
|
|
23
|
+
}
|
|
24
|
+
initForm() {
|
|
25
|
+
return this.formBuilder.group({
|
|
26
|
+
key: ['', [Validators.required, this.ensureNotExistingKey()]],
|
|
27
|
+
...this.availableLangs
|
|
28
|
+
.map(language => {
|
|
29
|
+
return {
|
|
30
|
+
[language.lang]: ['']
|
|
31
|
+
};
|
|
32
|
+
})
|
|
33
|
+
.reduceRight((acc, curr) => ({ ...curr, ...acc }), {})
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
cancel() {
|
|
37
|
+
this._reject();
|
|
38
|
+
}
|
|
39
|
+
save() {
|
|
40
|
+
this._resovle(this.form.value);
|
|
41
|
+
}
|
|
42
|
+
ensureNotExistingKey() {
|
|
43
|
+
return (control) => {
|
|
44
|
+
if (typeof control.value === 'string') {
|
|
45
|
+
const keyAlreadyTaken = this.alreadyDefinedKeys.some(name => name === control.value);
|
|
46
|
+
if (keyAlreadyTaken) {
|
|
47
|
+
return { keyAlreadyTaken: {} };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddTranslationModalComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
54
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", 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: i2.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: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.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"] }] }); }
|
|
55
|
+
}
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddTranslationModalComponent, decorators: [{
|
|
57
|
+
type: Component,
|
|
58
|
+
args: [{ selector: 'c8y-add-translation-modal', standalone: true, imports: [
|
|
59
|
+
ModalModule,
|
|
60
|
+
IconDirective,
|
|
61
|
+
MessagesComponent,
|
|
62
|
+
MessageDirective,
|
|
63
|
+
C8yTranslatePipe,
|
|
64
|
+
C8yTranslateDirective,
|
|
65
|
+
ReactiveFormsModule,
|
|
66
|
+
NgForOf,
|
|
67
|
+
FormGroupComponent
|
|
68
|
+
], 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" }]
|
|
69
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }] });
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXRyYW5zbGF0aW9uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9sYXp5L2FkZC10cmFuc2xhdGlvbi1tb2RhbC9hZGQtdHJhbnNsYXRpb24tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvYWRkLXRyYW5zbGF0aW9uLW1vZGFsL2FkZC10cmFuc2xhdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBRUwsV0FBVyxFQUNYLG1CQUFtQixFQUVuQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBa0J0RCxNQUFNLE9BQU8sNEJBQTRCO0lBa0J2QyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWpCbkMsVUFBSyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRzVDLFdBQU0sR0FBRyxJQUFJLE9BQU8sQ0FBNEMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxvQkFBZSxHQUFHLE9BQU8sQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBQ3BGLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQUNsQyxtQkFBYyxHQUdSLEVBQUUsQ0FBQztJQUtzQyxDQUFDO0lBRWhELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQzdELEdBQUcsSUFBSSxDQUFDLGNBQWM7aUJBQ25CLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDZCxPQUFPO29CQUNMLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN0QixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ3pELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsT0FBTyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JGLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3BCLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDOzhHQXZEVSw0QkFBNEI7a0dBQTVCLDRCQUE0QixxRkNwQ3pDLHEwQ0FtREEsMkNEMUJJLFdBQVcsK09BQ1gsYUFBYSwyRUFDYixpQkFBaUIsc0dBQ2pCLGdCQUFnQiw2RUFDaEIsZ0JBQWdCLGtEQUNoQixxQkFBcUIsdUVBQ3JCLG1CQUFtQixvMkJBQ25CLE9BQU8sbUhBQ1Asa0JBQWtCOzsyRkFHVCw0QkFBNEI7a0JBaEJ4QyxTQUFTOytCQUNFLDJCQUEyQixjQUV6QixJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLGtCQUFrQjtxQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0Zvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JGbixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDOHlUcmFuc2xhdGVEaXJlY3RpdmUsXG4gIEM4eVRyYW5zbGF0ZVBpcGUsXG4gIEZvcm1Hcm91cENvbXBvbmVudCxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTWVzc2FnZURpcmVjdGl2ZSxcbiAgTWVzc2FnZXNDb21wb25lbnQsXG4gIE1vZGFsTW9kdWxlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZ2V0dGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hZGQtdHJhbnNsYXRpb24tbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXRyYW5zbGF0aW9uLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1vZGFsTW9kdWxlLFxuICAgIEljb25EaXJlY3RpdmUsXG4gICAgTWVzc2FnZXNDb21wb25lbnQsXG4gICAgTWVzc2FnZURpcmVjdGl2ZSxcbiAgICBDOHlUcmFuc2xhdGVQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE5nRm9yT2YsXG4gICAgRm9ybUdyb3VwQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQWRkVHJhbnNsYXRpb25Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlYWRvbmx5IHRpdGxlID0gZ2V0dGV4dCgnQWRkIHRyYW5zbGF0aW9uJyk7XG4gIGZvcm06IFJldHVyblR5cGU8dHlwZW9mIHRoaXMuaW5pdEZvcm0+O1xuXG4gIHJlc3VsdCA9IG5ldyBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIHRoaXMuaW5pdEZvcm0+Wyd2YWx1ZSddPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fcmVzb3ZsZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcbiAgYWxyZWFkeVRha2VuTXNnID0gZ2V0dGV4dCgnVGhlIHByb3ZpZGVkIHRyYW5zbGF0aW9uIGtleSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuJyk7XG4gIGFscmVhZHlEZWZpbmVkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgYXZhaWxhYmxlTGFuZ3M6IHtcbiAgICBsYW5nOiBzdHJpbmc7XG4gICAgbmF0aXZlTGFuZ3VhZ2U6IHN0cmluZztcbiAgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfcmVzb3ZsZTogKHZhbHVlOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmluaXRGb3JtPlsndmFsdWUnXSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIGluaXRGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGtleTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5lbnN1cmVOb3RFeGlzdGluZ0tleSgpXV0sXG4gICAgICAuLi50aGlzLmF2YWlsYWJsZUxhbmdzXG4gICAgICAgIC5tYXAobGFuZ3VhZ2UgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbbGFuZ3VhZ2UubGFuZ106IFsnJ11cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAucmVkdWNlUmlnaHQoKGFjYywgY3VycikgPT4gKHsgLi4uY3VyciwgLi4uYWNjIH0pLCB7fSlcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9yZWplY3QoKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5fcmVzb3ZsZSh0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVOb3RFeGlzdGluZ0tleSgpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qga2V5QWxyZWFkeVRha2VuID0gdGhpcy5hbHJlYWR5RGVmaW5lZEtleXMuc29tZShuYW1lID0+IG5hbWUgPT09IGNvbnRyb2wudmFsdWUpO1xuICAgICAgICBpZiAoa2V5QWxyZWFkeVRha2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHsga2V5QWxyZWFkeVRha2VuOiB7fSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG59XG4iLCI8Yzh5LW1vZGFsXG4gIFt0aXRsZV09XCJ0aXRsZVwiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIChvbkRpc21pc3MpPVwiY2FuY2VsKClcIlxuICAob25DbG9zZSk9XCJzYXZlKClcIlxuICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgW2xhYmVsc109XCJ7IGNhbmNlbDogJ0NhbmNlbCcsIG9rOiAnQWRkJyB9XCJcbj5cbjxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICA8c3BhbiBbYzh5SWNvbl09XCInbGFuZ3VhZ2UxJ1wiPjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwicC0yNFwiPlxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbFxuICAgICAgICBmb3I9XCJsYWJlbFwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBUcmFuc2xhdGlvbiBrZXlcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBuYW1lPVwia2V5XCJcbiAgICAgICAgaWQ9XCJrZXlcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImtleVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ0hvbWUnIH0gfX1cIlxuICAgICAgLz5cbiAgICAgIDxjOHktbWVzc2FnZXM+XG4gICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgIG5hbWU9XCJrZXlBbHJlYWR5VGFrZW5cIlxuICAgICAgICAgIFt0ZXh0XT1cImFscmVhZHlUYWtlbk1zZyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgIDxjOHktZm9ybS1ncm91cCAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgYXZhaWxhYmxlTGFuZ3NcIj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBbZm9yXT1cImxhbmd1YWdlLmxhbmdcIlxuICAgICAgPlxuICAgICAgICB7eyBsYW5ndWFnZS5uYXRpdmVMYW5ndWFnZSB9fSAoe3sgbGFuZ3VhZ2UubGFuZyB9fSlcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbbmFtZV09XCJsYW5ndWFnZS5sYW5nXCJcbiAgICAgICAgW2lkXT1cImxhbmd1YWdlLmxhbmdcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibGFuZ3VhZ2UubGFuZ1wiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvZGl2PlxuPC9jOHktbW9kYWw+XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYzh5LW5neC1jb21wb25lbnRzLXRyYW5zbGF0aW9uLWVkaXRvci1sYXp5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvYzh5LW5neC1jb21wb25lbnRzLXRyYW5zbGF0aW9uLWVkaXRvci1sYXp5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './translation-editor/translation-editor.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvbGF6eS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1EQUFtRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90cmFuc2xhdGlvbi1lZGl0b3IvdHJhbnNsYXRpb24tZWRpdG9yLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { NgIf } from '@angular/common';
|
|
2
|
+
import { Component, ElementRef, Optional, ViewChild } from '@angular/core';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { CellRendererContext, Permissions, C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';
|
|
5
|
+
import { TranslationEditorComponent } from '../translation-editor/translation-editor.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@c8y/ngx-components";
|
|
8
|
+
import * as i2 from "../translation-editor/translation-editor.component";
|
|
9
|
+
import * as i3 from "@angular/forms";
|
|
10
|
+
export class ManageTranslationCellRendererComponent {
|
|
11
|
+
constructor(context, permissions, grid) {
|
|
12
|
+
this.context = context;
|
|
13
|
+
this.permissions = permissions;
|
|
14
|
+
this.grid = grid;
|
|
15
|
+
this.FOCUS_RENDER_WAIT_TIME_IN_MS = 100;
|
|
16
|
+
this.isCellEditable = false;
|
|
17
|
+
this.cellValue = '';
|
|
18
|
+
this.isCreateDisabled = false;
|
|
19
|
+
}
|
|
20
|
+
ngOnInit() {
|
|
21
|
+
this.isCreateDisabled = !this.permissions.hasRole('ROLE_APPLICATION_MANAGEMENT_ADMIN');
|
|
22
|
+
}
|
|
23
|
+
async save() {
|
|
24
|
+
this.isCellEditable = false;
|
|
25
|
+
const cellValueTrimed = this.cellValue.trim();
|
|
26
|
+
this.context.value = cellValueTrimed;
|
|
27
|
+
this.context.item[this.context.property.path] = cellValueTrimed;
|
|
28
|
+
this.grid?.valueChanged();
|
|
29
|
+
}
|
|
30
|
+
cancel() {
|
|
31
|
+
this.isCellEditable = false;
|
|
32
|
+
}
|
|
33
|
+
editCell() {
|
|
34
|
+
this.cellValue = this.context.value;
|
|
35
|
+
this.isCellEditable = true;
|
|
36
|
+
// Focuses the input box after the input text box is visible
|
|
37
|
+
setTimeout(() => {
|
|
38
|
+
this.cellInput.nativeElement.focus();
|
|
39
|
+
}, this.FOCUS_RENDER_WAIT_TIME_IN_MS);
|
|
40
|
+
}
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ManageTranslationCellRendererComponent, deps: [{ token: i1.CellRendererContext }, { token: i1.Permissions }, { token: i2.TranslationEditorComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", 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: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ManageTranslationCellRendererComponent, decorators: [{
|
|
45
|
+
type: Component,
|
|
46
|
+
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" }]
|
|
47
|
+
}], ctorParameters: () => [{ type: i1.CellRendererContext }, { type: i1.Permissions }, { type: i2.TranslationEditorComponent, decorators: [{
|
|
48
|
+
type: Optional
|
|
49
|
+
}] }], propDecorators: { cellInput: [{
|
|
50
|
+
type: ViewChild,
|
|
51
|
+
args: ['cellInput']
|
|
52
|
+
}] } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIvbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIvbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixhQUFhLEVBQ2QsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7QUFRaEcsTUFBTSxPQUFPLHNDQUFzQztJQU9qRCxZQUNTLE9BQTRCLEVBQzNCLFdBQXdCLEVBQ1osSUFBZ0M7UUFGN0MsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDWixTQUFJLEdBQUosSUFBSSxDQUE0QjtRQVRyQyxpQ0FBNEIsR0FBRyxHQUFHLENBQUM7UUFDcEQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQU10QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsNERBQTREO1FBQzVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxDQUFDLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDeEMsQ0FBQzs4R0FyQ1Usc0NBQXNDO2tHQUF0QyxzQ0FBc0Msd01DakJuRCwydERBbUVBLDRDRHBEWSxJQUFJLHdGQUFFLGdCQUFnQixrREFBRSxhQUFhLDBFQUFFLFdBQVc7OzJGQUVqRCxzQ0FBc0M7a0JBTmxELFNBQVM7K0JBQ0Usc0NBQXNDLGNBRXBDLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDOzswQkFZMUQsUUFBUTt5Q0FOYSxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDZWxsUmVuZGVyZXJDb250ZXh0LFxuICBQZXJtaXNzaW9ucyxcbiAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgSWNvbkRpcmVjdGl2ZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vdHJhbnNsYXRpb24tZWRpdG9yL3RyYW5zbGF0aW9uLWVkaXRvci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZVVybDogJ21hbmFnZS10cmFuc2xhdGlvbi1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nSWYsIEM4eVRyYW5zbGF0ZVBpcGUsIEljb25EaXJlY3RpdmUsIEZvcm1zTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBNYW5hZ2VUcmFuc2xhdGlvbkNlbGxSZW5kZXJlckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgRk9DVVNfUkVOREVSX1dBSVRfVElNRV9JTl9NUyA9IDEwMDtcbiAgaXNDZWxsRWRpdGFibGUgPSBmYWxzZTtcbiAgY2VsbFZhbHVlID0gJyc7XG4gIEBWaWV3Q2hpbGQoJ2NlbGxJbnB1dCcpIGNlbGxJbnB1dDogRWxlbWVudFJlZjtcbiAgaXNDcmVhdGVEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb250ZXh0OiBDZWxsUmVuZGVyZXJDb250ZXh0LFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZ3JpZDogVHJhbnNsYXRpb25FZGl0b3JDb21wb25lbnRcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNDcmVhdGVEaXNhYmxlZCA9ICF0aGlzLnBlcm1pc3Npb25zLmhhc1JvbGUoJ1JPTEVfQVBQTElDQVRJT05fTUFOQUdFTUVOVF9BRE1JTicpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzQ2VsbEVkaXRhYmxlID0gZmFsc2U7XG4gICAgY29uc3QgY2VsbFZhbHVlVHJpbWVkID0gdGhpcy5jZWxsVmFsdWUudHJpbSgpO1xuICAgIHRoaXMuY29udGV4dC52YWx1ZSA9IGNlbGxWYWx1ZVRyaW1lZDtcbiAgICB0aGlzLmNvbnRleHQuaXRlbVt0aGlzLmNvbnRleHQucHJvcGVydHkucGF0aF0gPSBjZWxsVmFsdWVUcmltZWQ7XG4gICAgdGhpcy5ncmlkPy52YWx1ZUNoYW5nZWQoKTtcbiAgfVxuXG4gIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2VsbEVkaXRhYmxlID0gZmFsc2U7XG4gIH1cblxuICBlZGl0Q2VsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGxWYWx1ZSA9IHRoaXMuY29udGV4dC52YWx1ZTtcbiAgICB0aGlzLmlzQ2VsbEVkaXRhYmxlID0gdHJ1ZTtcblxuICAgIC8vIEZvY3VzZXMgdGhlIGlucHV0IGJveCBhZnRlciB0aGUgaW5wdXQgdGV4dCBib3ggaXMgdmlzaWJsZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jZWxsSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0sIHRoaXMuRk9DVVNfUkVOREVSX1dBSVRfVElNRV9JTl9NUyk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIHBvaW50ZXIgZC1mbGV4XCJcbiAgdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIH19XCJcbiAgZGF0YS1jeT1cImM4eS1tYW5hZ2UtdHJhbnNsYXRpb24tY2VsbC1yZW5kZXJlci0tZWRpdFwiXG4gIChjbGljayk9XCIhaXNDcmVhdGVEaXNhYmxlZCA/IGVkaXRDZWxsKCkgOiAnJ1wiXG4gICpuZ0lmPVwiIWlzQ2VsbEVkaXRhYmxlXCJcbj5cbiAgPHNwYW5cbiAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICpuZ0lmPVwiIWlzQ2VsbEVkaXRhYmxlICYmIGNvbnRleHQudmFsdWUgIT09ICcnXCJcbiAgPlxuICAgIHt7IGNvbnRleHQudmFsdWUgfX1cbiAgPC9zcGFuPlxuICA8c3BhblxuICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXG4gICAgdGl0bGU9XCJ7eyAnQWRkIHRyYW5zbGF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKm5nSWY9XCIhaXNDZWxsRWRpdGFibGUgJiYgY29udGV4dC52YWx1ZSA9PT0gJydcIlxuICA+XG4gICAgPGVtIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7ICdBZGQgdHJhbnNsYXRpb24nIHwgdHJhbnNsYXRlIH19PC9lbT5cbiAgPC9zcGFuPlxuICA8aVxuICAgIGNsYXNzPVwic2hvd09uSG92ZXIgdGV4dC1wcmltYXJ5IG0tbC00XCJcbiAgICBjOHlJY29uPVwicGVuY2lsXCJcbiAgICB0aXRsZT1cInt7ICdFZGl0IHRyYW5zbGF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKm5nSWY9XCIhaXNDcmVhdGVEaXNhYmxlZFwiXG4gID48L2k+XG48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCJcbiAgKm5nSWY9XCJpc0NlbGxFZGl0YWJsZSAmJiAhaXNDcmVhdGVEaXNhYmxlZFwiXG4+XG4gIDxpbnB1dFxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICBwbGFjZWhvbGRlcj1cInt7ICdBZGQgdHJhbnNsYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgI2NlbGxJbnB1dFxuICAgIGRhdGEtY3k9XCJjOHktbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXItLWlucHV0XCJcbiAgICBbKG5nTW9kZWwpXT1cImNlbGxWYWx1ZVwiXG4gIC8+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tY2xlYW5cIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgICBkYXRhLWN5PVwiYzh5LW1hbmFnZS10cmFuc2xhdGlvbi1jZWxsLXJlbmRlcmVyLS1jYW5jZWxcIlxuICAgID5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxuICAgICAgICBjOHlJY29uPVwidGltZXNcIlxuICAgICAgPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tY2xlYW5cIlxuICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXItLXNhdmVcIlxuICAgID5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5XCJcbiAgICAgICAgYzh5SWNvbj1cImNoZWNrXCJcbiAgICAgID48L2k+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { NgIf } from '@angular/common';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { ActionBarItemComponent, AlertService, AppStateService, BuiltInActionType, C8yTranslateDirective, C8yTranslatePipe, DataGridModule, gettext, IconDirective, LoadingComponent, TitleComponent, TranslateService } from '@c8y/ngx-components';
|
|
4
|
+
import { TranslationStoreService } from '@c8y/ngx-components/translation-editor/data';
|
|
5
|
+
import { ManageTranslationCellRendererComponent } from '../manage-translation-cell-renderer/manage-translation-cell-renderer.component';
|
|
6
|
+
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
7
|
+
import { AddTranslationModalComponent } from '../add-translation-modal/add-translation-modal.component';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@c8y/ngx-components/translation-editor/data";
|
|
10
|
+
import * as i2 from "ngx-bootstrap/modal";
|
|
11
|
+
import * as i3 from "@c8y/ngx-components";
|
|
12
|
+
export class TranslationEditorComponent {
|
|
13
|
+
constructor(translationStore, modalService, alert, appState, translate) {
|
|
14
|
+
this.translationStore = translationStore;
|
|
15
|
+
this.modalService = modalService;
|
|
16
|
+
this.alert = alert;
|
|
17
|
+
this.appState = appState;
|
|
18
|
+
this.translate = translate;
|
|
19
|
+
this.pagination = {
|
|
20
|
+
pageSize: 10,
|
|
21
|
+
currentPage: 1
|
|
22
|
+
};
|
|
23
|
+
this.displayOptions = {
|
|
24
|
+
bordered: false,
|
|
25
|
+
striped: true,
|
|
26
|
+
filter: true,
|
|
27
|
+
gridHeader: true,
|
|
28
|
+
hover: true
|
|
29
|
+
};
|
|
30
|
+
this.actionControls = [
|
|
31
|
+
{
|
|
32
|
+
type: BuiltInActionType.Delete,
|
|
33
|
+
callback: item => {
|
|
34
|
+
this.items = this.items.filter(i => i.key !== item.key);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
];
|
|
38
|
+
this.columns = [];
|
|
39
|
+
this.isLoading = true;
|
|
40
|
+
this.items = new Array();
|
|
41
|
+
this.isHavingChanges = false;
|
|
42
|
+
this.availableLangs = [];
|
|
43
|
+
this.availableLangs = this.appState.state.langs
|
|
44
|
+
.sort((a, b) => a.localeCompare(b))
|
|
45
|
+
.map(l => ({
|
|
46
|
+
lang: l,
|
|
47
|
+
nativeLanguage: this.translate.getNativeLanguage(l)
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
async ngOnInit() {
|
|
51
|
+
this.refresh();
|
|
52
|
+
}
|
|
53
|
+
async refresh() {
|
|
54
|
+
this.isLoading = true;
|
|
55
|
+
this.refreshColumns();
|
|
56
|
+
const translations = await this.translationStore.getCombinedListOfTranslationsForPerKey(this.availableLangs.map(l => l.lang));
|
|
57
|
+
this.items = translations;
|
|
58
|
+
this.isLoading = false;
|
|
59
|
+
}
|
|
60
|
+
async addEntry() {
|
|
61
|
+
const currentKeys = this.items.map(item => item.key);
|
|
62
|
+
const modalRef = this.modalService.show(AddTranslationModalComponent, {
|
|
63
|
+
initialState: { alreadyDefinedKeys: currentKeys, availableLangs: this.availableLangs }
|
|
64
|
+
});
|
|
65
|
+
try {
|
|
66
|
+
const result = await modalRef.content.result;
|
|
67
|
+
this.items = [...this.items, result];
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
// do nothing, modal was closed.
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
refreshColumns() {
|
|
74
|
+
this.columns = this.getColumnsForLocales();
|
|
75
|
+
}
|
|
76
|
+
valueChanged() {
|
|
77
|
+
this.isHavingChanges = true;
|
|
78
|
+
}
|
|
79
|
+
async saveTranslations() {
|
|
80
|
+
try {
|
|
81
|
+
await this.translationStore.updateTranslations(this.items);
|
|
82
|
+
await this.refresh();
|
|
83
|
+
this.alert.success(gettext('Translations saved'));
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
this.alert.danger(gettext('Failed to save translations'));
|
|
87
|
+
this.alert.addServerFailure(e);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
getColumnsForLocales() {
|
|
91
|
+
const columns = new Array();
|
|
92
|
+
columns.push({
|
|
93
|
+
name: 'key',
|
|
94
|
+
header: gettext('Translation key'),
|
|
95
|
+
path: 'key',
|
|
96
|
+
filterable: true
|
|
97
|
+
});
|
|
98
|
+
columns.push(...this.availableLangs.map((language, index) => ({
|
|
99
|
+
name: language.lang,
|
|
100
|
+
header: `${language.nativeLanguage} (${language.lang})`,
|
|
101
|
+
path: language.lang,
|
|
102
|
+
filterable: false,
|
|
103
|
+
visible: index < 5,
|
|
104
|
+
cellRendererComponent: ManageTranslationCellRendererComponent
|
|
105
|
+
})));
|
|
106
|
+
return columns;
|
|
107
|
+
}
|
|
108
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorComponent, deps: [{ token: i1.TranslationStoreService }, { token: i2.BsModalService }, { token: i3.AlertService }, { token: i3.AppStateService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
109
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TranslationEditorComponent, isStandalone: true, selector: "c8y-translation-editor", ngImport: i0, template: "<c8y-title translate>Localization</c8y-title>\n\n<ng-container *ngIf=\"!isLoading; else loading\">\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 & apply</span>\n </button>\n </c8y-action-bar-item>\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</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], 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: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { 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]" }] }); }
|
|
110
|
+
}
|
|
111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorComponent, decorators: [{
|
|
112
|
+
type: Component,
|
|
113
|
+
args: [{ selector: 'c8y-translation-editor', standalone: true, imports: [
|
|
114
|
+
TitleComponent,
|
|
115
|
+
DataGridModule,
|
|
116
|
+
LoadingComponent,
|
|
117
|
+
NgIf,
|
|
118
|
+
C8yTranslatePipe,
|
|
119
|
+
ActionBarItemComponent,
|
|
120
|
+
IconDirective,
|
|
121
|
+
C8yTranslateDirective
|
|
122
|
+
], template: "<c8y-title translate>Localization</c8y-title>\n\n<ng-container *ngIf=\"!isLoading; else loading\">\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 & apply</span>\n </button>\n </c8y-action-bar-item>\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</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n" }]
|
|
123
|
+
}], ctorParameters: () => [{ type: i1.TranslationStoreService }, { type: i2.BsModalService }, { type: i3.AlertService }, { type: i3.AppStateService }, { type: i3.TranslateService }] });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9sYXp5L3RyYW5zbGF0aW9uLWVkaXRvci90cmFuc2xhdGlvbi1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvdHJhbnNsYXRpb24tZWRpdG9yL3RyYW5zbGF0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsc0JBQXNCLEVBRXRCLFlBQVksRUFDWixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFFaEIsY0FBYyxFQUVkLE9BQU8sRUFDUCxhQUFhLEVBQ2IsZ0JBQWdCLEVBRWhCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUN4SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMERBQTBELENBQUM7Ozs7O0FBaUJ4RyxNQUFNLE9BQU8sMEJBQTBCO0lBOEJyQyxZQUNVLGdCQUF5QyxFQUN6QyxZQUE0QixFQUM1QixLQUFtQixFQUNuQixRQUF5QixFQUN6QixTQUEyQjtRQUozQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUM1QixVQUFLLEdBQUwsS0FBSyxD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Q0FBQyxJQUFJO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxLQUFLLEdBQUcsQ0FBQztZQUNsQixxQkFBcUIsRUFBRSxzQ0FBc0M7U0FDOUQsQ0FBVyxDQUNmLENBQ0YsQ0FBQztRQUVGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OEdBdEhVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLGtGQ3hDdkMsK21DQXdDQSw0Q0RWSSxjQUFjLGtGQUNkLGNBQWMsdXlCQUNkLGdCQUFnQixtR0FDaEIsSUFBSSx3RkFDSixnQkFBZ0Isa0RBQ2hCLHNCQUFzQiwwSkFDdEIsYUFBYSwyRUFDYixxQkFBcUI7OzJGQUdaLDBCQUEwQjtrQkFmdEMsU0FBUzsrQkFDRSx3QkFBd0IsY0FFdEIsSUFBSSxXQUNQO3dCQUNQLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLElBQUk7d0JBQ0osZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLGFBQWE7d0JBQ2IscUJBQXFCO3FCQUN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQzh5VHJhbnNsYXRlRGlyZWN0aXZlLFxuICBDOHlUcmFuc2xhdGVQaXBlLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkTW9kdWxlLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgZ2V0dGV4dCxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTG9hZGluZ0NvbXBvbmVudCxcbiAgUGFnaW5hdGlvbixcbiAgVGl0bGVDb21wb25lbnQsXG4gIFRyYW5zbGF0ZVNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblN0b3JlU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvdHJhbnNsYXRpb24tZWRpdG9yL2RhdGEnO1xuaW1wb3J0IHsgTWFuYWdlVHJhbnNsYXRpb25DZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9tYW5hZ2UtdHJhbnNsYXRpb24tY2VsbC1yZW5kZXJlci9tYW5hZ2UtdHJhbnNsYXRpb24tY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEFkZFRyYW5zbGF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtdHJhbnNsYXRpb24tbW9kYWwvYWRkLXRyYW5zbGF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10cmFuc2xhdGlvbi1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJhbnNsYXRpb24tZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIERhdGFHcmlkTW9kdWxlLFxuICAgIExvYWRpbmdDb21wb25lbnQsXG4gICAgTmdJZixcbiAgICBDOHlUcmFuc2xhdGVQaXBlLFxuICAgIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBDOHlUcmFuc2xhdGVEaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB7XG4gICAgcGFnZVNpemU6IDEwLFxuICAgIGN1cnJlbnRQYWdlOiAxXG4gIH07XG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWUsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBob3ZlcjogdHJ1ZVxuICB9O1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgIGNhbGxiYWNrOiBpdGVtID0+IHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGkgPT4gaS5rZXkgIT09IGl0ZW0ua2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW107XG4gIGlzTG9hZGluZyA9IHRydWU7XG4gIGl0ZW1zOiBBd2FpdGVkPFJldHVyblR5cGU8VHJhbnNsYXRpb25TdG9yZVNlcnZpY2VbJ2dldENvbWJpbmVkTGlzdE9mVHJhbnNsYXRpb25zRm9yUGVyS2V5J10+PiA9XG4gICAgbmV3IEFycmF5PGFueT4oKTtcbiAgaXNIYXZpbmdDaGFuZ2VzID0gZmFsc2U7XG4gIGF2YWlsYWJsZUxhbmdzOiB7XG4gICAgbGFuZzogc3RyaW5nO1xuICAgIG5hdGl2ZUxhbmd1YWdlOiBzdHJpbmc7XG4gIH1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TdG9yZTogVHJhbnNsYXRpb25TdG9yZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5hdmFpbGFibGVMYW5ncyA9ICh0aGlzLmFwcFN0YXRlLnN0YXRlLmxhbmdzIGFzIHN0cmluZ1tdKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgIC5tYXAobCA9PiAoe1xuICAgICAgICBsYW5nOiBsLFxuICAgICAgICBuYXRpdmVMYW5ndWFnZTogdGhpcy50cmFuc2xhdGUuZ2V0TmF0aXZlTGFuZ3VhZ2UobClcbiAgICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5yZWZyZXNoQ29sdW1ucygpO1xuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblN0b3JlLmdldENvbWJpbmVkTGlzdE9mVHJhbnNsYXRpb25zRm9yUGVyS2V5KFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ncy5tYXAobCA9PiBsLmxhbmcpXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbXMgPSB0cmFuc2xhdGlvbnM7XG5cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgYWRkRW50cnkoKSB7XG4gICAgY29uc3QgY3VycmVudEtleXMgPSB0aGlzLml0ZW1zLm1hcChpdGVtID0+IGl0ZW0ua2V5KTtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coQWRkVHJhbnNsYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgaW5pdGlhbFN0YXRlOiB7IGFscmVhZHlEZWZpbmVkS2V5czogY3VycmVudEtleXMsIGF2YWlsYWJsZUxhbmdzOiB0aGlzLmF2YWlsYWJsZUxhbmdzIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kYWxSZWYuY29udGVudC5yZXN1bHQ7XG4gICAgICB0aGlzLml0ZW1zID0gWy4uLnRoaXMuaXRlbXMsIHJlc3VsdCBhcyBhbnldO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmcsIG1vZGFsIHdhcyBjbG9zZWQuXG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaENvbHVtbnMoKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zRm9yTG9jYWxlcygpO1xuICB9XG5cbiAgdmFsdWVDaGFuZ2VkKCkge1xuICAgIHRoaXMuaXNIYXZpbmdDaGFuZ2VzID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVUcmFuc2xhdGlvbnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRpb25TdG9yZS51cGRhdGVUcmFuc2xhdGlvbnModGhpcy5pdGVtcyk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdUcmFuc2xhdGlvbnMgc2F2ZWQnKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmFpbGVkIHRvIHNhdmUgdHJhbnNsYXRpb25zJykpO1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uc0ZvckxvY2FsZXMoKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBBcnJheTxDb2x1bW4+KCk7XG4gICAgY29sdW1ucy5wdXNoKHtcbiAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdUcmFuc2xhdGlvbiBrZXknKSxcbiAgICAgIHBhdGg6ICdrZXknLFxuICAgICAgZmlsdGVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgY29sdW1ucy5wdXNoKFxuICAgICAgLi4udGhpcy5hdmFpbGFibGVMYW5ncy5tYXAoXG4gICAgICAgIChsYW5ndWFnZSwgaW5kZXgpID0+XG4gICAgICAgICAgKHtcbiAgICAgICAgICAgIG5hbWU6IGxhbmd1YWdlLmxhbmcsXG4gICAgICAgICAgICBoZWFkZXI6IGAke2xhbmd1YWdlLm5hdGl2ZUxhbmd1YWdlfSAoJHtsYW5ndWFnZS5sYW5nfSlgLFxuICAgICAgICAgICAgcGF0aDogbGFuZ3VhZ2UubGFuZyxcbiAgICAgICAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmlzaWJsZTogaW5kZXggPCA1LFxuICAgICAgICAgICAgY2VsbFJlbmRlcmVyQ29tcG9uZW50OiBNYW5hZ2VUcmFuc2xhdGlvbkNlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgICAgICAgIH0pIGFzIENvbHVtblxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxufVxuIiwiPGM4eS10aXRsZSB0cmFuc2xhdGU+TG9jYWxpemF0aW9uPC9jOHktdGl0bGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdcIj5cbiAgPGM4eS1hY3Rpb24tYmFyLWl0ZW0gcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICAoY2xpY2spPVwiYWRkRW50cnkoKVwiXG4gICAgICBkYXRhLWN5PVwiYzh5LXRyYW5zbGF0aW9uLWVkaXRvci0tYWRkLXRyYW5zbGF0aW9uXCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+QWRkIHRyYW5zbGF0aW9uPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbiAgPGM4eS1hY3Rpb24tYmFyLWl0ZW0gcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICAoY2xpY2spPVwic2F2ZVRyYW5zbGF0aW9ucygpXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktdHJhbnNsYXRpb24tZWRpdG9yLS1zYXZlLWFuZC1hcHBseVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cInNhdmVcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+U2F2ZSAmIGFwcGx5PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sXCJcbiAgICBbdGl0bGVdPVwiJ1RyYW5zbGF0aW9ucycgfCB0cmFuc2xhdGVcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgW2Rpc3BsYXlPcHRpb25zXT1cImRpc3BsYXlPcHRpb25zXCJcbiAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgICBbcm93c109XCJpdGVtc1wiXG4gID48L2M4eS1kYXRhLWdyaWQ+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { NavigatorNode, Permissions } from '@c8y/ngx-components';
|
|
3
|
+
import { gettext } from '@c8y/ngx-components/gettext';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@c8y/ngx-components";
|
|
6
|
+
export class TranslationEditorNaviagtorFactoryService {
|
|
7
|
+
constructor(permissions) {
|
|
8
|
+
this.permissions = permissions;
|
|
9
|
+
this.node = new NavigatorNode({
|
|
10
|
+
icon: 'language1',
|
|
11
|
+
label: gettext('Localization'),
|
|
12
|
+
parent: 'Settings',
|
|
13
|
+
path: 'localization'
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
get() {
|
|
17
|
+
if (!this.permissions.hasRole('ROLE_APPLICATION_MANAGEMENT_ADMIN')) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
return this.node;
|
|
21
|
+
}
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, deps: [{ token: i1.Permissions }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
23
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, providedIn: 'root' }); }
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, decorators: [{
|
|
26
|
+
type: Injectable,
|
|
27
|
+
args: [{
|
|
28
|
+
providedIn: 'root'
|
|
29
|
+
}]
|
|
30
|
+
}], ctorParameters: () => [{ type: i1.Permissions }] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tZWRpdG9yLW5hdmlhZ3Rvci1mYWN0b3J5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvdHJhbnNsYXRpb24tZWRpdG9yLW5hdmlhZ3Rvci1mYWN0b3J5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW9CLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQUt0RCxNQUFNLE9BQU8sd0NBQXdDO0lBUW5ELFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUHBDLFNBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUMvQixJQUFJLEVBQUUsV0FBVztZQUNqQixLQUFLLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUM5QixNQUFNLEVBQUUsVUFBVTtZQUNsQixJQUFJLEVBQUUsY0FBYztTQUNyQixDQUFDLENBQUM7SUFFNEMsQ0FBQztJQUVoRCxHQUFHO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQzs4R0FmVSx3Q0FBd0M7a0hBQXhDLHdDQUF3QyxjQUZ2QyxNQUFNOzsyRkFFUCx3Q0FBd0M7a0JBSHBELFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uRmFjdG9yeSwgTmF2aWdhdG9yTm9kZSwgUGVybWlzc2lvbnMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2dldHRleHQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkVkaXRvck5hdmlhZ3RvckZhY3RvcnlTZXJ2aWNlIGltcGxlbWVudHMgRXh0ZW5zaW9uRmFjdG9yeTxOYXZpZ2F0b3JOb2RlPiB7XG4gIHByaXZhdGUgbm9kZSA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICBpY29uOiAnbGFuZ3VhZ2UxJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnTG9jYWxpemF0aW9uJyksXG4gICAgcGFyZW50OiAnU2V0dGluZ3MnLFxuICAgIHBhdGg6ICdsb2NhbGl6YXRpb24nXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zKSB7fVxuXG4gIGdldCgpOiBOYXZpZ2F0b3JOb2RlIHwgTmF2aWdhdG9yTm9kZVtdIHtcbiAgICBpZiAoIXRoaXMucGVybWlzc2lvbnMuaGFzUm9sZSgnUk9MRV9BUFBMSUNBVElPTl9NQU5BR0VNRU5UX0FETUlOJykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuIl19
|