@@ -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';
8891import { DatePipe , DecimalPipe , NgIf , NgStyle } from '@angular/common' ;
8992import { StyleDirective } from '@ngbracket/ngx-layout/extended' ;
9093import { 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