Skip to content

Commit eefbf83

Browse files
authored
4395 Asset filters are not applied to datasets (#4419)
1 parent 42c7b99 commit eefbf83

2 files changed

Lines changed: 66 additions & 8 deletions

File tree

ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
featureCardId="measurement"
6161
[dataSource]="dataSource"
6262
[columns]="displayedColumns"
63+
[assetContextConfig]="assetContextConfig"
6364
[showActionsMenu]="true"
6465
matSort
6566
data-cy="datalake-settings"

ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts

Lines changed: 65 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
AfterViewInit,
2121
Component,
2222
inject,
23+
OnDestroy,
2324
OnInit,
2425
ViewChild,
2526
} from '@angular/core';
@@ -55,11 +56,13 @@ import {
5556
LocalStorageService,
5657
ObjectPermissionDialogComponent,
5758
PanelType,
59+
SpAssetBrowserService,
5860
SpAlertBannerComponent,
5961
SpBasicHeaderTitleComponent,
6062
SpBasicViewComponent,
6163
SpBreadcrumbService,
6264
SpLabelComponent,
65+
SpTableAssetContextConfig,
6366
SpTableActionsDirective,
6467
SpTableComponent,
6568
} from '@streampipes/shared-ui';
@@ -88,6 +91,7 @@ import { MatProgressSpinner } from '@angular/material/progress-spinner';
8891
import { DatePipe, DecimalPipe, NgIf, NgStyle } from '@angular/common';
8992
import { StyleDirective } from '@ngbracket/ngx-layout/extended';
9093
import { MatMenuItem } from '@angular/material/menu';
94+
import { Subscription } from 'rxjs';
9195

9296
@Component({
9397
selector: 'sp-datalake-configuration',
@@ -131,7 +135,9 @@ import { MatMenuItem } from '@angular/material/menu';
131135
SpTableActionsDirective,
132136
],
133137
})
134-
export class DatalakeConfigurationComponent implements OnInit, AfterViewInit {
138+
export class DatalakeConfigurationComponent
139+
implements OnInit, AfterViewInit, OnDestroy
140+
{
135141
paginator: MatPaginator;
136142
@ViewChild(MatSort) sort: MatSort;
137143
@ViewChild(SpTableComponent)
@@ -144,17 +150,24 @@ export class DatalakeConfigurationComponent implements OnInit, AfterViewInit {
144150
private exportProviderRestService = inject(ExportProviderService);
145151
private translateService = inject(TranslateService);
146152
private currentUserService = inject(CurrentUserService);
153+
private assetFilterService = inject(SpAssetBrowserService);
147154

148155
dataSource: MatTableDataSource<DataLakeConfigurationEntry> =
149156
new MatTableDataSource([]);
150157
availableMeasurements: DataLakeConfigurationEntry[] = [];
158+
filteredMeasurements: DataLakeConfigurationEntry[] = [];
151159
availableExportProvider: ExportProviderSettings[] = [];
160+
readonly assetContextConfig: SpTableAssetContextConfig = {
161+
resourceLinkType: 'measurement',
162+
resourceIdKey: 'elementId',
163+
};
152164

153165
dataSourceExport: MatTableDataSource<ExportProviderSettings> =
154166
new MatTableDataSource([]);
155167

156168
displayedColumns: string[] = [
157169
'name',
170+
'assetContext',
158171
'pipeline',
159172
'eventsLatest',
160173
'eventsTotal',
@@ -177,8 +190,16 @@ export class DatalakeConfigurationComponent implements OnInit, AfterViewInit {
177190
pageIndex = 0;
178191
isAdmin = false;
179192
writeAccess = false;
193+
assetFilter$: Subscription;
194+
currentFilterIds: Set<string> = new Set<string>();
180195

181196
ngOnInit(): void {
197+
this.assetFilterService.applyAssetLinkType('measurement');
198+
this.assetFilter$ =
199+
this.assetFilterService.currentAssetFilter$.subscribe(filter => {
200+
this.currentFilterIds = filter?.activeElementIds;
201+
this.applyMeasurementFilters(this.currentFilterIds);
202+
});
182203
this.breadcrumbService.updateBreadcrumb([
183204
SpConfigurationRoutes.BASE,
184205
{ label: 'Datasets' },
@@ -203,6 +224,10 @@ export class DatalakeConfigurationComponent implements OnInit, AfterViewInit {
203224
});
204225
}
205226

227+
ngOnDestroy(): void {
228+
this.assetFilter$?.unsubscribe();
229+
}
230+
206231
loadAvailableExportProvider() {
207232
this.availableExportProvider = [];
208233
this.exportProviderRestService
@@ -251,16 +276,48 @@ export class DatalakeConfigurationComponent implements OnInit, AfterViewInit {
251276
this.availableMeasurements.sort((a, b) =>
252277
a.name.localeCompare(b.name),
253278
);
254-
this.receiveMeasurementSizes(this.pageIndex);
255-
this.dataSource.data = this.availableMeasurements;
256-
setTimeout(() => {
257-
this.dataSource.paginator = this.paginator;
258-
this.dataSource.sort = this.sort;
259-
});
279+
this.applyMeasurementFilters(this.currentFilterIds);
260280
});
261281
});
262282
}
263283

284+
applyMeasurementFilters(elementIds: Set<string>) {
285+
this.currentFilterIds = elementIds;
286+
if (elementIds === undefined) {
287+
this.filteredMeasurements = [];
288+
} else if (elementIds.size === 0) {
289+
this.filteredMeasurements = this.availableMeasurements;
290+
} else {
291+
this.filteredMeasurements = this.availableMeasurements.filter(
292+
measurement => elementIds.has(measurement.elementId),
293+
);
294+
}
295+
296+
this.dataSource.data = this.filteredMeasurements;
297+
this.updatePaginatorAfterFiltering();
298+
this.receiveMeasurementSizes(this.pageIndex);
299+
300+
setTimeout(() => {
301+
this.dataSource.paginator = this.paginator;
302+
this.dataSource.sort = this.sort;
303+
});
304+
}
305+
306+
updatePaginatorAfterFiltering(): void {
307+
if (!this.paginator) {
308+
return;
309+
}
310+
311+
const maxPageIndex = Math.max(
312+
Math.ceil(this.filteredMeasurements.length / this.pageSize) - 1,
313+
0,
314+
);
315+
if (this.pageIndex > maxPageIndex) {
316+
this.pageIndex = maxPageIndex;
317+
this.paginator.pageIndex = maxPageIndex;
318+
}
319+
}
320+
264321
createExportProvider(provider: ExportProviderSettings | null) {
265322
const dialogRef: DialogRef<ExportProviderComponent> =
266323
this.dialogService.open(ExportProviderComponent, {
@@ -421,7 +478,7 @@ export class DatalakeConfigurationComponent implements OnInit, AfterViewInit {
421478
receiveMeasurementSizes(pageIndex: number) {
422479
const start = pageIndex * this.pageSize;
423480
const end = start + this.pageSize;
424-
const measurements = this.availableMeasurements
481+
const measurements = this.filteredMeasurements
425482
.slice(start, end)
426483
.filter(m => m.eventsLatest === -1)
427484
.map(m => m.name);

0 commit comments

Comments
 (0)