@@ -3,13 +3,19 @@ import Box from "@material-ui/core/Box";
3
3
import Button from "@material-ui/core/Button" ;
4
4
import useKinds from "../../hooks/useKinds" ;
5
5
import useEntitiesByKind from "../../hooks/useEntitiesByKind" ;
6
- import { DataGrid , GridCellEditCommitParams , GridCellParams , GridColDef } from "@mui/x-data-grid" ;
6
+ import {
7
+ DataGrid ,
8
+ GridCellEditCommitParams ,
9
+ GridCellParams ,
10
+ GridColDef ,
11
+ } from "@mui/x-data-grid" ;
7
12
import { LabelDisplayedRowsArgs } from "@material-ui/core" ;
8
13
import { FilterModel , SortModel } from "../../types/graphql" ;
9
14
import useUpdateEntity from "../../hooks/useUpdateEntity" ;
10
15
import EntityDrawer from "./EntityDrawer" ;
11
16
import EntityKinds from "./EntityKinds" ;
12
17
import EntityFilters from "./EntityFilters" ;
18
+ import Stack from "@mui/material/Stack" ;
13
19
14
20
function isObjectOrArray (
15
21
value : any
@@ -31,7 +37,11 @@ const Entities: React.FC = () => {
31
37
const [ sortModel , setSortModel ] = useState < SortModel [ ] | null > ( null ) ;
32
38
const [ currentCell , setCurrentCell ] = useState < GridCellParams | null > ( null ) ;
33
39
34
- const { data : kindsData , loading : isLoadingKinds } = useKinds ( {
40
+ const {
41
+ data : kindsData ,
42
+ loading : isLoadingKinds ,
43
+ error : kindsError ,
44
+ } = useKinds ( {
35
45
onCompleted : ( data ) => {
36
46
if ( ! kind ) setKind ( data . getKinds [ 0 ] ) ;
37
47
} ,
@@ -42,7 +52,11 @@ const Entities: React.FC = () => {
42
52
const {
43
53
result : [
44
54
fetchEntities ,
45
- { data : getEntitiesData , loading : isLoadingEntities } ,
55
+ {
56
+ data : getEntitiesData ,
57
+ loading : isLoadingEntities ,
58
+ error : entitiesError ,
59
+ } ,
46
60
] ,
47
61
changePage,
48
62
page,
@@ -57,6 +71,8 @@ const Entities: React.FC = () => {
57
71
58
72
const { getEntities : entitiesData } = getEntitiesData ?? { } ;
59
73
74
+ const error = kindsError ?? entitiesError ;
75
+
60
76
const entities = useMemo ( ( ) => {
61
77
if ( entitiesData ?. entities ) {
62
78
return entitiesData ?. entities . map ( ( { entity, key, path } ) => {
@@ -66,7 +82,6 @@ const Entities: React.FC = () => {
66
82
return [ ] ;
67
83
} , [ entitiesData ?. entities ] ) ;
68
84
69
-
70
85
const dataGridColumns = useMemo < GridColDef [ ] > ( ( ) => {
71
86
const columns : GridColDef [ ] = ( entitiesData ?. columns || [ ] ) . map ( ( key ) => {
72
87
const type = entitiesData ?. typesMap [ key ] ;
@@ -133,48 +148,53 @@ const Entities: React.FC = () => {
133
148
return entitiesData . columns . map ( ( key ) => ( {
134
149
label : key ,
135
150
value : key ,
136
- type : entitiesData . typesMap [ key ]
151
+ type : entitiesData . typesMap [ key ] ,
137
152
} ) ) ;
138
153
}
139
154
return [ ] ;
140
155
} , [ entitiesData ] ) ;
141
156
142
- const onCellEditCommit = useCallback ( async ( data : GridCellEditCommitParams ) => {
143
- if ( currentCell ) {
144
- const { value, field } = data ;
145
- const type = entitiesData ?. typesMap [ field ] ;
146
- const isArrayOrObject = type === "array" || type === "object" ;
157
+ const onCellEditCommit = useCallback (
158
+ async ( data : GridCellEditCommitParams ) => {
159
+ if ( currentCell ) {
160
+ const { value, field } = data ;
161
+ const type = entitiesData ?. typesMap [ field ] ;
162
+ const isArrayOrObject = type === "array" || type === "object" ;
147
163
148
- try {
149
- const updates = {
150
- [ field ] : isArrayOrObject
151
- ? JSON . parse ( value as any )
152
- : value instanceof Date
164
+ try {
165
+ const updates = {
166
+ [ field ] : isArrayOrObject
167
+ ? JSON . parse ( value as any )
168
+ : value instanceof Date
153
169
? value
154
170
: value ,
155
- } ;
156
-
157
- const path = currentCell . row . __path ;
158
-
159
- await updateEntity ( {
160
- variables : {
161
- input : {
162
- path,
163
- updates,
171
+ } ;
172
+
173
+ const path = currentCell . row . __path ;
174
+
175
+ await updateEntity ( {
176
+ variables : {
177
+ input : {
178
+ path,
179
+ updates,
180
+ } ,
164
181
} ,
165
- } ,
166
- } ) ;
167
- } catch ( error ) {
168
- console . error ( error ) ;
182
+ } ) ;
183
+ } catch ( error ) {
184
+ console . error ( error ) ;
185
+ }
169
186
}
170
- }
171
- } , [ currentCell , entitiesData ?. typesMap , updateEntity ] ) ;
187
+ } ,
188
+ [ currentCell , entitiesData ?. typesMap , updateEntity ]
189
+ ) ;
172
190
173
191
useEffect ( ( ) => {
174
192
if ( kind ) fetchEntities ( ) ;
175
193
// eslint-disable-next-line react-hooks/exhaustive-deps
176
194
} , [ sortModel , kind ] ) ;
177
195
196
+ console . log ( kindsError ?? entitiesError ) ;
197
+
178
198
return (
179
199
< Box >
180
200
< EntityKinds kind = { kind } kinds = { kinds } setKind = { setKind } />
@@ -221,6 +241,32 @@ const Entities: React.FC = () => {
221
241
} ,
222
242
} ,
223
243
} }
244
+ components = { {
245
+ NoRowsOverlay : ( ) => {
246
+ return (
247
+ < Stack
248
+ height = "100%"
249
+ alignItems = "center"
250
+ justifyContent = "center"
251
+ whiteSpace = "pre"
252
+ >
253
+ { error ?. message ?? "No entities found" }
254
+ </ Stack >
255
+ ) ;
256
+ } ,
257
+ NoResultsOverlay : ( ) => {
258
+ return (
259
+ < Stack
260
+ height = "100%"
261
+ alignItems = "center"
262
+ justifyContent = "center"
263
+ whiteSpace = "pre"
264
+ >
265
+ { error ?. message ?? "No entities found" }
266
+ </ Stack >
267
+ ) ;
268
+ } ,
269
+ } }
224
270
onSortModelChange = { ( sortModel ) =>
225
271
setSortModel ( sortModel as SortModel [ ] )
226
272
}
0 commit comments