@c8y/ngx-components 1024.0.0 → 1024.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +0 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +4 -6
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +493 -417
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +69 -10
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +53 -24
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +51 -24
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +42 -39
- package/locales/es.po +32 -29
- package/locales/fr.po +24 -21
- package/locales/ja_JP.po +47 -44
- package/locales/ko.po +30 -27
- package/locales/locales.pot +3 -0
- package/locales/nl.po +27 -24
- package/locales/pl.po +42 -39
- package/locales/pt_BR.po +29 -26
- package/locales/zh_CN.po +28 -25
- package/locales/zh_TW.po +38 -35
- package/package.json +1 -1
- package/types/c8y-ngx-components-datapoint-explorer-devicemanagement.d.ts.map +1 -1
- package/types/c8y-ngx-components-operations-bulk-single-operations-list.d.ts.map +1 -1
- package/types/c8y-ngx-components-repository-configuration.d.ts +30 -11
- package/types/c8y-ngx-components-repository-configuration.d.ts.map +1 -1
- package/types/c8y-ngx-components-repository-shared.d.ts +26 -2
- package/types/c8y-ngx-components-repository-shared.d.ts.map +1 -1
- package/types/c8y-ngx-components-widgets-implementations-quick-links.d.ts +18 -5
- package/types/c8y-ngx-components-widgets-implementations-quick-links.d.ts.map +1 -1
- package/types/c8y-ngx-components.d.ts +16 -5
- package/types/c8y-ngx-components.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-datapoint-explorer-devicemanagement.mjs","sources":["../../datapoint-explorer/devicemanagement/index.ts","../../datapoint-explorer/devicemanagement/c8y-ngx-components-datapoint-explorer-devicemanagement.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn } from '@angular/router';\nimport { ContextRouteService, hookPreview, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { canActivateDatapointExplorer } from '@c8y/ngx-components/datapoint-explorer';\nimport {\n NameGeneratorService,\n Settings,\n WorkspaceConfiguration,\n WorkspaceConfigurationService\n} from '@c8y/ngx-components/datapoint-explorer/view';\nimport { DatapointLibraryService } from '@c8y/ngx-components/datapoint-selector';\nimport { DatapointsGraphKPIDetails } from '@c8y/ngx-components/echart';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TimeContext } from '@c8y/ngx-components/time-context';\n\nexport const settingsResolver: ResolveFn<Settings> = async (\n snapshot: ActivatedRouteSnapshot,\n _\n) => {\n const contextRouteService = inject(ContextRouteService);\n const datapointLibraryService = inject(DatapointLibraryService);\n const workspaceConfigurationService = inject(WorkspaceConfigurationService);\n const nameGeneratorService = inject(NameGeneratorService);\n\n const routeContext = contextRouteService.getContextData(snapshot);\n const datapoints =\n (<DatapointsGraphKPIDetails[]>(\n (<unknown>await datapointLibraryService.getDatapointsOfAsset(routeContext.contextData))\n ))?.slice(0, 25) || [];\n\n let configurationId;\n\n if (datapoints.length) {\n datapoints.at(0).__active = true;\n workspaceConfigurationService.contextIdSignal.set(routeContext?.contextData?.id);\n\n configurationId = `dm-measurements-${routeContext?.contextData?.id}`;\n\n if (\n !(workspaceConfigurationService.getConfigurations() || []).some(c => c.id === configurationId)\n ) {\n const configuration: WorkspaceConfiguration = {\n id: configurationId,\n label: nameGeneratorService.generateName(),\n config: { datapoints, alarmsEventsConfigs: [] }\n };\n\n workspaceConfigurationService.saveConfigurations([configuration], configuration.id);\n\n localStorage.setItem(\n workspaceConfigurationService.LOCAL_STORAGE_DEFAULT_ID_KEY,\n configuration.id\n );\n }\n }\n\n return {\n hideWorkspaceConfig: true,\n
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-datapoint-explorer-devicemanagement.mjs","sources":["../../datapoint-explorer/devicemanagement/index.ts","../../datapoint-explorer/devicemanagement/c8y-ngx-components-datapoint-explorer-devicemanagement.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn } from '@angular/router';\nimport { ContextRouteService, hookPreview, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { canActivateDatapointExplorer } from '@c8y/ngx-components/datapoint-explorer';\nimport {\n NameGeneratorService,\n Settings,\n WorkspaceConfiguration,\n WorkspaceConfigurationService\n} from '@c8y/ngx-components/datapoint-explorer/view';\nimport { DatapointLibraryService } from '@c8y/ngx-components/datapoint-selector';\nimport { DatapointsGraphKPIDetails } from '@c8y/ngx-components/echart';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TimeContext } from '@c8y/ngx-components/time-context';\n\nexport const settingsResolver: ResolveFn<Settings> = async (\n snapshot: ActivatedRouteSnapshot,\n _\n) => {\n const contextRouteService = inject(ContextRouteService);\n const datapointLibraryService = inject(DatapointLibraryService);\n const workspaceConfigurationService = inject(WorkspaceConfigurationService);\n const nameGeneratorService = inject(NameGeneratorService);\n\n const routeContext = contextRouteService.getContextData(snapshot);\n const datapoints =\n (<DatapointsGraphKPIDetails[]>(\n (<unknown>await datapointLibraryService.getDatapointsOfAsset(routeContext.contextData))\n ))?.slice(0, 25) || [];\n\n let configurationId;\n\n if (datapoints.length) {\n datapoints.at(0).__active = true;\n workspaceConfigurationService.contextIdSignal.set(routeContext?.contextData?.id);\n\n configurationId = `dm-measurements-${routeContext?.contextData?.id}`;\n\n if (\n !(workspaceConfigurationService.getConfigurations() || []).some(c => c.id === configurationId)\n ) {\n const configuration: WorkspaceConfiguration = {\n id: configurationId,\n label: nameGeneratorService.generateName(),\n config: { datapoints, alarmsEventsConfigs: [] }\n };\n\n workspaceConfigurationService.saveConfigurations([configuration], configuration.id);\n\n localStorage.setItem(\n workspaceConfigurationService.LOCAL_STORAGE_DEFAULT_ID_KEY,\n configuration.id\n );\n }\n }\n\n return {\n hideWorkspaceConfig: true,\n hideWidgetActions: true,\n defaultConfigurationId: configurationId,\n timeContext: <TimeContext>{ interval: 'hours' }\n };\n};\n\nexport const dataExplorerMeasurementsFeature = [\n hookRoute({\n context: ViewContext.Device,\n path: 'measurements-v2',\n priority: 800,\n icon: 'line-chart',\n label: gettext('Measurements'),\n loadComponent: () =>\n import('@c8y/ngx-components/datapoint-explorer/view').then(m => m.DatapointExplorerComponent),\n featureId: 'dataExplorer',\n canActivate: [canActivateDatapointExplorer],\n resolve: {\n settings: settingsResolver\n }\n }),\n hookPreview({\n key: 'ui.datapoint-explorer.v2',\n label: 'Data point explorer',\n description: () =>\n import('@c8y/style/markdown-files/datapoint-explorer-preview.md').then(m => m.default),\n settings: {\n reload: true\n }\n })\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAeO,MAAM,gBAAgB,GAAwB,OACnD,QAAgC,EAChC,CAAC,KACC;AACF,IAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACvD,IAAA,MAAM,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC/D,IAAA,MAAM,6BAA6B,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAC3E,IAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAEzD,MAAM,YAAY,GAAG,mBAAmB,CAAC,cAAc,CAAC,QAAQ,CAAC;IACjE,MAAM,UAAU,GACd,CACY,MAAM,uBAAuB,CAAC,oBAAoB,CAAC,YAAY,CAAC,WAAW,CACrF,GAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;AAExB,IAAA,IAAI,eAAe;AAEnB,IAAA,IAAI,UAAU,CAAC,MAAM,EAAE;QACrB,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI;QAChC,6BAA6B,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,CAAC;QAEhF,eAAe,GAAG,mBAAmB,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE;QAEpE,IACE,CAAC,CAAC,6BAA6B,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,eAAe,CAAC,EAC9F;AACA,YAAA,MAAM,aAAa,GAA2B;AAC5C,gBAAA,EAAE,EAAE,eAAe;AACnB,gBAAA,KAAK,EAAE,oBAAoB,CAAC,YAAY,EAAE;AAC1C,gBAAA,MAAM,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,EAAE;aAC9C;YAED,6BAA6B,CAAC,kBAAkB,CAAC,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC;YAEnF,YAAY,CAAC,OAAO,CAClB,6BAA6B,CAAC,4BAA4B,EAC1D,aAAa,CAAC,EAAE,CACjB;QACH;IACF;IAEA,OAAO;AACL,QAAA,mBAAmB,EAAE,IAAI;AACzB,QAAA,iBAAiB,EAAE,IAAI;AACvB,QAAA,sBAAsB,EAAE,eAAe;AACvC,QAAA,WAAW,EAAe,EAAE,QAAQ,EAAE,OAAO;KAC9C;AACH;AAEO,MAAM,+BAA+B,GAAG;AAC7C,IAAA,SAAS,CAAC;QACR,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC;AAC9B,QAAA,aAAa,EAAE,MACb,OAAO,6CAA6C,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,0BAA0B,CAAC;AAC/F,QAAA,SAAS,EAAE,cAAc;QACzB,WAAW,EAAE,CAAC,4BAA4B,CAAC;AAC3C,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE;AACX;KACF,CAAC;AACF,IAAA,WAAW,CAAC;AACV,QAAA,GAAG,EAAE,0BAA0B;AAC/B,QAAA,KAAK,EAAE,qBAAqB;AAC5B,QAAA,WAAW,EAAE,MACX,OAAO,yDAAyD,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AACxF,QAAA,QAAQ,EAAE;AACR,YAAA,MAAM,EAAE;AACT;KACF;;;ACvFH;;AAEG;;;;"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { NgIf } from '@angular/common';
|
|
2
1
|
import * as i0 from '@angular/core';
|
|
3
2
|
import { EventEmitter, inject, ViewChild, Output, Input, Component } from '@angular/core';
|
|
4
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
@@ -68,11 +67,11 @@ class SingleOperationsListComponent {
|
|
|
68
67
|
}
|
|
69
68
|
reload(option) {
|
|
70
69
|
const [opt] = option ?? [];
|
|
71
|
-
this.filterStatus = opt?.status ??
|
|
70
|
+
this.filterStatus = opt?.status ?? null;
|
|
72
71
|
this.reload$.next();
|
|
73
72
|
}
|
|
74
73
|
async onDataSourceModifier(dataSourceModifier) {
|
|
75
|
-
const filter = this.filterStatus
|
|
74
|
+
const filter = this.filterStatus === undefined ? this.getFilterTypeOfSingleOperations() : this.filterStatus;
|
|
76
75
|
const { res, data, paging } = await this.bulkOperationsService.getSingleOperationsByStatus(filter, this.bulkOperation.id, dataSourceModifier.pagination);
|
|
77
76
|
const filteredSize = await this.bulkOperationsService.getSingleOperationsCountByStatus(filter, this.bulkOperation.id);
|
|
78
77
|
const size = await this.bulkOperationsService.getSingleOperationsTotal(this.bulkOperation.id);
|
|
@@ -127,18 +126,17 @@ class SingleOperationsListComponent {
|
|
|
127
126
|
}
|
|
128
127
|
}
|
|
129
128
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SingleOperationsListComponent, deps: [{ token: i1.BulkOperationsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
130
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
129
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: SingleOperationsListComponent, isStandalone: true, selector: "c8y-single-operations-list", inputs: { bulkOperation: "bulkOperation", readOnly: "readOnly" }, outputs: { onRetryFailedOperations: "onRetryFailedOperations" }, viewQueries: [{ propertyName: "statusFilter", first: true, predicate: StatusFilterComponent, descendants: true }, { propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (\n bulkOperation.progress.failed ||\n bulkOperation.progress.executing ||\n bulkOperation.progress.pending ||\n bulkOperation.progress.successful\n) {\n <div\n class=\"legend form-block p-t-16 m-b-0\"\n translate\n >\n Operations\n </div>\n <div class=\"d-flex a-i-center\">\n <div class=\"d-flex a-i-center p-b-8\">\n <span\n class=\"m-r-4 text-medium\"\n translate\n >\n Filter by status\n </span>\n <c8y-status-filter\n small\n [options]=\"OPERATION_STATUS_OPTIONS_MAP\"\n (onFilterChanged)=\"reload($event)\"\n ></c8y-status-filter>\n </div>\n @if (!readOnly && bulkOperation.progress.failed > 0) {\n <div class=\"m-l-auto p-b-8\">\n <button\n class=\"btn btn-navbar\"\n title=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryBulkOperation()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"repeat\"\n ></i>\n <span translate>Retry failed operations</span>\n </button>\n </div>\n }\n </div>\n <c8y-data-grid\n [actionControls]=\"actions\"\n [columns]=\"columns\"\n [displayOptions]=\"displayOptions\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [pagination]=\"pagination\"\n >\n <c8y-ui-empty-state\n icon=\"search\"\n [title]=\"'No single operations of the selected status to display.' | translate\"\n [subtitle]=\"'Single operations will be displayed here' | translate\"\n horizontal\n ></c8y-ui-empty-state>\n </c8y-data-grid>\n}\n", dependencies: [{ kind: "ngmodule", type: StatusFilterModule }, { kind: "component", type: i2.StatusFilterComponent, selector: "c8y-status-filter", inputs: ["options", "multiple", "small"], outputs: ["onFilterChanged"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "loading", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
131
130
|
}
|
|
132
131
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SingleOperationsListComponent, decorators: [{
|
|
133
132
|
type: Component,
|
|
134
133
|
args: [{ standalone: true, selector: 'c8y-single-operations-list', imports: [
|
|
135
134
|
StatusFilterModule,
|
|
136
|
-
NgIf,
|
|
137
135
|
C8yTranslatePipe,
|
|
138
136
|
IconDirective,
|
|
139
137
|
DataGridComponent,
|
|
140
138
|
EmptyStateComponent
|
|
141
|
-
], template: "
|
|
139
|
+
], template: "@if (\n bulkOperation.progress.failed ||\n bulkOperation.progress.executing ||\n bulkOperation.progress.pending ||\n bulkOperation.progress.successful\n) {\n <div\n class=\"legend form-block p-t-16 m-b-0\"\n translate\n >\n Operations\n </div>\n <div class=\"d-flex a-i-center\">\n <div class=\"d-flex a-i-center p-b-8\">\n <span\n class=\"m-r-4 text-medium\"\n translate\n >\n Filter by status\n </span>\n <c8y-status-filter\n small\n [options]=\"OPERATION_STATUS_OPTIONS_MAP\"\n (onFilterChanged)=\"reload($event)\"\n ></c8y-status-filter>\n </div>\n @if (!readOnly && bulkOperation.progress.failed > 0) {\n <div class=\"m-l-auto p-b-8\">\n <button\n class=\"btn btn-navbar\"\n title=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryBulkOperation()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"repeat\"\n ></i>\n <span translate>Retry failed operations</span>\n </button>\n </div>\n }\n </div>\n <c8y-data-grid\n [actionControls]=\"actions\"\n [columns]=\"columns\"\n [displayOptions]=\"displayOptions\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [pagination]=\"pagination\"\n >\n <c8y-ui-empty-state\n icon=\"search\"\n [title]=\"'No single operations of the selected status to display.' | translate\"\n [subtitle]=\"'Single operations will be displayed here' | translate\"\n horizontal\n ></c8y-ui-empty-state>\n </c8y-data-grid>\n}\n" }]
|
|
142
140
|
}], ctorParameters: () => [{ type: i1.BulkOperationsService }], propDecorators: { bulkOperation: [{
|
|
143
141
|
type: Input
|
|
144
142
|
}], readOnly: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-operations-bulk-single-operations-list.mjs","sources":["../../operations/bulk-single-operations-list/single-operations-list.component.ts","../../operations/bulk-single-operations-list/single-operations-list.component.html","../../operations/bulk-single-operations-list/c8y-ngx-components-operations-bulk-single-operations-list.ts"],"sourcesContent":["import { NgIf } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n IOperation,\n IOperationBulk,\n IResultList,\n OperationService,\n OperationStatus\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n C8yTranslatePipe,\n Column,\n DataGridComponent,\n DataSourceModifier,\n DisplayOptions,\n EmptyStateComponent,\n IconDirective,\n Pagination,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport {\n CreationTimeGridColumn,\n DeviceGridColumn,\n FailureReasonGridColumn,\n OperationStatusGridColumn\n} from '@c8y/ngx-components/operations/grid-columns';\nimport {\n OPERATION_STATUS_LABELS,\n OPERATION_STATUS_OPTIONS_MAP,\n OperationStatusOption,\n OperationStatusOptionsMapShared\n} from '@c8y/ngx-components/operations/shared';\nimport {\n StatusFilterComponent,\n StatusFilterModule\n} from '@c8y/ngx-components/operations/status-filter';\nimport { omit } from 'lodash-es';\nimport { merge, Subject, throttleTime } from 'rxjs';\n\n@Component({\n standalone: true,\n selector: 'c8y-single-operations-list',\n templateUrl: './single-operations-list.component.html',\n imports: [\n StatusFilterModule,\n NgIf,\n C8yTranslatePipe,\n IconDirective,\n DataGridComponent,\n EmptyStateComponent\n ]\n})\nexport class SingleOperationsListComponent implements AfterViewInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n\n @ViewChild(StatusFilterComponent, { static: false })\n statusFilter: StatusFilterComponent;\n @ViewChild(DataGridComponent, { static: false })\n dataGrid: DataGridComponent;\n\n OPERATION_STATUS = { ...OperationStatus, ALL: gettext('ALL') };\n OPERATION_STATUS_LABELS = OPERATION_STATUS_LABELS;\n OPERATION_STATUS_OPTIONS_MAP: OperationStatusOptionsMapShared = OPERATION_STATUS_OPTIONS_MAP;\n singleOperations: IResultList<IOperation>;\n\n displayOptions: Partial<DisplayOptions> = {\n gridHeader: false\n };\n pagination: Pagination = {\n pageSize: 25,\n currentPage: 1\n };\n\n columns: Column[] = [\n new OperationStatusGridColumn(),\n new DeviceGridColumn(),\n new CreationTimeGridColumn(),\n new FailureReasonGridColumn()\n ];\n\n actions: ActionControl[] = [\n {\n type: 'retry',\n icon: 'repeat',\n label: gettext('Retry operation'),\n text: gettext('Retry operation'),\n callback: operation => {\n this.retrySingleOperation(operation);\n },\n showIf: operation =>\n !this.readOnly &&\n operation.status.toString() === OPERATION_STATUS_OPTIONS_MAP.FAILED.status.toString()\n }\n ];\n\n serverSideDataCallback: ServerSideDataCallback;\n\n private operationService = inject(OperationService);\n private alertService = inject(AlertService);\n private filterStatus: OperationStatus;\n private reload$ = new Subject<void>();\n private reloadThrottled$ = new Subject<void>();\n\n constructor(private bulkOperationsService: BulkOperationsService) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n merge(this.reload$, this.reloadThrottled$.pipe(throttleTime(30_000)))\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.dataGrid?.reload(false));\n }\n\n async ngAfterViewInit() {\n if (this.statusFilter) {\n this.setStatusFilter(false);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.reloadThrottled$.next();\n }\n }\n\n reload(option?: OperationStatusOption[]) {\n const [opt] = option ?? [];\n this.filterStatus = opt?.status ?? this.filterStatus;\n this.reload$.next();\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const filter = this.filterStatus ?? this.getFilterTypeOfSingleOperations();\n const { res, data, paging } = await this.bulkOperationsService.getSingleOperationsByStatus(\n filter,\n this.bulkOperation.id,\n dataSourceModifier.pagination\n );\n\n const filteredSize = await this.bulkOperationsService.getSingleOperationsCountByStatus(\n filter,\n this.bulkOperation.id\n );\n\n const size = await this.bulkOperationsService.getSingleOperationsTotal(this.bulkOperation.id);\n\n const serverSideDataResult: ServerSideDataResult = { res, data, paging, filteredSize, size };\n\n return serverSideDataResult;\n }\n\n setStatusFilter(emit = true) {\n if (this.statusFilter) {\n const typeFilter = this.getFilterTypeOfSingleOperations();\n this.statusFilter.preset(\n typeFilter === this.OPERATION_STATUS.ALL\n ? []\n : [{ label: this.OPERATION_STATUS_LABELS[typeFilter] }],\n emit\n );\n } else {\n setTimeout(this.setStatusFilter.bind(this, emit));\n }\n }\n\n getFilterTypeOfSingleOperations() {\n const { progress } = this.bulkOperation;\n\n if (progress.failed > 0) {\n return this.OPERATION_STATUS.FAILED;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.pending === 0) {\n return this.OPERATION_STATUS.EXECUTING;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.executing === 0) {\n return this.OPERATION_STATUS.PENDING;\n } else if (progress.failed === 0 && progress.pending === 0 && progress.executing === 0) {\n return this.OPERATION_STATUS.SUCCESSFUL;\n }\n\n return this.OPERATION_STATUS.ALL;\n }\n\n retryBulkOperation() {\n this.onRetryFailedOperations.emit(this.bulkOperation);\n }\n\n async retrySingleOperation(singleOperation) {\n const operationToCreate = omit(singleOperation, [\n 'id',\n 'self',\n 'status',\n 'failureReason',\n 'creationTime',\n 'delivery'\n ]);\n\n try {\n await this.operationService.create(operationToCreate);\n this.alertService.success(gettext('Operation created.'));\n } catch (er) {\n this.alertService.addServerFailure(er);\n }\n }\n}\n","<ng-container\n *ngIf=\"\n bulkOperation.progress.failed ||\n bulkOperation.progress.executing ||\n bulkOperation.progress.pending ||\n bulkOperation.progress.successful\n \"\n>\n <div\n class=\"legend form-block p-t-16 m-b-0\"\n translate\n >\n Operations\n </div>\n <div class=\"d-flex a-i-center\">\n <div class=\"d-flex a-i-center p-b-8\">\n <span\n class=\"m-r-4 text-medium\"\n translate\n >\n Filter by status\n </span>\n <c8y-status-filter\n small\n [options]=\"OPERATION_STATUS_OPTIONS_MAP\"\n (onFilterChanged)=\"reload($event)\"\n ></c8y-status-filter>\n </div>\n <div\n class=\"m-l-auto p-b-8\"\n *ngIf=\"!readOnly && bulkOperation.progress.failed > 0\"\n >\n <button\n class=\"btn btn-navbar\"\n title=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryBulkOperation()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"repeat\"\n ></i>\n <span translate>Retry failed operations</span>\n </button>\n </div>\n </div>\n <c8y-data-grid\n [actionControls]=\"actions\"\n [columns]=\"columns\"\n [displayOptions]=\"displayOptions\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [pagination]=\"pagination\"\n >\n <c8y-ui-empty-state\n icon=\"search\"\n [title]=\"'No single operations of the selected status to display.' | translate\"\n [subtitle]=\"'Single operations will be displayed here' | translate\"\n horizontal\n ></c8y-ui-empty-state>\n </c8y-data-grid>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-operations-bulk-single-operations-list.mjs","sources":["../../operations/bulk-single-operations-list/single-operations-list.component.ts","../../operations/bulk-single-operations-list/single-operations-list.component.html","../../operations/bulk-single-operations-list/c8y-ngx-components-operations-bulk-single-operations-list.ts"],"sourcesContent":["import {\n AfterViewInit,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n IOperation,\n IOperationBulk,\n IResultList,\n OperationService,\n OperationStatus\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n C8yTranslatePipe,\n Column,\n DataGridComponent,\n DataSourceModifier,\n DisplayOptions,\n EmptyStateComponent,\n IconDirective,\n Pagination,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport {\n CreationTimeGridColumn,\n DeviceGridColumn,\n FailureReasonGridColumn,\n OperationStatusGridColumn\n} from '@c8y/ngx-components/operations/grid-columns';\nimport {\n OPERATION_STATUS_LABELS,\n OPERATION_STATUS_OPTIONS_MAP,\n OperationStatusOption,\n OperationStatusOptionsMapShared\n} from '@c8y/ngx-components/operations/shared';\nimport {\n StatusFilterComponent,\n StatusFilterModule\n} from '@c8y/ngx-components/operations/status-filter';\nimport { omit } from 'lodash-es';\nimport { merge, Subject, throttleTime } from 'rxjs';\n\n@Component({\n standalone: true,\n selector: 'c8y-single-operations-list',\n templateUrl: './single-operations-list.component.html',\n imports: [\n StatusFilterModule,\n C8yTranslatePipe,\n IconDirective,\n DataGridComponent,\n EmptyStateComponent\n ]\n})\nexport class SingleOperationsListComponent implements AfterViewInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n\n @ViewChild(StatusFilterComponent, { static: false })\n statusFilter: StatusFilterComponent;\n @ViewChild(DataGridComponent, { static: false })\n dataGrid: DataGridComponent;\n\n OPERATION_STATUS = { ...OperationStatus, ALL: gettext('ALL') };\n OPERATION_STATUS_LABELS = OPERATION_STATUS_LABELS;\n OPERATION_STATUS_OPTIONS_MAP: OperationStatusOptionsMapShared = OPERATION_STATUS_OPTIONS_MAP;\n singleOperations: IResultList<IOperation>;\n\n displayOptions: Partial<DisplayOptions> = {\n gridHeader: false\n };\n pagination: Pagination = {\n pageSize: 25,\n currentPage: 1\n };\n\n columns: Column[] = [\n new OperationStatusGridColumn(),\n new DeviceGridColumn(),\n new CreationTimeGridColumn(),\n new FailureReasonGridColumn()\n ];\n\n actions: ActionControl[] = [\n {\n type: 'retry',\n icon: 'repeat',\n label: gettext('Retry operation'),\n text: gettext('Retry operation'),\n callback: operation => {\n this.retrySingleOperation(operation);\n },\n showIf: operation =>\n !this.readOnly &&\n operation.status.toString() === OPERATION_STATUS_OPTIONS_MAP.FAILED.status.toString()\n }\n ];\n\n serverSideDataCallback: ServerSideDataCallback;\n\n private operationService = inject(OperationService);\n private alertService = inject(AlertService);\n private filterStatus: OperationStatus | null;\n private reload$ = new Subject<void>();\n private reloadThrottled$ = new Subject<void>();\n\n constructor(private bulkOperationsService: BulkOperationsService) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n merge(this.reload$, this.reloadThrottled$.pipe(throttleTime(30_000)))\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.dataGrid?.reload(false));\n }\n\n async ngAfterViewInit() {\n if (this.statusFilter) {\n this.setStatusFilter(false);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.reloadThrottled$.next();\n }\n }\n\n reload(option?: OperationStatusOption[]) {\n const [opt] = option ?? [];\n this.filterStatus = opt?.status ?? null;\n this.reload$.next();\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const filter =\n this.filterStatus === undefined ? this.getFilterTypeOfSingleOperations() : this.filterStatus;\n const { res, data, paging } = await this.bulkOperationsService.getSingleOperationsByStatus(\n filter,\n this.bulkOperation.id,\n dataSourceModifier.pagination\n );\n\n const filteredSize = await this.bulkOperationsService.getSingleOperationsCountByStatus(\n filter,\n this.bulkOperation.id\n );\n\n const size = await this.bulkOperationsService.getSingleOperationsTotal(this.bulkOperation.id);\n\n const serverSideDataResult: ServerSideDataResult = { res, data, paging, filteredSize, size };\n\n return serverSideDataResult;\n }\n\n setStatusFilter(emit = true) {\n if (this.statusFilter) {\n const typeFilter = this.getFilterTypeOfSingleOperations();\n this.statusFilter.preset(\n typeFilter === this.OPERATION_STATUS.ALL\n ? []\n : [{ label: this.OPERATION_STATUS_LABELS[typeFilter] }],\n emit\n );\n } else {\n setTimeout(this.setStatusFilter.bind(this, emit));\n }\n }\n\n getFilterTypeOfSingleOperations() {\n const { progress } = this.bulkOperation;\n\n if (progress.failed > 0) {\n return this.OPERATION_STATUS.FAILED;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.pending === 0) {\n return this.OPERATION_STATUS.EXECUTING;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.executing === 0) {\n return this.OPERATION_STATUS.PENDING;\n } else if (progress.failed === 0 && progress.pending === 0 && progress.executing === 0) {\n return this.OPERATION_STATUS.SUCCESSFUL;\n }\n\n return this.OPERATION_STATUS.ALL;\n }\n\n retryBulkOperation() {\n this.onRetryFailedOperations.emit(this.bulkOperation);\n }\n\n async retrySingleOperation(singleOperation) {\n const operationToCreate = omit(singleOperation, [\n 'id',\n 'self',\n 'status',\n 'failureReason',\n 'creationTime',\n 'delivery'\n ]);\n\n try {\n await this.operationService.create(operationToCreate);\n this.alertService.success(gettext('Operation created.'));\n } catch (er) {\n this.alertService.addServerFailure(er);\n }\n }\n}\n","@if (\n bulkOperation.progress.failed ||\n bulkOperation.progress.executing ||\n bulkOperation.progress.pending ||\n bulkOperation.progress.successful\n) {\n <div\n class=\"legend form-block p-t-16 m-b-0\"\n translate\n >\n Operations\n </div>\n <div class=\"d-flex a-i-center\">\n <div class=\"d-flex a-i-center p-b-8\">\n <span\n class=\"m-r-4 text-medium\"\n translate\n >\n Filter by status\n </span>\n <c8y-status-filter\n small\n [options]=\"OPERATION_STATUS_OPTIONS_MAP\"\n (onFilterChanged)=\"reload($event)\"\n ></c8y-status-filter>\n </div>\n @if (!readOnly && bulkOperation.progress.failed > 0) {\n <div class=\"m-l-auto p-b-8\">\n <button\n class=\"btn btn-navbar\"\n title=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryBulkOperation()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"repeat\"\n ></i>\n <span translate>Retry failed operations</span>\n </button>\n </div>\n }\n </div>\n <c8y-data-grid\n [actionControls]=\"actions\"\n [columns]=\"columns\"\n [displayOptions]=\"displayOptions\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [pagination]=\"pagination\"\n >\n <c8y-ui-empty-state\n icon=\"search\"\n [title]=\"'No single operations of the selected status to display.' | translate\"\n [subtitle]=\"'Single operations will be displayed here' | translate\"\n horizontal\n ></c8y-ui-empty-state>\n </c8y-data-grid>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|