@nestledjs/data-browser 0.1.15 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/index.d.ts +1 -0
- package/index.js +2 -0
- package/lib/components/RelationFieldWrapper.d.ts +2 -1
- package/lib/hooks/useAdminList.js +2 -0
- package/lib/hooks/useRelationData.js +0 -3
- package/lib/layouts/AdminDataLayout.js +1 -1
- package/lib/pages/AdminDataCreatePage.js +38 -42
- package/lib/pages/AdminDataEditPage.js +98 -119
- package/lib/pages/AdminDataIndexPage.js +1 -1
- package/lib/pages/AdminDataListPage.js +111 -125
- package/lib/types/index.d.ts +3 -0
- package/lib/utils/get-plural-names.d.ts +21 -0
- package/lib/utils/get-plural-names.js +41 -0
- package/lib/utils/graphql-utils.js +1 -16
- package/lib/utils/secure-storage.js +0 -13
- package/package.json +2 -3
|
@@ -39,7 +39,6 @@ const validateId = (id) => {
|
|
|
39
39
|
const sanitized = sanitizeInput(id);
|
|
40
40
|
if (!sanitized) return null;
|
|
41
41
|
if (!/^[a-zA-Z0-9_-]+$/.test(sanitized)) {
|
|
42
|
-
console.warn(`[Security] Invalid ID format attempted: ${id}`);
|
|
43
42
|
return null;
|
|
44
43
|
}
|
|
45
44
|
return sanitized;
|
|
@@ -64,7 +63,6 @@ function AdminDataEditPage() {
|
|
|
64
63
|
const properCaseDataType = sanitized.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join("");
|
|
65
64
|
const model2 = databaseModels.find((m) => m.name === properCaseDataType);
|
|
66
65
|
if (!model2) {
|
|
67
|
-
console.warn(`[Security] Invalid dataType attempted: ${dataType2}`);
|
|
68
66
|
return null;
|
|
69
67
|
}
|
|
70
68
|
return properCaseDataType;
|
|
@@ -77,84 +75,84 @@ function AdminDataEditPage() {
|
|
|
77
75
|
if (shouldShowUnauthorized) {
|
|
78
76
|
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
|
|
79
77
|
fileName: _jsxFileName,
|
|
80
|
-
lineNumber:
|
|
78
|
+
lineNumber: 116,
|
|
81
79
|
columnNumber: 7
|
|
82
80
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
|
|
83
81
|
fileName: _jsxFileName,
|
|
84
|
-
lineNumber:
|
|
82
|
+
lineNumber: 117,
|
|
85
83
|
columnNumber: 9
|
|
86
84
|
} }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
|
|
87
85
|
fileName: _jsxFileName,
|
|
88
|
-
lineNumber:
|
|
86
|
+
lineNumber: 118,
|
|
89
87
|
columnNumber: 11
|
|
90
88
|
} }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
|
|
91
89
|
fileName: _jsxFileName,
|
|
92
|
-
lineNumber:
|
|
90
|
+
lineNumber: 119,
|
|
93
91
|
columnNumber: 13
|
|
94
92
|
} }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-red-400", __self: this, __source: {
|
|
95
93
|
fileName: _jsxFileName,
|
|
96
|
-
lineNumber:
|
|
94
|
+
lineNumber: 120,
|
|
97
95
|
columnNumber: 15
|
|
98
96
|
} }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
|
|
99
97
|
fileName: _jsxFileName,
|
|
100
|
-
lineNumber:
|
|
98
|
+
lineNumber: 121,
|
|
101
99
|
columnNumber: 15
|
|
102
100
|
} }, "Unauthorized"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
|
|
103
101
|
fileName: _jsxFileName,
|
|
104
|
-
lineNumber:
|
|
102
|
+
lineNumber: 122,
|
|
105
103
|
columnNumber: 15
|
|
106
104
|
} }, "Invalid data type, ID, or insufficient permissions."), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
|
|
107
105
|
fileName: _jsxFileName,
|
|
108
|
-
lineNumber:
|
|
106
|
+
lineNumber: 125,
|
|
109
107
|
columnNumber: 15
|
|
110
108
|
} }, /* @__PURE__ */ React.createElement(Link, { to: basePath, className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
111
109
|
fileName: _jsxFileName,
|
|
112
|
-
lineNumber:
|
|
110
|
+
lineNumber: 126,
|
|
113
111
|
columnNumber: 17
|
|
114
112
|
} }, "Return to Data Browser"))))));
|
|
115
113
|
}
|
|
116
114
|
if (shouldShowModelNotFound) {
|
|
117
115
|
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
|
|
118
116
|
fileName: _jsxFileName,
|
|
119
|
-
lineNumber:
|
|
117
|
+
lineNumber: 142,
|
|
120
118
|
columnNumber: 7
|
|
121
119
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
|
|
122
120
|
fileName: _jsxFileName,
|
|
123
|
-
lineNumber:
|
|
121
|
+
lineNumber: 143,
|
|
124
122
|
columnNumber: 9
|
|
125
123
|
} }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
|
|
126
124
|
fileName: _jsxFileName,
|
|
127
|
-
lineNumber:
|
|
125
|
+
lineNumber: 144,
|
|
128
126
|
columnNumber: 11
|
|
129
127
|
} }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
|
|
130
128
|
fileName: _jsxFileName,
|
|
131
|
-
lineNumber:
|
|
129
|
+
lineNumber: 145,
|
|
132
130
|
columnNumber: 13
|
|
133
131
|
} }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-yellow-400", __self: this, __source: {
|
|
134
132
|
fileName: _jsxFileName,
|
|
135
|
-
lineNumber:
|
|
133
|
+
lineNumber: 146,
|
|
136
134
|
columnNumber: 15
|
|
137
135
|
} }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
|
|
138
136
|
fileName: _jsxFileName,
|
|
139
|
-
lineNumber:
|
|
137
|
+
lineNumber: 147,
|
|
140
138
|
columnNumber: 15
|
|
141
139
|
} }, "Model Not Found"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
|
|
142
140
|
fileName: _jsxFileName,
|
|
143
|
-
lineNumber:
|
|
141
|
+
lineNumber: 148,
|
|
144
142
|
columnNumber: 15
|
|
145
143
|
} }, 'The data model for "', validatedDataType, '" could not be found.'), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
|
|
146
144
|
fileName: _jsxFileName,
|
|
147
|
-
lineNumber:
|
|
145
|
+
lineNumber: 151,
|
|
148
146
|
columnNumber: 15
|
|
149
147
|
} }, /* @__PURE__ */ React.createElement(Link, { to: basePath, className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
150
148
|
fileName: _jsxFileName,
|
|
151
|
-
lineNumber:
|
|
149
|
+
lineNumber: 152,
|
|
152
150
|
columnNumber: 17
|
|
153
151
|
} }, "Return to Data Browser"))))));
|
|
154
152
|
}
|
|
155
153
|
return /* @__PURE__ */ React.createElement(AdminDataEditPageContent, { model, id: validatedId, basePath, formTheme, __self: this, __source: {
|
|
156
154
|
fileName: _jsxFileName,
|
|
157
|
-
lineNumber:
|
|
155
|
+
lineNumber: 167,
|
|
158
156
|
columnNumber: 10
|
|
159
157
|
} });
|
|
160
158
|
}
|
|
@@ -180,7 +178,6 @@ function AdminDataEditPageContent({
|
|
|
180
178
|
try {
|
|
181
179
|
return getAdminDocuments(sdk, model);
|
|
182
180
|
} catch (error2) {
|
|
183
|
-
console.error("[AdminDataEditPage] Error getting documents:", error2);
|
|
184
181
|
return null;
|
|
185
182
|
}
|
|
186
183
|
}, [sdk, model]);
|
|
@@ -193,7 +190,6 @@ function AdminDataEditPageContent({
|
|
|
193
190
|
}
|
|
194
191
|
return gql(documents.query);
|
|
195
192
|
} catch (error2) {
|
|
196
|
-
console.error("[AdminDataEditPage] Error parsing QUERY:", error2);
|
|
197
193
|
return null;
|
|
198
194
|
}
|
|
199
195
|
}, [documents]);
|
|
@@ -206,7 +202,6 @@ function AdminDataEditPageContent({
|
|
|
206
202
|
}
|
|
207
203
|
return gql(documents.update);
|
|
208
204
|
} catch (error2) {
|
|
209
|
-
console.error("[AdminDataEditPage] Error parsing UPDATE mutation:", error2);
|
|
210
205
|
return null;
|
|
211
206
|
}
|
|
212
207
|
}, [documents]);
|
|
@@ -219,7 +214,6 @@ function AdminDataEditPageContent({
|
|
|
219
214
|
}
|
|
220
215
|
return gql(documents.delete);
|
|
221
216
|
} catch (error2) {
|
|
222
|
-
console.error("[AdminDataEditPage] Error parsing DELETE mutation:", error2);
|
|
223
217
|
return null;
|
|
224
218
|
}
|
|
225
219
|
}, [documents]);
|
|
@@ -274,113 +268,113 @@ function AdminDataEditPageContent({
|
|
|
274
268
|
if (!documents || !QUERY || !UPDATE_MUTATION || !DELETE_MUTATION) {
|
|
275
269
|
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
|
|
276
270
|
fileName: _jsxFileName,
|
|
277
|
-
lineNumber:
|
|
271
|
+
lineNumber: 299,
|
|
278
272
|
columnNumber: 7
|
|
279
273
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-2xl", __self: this, __source: {
|
|
280
274
|
fileName: _jsxFileName,
|
|
281
|
-
lineNumber:
|
|
275
|
+
lineNumber: 300,
|
|
282
276
|
columnNumber: 9
|
|
283
277
|
} }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
|
|
284
278
|
fileName: _jsxFileName,
|
|
285
|
-
lineNumber:
|
|
279
|
+
lineNumber: 301,
|
|
286
280
|
columnNumber: 11
|
|
287
281
|
} }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
|
|
288
282
|
fileName: _jsxFileName,
|
|
289
|
-
lineNumber:
|
|
283
|
+
lineNumber: 302,
|
|
290
284
|
columnNumber: 13
|
|
291
285
|
} }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-red-400", __self: this, __source: {
|
|
292
286
|
fileName: _jsxFileName,
|
|
293
|
-
lineNumber:
|
|
287
|
+
lineNumber: 303,
|
|
294
288
|
columnNumber: 15
|
|
295
289
|
} }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
|
|
296
290
|
fileName: _jsxFileName,
|
|
297
|
-
lineNumber:
|
|
291
|
+
lineNumber: 304,
|
|
298
292
|
columnNumber: 15
|
|
299
293
|
} }, "GraphQL Schema Error"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
|
|
300
294
|
fileName: _jsxFileName,
|
|
301
|
-
lineNumber:
|
|
295
|
+
lineNumber: 305,
|
|
302
296
|
columnNumber: 15
|
|
303
297
|
} }, "Unable to load GraphQL documents for this model. Please ensure the API server is running and the GraphQL schema is up to date."), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
|
|
304
298
|
fileName: _jsxFileName,
|
|
305
|
-
lineNumber:
|
|
299
|
+
lineNumber: 309,
|
|
306
300
|
columnNumber: 15
|
|
307
301
|
} }, /* @__PURE__ */ React.createElement(Link, { to: basePath, className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
308
302
|
fileName: _jsxFileName,
|
|
309
|
-
lineNumber:
|
|
303
|
+
lineNumber: 310,
|
|
310
304
|
columnNumber: 17
|
|
311
305
|
} }, "Return to Data Browser"))))));
|
|
312
306
|
}
|
|
313
307
|
if (error) {
|
|
314
308
|
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
|
|
315
309
|
fileName: _jsxFileName,
|
|
316
|
-
lineNumber:
|
|
310
|
+
lineNumber: 327,
|
|
317
311
|
columnNumber: 7
|
|
318
312
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
|
|
319
313
|
fileName: _jsxFileName,
|
|
320
|
-
lineNumber:
|
|
314
|
+
lineNumber: 328,
|
|
321
315
|
columnNumber: 9
|
|
322
316
|
} }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
|
|
323
317
|
fileName: _jsxFileName,
|
|
324
|
-
lineNumber:
|
|
318
|
+
lineNumber: 329,
|
|
325
319
|
columnNumber: 11
|
|
326
320
|
} }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
|
|
327
321
|
fileName: _jsxFileName,
|
|
328
|
-
lineNumber:
|
|
322
|
+
lineNumber: 330,
|
|
329
323
|
columnNumber: 13
|
|
330
324
|
} }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-red-400", __self: this, __source: {
|
|
331
325
|
fileName: _jsxFileName,
|
|
332
|
-
lineNumber:
|
|
326
|
+
lineNumber: 331,
|
|
333
327
|
columnNumber: 15
|
|
334
328
|
} }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
|
|
335
329
|
fileName: _jsxFileName,
|
|
336
|
-
lineNumber:
|
|
330
|
+
lineNumber: 332,
|
|
337
331
|
columnNumber: 15
|
|
338
332
|
} }, "Error Loading Data"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
|
|
339
333
|
fileName: _jsxFileName,
|
|
340
|
-
lineNumber:
|
|
334
|
+
lineNumber: 333,
|
|
341
335
|
columnNumber: 15
|
|
342
336
|
} }, error.message), /* @__PURE__ */ React.createElement("div", { className: "mt-6 space-y-3", __self: this, __source: {
|
|
343
337
|
fileName: _jsxFileName,
|
|
344
|
-
lineNumber:
|
|
338
|
+
lineNumber: 334,
|
|
345
339
|
columnNumber: 15
|
|
346
340
|
} }, /* @__PURE__ */ React.createElement("button", { onClick: () => refetch(), className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
347
341
|
fileName: _jsxFileName,
|
|
348
|
-
lineNumber:
|
|
342
|
+
lineNumber: 335,
|
|
349
343
|
columnNumber: 17
|
|
350
344
|
} }, "Try Again"), /* @__PURE__ */ React.createElement(Link, { to: `${basePath}/${toKebabCase(model.pluralName)}`, className: "w-full flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
351
345
|
fileName: _jsxFileName,
|
|
352
|
-
lineNumber:
|
|
346
|
+
lineNumber: 341,
|
|
353
347
|
columnNumber: 17
|
|
354
348
|
} }, "Back to List"))))));
|
|
355
349
|
}
|
|
356
350
|
if (loading) {
|
|
357
351
|
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
|
|
358
352
|
fileName: _jsxFileName,
|
|
359
|
-
lineNumber:
|
|
353
|
+
lineNumber: 358,
|
|
360
354
|
columnNumber: 7
|
|
361
355
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
|
|
362
356
|
fileName: _jsxFileName,
|
|
363
|
-
lineNumber:
|
|
357
|
+
lineNumber: 359,
|
|
364
358
|
columnNumber: 9
|
|
365
359
|
} }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
|
|
366
360
|
fileName: _jsxFileName,
|
|
367
|
-
lineNumber:
|
|
361
|
+
lineNumber: 360,
|
|
368
362
|
columnNumber: 11
|
|
369
363
|
} }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
|
|
370
364
|
fileName: _jsxFileName,
|
|
371
|
-
lineNumber:
|
|
365
|
+
lineNumber: 361,
|
|
372
366
|
columnNumber: 13
|
|
373
367
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mx-auto h-12 w-12 border-4 border-green-web border-t-transparent rounded-full animate-spin", __self: this, __source: {
|
|
374
368
|
fileName: _jsxFileName,
|
|
375
|
-
lineNumber:
|
|
369
|
+
lineNumber: 362,
|
|
376
370
|
columnNumber: 15
|
|
377
371
|
} }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
|
|
378
372
|
fileName: _jsxFileName,
|
|
379
|
-
lineNumber:
|
|
373
|
+
lineNumber: 363,
|
|
380
374
|
columnNumber: 15
|
|
381
375
|
} }, "Loading..."), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
|
|
382
376
|
fileName: _jsxFileName,
|
|
383
|
-
lineNumber:
|
|
377
|
+
lineNumber: 364,
|
|
384
378
|
columnNumber: 15
|
|
385
379
|
} }, "Loading ", toReadableText(model.name), " data...")))));
|
|
386
380
|
}
|
|
@@ -388,39 +382,39 @@ function AdminDataEditPageContent({
|
|
|
388
382
|
if (!item) {
|
|
389
383
|
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
|
|
390
384
|
fileName: _jsxFileName,
|
|
391
|
-
lineNumber:
|
|
385
|
+
lineNumber: 379,
|
|
392
386
|
columnNumber: 7
|
|
393
387
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
|
|
394
388
|
fileName: _jsxFileName,
|
|
395
|
-
lineNumber:
|
|
389
|
+
lineNumber: 380,
|
|
396
390
|
columnNumber: 9
|
|
397
391
|
} }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
|
|
398
392
|
fileName: _jsxFileName,
|
|
399
|
-
lineNumber:
|
|
393
|
+
lineNumber: 381,
|
|
400
394
|
columnNumber: 11
|
|
401
395
|
} }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
|
|
402
396
|
fileName: _jsxFileName,
|
|
403
|
-
lineNumber:
|
|
397
|
+
lineNumber: 382,
|
|
404
398
|
columnNumber: 13
|
|
405
399
|
} }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-yellow-400", __self: this, __source: {
|
|
406
400
|
fileName: _jsxFileName,
|
|
407
|
-
lineNumber:
|
|
401
|
+
lineNumber: 383,
|
|
408
402
|
columnNumber: 15
|
|
409
403
|
} }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
|
|
410
404
|
fileName: _jsxFileName,
|
|
411
|
-
lineNumber:
|
|
405
|
+
lineNumber: 384,
|
|
412
406
|
columnNumber: 15
|
|
413
407
|
} }, "Not Found"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
|
|
414
408
|
fileName: _jsxFileName,
|
|
415
|
-
lineNumber:
|
|
409
|
+
lineNumber: 385,
|
|
416
410
|
columnNumber: 15
|
|
417
411
|
} }, "The ", toReadableText(model.name), " you're looking for doesn't exist or has been deleted."), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
|
|
418
412
|
fileName: _jsxFileName,
|
|
419
|
-
lineNumber:
|
|
413
|
+
lineNumber: 389,
|
|
420
414
|
columnNumber: 15
|
|
421
415
|
} }, /* @__PURE__ */ React.createElement(Link, { to: `${basePath}/${toKebabCase(model.pluralName)}`, className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
422
416
|
fileName: _jsxFileName,
|
|
423
|
-
lineNumber:
|
|
417
|
+
lineNumber: 390,
|
|
424
418
|
columnNumber: 17
|
|
425
419
|
} }, "Back to List"))))));
|
|
426
420
|
}
|
|
@@ -456,7 +450,6 @@ function AdminDataEditPageContent({
|
|
|
456
450
|
value = isoString.substring(0, 16);
|
|
457
451
|
}
|
|
458
452
|
} catch (e) {
|
|
459
|
-
console.warn(`Failed to convert date value for field ${field.name}:`, e);
|
|
460
453
|
value = "";
|
|
461
454
|
}
|
|
462
455
|
} else {
|
|
@@ -470,7 +463,6 @@ function AdminDataEditPageContent({
|
|
|
470
463
|
value = Boolean(value);
|
|
471
464
|
}
|
|
472
465
|
if (value !== null && typeof value === "object") {
|
|
473
|
-
console.warn(`Field ${field.name} has object value, converting to string:`, value);
|
|
474
466
|
if (typeof value === "object" && "id" in value) {
|
|
475
467
|
value = value.id;
|
|
476
468
|
} else {
|
|
@@ -482,7 +474,6 @@ function AdminDataEditPageContent({
|
|
|
482
474
|
});
|
|
483
475
|
for (const [key, value] of Object.entries(initialValues)) {
|
|
484
476
|
if (value === void 0) {
|
|
485
|
-
console.warn(`[AdminDataEditPage] Found undefined value for field ${key}, converting to empty string`);
|
|
486
477
|
initialValues[key] = "";
|
|
487
478
|
continue;
|
|
488
479
|
}
|
|
@@ -492,7 +483,6 @@ function AdminDataEditPageContent({
|
|
|
492
483
|
if (typeof value !== "object") {
|
|
493
484
|
continue;
|
|
494
485
|
}
|
|
495
|
-
console.warn(`[AdminDataEditPage] Found non-primitive value for field ${key}, converting:`, value);
|
|
496
486
|
if ("id" in value && typeof value.id === "string") {
|
|
497
487
|
initialValues[key] = value.id;
|
|
498
488
|
} else if (value instanceof Date) {
|
|
@@ -502,13 +492,6 @@ function AdminDataEditPageContent({
|
|
|
502
492
|
initialValues[key] = "";
|
|
503
493
|
}
|
|
504
494
|
}
|
|
505
|
-
console.log("[AdminDataEditPage] Final initialValues:", initialValues);
|
|
506
|
-
console.log("[AdminDataEditPage] Value types:", Object.entries(initialValues).map(([key, val]) => ({
|
|
507
|
-
key,
|
|
508
|
-
type: typeof val,
|
|
509
|
-
isDate: val instanceof Date,
|
|
510
|
-
value: val
|
|
511
|
-
})));
|
|
512
495
|
}
|
|
513
496
|
const handleSubmit = async (formData) => {
|
|
514
497
|
try {
|
|
@@ -523,7 +506,6 @@ function AdminDataEditPageContent({
|
|
|
523
506
|
}
|
|
524
507
|
});
|
|
525
508
|
if (result.errors) {
|
|
526
|
-
console.error("GraphQL errors:", result.errors);
|
|
527
509
|
setSubmissionState({
|
|
528
510
|
status: "error",
|
|
529
511
|
message: result.errors.map((err) => err.message).join(", ")
|
|
@@ -536,7 +518,6 @@ function AdminDataEditPageContent({
|
|
|
536
518
|
});
|
|
537
519
|
await refetch();
|
|
538
520
|
} catch (error2) {
|
|
539
|
-
console.error("Error updating record:", error2);
|
|
540
521
|
setSubmissionState({
|
|
541
522
|
status: "error",
|
|
542
523
|
message: error2 instanceof Error ? error2.message : "An unexpected error occurred"
|
|
@@ -554,7 +535,6 @@ function AdminDataEditPageContent({
|
|
|
554
535
|
}
|
|
555
536
|
});
|
|
556
537
|
if (result.errors) {
|
|
557
|
-
console.error("GraphQL errors:", result.errors);
|
|
558
538
|
setDeleteState({
|
|
559
539
|
status: "error",
|
|
560
540
|
message: result.errors.map((err) => err.message).join(", ")
|
|
@@ -569,7 +549,6 @@ function AdminDataEditPageContent({
|
|
|
569
549
|
navigate(`${basePath}/${toKebabCase(model.pluralName)}`);
|
|
570
550
|
}, 1500);
|
|
571
551
|
} catch (error2) {
|
|
572
|
-
console.error("Error deleting record:", error2);
|
|
573
552
|
setDeleteState({
|
|
574
553
|
status: "error",
|
|
575
554
|
message: error2 instanceof Error ? error2.message : "An unexpected error occurred"
|
|
@@ -578,175 +557,175 @@ function AdminDataEditPageContent({
|
|
|
578
557
|
};
|
|
579
558
|
return /* @__PURE__ */ React.createElement("div", { className: "space-y-6", __self: this, __source: {
|
|
580
559
|
fileName: _jsxFileName,
|
|
581
|
-
lineNumber:
|
|
560
|
+
lineNumber: 591,
|
|
582
561
|
columnNumber: 5
|
|
583
562
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mb-8", __self: this, __source: {
|
|
584
563
|
fileName: _jsxFileName,
|
|
585
|
-
lineNumber:
|
|
564
|
+
lineNumber: 593,
|
|
586
565
|
columnNumber: 7
|
|
587
566
|
} }, /* @__PURE__ */ React.createElement("nav", { className: "flex mb-6", "aria-label": "Breadcrumb", __self: this, __source: {
|
|
588
567
|
fileName: _jsxFileName,
|
|
589
|
-
lineNumber:
|
|
568
|
+
lineNumber: 594,
|
|
590
569
|
columnNumber: 11
|
|
591
570
|
} }, /* @__PURE__ */ React.createElement("ol", { className: "flex items-center space-x-4", __self: this, __source: {
|
|
592
571
|
fileName: _jsxFileName,
|
|
593
|
-
lineNumber:
|
|
572
|
+
lineNumber: 595,
|
|
594
573
|
columnNumber: 13
|
|
595
574
|
} }, /* @__PURE__ */ React.createElement("li", { __self: this, __source: {
|
|
596
575
|
fileName: _jsxFileName,
|
|
597
|
-
lineNumber:
|
|
576
|
+
lineNumber: 596,
|
|
598
577
|
columnNumber: 15
|
|
599
578
|
} }, /* @__PURE__ */ React.createElement(Link, { to: basePath, className: "text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400", __self: this, __source: {
|
|
600
579
|
fileName: _jsxFileName,
|
|
601
|
-
lineNumber:
|
|
580
|
+
lineNumber: 597,
|
|
602
581
|
columnNumber: 17
|
|
603
582
|
} }, "Data Browser")), /* @__PURE__ */ React.createElement("li", { __self: this, __source: {
|
|
604
583
|
fileName: _jsxFileName,
|
|
605
|
-
lineNumber:
|
|
584
|
+
lineNumber: 601,
|
|
606
585
|
columnNumber: 15
|
|
607
586
|
} }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center", __self: this, __source: {
|
|
608
587
|
fileName: _jsxFileName,
|
|
609
|
-
lineNumber:
|
|
588
|
+
lineNumber: 602,
|
|
610
589
|
columnNumber: 17
|
|
611
590
|
} }, /* @__PURE__ */ React.createElement("svg", { className: "flex-shrink-0 h-5 w-5 text-gray-300 dark:text-gray-600", fill: "currentColor", viewBox: "0 0 20 20", __self: this, __source: {
|
|
612
591
|
fileName: _jsxFileName,
|
|
613
|
-
lineNumber:
|
|
592
|
+
lineNumber: 603,
|
|
614
593
|
columnNumber: 19
|
|
615
594
|
} }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 111.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z", clipRule: "evenodd", __self: this, __source: {
|
|
616
595
|
fileName: _jsxFileName,
|
|
617
|
-
lineNumber:
|
|
596
|
+
lineNumber: 608,
|
|
618
597
|
columnNumber: 21
|
|
619
598
|
} })), /* @__PURE__ */ React.createElement(Link, { to: `${basePath}/${toKebabCase(model.pluralName)}`, className: "ml-4 text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400", __self: this, __source: {
|
|
620
599
|
fileName: _jsxFileName,
|
|
621
|
-
lineNumber:
|
|
600
|
+
lineNumber: 614,
|
|
622
601
|
columnNumber: 19
|
|
623
602
|
} }, toReadableText(model.pluralName)))), /* @__PURE__ */ React.createElement("li", { __self: this, __source: {
|
|
624
603
|
fileName: _jsxFileName,
|
|
625
|
-
lineNumber:
|
|
604
|
+
lineNumber: 622,
|
|
626
605
|
columnNumber: 15
|
|
627
606
|
} }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center", __self: this, __source: {
|
|
628
607
|
fileName: _jsxFileName,
|
|
629
|
-
lineNumber:
|
|
608
|
+
lineNumber: 623,
|
|
630
609
|
columnNumber: 17
|
|
631
610
|
} }, /* @__PURE__ */ React.createElement("svg", { className: "flex-shrink-0 h-5 w-5 text-gray-300 dark:text-gray-600", fill: "currentColor", viewBox: "0 0 20 20", __self: this, __source: {
|
|
632
611
|
fileName: _jsxFileName,
|
|
633
|
-
lineNumber:
|
|
612
|
+
lineNumber: 624,
|
|
634
613
|
columnNumber: 19
|
|
635
614
|
} }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 111.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z", clipRule: "evenodd", __self: this, __source: {
|
|
636
615
|
fileName: _jsxFileName,
|
|
637
|
-
lineNumber:
|
|
616
|
+
lineNumber: 629,
|
|
638
617
|
columnNumber: 21
|
|
639
618
|
} })), /* @__PURE__ */ React.createElement("span", { className: "ml-4 text-gray-500 dark:text-gray-400", __self: this, __source: {
|
|
640
619
|
fileName: _jsxFileName,
|
|
641
|
-
lineNumber:
|
|
620
|
+
lineNumber: 635,
|
|
642
621
|
columnNumber: 19
|
|
643
622
|
} }, "Edit"))))), /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-between", __self: this, __source: {
|
|
644
623
|
fileName: _jsxFileName,
|
|
645
|
-
lineNumber:
|
|
624
|
+
lineNumber: 640,
|
|
646
625
|
columnNumber: 11
|
|
647
626
|
} }, /* @__PURE__ */ React.createElement("h1", { className: "text-3xl font-bold text-gray-900 dark:text-gray-100", __self: this, __source: {
|
|
648
627
|
fileName: _jsxFileName,
|
|
649
|
-
lineNumber:
|
|
628
|
+
lineNumber: 641,
|
|
650
629
|
columnNumber: 13
|
|
651
630
|
} }, "Edit ", toReadableText(model.name)), /* @__PURE__ */ React.createElement("button", { onClick: () => setShowDeleteConfirm(true), disabled: deleteState.status === "loading", className: "inline-flex items-center px-3 py-2 border border-red-300 shadow-sm text-sm leading-4 font-medium rounded-md text-red-700 bg-white hover:bg-red-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 disabled:opacity-50 disabled:cursor-not-allowed", __self: this, __source: {
|
|
652
631
|
fileName: _jsxFileName,
|
|
653
|
-
lineNumber:
|
|
632
|
+
lineNumber: 642,
|
|
654
633
|
columnNumber: 13
|
|
655
634
|
} }, /* @__PURE__ */ React.createElement(TrashIcon, { className: "h-4 w-4 mr-2", __self: this, __source: {
|
|
656
635
|
fileName: _jsxFileName,
|
|
657
|
-
lineNumber:
|
|
636
|
+
lineNumber: 647,
|
|
658
637
|
columnNumber: 15
|
|
659
638
|
} }), "Delete"))), showDeleteConfirm && /* @__PURE__ */ React.createElement("div", { className: "fixed inset-0 bg-gray-600 dark:bg-gray-900 bg-opacity-50 dark:bg-opacity-75 overflow-y-auto h-full w-full z-50 flex items-center justify-center", __self: this, __source: {
|
|
660
639
|
fileName: _jsxFileName,
|
|
661
|
-
lineNumber:
|
|
640
|
+
lineNumber: 655,
|
|
662
641
|
columnNumber: 11
|
|
663
642
|
} }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 p-6 rounded-lg shadow-xl max-w-md w-full mx-4", __self: this, __source: {
|
|
664
643
|
fileName: _jsxFileName,
|
|
665
|
-
lineNumber:
|
|
644
|
+
lineNumber: 656,
|
|
666
645
|
columnNumber: 13
|
|
667
646
|
} }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center", __self: this, __source: {
|
|
668
647
|
fileName: _jsxFileName,
|
|
669
|
-
lineNumber:
|
|
648
|
+
lineNumber: 657,
|
|
670
649
|
columnNumber: 15
|
|
671
650
|
} }, /* @__PURE__ */ React.createElement("div", { className: "flex-shrink-0", __self: this, __source: {
|
|
672
651
|
fileName: _jsxFileName,
|
|
673
|
-
lineNumber:
|
|
652
|
+
lineNumber: 658,
|
|
674
653
|
columnNumber: 17
|
|
675
654
|
} }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "h-6 w-6 text-red-600", __self: this, __source: {
|
|
676
655
|
fileName: _jsxFileName,
|
|
677
|
-
lineNumber:
|
|
656
|
+
lineNumber: 659,
|
|
678
657
|
columnNumber: 19
|
|
679
658
|
} })), /* @__PURE__ */ React.createElement("div", { className: "ml-3", __self: this, __source: {
|
|
680
659
|
fileName: _jsxFileName,
|
|
681
|
-
lineNumber:
|
|
660
|
+
lineNumber: 661,
|
|
682
661
|
columnNumber: 17
|
|
683
662
|
} }, /* @__PURE__ */ React.createElement("h3", { className: "text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
|
|
684
663
|
fileName: _jsxFileName,
|
|
685
|
-
lineNumber:
|
|
664
|
+
lineNumber: 662,
|
|
686
665
|
columnNumber: 19
|
|
687
666
|
} }, "Delete ", toReadableText(model.name)), /* @__PURE__ */ React.createElement("div", { className: "mt-2", __self: this, __source: {
|
|
688
667
|
fileName: _jsxFileName,
|
|
689
|
-
lineNumber:
|
|
668
|
+
lineNumber: 665,
|
|
690
669
|
columnNumber: 19
|
|
691
670
|
} }, /* @__PURE__ */ React.createElement("p", { className: "text-sm text-gray-500 dark:text-gray-400", __self: this, __source: {
|
|
692
671
|
fileName: _jsxFileName,
|
|
693
|
-
lineNumber:
|
|
672
|
+
lineNumber: 666,
|
|
694
673
|
columnNumber: 21
|
|
695
674
|
} }, "Are you sure you want to delete this", " ", toReadableText(model.name).toLowerCase(), "? This action cannot be undone.")))), /* @__PURE__ */ React.createElement("div", { className: "mt-5 sm:mt-4 sm:flex sm:flex-row-reverse", __self: this, __source: {
|
|
696
675
|
fileName: _jsxFileName,
|
|
697
|
-
lineNumber:
|
|
676
|
+
lineNumber: 673,
|
|
698
677
|
columnNumber: 15
|
|
699
678
|
} }, /* @__PURE__ */ React.createElement("button", { onClick: handleDelete, disabled: deleteState.status === "loading", className: "w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed", __self: this, __source: {
|
|
700
679
|
fileName: _jsxFileName,
|
|
701
|
-
lineNumber:
|
|
680
|
+
lineNumber: 674,
|
|
702
681
|
columnNumber: 17
|
|
703
682
|
} }, deleteState.status === "loading" ? "Deleting..." : "Delete"), /* @__PURE__ */ React.createElement("button", { onClick: () => setShowDeleteConfirm(false), disabled: deleteState.status === "loading", className: "mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web sm:mt-0 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed", __self: this, __source: {
|
|
704
683
|
fileName: _jsxFileName,
|
|
705
|
-
lineNumber:
|
|
684
|
+
lineNumber: 681,
|
|
706
685
|
columnNumber: 17
|
|
707
686
|
} }, "Cancel")))), (submissionState.status !== "idle" || deleteState.status !== "idle") && /* @__PURE__ */ React.createElement("div", { className: `mb-6 rounded-md p-4 ${submissionState.status === "success" || deleteState.status === "success" ? "bg-green-50 border border-green-200" : submissionState.status === "error" || deleteState.status === "error" ? "bg-red-50 border border-red-200" : "bg-blue-50 border border-blue-200"}`, __self: this, __source: {
|
|
708
687
|
fileName: _jsxFileName,
|
|
709
|
-
lineNumber:
|
|
688
|
+
lineNumber: 695,
|
|
710
689
|
columnNumber: 11
|
|
711
690
|
} }, /* @__PURE__ */ React.createElement("div", { className: "flex", __self: this, __source: {
|
|
712
691
|
fileName: _jsxFileName,
|
|
713
|
-
lineNumber:
|
|
692
|
+
lineNumber: 704,
|
|
714
693
|
columnNumber: 13
|
|
715
694
|
} }, /* @__PURE__ */ React.createElement("div", { className: "flex-shrink-0", __self: this, __source: {
|
|
716
695
|
fileName: _jsxFileName,
|
|
717
|
-
lineNumber:
|
|
696
|
+
lineNumber: 705,
|
|
718
697
|
columnNumber: 15
|
|
719
698
|
} }, submissionState.status === "success" || deleteState.status === "success" ? /* @__PURE__ */ React.createElement(CheckCircleIcon, { className: "h-5 w-5 text-green-400", __self: this, __source: {
|
|
720
699
|
fileName: _jsxFileName,
|
|
721
|
-
lineNumber:
|
|
700
|
+
lineNumber: 707,
|
|
722
701
|
columnNumber: 19
|
|
723
702
|
} }) : submissionState.status === "error" || deleteState.status === "error" ? /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "h-5 w-5 text-red-400", __self: this, __source: {
|
|
724
703
|
fileName: _jsxFileName,
|
|
725
|
-
lineNumber:
|
|
704
|
+
lineNumber: 709,
|
|
726
705
|
columnNumber: 19
|
|
727
706
|
} }) : /* @__PURE__ */ React.createElement("div", { className: "h-5 w-5 border-2 border-blue-400 border-t-transparent rounded-full animate-spin", __self: this, __source: {
|
|
728
707
|
fileName: _jsxFileName,
|
|
729
|
-
lineNumber:
|
|
708
|
+
lineNumber: 711,
|
|
730
709
|
columnNumber: 19
|
|
731
710
|
} })), /* @__PURE__ */ React.createElement("div", { className: "ml-3", __self: this, __source: {
|
|
732
711
|
fileName: _jsxFileName,
|
|
733
|
-
lineNumber:
|
|
712
|
+
lineNumber: 714,
|
|
734
713
|
columnNumber: 15
|
|
735
714
|
} }, /* @__PURE__ */ React.createElement("p", { className: `text-sm font-medium ${submissionState.status === "success" || deleteState.status === "success" ? "text-green-800" : submissionState.status === "error" || deleteState.status === "error" ? "text-red-800" : "text-blue-800"}`, __self: this, __source: {
|
|
736
715
|
fileName: _jsxFileName,
|
|
737
|
-
lineNumber:
|
|
716
|
+
lineNumber: 715,
|
|
738
717
|
columnNumber: 17
|
|
739
718
|
} }, submissionState.status === "loading" ? `Updating ${toReadableText(model.name)}...` : deleteState.status === "loading" ? `Deleting ${toReadableText(model.name)}...` : submissionState.message || deleteState.message)))), /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 shadow-sm rounded-lg", __self: this, __source: {
|
|
740
719
|
fileName: _jsxFileName,
|
|
741
|
-
lineNumber:
|
|
720
|
+
lineNumber: 736,
|
|
742
721
|
columnNumber: 9
|
|
743
722
|
} }, /* @__PURE__ */ React.createElement("div", { className: "px-6 py-8", __self: this, __source: {
|
|
744
723
|
fileName: _jsxFileName,
|
|
745
|
-
lineNumber:
|
|
724
|
+
lineNumber: 737,
|
|
746
725
|
columnNumber: 11
|
|
747
726
|
} }, /* @__PURE__ */ React.createElement(Form, { id: `edit-${model.name.toLowerCase()}-form`, fields: formFields, submit: handleSubmit, disabled: submissionState.status === "loading" || deleteState.status === "loading", defaultValues: initialValues, theme: formTheme, __self: this, __source: {
|
|
748
727
|
fileName: _jsxFileName,
|
|
749
|
-
lineNumber:
|
|
728
|
+
lineNumber: 738,
|
|
750
729
|
columnNumber: 13
|
|
751
730
|
} }))));
|
|
752
731
|
}
|
|
@@ -755,7 +734,7 @@ function AdminDataEditErrorBoundary({
|
|
|
755
734
|
}) {
|
|
756
735
|
return /* @__PURE__ */ React.createElement(ErrorBoundary, { error, __self: this, __source: {
|
|
757
736
|
fileName: _jsxFileName,
|
|
758
|
-
lineNumber:
|
|
737
|
+
lineNumber: 753,
|
|
759
738
|
columnNumber: 10
|
|
760
739
|
} });
|
|
761
740
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Link } from "react-router";
|
|
3
|
-
import { getPluralName } from "
|
|
3
|
+
import { getPluralName } from "../utils/get-plural-names.js";
|
|
4
4
|
import { useAdminDataContext } from "../context/AdminDataContext.js";
|
|
5
5
|
import { kebabCase, spacedWords } from "../utils/string-utils.js";
|
|
6
6
|
var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/pages/AdminDataIndexPage.tsx";
|