@@ -90,6 +90,7 @@ const GradingSubmissionTable: React.FC<GradingSubmissionTableProps> = ({
90
90
const [ columnFilters , setColumnFilters ] = useState < ColumnFiltersState > ( [
91
91
...tableFilters . columnFilters
92
92
] ) ;
93
+ const [ cellFilters , setCellFilters ] = useState < { id : ColumnFields ; value : string } [ ] > ( [ ] ) ;
93
94
const [ hiddenColumns , setHiddenColumns ] = useState < GradingColumnVisibility > (
94
95
columnVisibility ? columnVisibility : [ ]
95
96
) ;
@@ -103,7 +104,8 @@ const GradingSubmissionTable: React.FC<GradingSubmissionTableProps> = ({
103
104
104
105
const defaultColumnDefs : ColDef = {
105
106
filter : false ,
106
- resizable : false ,
107
+ floatingFilter : true ,
108
+ resizable : true ,
107
109
sortable : true ,
108
110
headerComponentParams : {
109
111
hideColumn : ( id : ColumnNameKeys ) => handleColumnFilterAdd ( id ) ,
@@ -142,8 +144,6 @@ const GradingSubmissionTable: React.FC<GradingSubmissionTableProps> = ({
142
144
suppressMenuHide : true ,
143
145
suppressPaginationPanel : true ,
144
146
suppressRowClickSelection : true ,
145
- tableHeight :
146
- String ( ROW_HEIGHT * ( rowData . length > 0 ? rowData . length : 2 ) + HEADER_HEIGHT + 4 ) + 'px' ,
147
147
tableMargins : '1rem 0 0 0'
148
148
} ;
149
149
@@ -162,11 +162,14 @@ const GradingSubmissionTable: React.FC<GradingSubmissionTableProps> = ({
162
162
debouncedUpdateSearchValue ( e . target . value ) ;
163
163
} ;
164
164
165
+ const debouncedUpdateCellFilters = useMemo ( ( ) => debounce ( setCellFilters , 300 ) , [ ] ) ;
166
+
165
167
// Converts the columnFilters array into backend query parameters.
166
168
const backendFilterParams = useMemo ( ( ) => {
167
169
const filters : Array < { [ key : string ] : any } > = [
168
170
{ id : ColumnFields . assessmentName , value : searchValue } ,
169
- ...columnFilters
171
+ ...columnFilters ,
172
+ ...cellFilters
170
173
] . map ( convertFilterToBackendParams ) ;
171
174
172
175
const params : Record < string , any > = { } ;
@@ -176,7 +179,7 @@ const GradingSubmissionTable: React.FC<GradingSubmissionTableProps> = ({
176
179
} ) ;
177
180
} ) ;
178
181
return params ;
179
- } , [ columnFilters , searchValue ] ) ;
182
+ } , [ cellFilters , columnFilters , searchValue ] ) ;
180
183
181
184
const cellClickedEvent = ( event : CellClickedEvent ) => {
182
185
const colClicked : string = event . colDef . field ? event . colDef . field : '' ;
@@ -392,13 +395,7 @@ const GradingSubmissionTable: React.FC<GradingSubmissionTableProps> = ({
392
395
> </ InputGroup >
393
396
</ GradingFlex >
394
397
395
- < div
396
- className = "ag-theme-quartz"
397
- style = { {
398
- height : tableProperties . tableHeight ,
399
- margin : tableProperties . tableMargins
400
- } }
401
- >
398
+ < div className = "ag-theme-quartz" style = { { margin : tableProperties . tableMargins } } >
402
399
< AgGridReact
403
400
columnDefs = { colDefs }
404
401
onCellClicked = { cellClickedEvent }
@@ -416,6 +413,25 @@ const GradingSubmissionTable: React.FC<GradingSubmissionTableProps> = ({
416
413
suppressMenuHide = { tableProperties . suppressMenuHide }
417
414
suppressPaginationPanel = { tableProperties . suppressPaginationPanel }
418
415
suppressRowClickSelection = { tableProperties . suppressRowClickSelection }
416
+ domLayout = "autoHeight"
417
+ onFilterChanged = { e => {
418
+ if ( ! e . afterFloatingFilter ) {
419
+ return ;
420
+ }
421
+ const filters = e . api . getFilterModel ( ) ;
422
+ const cellFilters = [ ] ;
423
+ for ( const [ key , { filter : query } ] of Object . entries ( filters ) ) {
424
+ switch ( key ) {
425
+ // Fields that BE supports filtering on
426
+ case ColumnFields . studentName :
427
+ case ColumnFields . studentUsername :
428
+ case ColumnFields . groupName :
429
+ cellFilters . push ( { id : key , value : query } ) ;
430
+ break ;
431
+ }
432
+ }
433
+ debouncedUpdateCellFilters ( cellFilters ) ;
434
+ } }
419
435
/>
420
436
</ div >
421
437
0 commit comments