1
+ import { PrismaInclude } from '@fullstack-typescript-monorepo/core' ;
1
2
import { Box , BoxProps , Button , ButtonGroup , Paper } from '@mui/material' ;
2
3
import { DataGridProps , GridRowId } from '@mui/x-data-grid' ;
3
4
import React , { useCallback , useState } from 'react' ;
@@ -15,12 +16,12 @@ interface TableOptions extends Omit<DataGridProps, 'rows'> {
15
16
}
16
17
17
18
interface TableLayoutProps < DataType , Model > {
18
- fetchPath : string ;
19
+ include ?: PrismaInclude ;
19
20
getter : (
20
- fetchPath : string ,
21
21
state : TableState ,
22
+ include ?: PrismaInclude ,
22
23
) => Promise < { data : Model [ ] , count : number } > ;
23
- setter ?: ( id : number , data : Partial < DataType > , fetchPath : string ) => Promise < Model > ;
24
+ setter ?: ( id : number , data : Partial < DataType > , include ?: object ) => Promise < Model > ;
24
25
mapper ?: ( rows : Model ) => DataType ;
25
26
add ?: ( ) => void ;
26
27
edit ?: ( id : number ) => void ;
@@ -39,7 +40,7 @@ interface TableLayoutProps<DataType, Model> {
39
40
* Datatable component
40
41
*/
41
42
const TableLayout = < DataType extends WithId , Model extends WithId > ( {
42
- fetchPath ,
43
+ include ,
43
44
getter,
44
45
setter,
45
46
mapper,
@@ -70,7 +71,7 @@ const TableLayout = <DataType extends WithId, Model extends WithId>({
70
71
*/
71
72
const handleGetter = useCallback ( ( params : TableState ) => {
72
73
if ( authed ) {
73
- return getter ( fetchPath , params ) . then ( ( response ) => ( {
74
+ return getter ( params , include ) . then ( ( response ) => ( {
74
75
data : response . data . map ( ( item ) => ( {
75
76
deleted, // Hack to force data reload on deletion, useless server-side
76
77
...mapper ? mapper ( item ) : item as unknown as DataType ,
@@ -82,23 +83,22 @@ const TableLayout = <DataType extends WithId, Model extends WithId>({
82
83
} ) ;
83
84
}
84
85
return Promise . resolve ( { data : [ ] , count : 0 } ) ;
85
- } , [ Alert , authed , deleted , fetchPath , getter , mapper , t ] ) ;
86
+ } , [ Alert , authed , deleted , getter , include , mapper , t ] ) ;
86
87
87
88
// Update actions table on setter call
88
89
const handleSetter = useCallback ( (
89
90
id : number ,
90
91
data : Partial < DataType > ,
91
- path : string ,
92
92
) => new Promise < Model > ( ( resolve , reject ) => {
93
93
if ( setter ) {
94
- setter ( id , data , path ) . then ( ( response ) => {
94
+ setter ( id , data , include ) . then ( ( response ) => {
95
95
resolve ( response ) ;
96
96
setNewRecord ( ( prev ) => prev + 1 ) ;
97
97
} ) . catch ( reject ) ;
98
98
} else {
99
99
reject ( ) ;
100
100
}
101
- } ) , [ setter ] ) ;
101
+ } ) , [ include , setter ] ) ;
102
102
103
103
// Enable/disable buttons based on row selection
104
104
const handleSelection = useCallback ( ( data : GridRowId [ ] ) => {
@@ -182,7 +182,6 @@ const TableLayout = <DataType extends WithId, Model extends WithId>({
182
182
< Datatable < DataType , Model >
183
183
{ ...tableOptions }
184
184
onSelectionModelChange = { handleSelection }
185
- fetchPath = { fetchPath }
186
185
getter = { handleGetter }
187
186
setter = { setter ? handleSetter : undefined }
188
187
globalCsvExport = { globalCsvExport }
0 commit comments