@@ -10,12 +10,16 @@ import {
1010 metadataKeys ,
1111} from "@finos/vuu-utils" ;
1212
13+ // TOSO eliminate this dependency
14+ import { extractFilterForColumn } from "@finos/vuu-filters" ;
15+
1316import { Reducer , useReducer } from "react" ;
1417import {
1518 VuuColumnDataType ,
1619 VuuGroupBy ,
1720 VuuSort ,
1821} from "@finos/vuu-protocol-types" ;
22+ import { DataSourceFilter } from "@finos/vuu-data" ;
1923
2024const DEFAULT_COLUMN_WIDTH = 100 ;
2125const KEY_OFFSET = metadataKeys . count ;
@@ -87,6 +91,7 @@ export interface ColumnActionUpdateProp {
8791
8892export interface ColumnActionTableConfig {
8993 type : "tableConfig" ;
94+ filter ?: DataSourceFilter ;
9095 groupBy ?: VuuGroupBy ;
9196 sort ?: VuuSort ;
9297}
@@ -263,9 +268,10 @@ function updateColumnProp(
263268
264269function updateTableConfig (
265270 state : GridModel ,
266- { groupBy, sort } : ColumnActionTableConfig
271+ { filter , groupBy, sort } : ColumnActionTableConfig
267272) {
268273 const hasGroupBy = groupBy !== undefined ;
274+ const hasFilter = typeof filter ?. filter === "string" ;
269275 const hasSort = sort && sort . sortDefs . length > 0 ;
270276
271277 let result = state ;
@@ -284,6 +290,13 @@ function updateTableConfig(
284290 } ;
285291 }
286292
293+ if ( hasFilter ) {
294+ result = {
295+ ...state ,
296+ columns : applyFilterToColumns ( state . columns , filter ) ,
297+ } ;
298+ }
299+
287300 return result ;
288301}
289302
@@ -294,6 +307,7 @@ function replaceColumn(
294307 return state . map ( ( col ) => ( col . name === column . name ? column : col ) ) ;
295308}
296309
310+ //TOSDO move these functions to utils
297311const applyGroupByToColumns = (
298312 columns : KeyedColumnDescriptor [ ] ,
299313 groupBy : VuuGroupBy
@@ -330,6 +344,28 @@ const applySortToColumns = (colunms: KeyedColumnDescriptor[], sort: VuuSort) =>
330344 }
331345 } ) ;
332346
347+ const applyFilterToColumns = (
348+ columns : KeyedColumnDescriptor [ ] ,
349+ { filterStruct } : DataSourceFilter
350+ ) =>
351+ columns . map ( ( column ) => {
352+ // TODO this gives us a dependency on vuu-filters
353+ const filter = extractFilterForColumn ( filterStruct , column . name ) ;
354+ if ( filter !== undefined ) {
355+ return {
356+ ...column ,
357+ filter,
358+ } ;
359+ } else if ( column . filter ) {
360+ return {
361+ ...column ,
362+ filter : undefined ,
363+ } ;
364+ } else {
365+ return column ;
366+ }
367+ } ) ;
368+
333369const getSortType = ( column : ColumnDescriptor , { sortDefs } : VuuSort ) => {
334370 const sortDef = sortDefs . find ( ( sortCol ) => sortCol . column === column . name ) ;
335371 if ( sortDef ) {
0 commit comments