@@ -22,7 +22,6 @@ import {
22
22
TableRow ,
23
23
TableSelectChange ,
24
24
TableSelectControl ,
25
- TableSelectionMode ,
26
25
TableStyle ,
27
26
ToggleItem ,
28
27
toInFilter
@@ -36,6 +35,7 @@ import { filter, map, pairwise, share, startWith, switchMap, take, tap, withLate
36
35
import { AttributeMetadata , toFilterAttributeType } from '../../../graphql/model/metadata/attribute-metadata' ;
37
36
import { MetadataService } from '../../../services/metadata/metadata.service' ;
38
37
import { InteractionHandler } from '../../interaction/interaction-handler' ;
38
+ import { TableWidgetRowInteractionModel } from './selections/table-widget-row-interaction.model' ;
39
39
import { TableWidgetBaseModel } from './table-widget-base.model' ;
40
40
import { SpecificationBackedTableColumnDef } from './table-widget-column.model' ;
41
41
import { TableWidgetViewToggleModel } from './table-widget-view-toggle.model' ;
@@ -61,6 +61,8 @@ import { TableWidgetModel } from './table-widget.model';
61
61
[searchPlaceholder]="this.api.model.getSearchPlaceholder()"
62
62
[selectControls]="this.selectControls$ | async"
63
63
[checkboxControls]="this.checkboxControls$ | async"
64
+ [selectedRows]="this.selectedRows"
65
+ [customControlContent]="(this.isCustomControlPresent | htMemoize) ? customControlDetail : undefined"
64
66
[viewItems]="this.viewItems"
65
67
(searchChange)="this.onSearchChange($event)"
66
68
(selectChange)="this.onSelectChange($event)"
@@ -83,6 +85,7 @@ import { TableWidgetModel } from './table-widget.model';
83
85
[resizable]="this.api.model.isResizable()"
84
86
[detailContent]="childDetail"
85
87
[syncWithUrl]="this.syncWithUrl"
88
+ (rowClicked)="this.onRowClicked($event)"
86
89
(selectionsChange)="this.onRowSelection($event)"
87
90
(columnConfigsChange)="this.onColumnsChange($event)"
88
91
>
@@ -93,6 +96,10 @@ import { TableWidgetModel } from './table-widget.model';
93
96
<ng-template #childDetail let-row="row">
94
97
<ng-container [hdaDashboardModel]="this.getChildModel | htMemoize: row"></ng-container>
95
98
</ng-template>
99
+
100
+ <ng-template #customControlDetail let-selectedRows="selectedRows">
101
+ <ng-container [hdaDashboardModel]="this.getCustomControlWidgetModel | htMemoize: selectedRows"></ng-container>
102
+ </ng-template>
96
103
`
97
104
} )
98
105
export class TableWidgetRendererComponent
@@ -107,6 +114,8 @@ export class TableWidgetRendererComponent
107
114
public columnConfigs$ ! : Observable < TableColumnConfig [ ] > ;
108
115
public combinedFilters$ ! : Observable < TableFilter [ ] > ;
109
116
117
+ public selectedRows ?: StatefulTableRow [ ] = [ ] ;
118
+
110
119
private readonly toggleFilterSubject : Subject < TableFilter [ ] > = new BehaviorSubject < TableFilter [ ] > ( [ ] ) ;
111
120
private readonly searchFilterSubject : Subject < TableFilter [ ] > = new BehaviorSubject < TableFilter [ ] > ( [ ] ) ;
112
121
private readonly selectFilterSubject : BehaviorSubject < TableFilter [ ] > = new BehaviorSubject < TableFilter [ ] > ( [ ] ) ;
@@ -116,8 +125,6 @@ export class TableWidgetRendererComponent
116
125
> ( { } ) ;
117
126
public queryProperties$ : Observable < Dictionary < unknown > > = this . queryPropertiesSubject . asObservable ( ) ;
118
127
119
- private selectedRowInteractionHandler ?: InteractionHandler ;
120
-
121
128
public constructor (
122
129
@Inject ( RENDERER_API ) api : RendererApi < TableWidgetModel > ,
123
130
changeDetectorRef : ChangeDetectorRef ,
@@ -152,6 +159,11 @@ export class TableWidgetRendererComponent
152
159
153
160
public getChildModel = ( row : TableRow ) : object | undefined => this . model . getChildModel ( row ) ;
154
161
162
+ public isCustomControlPresent = ( ) : boolean => this . model . isCustomControlPresent ( ) ;
163
+
164
+ public getCustomControlWidgetModel = ( selectedRows ?: TableRow [ ] ) : object | undefined =>
165
+ this . model . getCustomControlWidgetModel ( selectedRows ) ;
166
+
155
167
protected fetchData ( ) : Observable < TableDataSource < TableRow > | undefined > {
156
168
return this . model . getData ( ) . pipe (
157
169
startWith ( undefined ) ,
@@ -368,28 +380,30 @@ export class TableWidgetRendererComponent
368
380
}
369
381
}
370
382
383
+ public onRowClicked ( row : StatefulTableRow ) : void {
384
+ this . getRowClickInteractionHandler ( row ) ?. execute ( row ) ;
385
+ }
386
+
371
387
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 ( ) ) ;
384
396
}
385
397
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 ) )
390
404
. sort ( ( model1 , model2 ) => model2 . rowDepth - model1 . rowDepth ) ;
391
405
392
- return ! isEmpty ( matchedSelectionHandlers ) ? matchedSelectionHandlers [ 0 ] . handler : undefined ;
406
+ return ! isEmpty ( matchedHandlers ) ? matchedHandlers [ 0 ] . handler : undefined ;
393
407
}
394
408
395
409
private pickPersistColumnProperties ( column : TableColumnConfig ) : Pick < TableColumnConfig , 'id' | 'visible' > {
0 commit comments