@@ -22,7 +22,6 @@ import {
2222 TableRow ,
2323 TableSelectChange ,
2424 TableSelectControl ,
25- TableSelectionMode ,
2625 TableStyle ,
2726 ToggleItem ,
2827 toInFilter
@@ -36,6 +35,7 @@ import { filter, map, pairwise, share, startWith, switchMap, take, tap, withLate
3635import { AttributeMetadata , toFilterAttributeType } from '../../../graphql/model/metadata/attribute-metadata' ;
3736import { MetadataService } from '../../../services/metadata/metadata.service' ;
3837import { InteractionHandler } from '../../interaction/interaction-handler' ;
38+ import { TableWidgetRowInteractionModel } from './selections/table-widget-row-interaction.model' ;
3939import { TableWidgetBaseModel } from './table-widget-base.model' ;
4040import { SpecificationBackedTableColumnDef } from './table-widget-column.model' ;
4141import { TableWidgetViewToggleModel } from './table-widget-view-toggle.model' ;
@@ -61,6 +61,8 @@ import { TableWidgetModel } from './table-widget.model';
6161 [searchPlaceholder]="this.api.model.getSearchPlaceholder()"
6262 [selectControls]="this.selectControls$ | async"
6363 [checkboxControls]="this.checkboxControls$ | async"
64+ [selectedRows]="this.selectedRows"
65+ [customControlContent]="(this.isCustomControlPresent | htMemoize) ? customControlDetail : undefined"
6466 [viewItems]="this.viewItems"
6567 (searchChange)="this.onSearchChange($event)"
6668 (selectChange)="this.onSelectChange($event)"
@@ -83,6 +85,7 @@ import { TableWidgetModel } from './table-widget.model';
8385 [resizable]="this.api.model.isResizable()"
8486 [detailContent]="childDetail"
8587 [syncWithUrl]="this.syncWithUrl"
88+ (rowClicked)="this.onRowClicked($event)"
8689 (selectionsChange)="this.onRowSelection($event)"
8790 (columnConfigsChange)="this.onColumnsChange($event)"
8891 >
@@ -93,6 +96,10 @@ import { TableWidgetModel } from './table-widget.model';
9396 <ng-template #childDetail let-row="row">
9497 <ng-container [hdaDashboardModel]="this.getChildModel | htMemoize: row"></ng-container>
9598 </ng-template>
99+
100+ <ng-template #customControlDetail let-selectedRows="selectedRows">
101+ <ng-container [hdaDashboardModel]="this.getCustomControlWidgetModel | htMemoize: selectedRows"></ng-container>
102+ </ng-template>
96103 `
97104} )
98105export class TableWidgetRendererComponent
@@ -107,6 +114,8 @@ export class TableWidgetRendererComponent
107114 public columnConfigs$ ! : Observable < TableColumnConfig [ ] > ;
108115 public combinedFilters$ ! : Observable < TableFilter [ ] > ;
109116
117+ public selectedRows ?: StatefulTableRow [ ] = [ ] ;
118+
110119 private readonly toggleFilterSubject : Subject < TableFilter [ ] > = new BehaviorSubject < TableFilter [ ] > ( [ ] ) ;
111120 private readonly searchFilterSubject : Subject < TableFilter [ ] > = new BehaviorSubject < TableFilter [ ] > ( [ ] ) ;
112121 private readonly selectFilterSubject : BehaviorSubject < TableFilter [ ] > = new BehaviorSubject < TableFilter [ ] > ( [ ] ) ;
@@ -116,8 +125,6 @@ export class TableWidgetRendererComponent
116125 > ( { } ) ;
117126 public queryProperties$ : Observable < Dictionary < unknown > > = this . queryPropertiesSubject . asObservable ( ) ;
118127
119- private selectedRowInteractionHandler ?: InteractionHandler ;
120-
121128 public constructor (
122129 @Inject ( RENDERER_API ) api : RendererApi < TableWidgetModel > ,
123130 changeDetectorRef : ChangeDetectorRef ,
@@ -152,6 +159,11 @@ export class TableWidgetRendererComponent
152159
153160 public getChildModel = ( row : TableRow ) : object | undefined => this . model . getChildModel ( row ) ;
154161
162+ public isCustomControlPresent = ( ) : boolean => this . model . isCustomControlPresent ( ) ;
163+
164+ public getCustomControlWidgetModel = ( selectedRows ?: TableRow [ ] ) : object | undefined =>
165+ this . model . getCustomControlWidgetModel ( selectedRows ) ;
166+
155167 protected fetchData ( ) : Observable < TableDataSource < TableRow > | undefined > {
156168 return this . model . getData ( ) . pipe (
157169 startWith ( undefined ) ,
@@ -368,28 +380,30 @@ export class TableWidgetRendererComponent
368380 }
369381 }
370382
383+ public onRowClicked ( row : StatefulTableRow ) : void {
384+ this . getRowClickInteractionHandler ( row ) ?. execute ( row ) ;
385+ }
386+
371387 public onRowSelection ( selections : StatefulTableRow [ ] ) : void {
372- if ( this . api . model . getSelectionMode ( ) === TableSelectionMode . Single ) {
373- /**
374- * Execute selection handler for single selection mode only
375- */
376- let selectedRow ;
377- if ( selections . length > 0 ) {
378- selectedRow = selections [ 0 ] ;
379- this . selectedRowInteractionHandler = this . getInteractionHandler ( selectedRow ) ;
380- }
381-
382- this . selectedRowInteractionHandler ?. execute ( selectedRow ) ;
383- }
388+ this . selectedRows = selections ;
389+ /**
390+ * Todo: Stich this with selection handlers
391+ */
392+ }
393+
394+ private getRowClickInteractionHandler ( selectedRow : StatefulTableRow ) : InteractionHandler | undefined {
395+ return this . getInteractionHandler ( selectedRow , this . api . model . getRowClickHandlers ( ) ) ;
384396 }
385397
386- private getInteractionHandler ( selectedRow : StatefulTableRow ) : InteractionHandler | undefined {
387- const matchedSelectionHandlers = this . api . model
388- . getRowSelectionHandlers ( selectedRow )
389- ?. filter ( selectionModel => selectionModel . appliesToCurrentRowDepth ( selectedRow . $$state . depth ) )
398+ private getInteractionHandler (
399+ row : StatefulTableRow ,
400+ rowHandlers : TableWidgetRowInteractionModel [ ] = [ ]
401+ ) : InteractionHandler | undefined {
402+ const matchedHandlers = rowHandlers
403+ . filter ( interactionModel => interactionModel . appliesToCurrentRowDepth ( row . $$state . depth ) )
390404 . sort ( ( model1 , model2 ) => model2 . rowDepth - model1 . rowDepth ) ;
391405
392- return ! isEmpty ( matchedSelectionHandlers ) ? matchedSelectionHandlers [ 0 ] . handler : undefined ;
406+ return ! isEmpty ( matchedHandlers ) ? matchedHandlers [ 0 ] . handler : undefined ;
393407 }
394408
395409 private pickPersistColumnProperties ( column : TableColumnConfig ) : Pick < TableColumnConfig , 'id' | 'visible' > {
0 commit comments