@c8y/ngx-components 1021.11.1 → 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-date-filter.component.d.ts +34 -0
- package/alarms/alarms-date-filter.component.d.ts.map +1 -0
- package/alarms/alarms-filter.component.d.ts +2 -1
- package/alarms/alarms-filter.component.d.ts.map +1 -1
- 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 +5 -2
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.component.d.ts +3 -1
- package/alarms/alarms.component.d.ts.map +1 -1
- package/alarms/alarms.model.d.ts +47 -1
- package/alarms/alarms.model.d.ts.map +1 -1
- package/alarms/alarms.module.d.ts +15 -13
- package/alarms/alarms.module.d.ts.map +1 -1
- package/branding/shared/data/store-branding.service.d.ts +5 -0
- package/branding/shared/data/store-branding.service.d.ts.map +1 -1
- package/branding/shared/lazy/branding/branding.component.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 +26 -20
- 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/widget-change-event.model.d.ts +1 -1
- package/core/dashboard/widget-change-event.model.d.ts.map +1 -1
- 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-helper.service.d.ts +2 -1
- package/core/dashboard/wiget-time-context/widget-time-context-helper.service.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 +12 -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 +7 -26
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.component.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/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +4 -4
- package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +3 -3
- package/esm2022/alarms/alarms-date-filter.component.mjs +139 -0
- package/esm2022/alarms/alarms-filter.component.mjs +11 -5
- package/esm2022/alarms/alarms-list.component.mjs +5 -16
- package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
- package/esm2022/alarms/alarms-view.service.mjs +16 -2
- package/esm2022/alarms/alarms.component.mjs +12 -6
- package/esm2022/alarms/alarms.model.mjs +17 -1
- package/esm2022/alarms/alarms.module.mjs +11 -4
- package/esm2022/branding/shared/data/store-branding.service.mjs +24 -1
- package/esm2022/branding/shared/lazy/branding/branding.component.mjs +3 -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.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 +22 -4
- 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/widget-change-event.model.mjs +1 -1
- 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-helper.service.mjs +3 -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 -36
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -72
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +9 -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/list-display-switch/list-display-switch.component.mjs +3 -3
- 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/interval-picker/c8y-ngx-components-interval-picker.mjs +5 -0
- package/esm2022/interval-picker/index.mjs +3 -0
- package/esm2022/interval-picker/interval-picker.component.mjs +68 -0
- package/esm2022/interval-picker/interval-picker.model.mjs +47 -0
- 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-alarm-event-selector.mjs +5 -5
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +189 -31
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +23 -0
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -0
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.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-interval-picker.mjs +120 -0
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -0
- 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 +5093 -4369
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/interval-picker/c8y-ngx-components-interval-picker.d.ts.map +1 -0
- package/interval-picker/index.d.ts +3 -0
- package/interval-picker/index.d.ts.map +1 -0
- package/{core/dashboard/wiget-time-context/interval-picker → interval-picker}/interval-picker.component.d.ts +10 -2
- package/interval-picker/interval-picker.component.d.ts.map +1 -0
- package/interval-picker/interval-picker.model.d.ts +15 -0
- package/interval-picker/interval-picker.model.d.ts.map +1 -0
- 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 +266 -21
- 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/dashboard/wiget-time-context/interval-picker/interval-picker.component.d.ts.map +0 -1
- package/core/i18n/translate.loader.d.ts +0 -31
- package/core/i18n/translate.loader.d.ts.map +0 -1
- package/esm2022/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.mjs +0 -55
- package/esm2022/core/i18n/translate.loader.mjs +0 -71
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import * as i1 from '@c8y/client';
|
|
4
|
+
import { ApplicationType, ApplicationAvailability } from '@c8y/client';
|
|
5
|
+
import * as i2 from '@c8y/ngx-components';
|
|
6
|
+
import { uniq } from 'lodash-es';
|
|
7
|
+
|
|
8
|
+
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
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Generated bundle index. Do not edit.
|
|
178
|
+
*/
|
|
179
|
+
|
|
180
|
+
export { TranslationStoreService };
|
|
181
|
+
//# sourceMappingURL=c8y-ngx-components-translation-editor-data.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-translation-editor-data.mjs","sources":["../../translation-editor/data/translation-store.service.ts","../../translation-editor/data/c8y-ngx-components-translation-editor-data.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n ApplicationAvailability,\n ApplicationService,\n ApplicationType,\n IApplication\n} from '@c8y/client';\nimport { AppStateService, ZipService } from '@c8y/ngx-components';\nimport { uniq } from 'lodash-es';\n\nexport interface TranslationLocale {\n label: string;\n locale: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationStoreService {\n protected readonly translationAppName = 'User defined translations';\n protected readonly translationAppContextPath = 'user-defined-translations';\n\n constructor(\n private appService: ApplicationService,\n private appState: AppStateService,\n private zip: ZipService\n ) {}\n\n /**\n * Retrieves a list of available translations for the given locales from all the hosted apps available on the tenant.\n */\n async getAvailableTranslations(locales: string[]) {\n const { data: hostedApps } = await this.appService.list({\n tenant: this.appState.currentTenant.value.name,\n type: 'HOSTED',\n pageSize: 2000\n });\n\n const uniqueContextPaths = uniq(\n hostedApps\n .filter(app => app.contextPath && app.manifest?.webSdkVersion)\n .map(app => app.contextPath)\n );\n\n const translations: { [key: string]: { [locale: string]: string } } = {};\n for (const contextPath of uniqueContextPaths) {\n for (const locale of locales) {\n try {\n const translationsForLanguageAndApp = await this.getFileFromPath(\n `/apps/${contextPath}/${locale}.json`\n );\n for (const key of Object.keys(translationsForLanguageAndApp)) {\n if (!translations[key]) {\n translations[key] = {};\n }\n translations[key][locale] = translationsForLanguageAndApp[key];\n }\n } catch (e) {\n continue;\n }\n }\n }\n\n return translations;\n }\n\n /**\n * Retrieves the translations for the given locale from the translation app.\n */\n async getTranslationsForLocale<T extends string>(locale: T): Promise<{ [key: string]: string }> {\n try {\n const translations = await this.getFileFromTranslationApp(`${locale}.json`);\n if (translations[locale]) {\n return translations[locale];\n }\n } catch (e) {\n // do nothing.\n }\n return {};\n }\n\n /**\n * Retrieves the translations for the given locales from the translation app.\n */\n async loadTranslationsForLocales(locales: string[]): Promise<{\n [key: string]: {\n [key: string]: string;\n };\n }> {\n const translations: {\n [key: string]: { [key: string]: string };\n } = {};\n\n const loadAndAddLocale = async (locale: string) => {\n translations[locale] = await this.getTranslationsForLocale(locale);\n };\n\n await Promise.all(locales.map(loadAndAddLocale));\n\n return translations;\n }\n\n /**\n * Retrieves a combined list of translations for all the provided locales.\n * The locales are combined into a single object per key and an array of these objects is returned.\n */\n async getCombinedListOfTranslationsForPerKey(\n locales: string[]\n ): Promise<{ key: string; [locale: string]: string }[]> {\n const translations = await this.loadTranslationsForLocales(locales);\n const translationMap: { [key: string]: { [locale: string]: string } } = {};\n\n for (const locale of Object.keys(translations)) {\n for (const key of Object.keys(translations[locale])) {\n let translationsForKey = translationMap[key];\n if (!translationsForKey) {\n translationsForKey = {};\n translationMap[key] = translationsForKey;\n }\n\n translationsForKey[locale] = translations[locale][key];\n }\n }\n\n const keys = Object.keys(translationMap).sort((a, b) => a.localeCompare(b));\n\n return keys.map(key => Object.assign({ key }, translationMap[key]));\n }\n\n /**\n * Updates the files of the translation application with the provided translations.\n */\n async updateTranslations(\n translations: { key: string; [locale: string]: string }[]\n ): Promise<void> {\n const filesToUpload = new Array<{ path: string; contents: File }>();\n const translationsPerLocale: { [locale: string]: { [key: string]: string } } = {};\n for (const entry of translations) {\n const key = entry.key;\n for (const locale of Object.keys(entry)) {\n if (locale === 'key') {\n continue;\n }\n if (!translationsPerLocale[locale]) {\n translationsPerLocale[locale] = {};\n }\n\n if (entry[locale]) {\n translationsPerLocale[locale][key] = entry[locale];\n }\n }\n }\n\n for (const locale of Object.keys(translationsPerLocale)) {\n const fileName = `${locale}.json`;\n filesToUpload.push({\n path: fileName,\n contents: new File([JSON.stringify({ [locale]: translationsPerLocale[locale] })], fileName)\n });\n }\n const app = await this.getOrCreateTranslationApp();\n await this.appService.binary(app).updateFiles(filesToUpload);\n }\n\n /**\n * @returns The translation app for the current tenant. If it does not exist, it will be created.\n */\n async getOrCreateTranslationApp(): Promise<IApplication> {\n const { data: apps } = await this.appService.listByName(this.translationAppName);\n const ownApp = apps.find(\n app =>\n app.contextPath === this.translationAppContextPath &&\n app.owner.tenant.id === this.appState.currentTenant.value.name\n );\n if (ownApp) {\n return ownApp;\n }\n\n const { data: app } = await this.appService.create({\n name: this.translationAppName,\n contextPath: this.translationAppContextPath,\n key: `${this.translationAppContextPath}-app-key`,\n type: ApplicationType.HOSTED,\n availability: ApplicationAvailability.MARKET,\n config: {\n icon: {\n class: 'language1'\n }\n },\n noAppSwitcher: true,\n description: 'Providing user defined translations'\n });\n const zip = await this.zip.createZip([]);\n\n const { data: binary } = await this.appService.binary(app).upload(zip, 'translations.zip');\n const { data: updatedApp } = await this.appService.update({\n id: app.id,\n activeVersionId: binary.id as string\n });\n return updatedApp;\n }\n\n private async getFileFromTranslationApp(file: string) {\n return this.getFileFromPath(`/apps/public/${this.translationAppContextPath}/${file}`);\n }\n\n private async getFileFromPath(path: string) {\n const finalPath = `${path}?nocache=${Date.now()}`;\n const response = await fetch(finalPath);\n\n if (response.status !== 200) {\n throw new Error(`Failed to fetch file from ${path}`);\n }\n\n return response.json();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { NgIf, NgForOf } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { Component, Optional, ViewChild } from '@angular/core';
|
|
4
|
+
import * as i3 from '@c8y/ngx-components';
|
|
5
|
+
import { C8yTranslatePipe, IconDirective, ModalModule, MessagesComponent, MessageDirective, C8yTranslateDirective, FormGroupComponent, BuiltInActionType, gettext as gettext$1, TitleComponent, DataGridModule, LoadingComponent, ActionBarItemComponent } from '@c8y/ngx-components';
|
|
6
|
+
import * as i1$1 from '@c8y/ngx-components/translation-editor/data';
|
|
7
|
+
import * as i1 from '@angular/forms';
|
|
8
|
+
import { FormsModule, Validators, ReactiveFormsModule } from '@angular/forms';
|
|
9
|
+
import * as i2 from 'ngx-bootstrap/modal';
|
|
10
|
+
import { gettext } from '@c8y/ngx-components/gettext';
|
|
11
|
+
|
|
12
|
+
class ManageTranslationCellRendererComponent {
|
|
13
|
+
constructor(context, permissions, grid) {
|
|
14
|
+
this.context = context;
|
|
15
|
+
this.permissions = permissions;
|
|
16
|
+
this.grid = grid;
|
|
17
|
+
this.FOCUS_RENDER_WAIT_TIME_IN_MS = 100;
|
|
18
|
+
this.isCellEditable = false;
|
|
19
|
+
this.cellValue = '';
|
|
20
|
+
this.isCreateDisabled = false;
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() {
|
|
23
|
+
this.isCreateDisabled = !this.permissions.hasRole('ROLE_APPLICATION_MANAGEMENT_ADMIN');
|
|
24
|
+
}
|
|
25
|
+
async save() {
|
|
26
|
+
this.isCellEditable = false;
|
|
27
|
+
const cellValueTrimed = this.cellValue.trim();
|
|
28
|
+
this.context.value = cellValueTrimed;
|
|
29
|
+
this.context.item[this.context.property.path] = cellValueTrimed;
|
|
30
|
+
this.grid?.valueChanged();
|
|
31
|
+
}
|
|
32
|
+
cancel() {
|
|
33
|
+
this.isCellEditable = false;
|
|
34
|
+
}
|
|
35
|
+
editCell() {
|
|
36
|
+
this.cellValue = this.context.value;
|
|
37
|
+
this.isCellEditable = true;
|
|
38
|
+
// Focuses the input box after the input text box is visible
|
|
39
|
+
setTimeout(() => {
|
|
40
|
+
this.cellInput.nativeElement.focus();
|
|
41
|
+
}, this.FOCUS_RENDER_WAIT_TIME_IN_MS);
|
|
42
|
+
}
|
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ManageTranslationCellRendererComponent, deps: [{ token: i3.CellRendererContext }, { token: i3.Permissions }, { token: TranslationEditorComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44
|
+
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: 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
45
|
+
}
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ManageTranslationCellRendererComponent, decorators: [{
|
|
47
|
+
type: Component,
|
|
48
|
+
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" }]
|
|
49
|
+
}], ctorParameters: () => [{ type: i3.CellRendererContext }, { type: i3.Permissions }, { type: TranslationEditorComponent, decorators: [{
|
|
50
|
+
type: Optional
|
|
51
|
+
}] }], propDecorators: { cellInput: [{
|
|
52
|
+
type: ViewChild,
|
|
53
|
+
args: ['cellInput']
|
|
54
|
+
}] } });
|
|
55
|
+
|
|
56
|
+
class AddTranslationModalComponent {
|
|
57
|
+
constructor(formBuilder) {
|
|
58
|
+
this.formBuilder = formBuilder;
|
|
59
|
+
this.title = gettext('Add translation');
|
|
60
|
+
this.result = new Promise((resolve, reject) => {
|
|
61
|
+
this._resovle = resolve;
|
|
62
|
+
this._reject = reject;
|
|
63
|
+
});
|
|
64
|
+
this.alreadyTakenMsg = gettext('The provided translation key has already been defined.');
|
|
65
|
+
this.alreadyDefinedKeys = [];
|
|
66
|
+
this.availableLangs = [];
|
|
67
|
+
}
|
|
68
|
+
ngOnInit() {
|
|
69
|
+
this.form = this.initForm();
|
|
70
|
+
}
|
|
71
|
+
initForm() {
|
|
72
|
+
return this.formBuilder.group({
|
|
73
|
+
key: ['', [Validators.required, this.ensureNotExistingKey()]],
|
|
74
|
+
...this.availableLangs
|
|
75
|
+
.map(language => {
|
|
76
|
+
return {
|
|
77
|
+
[language.lang]: ['']
|
|
78
|
+
};
|
|
79
|
+
})
|
|
80
|
+
.reduceRight((acc, curr) => ({ ...curr, ...acc }), {})
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
cancel() {
|
|
84
|
+
this._reject();
|
|
85
|
+
}
|
|
86
|
+
save() {
|
|
87
|
+
this._resovle(this.form.value);
|
|
88
|
+
}
|
|
89
|
+
ensureNotExistingKey() {
|
|
90
|
+
return (control) => {
|
|
91
|
+
if (typeof control.value === 'string') {
|
|
92
|
+
const keyAlreadyTaken = this.alreadyDefinedKeys.some(name => name === control.value);
|
|
93
|
+
if (keyAlreadyTaken) {
|
|
94
|
+
return { keyAlreadyTaken: {} };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
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 }); }
|
|
101
|
+
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: i3.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"] }] }); }
|
|
102
|
+
}
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddTranslationModalComponent, decorators: [{
|
|
104
|
+
type: Component,
|
|
105
|
+
args: [{ selector: 'c8y-add-translation-modal', standalone: true, imports: [
|
|
106
|
+
ModalModule,
|
|
107
|
+
IconDirective,
|
|
108
|
+
MessagesComponent,
|
|
109
|
+
MessageDirective,
|
|
110
|
+
C8yTranslatePipe,
|
|
111
|
+
C8yTranslateDirective,
|
|
112
|
+
ReactiveFormsModule,
|
|
113
|
+
NgForOf,
|
|
114
|
+
FormGroupComponent
|
|
115
|
+
], 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" }]
|
|
116
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }] });
|
|
117
|
+
|
|
118
|
+
class TranslationEditorComponent {
|
|
119
|
+
constructor(translationStore, modalService, alert, appState, translate) {
|
|
120
|
+
this.translationStore = translationStore;
|
|
121
|
+
this.modalService = modalService;
|
|
122
|
+
this.alert = alert;
|
|
123
|
+
this.appState = appState;
|
|
124
|
+
this.translate = translate;
|
|
125
|
+
this.pagination = {
|
|
126
|
+
pageSize: 10,
|
|
127
|
+
currentPage: 1
|
|
128
|
+
};
|
|
129
|
+
this.displayOptions = {
|
|
130
|
+
bordered: false,
|
|
131
|
+
striped: true,
|
|
132
|
+
filter: true,
|
|
133
|
+
gridHeader: true,
|
|
134
|
+
hover: true
|
|
135
|
+
};
|
|
136
|
+
this.actionControls = [
|
|
137
|
+
{
|
|
138
|
+
type: BuiltInActionType.Delete,
|
|
139
|
+
callback: item => {
|
|
140
|
+
this.items = this.items.filter(i => i.key !== item.key);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
];
|
|
144
|
+
this.columns = [];
|
|
145
|
+
this.isLoading = true;
|
|
146
|
+
this.items = new Array();
|
|
147
|
+
this.isHavingChanges = false;
|
|
148
|
+
this.availableLangs = [];
|
|
149
|
+
this.availableLangs = this.appState.state.langs
|
|
150
|
+
.sort((a, b) => a.localeCompare(b))
|
|
151
|
+
.map(l => ({
|
|
152
|
+
lang: l,
|
|
153
|
+
nativeLanguage: this.translate.getNativeLanguage(l)
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
async ngOnInit() {
|
|
157
|
+
this.refresh();
|
|
158
|
+
}
|
|
159
|
+
async refresh() {
|
|
160
|
+
this.isLoading = true;
|
|
161
|
+
this.refreshColumns();
|
|
162
|
+
const translations = await this.translationStore.getCombinedListOfTranslationsForPerKey(this.availableLangs.map(l => l.lang));
|
|
163
|
+
this.items = translations;
|
|
164
|
+
this.isLoading = false;
|
|
165
|
+
}
|
|
166
|
+
async addEntry() {
|
|
167
|
+
const currentKeys = this.items.map(item => item.key);
|
|
168
|
+
const modalRef = this.modalService.show(AddTranslationModalComponent, {
|
|
169
|
+
initialState: { alreadyDefinedKeys: currentKeys, availableLangs: this.availableLangs }
|
|
170
|
+
});
|
|
171
|
+
try {
|
|
172
|
+
const result = await modalRef.content.result;
|
|
173
|
+
this.items = [...this.items, result];
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
// do nothing, modal was closed.
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
refreshColumns() {
|
|
180
|
+
this.columns = this.getColumnsForLocales();
|
|
181
|
+
}
|
|
182
|
+
valueChanged() {
|
|
183
|
+
this.isHavingChanges = true;
|
|
184
|
+
}
|
|
185
|
+
async saveTranslations() {
|
|
186
|
+
try {
|
|
187
|
+
await this.translationStore.updateTranslations(this.items);
|
|
188
|
+
await this.refresh();
|
|
189
|
+
this.alert.success(gettext$1('Translations saved'));
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
this.alert.danger(gettext$1('Failed to save translations'));
|
|
193
|
+
this.alert.addServerFailure(e);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
getColumnsForLocales() {
|
|
197
|
+
const columns = new Array();
|
|
198
|
+
columns.push({
|
|
199
|
+
name: 'key',
|
|
200
|
+
header: gettext$1('Translation key'),
|
|
201
|
+
path: 'key',
|
|
202
|
+
filterable: true
|
|
203
|
+
});
|
|
204
|
+
columns.push(...this.availableLangs.map((language, index) => ({
|
|
205
|
+
name: language.lang,
|
|
206
|
+
header: `${language.nativeLanguage} (${language.lang})`,
|
|
207
|
+
path: language.lang,
|
|
208
|
+
filterable: false,
|
|
209
|
+
visible: index < 5,
|
|
210
|
+
cellRendererComponent: ManageTranslationCellRendererComponent
|
|
211
|
+
})));
|
|
212
|
+
return columns;
|
|
213
|
+
}
|
|
214
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorComponent, deps: [{ token: i1$1.TranslationStoreService }, { token: i2.BsModalService }, { token: i3.AlertService }, { token: i3.AppStateService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
215
|
+
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]" }] }); }
|
|
216
|
+
}
|
|
217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorComponent, decorators: [{
|
|
218
|
+
type: Component,
|
|
219
|
+
args: [{ selector: 'c8y-translation-editor', standalone: true, imports: [
|
|
220
|
+
TitleComponent,
|
|
221
|
+
DataGridModule,
|
|
222
|
+
LoadingComponent,
|
|
223
|
+
NgIf,
|
|
224
|
+
C8yTranslatePipe,
|
|
225
|
+
ActionBarItemComponent,
|
|
226
|
+
IconDirective,
|
|
227
|
+
C8yTranslateDirective
|
|
228
|
+
], 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" }]
|
|
229
|
+
}], ctorParameters: () => [{ type: i1$1.TranslationStoreService }, { type: i2.BsModalService }, { type: i3.AlertService }, { type: i3.AppStateService }, { type: i3.TranslateService }] });
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Generated bundle index. Do not edit.
|
|
233
|
+
*/
|
|
234
|
+
|
|
235
|
+
export { TranslationEditorComponent };
|
|
236
|
+
//# sourceMappingURL=c8y-ngx-components-translation-editor-lazy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-translation-editor-lazy.mjs","sources":["../../translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.ts","../../translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.html","../../translation-editor/lazy/add-translation-modal/add-translation-modal.component.ts","../../translation-editor/lazy/add-translation-modal/add-translation-modal.component.html","../../translation-editor/lazy/translation-editor/translation-editor.component.ts","../../translation-editor/lazy/translation-editor/translation-editor.component.html","../../translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.ts"],"sourcesContent":["import { NgIf } from '@angular/common';\nimport { Component, ElementRef, Optional, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n CellRendererContext,\n Permissions,\n C8yTranslatePipe,\n IconDirective\n} from '@c8y/ngx-components';\nimport { TranslationEditorComponent } from '../translation-editor/translation-editor.component';\n\n@Component({\n selector: 'c8y-manage-translation-cell-renderer',\n templateUrl: 'manage-translation-cell-renderer.component.html',\n standalone: true,\n imports: [NgIf, C8yTranslatePipe, IconDirective, FormsModule]\n})\nexport class ManageTranslationCellRendererComponent {\n private readonly FOCUS_RENDER_WAIT_TIME_IN_MS = 100;\n isCellEditable = false;\n cellValue = '';\n @ViewChild('cellInput') cellInput: ElementRef;\n isCreateDisabled = false;\n\n constructor(\n public context: CellRendererContext,\n private permissions: Permissions,\n @Optional() private grid: TranslationEditorComponent\n ) {}\n\n ngOnInit() {\n this.isCreateDisabled = !this.permissions.hasRole('ROLE_APPLICATION_MANAGEMENT_ADMIN');\n }\n\n async save(): Promise<void> {\n this.isCellEditable = false;\n const cellValueTrimed = this.cellValue.trim();\n this.context.value = cellValueTrimed;\n this.context.item[this.context.property.path] = cellValueTrimed;\n this.grid?.valueChanged();\n }\n\n cancel(): void {\n this.isCellEditable = false;\n }\n\n editCell(): void {\n this.cellValue = this.context.value;\n this.isCellEditable = true;\n\n // Focuses the input box after the input text box is visible\n setTimeout(() => {\n this.cellInput.nativeElement.focus();\n }, this.FOCUS_RENDER_WAIT_TIME_IN_MS);\n }\n}\n","<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","import { NgForOf } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport {\n AbstractControl,\n FormBuilder,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {\n C8yTranslateDirective,\n C8yTranslatePipe,\n FormGroupComponent,\n IconDirective,\n MessageDirective,\n MessagesComponent,\n ModalModule\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Component({\n selector: 'c8y-add-translation-modal',\n templateUrl: './add-translation-modal.component.html',\n standalone: true,\n imports: [\n ModalModule,\n IconDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslatePipe,\n C8yTranslateDirective,\n ReactiveFormsModule,\n NgForOf,\n FormGroupComponent\n ]\n})\nexport class AddTranslationModalComponent implements OnInit {\n readonly title = gettext('Add translation');\n form: ReturnType<typeof this.initForm>;\n\n result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n this._resovle = resolve;\n this._reject = reject;\n });\n alreadyTakenMsg = gettext('The provided translation key has already been defined.');\n alreadyDefinedKeys: string[] = [];\n availableLangs: {\n lang: string;\n nativeLanguage: string;\n }[] = [];\n\n private _resovle: (value: ReturnType<typeof this.initForm>['value']) => void;\n private _reject: (reason?: any) => void;\n\n constructor(private formBuilder: FormBuilder) {}\n\n ngOnInit(): void {\n this.form = this.initForm();\n }\n\n initForm() {\n return this.formBuilder.group({\n key: ['', [Validators.required, this.ensureNotExistingKey()]],\n ...this.availableLangs\n .map(language => {\n return {\n [language.lang]: ['']\n };\n })\n .reduceRight((acc, curr) => ({ ...curr, ...acc }), {})\n });\n }\n\n cancel() {\n this._reject();\n }\n\n save() {\n this._resovle(this.form.value);\n }\n\n private ensureNotExistingKey(): ValidatorFn {\n return (control: AbstractControl) => {\n if (typeof control.value === 'string') {\n const keyAlreadyTaken = this.alreadyDefinedKeys.some(name => name === control.value);\n if (keyAlreadyTaken) {\n return { keyAlreadyTaken: {} };\n }\n }\n return null;\n };\n }\n}\n","<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","import { NgIf } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport {\n ActionBarItemComponent,\n ActionControl,\n AlertService,\n AppStateService,\n BuiltInActionType,\n C8yTranslateDirective,\n C8yTranslatePipe,\n Column,\n DataGridModule,\n DisplayOptions,\n gettext,\n IconDirective,\n LoadingComponent,\n Pagination,\n TitleComponent,\n TranslateService\n} from '@c8y/ngx-components';\nimport { TranslationStoreService } from '@c8y/ngx-components/translation-editor/data';\nimport { ManageTranslationCellRendererComponent } from '../manage-translation-cell-renderer/manage-translation-cell-renderer.component';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { AddTranslationModalComponent } from '../add-translation-modal/add-translation-modal.component';\n\n@Component({\n selector: 'c8y-translation-editor',\n templateUrl: './translation-editor.component.html',\n standalone: true,\n imports: [\n TitleComponent,\n DataGridModule,\n LoadingComponent,\n NgIf,\n C8yTranslatePipe,\n ActionBarItemComponent,\n IconDirective,\n C8yTranslateDirective\n ]\n})\nexport class TranslationEditorComponent implements OnInit {\n pagination: Pagination = {\n pageSize: 10,\n currentPage: 1\n };\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true,\n hover: true\n };\n actionControls: ActionControl[] = [\n {\n type: BuiltInActionType.Delete,\n callback: item => {\n this.items = this.items.filter(i => i.key !== item.key);\n }\n }\n ];\n columns: Column[] = [];\n isLoading = true;\n items: Awaited<ReturnType<TranslationStoreService['getCombinedListOfTranslationsForPerKey']>> =\n new Array<any>();\n isHavingChanges = false;\n availableLangs: {\n lang: string;\n nativeLanguage: string;\n }[] = [];\n\n constructor(\n private translationStore: TranslationStoreService,\n private modalService: BsModalService,\n private alert: AlertService,\n private appState: AppStateService,\n private translate: TranslateService\n ) {\n this.availableLangs = (this.appState.state.langs as string[])\n .sort((a, b) => a.localeCompare(b))\n .map(l => ({\n lang: l,\n nativeLanguage: this.translate.getNativeLanguage(l)\n }));\n }\n\n async ngOnInit() {\n this.refresh();\n }\n\n async refresh() {\n this.isLoading = true;\n this.refreshColumns();\n\n const translations = await this.translationStore.getCombinedListOfTranslationsForPerKey(\n this.availableLangs.map(l => l.lang)\n );\n\n this.items = translations;\n\n this.isLoading = false;\n }\n\n async addEntry() {\n const currentKeys = this.items.map(item => item.key);\n const modalRef = this.modalService.show(AddTranslationModalComponent, {\n initialState: { alreadyDefinedKeys: currentKeys, availableLangs: this.availableLangs }\n });\n try {\n const result = await modalRef.content.result;\n this.items = [...this.items, result as any];\n } catch (e) {\n // do nothing, modal was closed.\n }\n }\n\n refreshColumns() {\n this.columns = this.getColumnsForLocales();\n }\n\n valueChanged() {\n this.isHavingChanges = true;\n }\n\n async saveTranslations() {\n try {\n await this.translationStore.updateTranslations(this.items);\n await this.refresh();\n this.alert.success(gettext('Translations saved'));\n } catch (e) {\n this.alert.danger(gettext('Failed to save translations'));\n this.alert.addServerFailure(e);\n }\n }\n\n private getColumnsForLocales() {\n const columns = new Array<Column>();\n columns.push({\n name: 'key',\n header: gettext('Translation key'),\n path: 'key',\n filterable: true\n });\n\n columns.push(\n ...this.availableLangs.map(\n (language, index) =>\n ({\n name: language.lang,\n header: `${language.nativeLanguage} (${language.lang})`,\n path: language.lang,\n filterable: false,\n visible: index < 5,\n cellRendererComponent: ManageTranslationCellRendererComponent\n }) as Column\n )\n );\n\n return columns;\n }\n}\n","<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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.TranslationEditorComponent","i3","i2","gettext"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as i1 from '@c8y/ngx-components';
|
|
2
|
+
import { NavigatorNode, hookRoute, hookNavigator } from '@c8y/ngx-components';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { Injectable } from '@angular/core';
|
|
5
|
+
import { gettext } from '@c8y/ngx-components/gettext';
|
|
6
|
+
|
|
7
|
+
class TranslationEditorNaviagtorFactoryService {
|
|
8
|
+
constructor(permissions) {
|
|
9
|
+
this.permissions = permissions;
|
|
10
|
+
this.node = new NavigatorNode({
|
|
11
|
+
icon: 'language1',
|
|
12
|
+
label: gettext('Localization'),
|
|
13
|
+
parent: 'Settings',
|
|
14
|
+
path: 'localization'
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
get() {
|
|
18
|
+
if (!this.permissions.hasRole('ROLE_APPLICATION_MANAGEMENT_ADMIN')) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
return this.node;
|
|
22
|
+
}
|
|
23
|
+
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 }); }
|
|
24
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, providedIn: 'root' }); }
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, decorators: [{
|
|
27
|
+
type: Injectable,
|
|
28
|
+
args: [{
|
|
29
|
+
providedIn: 'root'
|
|
30
|
+
}]
|
|
31
|
+
}], ctorParameters: () => [{ type: i1.Permissions }] });
|
|
32
|
+
|
|
33
|
+
const tranlationEditorProviders = [
|
|
34
|
+
hookRoute({
|
|
35
|
+
path: 'localization',
|
|
36
|
+
loadComponent: () => import('@c8y/ngx-components/translation-editor/lazy').then(m => m.TranslationEditorComponent)
|
|
37
|
+
}),
|
|
38
|
+
hookNavigator(TranslationEditorNaviagtorFactoryService)
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Generated bundle index. Do not edit.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
export { tranlationEditorProviders };
|
|
46
|
+
//# sourceMappingURL=c8y-ngx-components-translation-editor.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-translation-editor.mjs","sources":["../../translation-editor/translation-editor-naviagtor-factory.service.ts","../../translation-editor/index.ts","../../translation-editor/c8y-ngx-components-translation-editor.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { ExtensionFactory, NavigatorNode, Permissions } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationEditorNaviagtorFactoryService implements ExtensionFactory<NavigatorNode> {\n private node = new NavigatorNode({\n icon: 'language1',\n label: gettext('Localization'),\n parent: 'Settings',\n path: 'localization'\n });\n\n constructor(private permissions: Permissions) {}\n\n get(): NavigatorNode | NavigatorNode[] {\n if (!this.permissions.hasRole('ROLE_APPLICATION_MANAGEMENT_ADMIN')) {\n return [];\n }\n return this.node;\n }\n}\n","import { hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { TranslationEditorNaviagtorFactoryService } from './translation-editor-naviagtor-factory.service';\n\nexport const tranlationEditorProviders = [\n hookRoute({\n path: 'localization',\n loadComponent: () =>\n import('@c8y/ngx-components/translation-editor/lazy').then(m => m.TranslationEditorComponent)\n }),\n hookNavigator(TranslationEditorNaviagtorFactoryService)\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAOa,wCAAwC,CAAA;AAQnD,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QAPpC,IAAI,CAAA,IAAA,GAAG,IAAI,aAAa,CAAC;AAC/B,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC;AAC9B,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,cAAc;AACrB,SAAA,CAAC,CAAC;KAE6C;IAEhD,GAAG,GAAA;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mCAAmC,CAAC,EAAE;AAClE,YAAA,OAAO,EAAE,CAAC;SACX;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;8GAfU,wCAAwC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAxC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wCAAwC,cAFvC,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBAHpD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACHY,MAAA,yBAAyB,GAAG;AACvC,IAAA,SAAS,CAAC;AACR,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,aAAa,EAAE,MACb,OAAO,6CAA6C,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,0BAA0B,CAAC;KAChG,CAAC;IACF,aAAa,CAAC,wCAAwC,CAAC;;;ACTzD;;AAEG;;;;"}
|
|
@@ -110,6 +110,13 @@ const cockpitWidgetsExports = [
|
|
|
110
110
|
path: '@c8y/ngx-components/widgets/definitions/linear-gauge',
|
|
111
111
|
description: 'Linear Gauge widget',
|
|
112
112
|
scope: 'self'
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'Widgets: Data Points Table',
|
|
116
|
+
module: 'dataPointsTableWidgetProviders',
|
|
117
|
+
path: '@c8y/ngx-components/widgets/definitions/datapoints-table',
|
|
118
|
+
description: 'Data Points Table widget',
|
|
119
|
+
scope: 'self'
|
|
113
120
|
}
|
|
114
121
|
];
|
|
115
122
|
|