5
5
GridValidRowModel as RowModel ,
6
6
GridValueGetter as ValueGetter ,
7
7
} from '@mui/x-data-grid' ;
8
- import { Nil } from '@seedcompany/common' ;
8
+ import { isObjectLike , Nil } from '@seedcompany/common' ;
9
9
import { DateTime } from 'luxon' ;
10
10
import { DateFilter } from '~/api/schema.graphql' ;
11
11
import { CalendarDate , ISOString , unwrapSecured } from '~/common' ;
@@ -21,6 +21,7 @@ export const dateColumn = <Row extends RowLike>() =>
21
21
column < Row > ( ) ( {
22
22
type : 'date' ,
23
23
valueGetter : dateColumn . valueGetter ( defaultValueGetter ) ,
24
+ valueSetter : defaultValueSetter ,
24
25
filterOperators,
25
26
renderHeaderFilter : GridHeaderAddFilterButton ,
26
27
} ) ;
@@ -59,6 +60,23 @@ dateColumn.valueGetter =
59
60
const defaultValueGetter : DateValueGetterInput = ( _ , row , column ) =>
60
61
unwrapSecured ( row [ column . field ] ) ;
61
62
63
+ const defaultValueSetter = < R extends RowModel > (
64
+ raw : Date | null ,
65
+ row : R ,
66
+ column : ColDef < R >
67
+ ) => {
68
+ const value = raw ? CalendarDate . fromJSDate ( raw ) : null ;
69
+ const field = row [ column . field ] ;
70
+ const wrapSecured =
71
+ isObjectLike ( field ) &&
72
+ '__typename' in field &&
73
+ typeof field . __typename === 'string' &&
74
+ field . __typename . startsWith ( 'Secured' )
75
+ ? { ...field , value }
76
+ : value ;
77
+ return { ...row , [ column . field ] : wrapSecured } ;
78
+ } ;
79
+
62
80
const filterOpNameMap : Record < string , keyof DateFilter > = {
63
81
after : 'after' ,
64
82
onOrAfter : 'afterInclusive' ,
0 commit comments