Merge pull request #9391 from rusikv/enhancement/enable-all-delete-strategies-delete-timeseries

Enabled all delete strategies for multiple delete timeseries UI
This commit is contained in:
Igor Kulikov 2023-10-13 13:09:39 +03:00 committed by GitHub
commit e5deac366e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 34 deletions

View File

@ -39,7 +39,7 @@ import { TranslateService } from '@ngx-translate/core';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { DialogService } from '@core/services/dialog.service'; import { DialogService } from '@core/services/dialog.service';
import { Direction, SortOrder } from '@shared/models/page/sort-order'; import { Direction, SortOrder } from '@shared/models/page/sort-order';
import { merge, Subject } from 'rxjs'; import { forkJoin, merge, Observable, Subject } from 'rxjs';
import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators'; import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
import { EntityId } from '@shared/models/id/entity-id'; import { EntityId } from '@shared/models/id/entity-id';
import { import {
@ -84,15 +84,11 @@ import {
AddWidgetToDashboardDialogComponent, AddWidgetToDashboardDialogComponent,
AddWidgetToDashboardDialogData AddWidgetToDashboardDialogData
} from '@home/components/attribute/add-widget-to-dashboard-dialog.component'; } from '@home/components/attribute/add-widget-to-dashboard-dialog.component';
import { deepClone, isUndefinedOrNull } from '@core/utils'; import { deepClone } from '@core/utils';
import { Filters } from '@shared/models/query/query.models'; import { Filters } from '@shared/models/query/query.models';
import { hidePageSizePixelValue } from '@shared/models/constants'; import { hidePageSizePixelValue } from '@shared/models/constants';
import { ResizeObserver } from '@juggle/resize-observer'; import { ResizeObserver } from '@juggle/resize-observer';
import { import { DeleteTimeseriesPanelComponent } from '@home/components/attribute/delete-timeseries-panel.component';
DELETE_TIMESERIES_PANEL_DATA,
DeleteTimeseriesPanelComponent,
DeleteTimeseriesPanelData
} from '@home/components/attribute/delete-timeseries-panel.component';
import { FormBuilder } from '@angular/forms'; import { FormBuilder } from '@angular/forms';
@ -392,7 +388,6 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
if ($event) { if ($event) {
$event.stopPropagation(); $event.stopPropagation();
} }
const isMultipleDeletion = isUndefinedOrNull(telemetry) && this.dataSource.selection.selected.length > 1;
const target = $event.target || $event.srcElement || $event.currentTarget; const target = $event.target || $event.srcElement || $event.currentTarget;
const config = new OverlayConfig({ const config = new OverlayConfig({
panelClass: 'tb-filter-panel', panelClass: 'tb-filter-panel',
@ -415,12 +410,6 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
}); });
const providers: StaticProvider[] = [ const providers: StaticProvider[] = [
{
provide: DELETE_TIMESERIES_PANEL_DATA,
useValue: {
isMultipleDeletion
} as DeleteTimeseriesPanelData
},
{ {
provide: OverlayRef, provide: OverlayRef,
useValue: overlayRef useValue: overlayRef
@ -433,6 +422,7 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
if (componentRef.instance.result !== null) { if (componentRef.instance.result !== null) {
const result = componentRef.instance.result; const result = componentRef.instance.result;
const deleteTimeseries = telemetry ? [telemetry]: this.dataSource.selection.selected; const deleteTimeseries = telemetry ? [telemetry]: this.dataSource.selection.selected;
const tasks: Observable<any>[] = [];
let deleteAllDataForKeys = false; let deleteAllDataForKeys = false;
let rewriteLatestIfDeleted = false; let rewriteLatestIfDeleted = false;
let startTs = null; let startTs = null;
@ -448,8 +438,12 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
break; break;
case TimeseriesDeleteStrategy.DELETE_LATEST_VALUE: case TimeseriesDeleteStrategy.DELETE_LATEST_VALUE:
rewriteLatestIfDeleted = result.rewriteLatest; rewriteLatestIfDeleted = result.rewriteLatest;
startTs = deleteTimeseries[0].lastUpdateTs; for (const ts of deleteTimeseries) {
endTs = startTs + 1; startTs = ts.lastUpdateTs;
endTs = startTs + 1;
tasks.push(this.attributeService.deleteEntityTimeseries(this.entityIdValue, [ts],
deleteAllDataForKeys, startTs, endTs, rewriteLatestIfDeleted, deleteLatest));
}
break; break;
case TimeseriesDeleteStrategy.DELETE_ALL_DATA_FOR_TIME_PERIOD: case TimeseriesDeleteStrategy.DELETE_ALL_DATA_FOR_TIME_PERIOD:
startTs = result.startDateTime.getTime(); startTs = result.startDateTime.getTime();
@ -457,9 +451,13 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
rewriteLatestIfDeleted = result.rewriteLatest; rewriteLatestIfDeleted = result.rewriteLatest;
break; break;
} }
this.attributeService.deleteEntityTimeseries(this.entityIdValue, deleteTimeseries, deleteAllDataForKeys, if (tasks.length) {
startTs, endTs, rewriteLatestIfDeleted, deleteLatest) forkJoin(tasks).subscribe(() => this.reloadAttributes());
.subscribe(() => this.reloadAttributes()); } else {
this.attributeService.deleteEntityTimeseries(this.entityIdValue, deleteTimeseries, deleteAllDataForKeys,
startTs, endTs, rewriteLatestIfDeleted, deleteLatest)
.subscribe(() => this.reloadAttributes());
}
} }
}); });
} }

View File

@ -14,7 +14,7 @@
/// limitations under the License. /// limitations under the License.
/// ///
import { Component, Inject, InjectionToken, OnDestroy, OnInit } from '@angular/core'; import { Component, InjectionToken, OnDestroy, OnInit } from '@angular/core';
import { OverlayRef } from '@angular/cdk/overlay'; import { OverlayRef } from '@angular/cdk/overlay';
import { import {
TimeseriesDeleteStrategy, TimeseriesDeleteStrategy,
@ -27,9 +27,6 @@ import { takeUntil } from 'rxjs/operators';
export const DELETE_TIMESERIES_PANEL_DATA = new InjectionToken<any>('DeleteTimeseriesPanelData'); export const DELETE_TIMESERIES_PANEL_DATA = new InjectionToken<any>('DeleteTimeseriesPanelData');
export interface DeleteTimeseriesPanelData {
isMultipleDeletion: boolean;
}
export interface DeleteTimeseriesPanelResult { export interface DeleteTimeseriesPanelResult {
strategy: TimeseriesDeleteStrategy; strategy: TimeseriesDeleteStrategy;
@ -51,23 +48,13 @@ export class DeleteTimeseriesPanelComponent implements OnInit, OnDestroy {
strategiesTranslationsMap = timeseriesDeleteStrategyTranslations; strategiesTranslationsMap = timeseriesDeleteStrategyTranslations;
private multipleDeletionStrategies = new Set<TimeseriesDeleteStrategy>([
TimeseriesDeleteStrategy.DELETE_ALL_DATA,
TimeseriesDeleteStrategy.DELETE_ALL_DATA_EXCEPT_LATEST_VALUE
]);
private destroy$ = new Subject<void>(); private destroy$ = new Subject<void>();
constructor(@Inject(DELETE_TIMESERIES_PANEL_DATA) private data: DeleteTimeseriesPanelData, constructor(private overlayRef: OverlayRef,
private overlayRef: OverlayRef,
private fb: FormBuilder) { } private fb: FormBuilder) { }
ngOnInit(): void { ngOnInit(): void {
const today = new Date(); const today = new Date();
if (this.data.isMultipleDeletion) {
this.strategiesTranslationsMap = new Map(Array.from(this.strategiesTranslationsMap)
.filter(([strategy]) => this.multipleDeletionStrategies.has(strategy)))
}
this.deleteTimeseriesFormGroup = this.fb.group({ this.deleteTimeseriesFormGroup = this.fb.group({
strategy: [TimeseriesDeleteStrategy.DELETE_ALL_DATA], strategy: [TimeseriesDeleteStrategy.DELETE_ALL_DATA],
startDateTime: [ startDateTime: [