@nestledjs/data-browser 0.1.10 → 0.1.12

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.
@@ -1,4 +1,3 @@
1
- import { jsxDEV, Fragment } from "react/jsx-dev-runtime";
2
1
  import { useQuery } from "@apollo/client/react";
3
2
  import { DataTable, ErrorBoundary } from "@nestledjs/shared-components";
4
3
  import { getPluralName } from "@nestledjs/helpers";
@@ -12,9 +11,16 @@ import { RelationFilterField } from "../components/filters/RelationFilterField.j
12
11
  import { useAdminList } from "../hooks/useAdminList.js";
13
12
  import { getAdminDocuments } from "../utils/graphql-utils.js";
14
13
  import { useAdminDataContext } from "../context/AdminDataContext.js";
15
- function AdminDataListPage({ modelName: propModelName } = {}) {
14
+ var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx";
15
+ function AdminDataListPage({
16
+ modelName: propModelName
17
+ } = {}) {
16
18
  const params = useParams();
17
- const { sdk, databaseModels, basePath = "/admin/data" } = useAdminDataContext();
19
+ const {
20
+ sdk,
21
+ databaseModels,
22
+ basePath = "/admin/data"
23
+ } = useAdminDataContext();
18
24
  const getEnumValues = useCallback((enumType) => {
19
25
  try {
20
26
  const enumObject = sdk[enumType];
@@ -32,7 +38,10 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
32
38
  return null;
33
39
  }
34
40
  }, [sdk]);
35
- const { state, dispatch } = useAdminList();
41
+ const {
42
+ state,
43
+ dispatch
44
+ } = useAdminList();
36
45
  const {
37
46
  search,
38
47
  debouncedSearch,
@@ -46,43 +55,43 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
46
55
  showFilters,
47
56
  showSearchFieldSelector
48
57
  } = state;
49
- useCallback(
50
- (skip2) => dispatch({ type: "SET_SKIP", payload: skip2 }),
51
- [dispatch]
52
- );
53
- const setFilters = useCallback(
54
- (filters2) => dispatch({ type: "SET_FILTERS", payload: filters2 }),
55
- [dispatch]
56
- );
57
- const setShowFilters = useCallback(
58
- (show) => {
59
- if (show !== showFilters) dispatch({ type: "TOGGLE_FILTERS" });
60
- },
61
- [showFilters, dispatch]
62
- );
63
- const setVisibleColumns = useCallback(
64
- (columns) => dispatch({ type: "SET_VISIBLE_COLUMNS", payload: columns }),
65
- [dispatch]
66
- );
67
- const setShowColumnSelector = useCallback(
68
- (show) => {
69
- if (show !== showColumnSelector) dispatch({ type: "TOGGLE_COLUMN_SELECTOR" });
70
- },
71
- [showColumnSelector, dispatch]
72
- );
73
- const setSearchFields = useCallback(
74
- (fields) => dispatch({ type: "SET_SEARCH_FIELDS", payload: fields }),
75
- [dispatch]
76
- );
77
- const setShowSearchFieldSelector = useCallback(
78
- (show) => {
79
- if (show !== showSearchFieldSelector) dispatch({ type: "TOGGLE_SEARCH_FIELD_SELECTOR" });
80
- },
81
- [showSearchFieldSelector, dispatch]
82
- );
58
+ useCallback((skip2) => dispatch({
59
+ type: "SET_SKIP",
60
+ payload: skip2
61
+ }), [dispatch]);
62
+ const setFilters = useCallback((filters2) => dispatch({
63
+ type: "SET_FILTERS",
64
+ payload: filters2
65
+ }), [dispatch]);
66
+ const setShowFilters = useCallback((show) => {
67
+ if (show !== showFilters) dispatch({
68
+ type: "TOGGLE_FILTERS"
69
+ });
70
+ }, [showFilters, dispatch]);
71
+ const setVisibleColumns = useCallback((columns) => dispatch({
72
+ type: "SET_VISIBLE_COLUMNS",
73
+ payload: columns
74
+ }), [dispatch]);
75
+ const setShowColumnSelector = useCallback((show) => {
76
+ if (show !== showColumnSelector) dispatch({
77
+ type: "TOGGLE_COLUMN_SELECTOR"
78
+ });
79
+ }, [showColumnSelector, dispatch]);
80
+ const setSearchFields = useCallback((fields) => dispatch({
81
+ type: "SET_SEARCH_FIELDS",
82
+ payload: fields
83
+ }), [dispatch]);
84
+ const setShowSearchFieldSelector = useCallback((show) => {
85
+ if (show !== showSearchFieldSelector) dispatch({
86
+ type: "TOGGLE_SEARCH_FIELD_SELECTOR"
87
+ });
88
+ }, [showSearchFieldSelector, dispatch]);
83
89
  useEffect(() => {
84
90
  const timer = setTimeout(() => {
85
- dispatch({ type: "SET_DEBOUNCED_SEARCH", payload: state.search });
91
+ dispatch({
92
+ type: "SET_DEBOUNCED_SEARCH",
93
+ payload: state.search
94
+ });
86
95
  }, 500);
87
96
  return () => clearTimeout(timer);
88
97
  }, [state.search]);
@@ -98,17 +107,18 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
98
107
  });
99
108
  }, [propModelName, pluralParam, databaseModels]);
100
109
  const documents = useMemo(() => {
101
- if (!model)
102
- return {
103
- query: void 0,
104
- listQuery: void 0,
105
- update: void 0,
106
- delete: void 0,
107
- create: void 0
108
- };
110
+ if (!model) return {
111
+ query: void 0,
112
+ listQuery: void 0,
113
+ update: void 0,
114
+ delete: void 0,
115
+ create: void 0
116
+ };
109
117
  return getAdminDocuments(sdk, model);
110
118
  }, [sdk, model]);
111
- const { listQuery: query } = documents;
119
+ const {
120
+ listQuery: query
121
+ } = documents;
112
122
  const dataPath = useMemo(() => {
113
123
  return (model == null ? void 0 : model.pluralModelPropertyName) || pluralParam.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
114
124
  }, [model, pluralParam]);
@@ -152,54 +162,60 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
152
162
  setVisibleColumns(filteredCols);
153
163
  const storedSort = AdminLocalStorage.getSortPreference(model.name);
154
164
  const sortFieldValid = storedSort && (storedSort.orderBy === "id" || fieldNames.includes(storedSort.orderBy));
155
- const nextSort = sortFieldValid ? storedSort : { orderBy: "id", orderDirection: "desc" };
156
- dispatch({ type: "SET_SORT", payload: nextSort });
165
+ const nextSort = sortFieldValid ? storedSort : {
166
+ orderBy: "id",
167
+ orderDirection: "desc"
168
+ };
169
+ dispatch({
170
+ type: "SET_SORT",
171
+ payload: nextSort
172
+ });
157
173
  const storedSearch = AdminLocalStorage.getSearchFields(model.name);
158
174
  const defaults = getDefaultSearchFields(searchableFieldNames);
159
175
  const filteredSearch = (storedSearch || defaults).filter((f) => searchableFieldNames.includes(f));
160
176
  setSearchFields(filteredSearch);
161
- dispatch({ type: "SET_SEARCH", payload: "" });
162
- dispatch({ type: "SET_DEBOUNCED_SEARCH", payload: "" });
163
- dispatch({ type: "RESET_FILTERS" });
164
- dispatch({ type: "RESET_PAGINATION" });
177
+ dispatch({
178
+ type: "SET_SEARCH",
179
+ payload: ""
180
+ });
181
+ dispatch({
182
+ type: "SET_DEBOUNCED_SEARCH",
183
+ payload: ""
184
+ });
185
+ dispatch({
186
+ type: "RESET_FILTERS"
187
+ });
188
+ dispatch({
189
+ type: "RESET_PAGINATION"
190
+ });
165
191
  }, [model == null ? void 0 : model.name, fieldNames, searchableFieldNames, getDefaultSearchFields, setVisibleColumns, setSearchFields, dispatch]);
166
- const setSortSafely = useCallback(
167
- (newSort) => {
168
- const resolvedSort = typeof newSort === "function" ? newSort(sort) : newSort;
169
- if (resolvedSort.orderBy !== sort.orderBy || resolvedSort.orderDirection !== sort.orderDirection) {
170
- dispatch({ type: "SET_SORT", payload: resolvedSort });
171
- if (model) {
172
- AdminLocalStorage.setSortPreference(model.name, resolvedSort);
173
- }
192
+ const setSortSafely = useCallback((newSort) => {
193
+ const resolvedSort = typeof newSort === "function" ? newSort(sort) : newSort;
194
+ if (resolvedSort.orderBy !== sort.orderBy || resolvedSort.orderDirection !== sort.orderDirection) {
195
+ dispatch({
196
+ type: "SET_SORT",
197
+ payload: resolvedSort
198
+ });
199
+ if (model) {
200
+ AdminLocalStorage.setSortPreference(model.name, resolvedSort);
174
201
  }
175
- },
176
- [sort.orderBy, sort.orderDirection, model, dispatch]
177
- );
178
- const handleClickOutside = useCallback(
179
- (event) => {
180
- const target = event.target;
181
- if (showColumnSelector) {
182
- const columnSelector2 = document.querySelector('[data-dropdown="column-selector"]');
183
- if (columnSelector2 && !columnSelector2.contains(target)) {
184
- setShowColumnSelector(false);
185
- }
202
+ }
203
+ }, [sort.orderBy, sort.orderDirection, model, dispatch]);
204
+ const handleClickOutside = useCallback((event) => {
205
+ const target = event.target;
206
+ if (showColumnSelector) {
207
+ const columnSelector2 = document.querySelector('[data-dropdown="column-selector"]');
208
+ if (columnSelector2 && !columnSelector2.contains(target)) {
209
+ setShowColumnSelector(false);
186
210
  }
187
- if (showSearchFieldSelector) {
188
- const searchFieldSelector2 = document.querySelector(
189
- '[data-dropdown="search-field-selector"]'
190
- );
191
- if (searchFieldSelector2 && !searchFieldSelector2.contains(target)) {
192
- setShowSearchFieldSelector(false);
193
- }
211
+ }
212
+ if (showSearchFieldSelector) {
213
+ const searchFieldSelector2 = document.querySelector('[data-dropdown="search-field-selector"]');
214
+ if (searchFieldSelector2 && !searchFieldSelector2.contains(target)) {
215
+ setShowSearchFieldSelector(false);
194
216
  }
195
- },
196
- [
197
- showColumnSelector,
198
- showSearchFieldSelector,
199
- setShowColumnSelector,
200
- setShowSearchFieldSelector
201
- ]
202
- );
217
+ }
218
+ }, [showColumnSelector, showSearchFieldSelector, setShowColumnSelector, setShowSearchFieldSelector]);
203
219
  useEffect(() => {
204
220
  if (showColumnSelector || showSearchFieldSelector) {
205
221
  document.addEventListener("mousedown", handleClickOutside);
@@ -217,7 +233,13 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
217
233
  filters: Object.keys(filters).length > 0 ? filters : void 0
218
234
  }
219
235
  };
220
- const { data, loading, error, networkStatus, refetch } = useQuery(query ?? sdk.__AdminUsersDocument, {
236
+ const {
237
+ data,
238
+ loading,
239
+ error,
240
+ networkStatus,
241
+ refetch
242
+ } = useQuery(query ?? sdk.__AdminUsersDocument, {
221
243
  variables,
222
244
  skip: !model || !query,
223
245
  errorPolicy: "all",
@@ -230,7 +252,11 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
230
252
  // 30 second timeout
231
253
  }
232
254
  });
233
- const { validatedItems, validatedPagination, dataError } = useMemo(() => {
255
+ const {
256
+ validatedItems,
257
+ validatedPagination,
258
+ dataError
259
+ } = useMemo(() => {
234
260
  var _a, _b;
235
261
  if (error) {
236
262
  console.warn("[AdminList] GraphQL error:", error.message);
@@ -299,1042 +325,479 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
299
325
  const items = validatedItems;
300
326
  const pagination = validatedPagination;
301
327
  if (!model) {
302
- return /* @__PURE__ */ jsxDEV("div", { className: "min-h-screen bg-gray-50 flex flex-col justify-center py-12 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxDEV("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", children: /* @__PURE__ */ jsxDEV("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ jsxDEV("div", { className: "text-center", children: [
303
- /* @__PURE__ */ jsxDEV(
304
- "svg",
305
- {
306
- className: "mx-auto h-12 w-12 text-red-400",
307
- fill: "none",
308
- stroke: "currentColor",
309
- viewBox: "0 0 24 24",
310
- children: /* @__PURE__ */ jsxDEV(
311
- "path",
312
- {
313
- strokeLinecap: "round",
314
- strokeLinejoin: "round",
315
- strokeWidth: 2,
316
- d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
317
- },
318
- void 0,
319
- false,
320
- {
321
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
322
- lineNumber: 419,
323
- columnNumber: 17
324
- },
325
- this
326
- )
327
- },
328
- void 0,
329
- false,
330
- {
331
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
332
- lineNumber: 413,
333
- columnNumber: 15
334
- },
335
- this
336
- ),
337
- /* @__PURE__ */ jsxDEV("h2", { className: "mt-4 text-lg font-medium text-gray-900", children: "Invalid Data Type" }, void 0, false, {
338
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
339
- lineNumber: 426,
340
- columnNumber: 15
341
- }, this),
342
- /* @__PURE__ */ jsxDEV("p", { className: "mt-2 text-sm text-gray-600", children: [
343
- 'The data type "',
344
- pluralParam,
345
- '" is not recognized.'
346
- ] }, void 0, true, {
347
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
348
- lineNumber: 427,
349
- columnNumber: 15
350
- }, this),
351
- /* @__PURE__ */ jsxDEV("div", { className: "mt-6", children: /* @__PURE__ */ jsxDEV(
352
- Link,
353
- {
354
- to: basePath,
355
- 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",
356
- children: "Return to Data Browser"
357
- },
358
- void 0,
359
- false,
360
- {
361
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
362
- lineNumber: 431,
363
- columnNumber: 17
364
- },
365
- this
366
- ) }, void 0, false, {
367
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
368
- lineNumber: 430,
369
- columnNumber: 15
370
- }, this)
371
- ] }, void 0, true, {
372
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
373
- lineNumber: 412,
374
- columnNumber: 13
375
- }, this) }, void 0, false, {
376
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
377
- lineNumber: 411,
378
- columnNumber: 11
379
- }, this) }, void 0, false, {
380
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
381
- lineNumber: 410,
382
- columnNumber: 9
383
- }, this) }, void 0, false, {
384
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
328
+ return /* @__PURE__ */ React.createElement("div", { className: "min-h-screen bg-gray-50 flex flex-col justify-center py-12 sm:px-6 lg:px-8", __self: this, __source: {
329
+ fileName: _jsxFileName,
385
330
  lineNumber: 409,
386
331
  columnNumber: 7
387
- }, this);
332
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", __self: this, __source: {
333
+ fileName: _jsxFileName,
334
+ lineNumber: 410,
335
+ columnNumber: 9
336
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
337
+ fileName: _jsxFileName,
338
+ lineNumber: 411,
339
+ columnNumber: 11
340
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
341
+ fileName: _jsxFileName,
342
+ lineNumber: 412,
343
+ columnNumber: 13
344
+ } }, /* @__PURE__ */ React.createElement("svg", { className: "mx-auto h-12 w-12 text-red-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", __self: this, __source: {
345
+ fileName: _jsxFileName,
346
+ lineNumber: 413,
347
+ columnNumber: 15
348
+ } }, /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z", __self: this, __source: {
349
+ fileName: _jsxFileName,
350
+ lineNumber: 419,
351
+ columnNumber: 17
352
+ } })), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900", __self: this, __source: {
353
+ fileName: _jsxFileName,
354
+ lineNumber: 426,
355
+ columnNumber: 15
356
+ } }, "Invalid Data Type"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600", __self: this, __source: {
357
+ fileName: _jsxFileName,
358
+ lineNumber: 427,
359
+ columnNumber: 15
360
+ } }, 'The data type "', pluralParam, '" is not recognized.'), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
361
+ fileName: _jsxFileName,
362
+ lineNumber: 430,
363
+ columnNumber: 15
364
+ } }, /* @__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: {
365
+ fileName: _jsxFileName,
366
+ lineNumber: 431,
367
+ columnNumber: 17
368
+ } }, "Return to Data Browser"))))));
388
369
  }
389
370
  if (!query) {
390
- return /* @__PURE__ */ jsxDEV("div", { className: "min-h-screen bg-gray-50 flex flex-col justify-center py-12 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxDEV("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", children: /* @__PURE__ */ jsxDEV("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ jsxDEV("div", { className: "text-center", children: [
391
- /* @__PURE__ */ jsxDEV(
392
- "svg",
393
- {
394
- className: "mx-auto h-12 w-12 text-yellow-400",
395
- fill: "none",
396
- stroke: "currentColor",
397
- viewBox: "0 0 24 24",
398
- children: /* @__PURE__ */ jsxDEV(
399
- "path",
400
- {
401
- strokeLinecap: "round",
402
- strokeLinejoin: "round",
403
- strokeWidth: 2,
404
- d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.728-.833-2.498 0L5.316 15c-.77.833.192 2.5 1.732 2.5z"
405
- },
406
- void 0,
407
- false,
408
- {
409
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
410
- lineNumber: 457,
411
- columnNumber: 17
412
- },
413
- this
414
- )
415
- },
416
- void 0,
417
- false,
418
- {
419
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
420
- lineNumber: 451,
421
- columnNumber: 15
422
- },
423
- this
424
- ),
425
- /* @__PURE__ */ jsxDEV("h2", { className: "mt-4 text-lg font-medium text-gray-900", children: "GraphQL Schema Not Available" }, void 0, false, {
426
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
427
- lineNumber: 464,
428
- columnNumber: 15
429
- }, this),
430
- /* @__PURE__ */ jsxDEV("p", { className: "mt-2 text-sm text-gray-600", children: [
431
- 'No GraphQL query found for "',
432
- model.name,
433
- '". The admin schema may need to be regenerated.'
434
- ] }, void 0, true, {
435
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
436
- lineNumber: 467,
437
- columnNumber: 15
438
- }, this),
439
- /* @__PURE__ */ jsxDEV("div", { className: "mt-6 space-y-3", children: [
440
- /* @__PURE__ */ jsxDEV(
441
- "button",
442
- {
443
- onClick: () => window.location.reload(),
444
- 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",
445
- children: "Reload Page"
446
- },
447
- void 0,
448
- false,
449
- {
450
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
451
- lineNumber: 472,
452
- columnNumber: 17
453
- },
454
- this
455
- ),
456
- /* @__PURE__ */ jsxDEV(
457
- Link,
458
- {
459
- to: basePath,
460
- 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",
461
- children: "Return to Data Browser"
462
- },
463
- void 0,
464
- false,
465
- {
466
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
467
- lineNumber: 478,
468
- columnNumber: 17
469
- },
470
- this
471
- )
472
- ] }, void 0, true, {
473
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
474
- lineNumber: 471,
475
- columnNumber: 15
476
- }, this)
477
- ] }, void 0, true, {
478
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
479
- lineNumber: 450,
480
- columnNumber: 13
481
- }, this) }, void 0, false, {
482
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
483
- lineNumber: 449,
484
- columnNumber: 11
485
- }, this) }, void 0, false, {
486
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
487
- lineNumber: 448,
488
- columnNumber: 9
489
- }, this) }, void 0, false, {
490
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
371
+ return /* @__PURE__ */ React.createElement("div", { className: "min-h-screen bg-gray-50 flex flex-col justify-center py-12 sm:px-6 lg:px-8", __self: this, __source: {
372
+ fileName: _jsxFileName,
491
373
  lineNumber: 447,
492
374
  columnNumber: 7
493
- }, this);
375
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", __self: this, __source: {
376
+ fileName: _jsxFileName,
377
+ lineNumber: 448,
378
+ columnNumber: 9
379
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
380
+ fileName: _jsxFileName,
381
+ lineNumber: 449,
382
+ columnNumber: 11
383
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
384
+ fileName: _jsxFileName,
385
+ lineNumber: 450,
386
+ columnNumber: 13
387
+ } }, /* @__PURE__ */ React.createElement("svg", { className: "mx-auto h-12 w-12 text-yellow-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", __self: this, __source: {
388
+ fileName: _jsxFileName,
389
+ lineNumber: 451,
390
+ columnNumber: 15
391
+ } }, /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.728-.833-2.498 0L5.316 15c-.77.833.192 2.5 1.732 2.5z", __self: this, __source: {
392
+ fileName: _jsxFileName,
393
+ lineNumber: 457,
394
+ columnNumber: 17
395
+ } })), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900", __self: this, __source: {
396
+ fileName: _jsxFileName,
397
+ lineNumber: 464,
398
+ columnNumber: 15
399
+ } }, "GraphQL Schema Not Available"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600", __self: this, __source: {
400
+ fileName: _jsxFileName,
401
+ lineNumber: 467,
402
+ columnNumber: 15
403
+ } }, 'No GraphQL query found for "', model.name, '". The admin schema may need to be regenerated.'), /* @__PURE__ */ React.createElement("div", { className: "mt-6 space-y-3", __self: this, __source: {
404
+ fileName: _jsxFileName,
405
+ lineNumber: 471,
406
+ columnNumber: 15
407
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => window.location.reload(), 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: {
408
+ fileName: _jsxFileName,
409
+ lineNumber: 472,
410
+ columnNumber: 17
411
+ } }, "Reload Page"), /* @__PURE__ */ React.createElement(Link, { to: basePath, 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: {
412
+ fileName: _jsxFileName,
413
+ lineNumber: 478,
414
+ columnNumber: 17
415
+ } }, "Return to Data Browser"))))));
494
416
  }
495
417
  const createLink = `${basePath}/${kebabCase(model.name)}/create`;
496
- const columnSelector = /* @__PURE__ */ jsxDEV("div", { className: "relative", "data-dropdown": "column-selector", children: [
497
- /* @__PURE__ */ jsxDEV(
498
- "button",
499
- {
500
- onClick: () => setShowColumnSelector(!showColumnSelector),
501
- className: "inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web",
502
- children: [
503
- "Columns",
504
- /* @__PURE__ */ jsxDEV(
505
- "svg",
506
- {
507
- className: "-mr-0.5 ml-2 h-4 w-4",
508
- xmlns: "http://www.w3.org/2000/svg",
509
- viewBox: "0 0 20 20",
510
- fill: "currentColor",
511
- children: /* @__PURE__ */ jsxDEV(
512
- "path",
513
- {
514
- fillRule: "evenodd",
515
- d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z",
516
- clipRule: "evenodd"
517
- },
518
- void 0,
519
- false,
520
- {
521
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
522
- lineNumber: 509,
523
- columnNumber: 11
524
- },
525
- this
526
- )
527
- },
528
- void 0,
529
- false,
530
- {
531
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
532
- lineNumber: 503,
533
- columnNumber: 9
534
- },
535
- this
536
- )
537
- ]
538
- },
539
- void 0,
540
- true,
541
- {
542
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
543
- lineNumber: 498,
544
- columnNumber: 7
545
- },
546
- this
547
- ),
548
- showColumnSelector && /* @__PURE__ */ jsxDEV("div", { className: "absolute right-0 mt-2 w-80 bg-white rounded-md shadow-lg z-50 border border-gray-200", children: /* @__PURE__ */ jsxDEV("div", { className: "p-4", children: [
549
- /* @__PURE__ */ jsxDEV("h3", { className: "text-sm font-medium text-gray-900 mb-3", children: "Visible Columns" }, void 0, false, {
550
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
551
- lineNumber: 520,
552
- columnNumber: 13
553
- }, this),
554
- /* @__PURE__ */ jsxDEV("div", { className: "space-y-2 max-h-64 overflow-y-auto", children: fieldNames.map((field) => /* @__PURE__ */ jsxDEV("label", { className: "flex items-start gap-2 cursor-pointer", children: [
555
- /* @__PURE__ */ jsxDEV(
556
- "input",
557
- {
558
- type: "checkbox",
559
- checked: visibleColumns.includes(field),
560
- onChange: (e) => {
561
- const newColumns = e.target.checked ? [...visibleColumns, field] : visibleColumns.filter((col) => col !== field);
562
- setVisibleColumns(newColumns);
563
- AdminLocalStorage.setColumnVisibility(model.name, newColumns);
564
- },
565
- className: "h-4 w-4 mt-0.5 flex-shrink-0 text-green-web focus:ring-green-web border-gray-300 rounded"
566
- },
567
- void 0,
568
- false,
569
- {
570
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
571
- lineNumber: 524,
572
- columnNumber: 19
573
- },
574
- this
575
- ),
576
- /* @__PURE__ */ jsxDEV("span", { className: "text-sm text-gray-700 leading-5", children: formatFieldName(field) }, void 0, false, {
577
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
578
- lineNumber: 536,
579
- columnNumber: 19
580
- }, this)
581
- ] }, field, true, {
582
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
583
- lineNumber: 523,
584
- columnNumber: 17
585
- }, this)) }, void 0, false, {
586
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
587
- lineNumber: 521,
588
- columnNumber: 13
589
- }, this),
590
- /* @__PURE__ */ jsxDEV("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", children: [
591
- /* @__PURE__ */ jsxDEV(
592
- "button",
593
- {
594
- onClick: () => {
595
- setVisibleColumns(fieldNames);
596
- AdminLocalStorage.setColumnVisibility(model.name, fieldNames);
597
- },
598
- className: "text-xs text-green-web hover:text-green-web-800",
599
- children: "Select All"
600
- },
601
- void 0,
602
- false,
603
- {
604
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
605
- lineNumber: 541,
606
- columnNumber: 15
607
- },
608
- this
609
- ),
610
- /* @__PURE__ */ jsxDEV(
611
- "button",
612
- {
613
- onClick: () => {
614
- const defaults = fieldNames.slice(0, 8);
615
- setVisibleColumns(defaults);
616
- AdminLocalStorage.setColumnVisibility(model.name, defaults);
617
- },
618
- className: "text-xs text-gray-600 hover:text-gray-800",
619
- children: "Reset to Defaults"
620
- },
621
- void 0,
622
- false,
623
- {
624
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
625
- lineNumber: 550,
626
- columnNumber: 15
627
- },
628
- this
629
- )
630
- ] }, void 0, true, {
631
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
632
- lineNumber: 540,
633
- columnNumber: 13
634
- }, this)
635
- ] }, void 0, true, {
636
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
637
- lineNumber: 519,
638
- columnNumber: 11
639
- }, this) }, void 0, false, {
640
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
641
- lineNumber: 518,
642
- columnNumber: 9
643
- }, this)
644
- ] }, void 0, true, {
645
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
418
+ const columnSelector = /* @__PURE__ */ React.createElement("div", { className: "relative", "data-dropdown": "column-selector", __self: this, __source: {
419
+ fileName: _jsxFileName,
646
420
  lineNumber: 497,
647
421
  columnNumber: 5
648
- }, this);
649
- const searchFieldSelector = /* @__PURE__ */ jsxDEV("div", { className: "relative", "data-dropdown": "search-field-selector", children: [
650
- /* @__PURE__ */ jsxDEV(
651
- "button",
652
- {
653
- onClick: () => setShowSearchFieldSelector(!showSearchFieldSelector),
654
- className: "h-full px-3 border-l border-gray-300 text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600",
655
- "aria-label": "Configure search fields",
656
- children: /* @__PURE__ */ jsxDEV(
657
- "svg",
658
- {
659
- className: "h-4 w-4",
660
- xmlns: "http://www.w3.org/2000/svg",
661
- viewBox: "0 0 20 20",
662
- fill: "currentColor",
663
- children: /* @__PURE__ */ jsxDEV(
664
- "path",
665
- {
666
- fillRule: "evenodd",
667
- d: "M3 3a1 1 0 000 2v8a2 2 0 002 2h2.586l-1.293 1.293a1 1 0 101.414 1.414L10 15.414l2.293 2.293a1 1 0 001.414-1.414L12.414 15H15a2 2 0 002-2V5a1 1 0 100-2H3zm11.707 4.707a1 1 0 00-1.414-1.414L10 9.586 8.707 8.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",
668
- clipRule: "evenodd"
669
- },
670
- void 0,
671
- false,
672
- {
673
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
674
- lineNumber: 581,
675
- columnNumber: 11
676
- },
677
- this
678
- )
679
- },
680
- void 0,
681
- false,
682
- {
683
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
684
- lineNumber: 575,
685
- columnNumber: 9
686
- },
687
- this
688
- )
689
- },
690
- void 0,
691
- false,
692
- {
693
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
694
- lineNumber: 570,
695
- columnNumber: 7
696
- },
697
- this
698
- ),
699
- showSearchFieldSelector && /* @__PURE__ */ jsxDEV("div", { className: "absolute right-0 mt-2 w-72 bg-white rounded-md shadow-lg z-50 border border-gray-200", children: /* @__PURE__ */ jsxDEV("div", { className: "p-4", children: [
700
- /* @__PURE__ */ jsxDEV("h3", { className: "text-sm font-medium text-gray-900 mb-3", children: "Search Fields" }, void 0, false, {
701
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
702
- lineNumber: 592,
703
- columnNumber: 13
704
- }, this),
705
- searchableFieldNames.length > 0 ? /* @__PURE__ */ jsxDEV(Fragment, { children: [
706
- /* @__PURE__ */ jsxDEV("div", { className: "space-y-2 max-h-48 overflow-y-auto", children: searchableFieldNames.map((field) => /* @__PURE__ */ jsxDEV("label", { className: "flex items-start gap-2 cursor-pointer", children: [
707
- /* @__PURE__ */ jsxDEV(
708
- "input",
709
- {
710
- type: "checkbox",
711
- checked: searchFields.includes(field),
712
- onChange: (e) => {
713
- const newFields = e.target.checked ? [...searchFields, field] : searchFields.filter((f) => f !== field);
714
- setSearchFields(newFields);
715
- AdminLocalStorage.setSearchFields(model.name, newFields);
716
- },
717
- className: "h-4 w-4 mt-0.5 flex-shrink-0 text-green-web focus:ring-green-web border-gray-300 rounded"
718
- },
719
- void 0,
720
- false,
721
- {
722
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
723
- lineNumber: 598,
724
- columnNumber: 23
725
- },
726
- this
727
- ),
728
- /* @__PURE__ */ jsxDEV("span", { className: "text-sm text-gray-700 leading-5", children: formatFieldName(field) }, void 0, false, {
729
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
730
- lineNumber: 610,
731
- columnNumber: 23
732
- }, this)
733
- ] }, field, true, {
734
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
735
- lineNumber: 597,
736
- columnNumber: 21
737
- }, this)) }, void 0, false, {
738
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
739
- lineNumber: 595,
740
- columnNumber: 17
741
- }, this),
742
- /* @__PURE__ */ jsxDEV("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", children: [
743
- /* @__PURE__ */ jsxDEV(
744
- "button",
745
- {
746
- onClick: () => {
747
- setSearchFields(searchableFieldNames);
748
- AdminLocalStorage.setSearchFields(model.name, searchableFieldNames);
749
- },
750
- className: "text-xs text-green-web hover:text-green-web-800 mr-3",
751
- children: "Select All"
752
- },
753
- void 0,
754
- false,
755
- {
756
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
757
- lineNumber: 617,
758
- columnNumber: 19
759
- },
760
- this
761
- ),
762
- /* @__PURE__ */ jsxDEV(
763
- "button",
764
- {
765
- onClick: () => {
766
- const defaults = getDefaultSearchFields(searchableFieldNames);
767
- setSearchFields(defaults);
768
- AdminLocalStorage.setSearchFields(model.name, defaults);
769
- },
770
- className: "text-xs text-gray-600 hover:text-gray-800",
771
- children: "Reset to Defaults"
772
- },
773
- void 0,
774
- false,
775
- {
776
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
777
- lineNumber: 626,
778
- columnNumber: 19
779
- },
780
- this
781
- )
782
- ] }, void 0, true, {
783
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
784
- lineNumber: 616,
785
- columnNumber: 17
786
- }, this)
787
- ] }, void 0, true, {
788
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
789
- lineNumber: 594,
790
- columnNumber: 15
791
- }, this) : /* @__PURE__ */ jsxDEV("div", { className: "text-sm text-gray-500", children: "No searchable text fields available" }, void 0, false, {
792
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
793
- lineNumber: 639,
794
- columnNumber: 15
795
- }, this)
796
- ] }, void 0, true, {
797
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
798
- lineNumber: 591,
799
- columnNumber: 11
800
- }, this) }, void 0, false, {
801
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
802
- lineNumber: 590,
803
- columnNumber: 9
804
- }, this)
805
- ] }, void 0, true, {
806
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
422
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => setShowColumnSelector(!showColumnSelector), className: "inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md 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: {
423
+ fileName: _jsxFileName,
424
+ lineNumber: 498,
425
+ columnNumber: 7
426
+ } }, "Columns", /* @__PURE__ */ React.createElement("svg", { className: "-mr-0.5 ml-2 h-4 w-4", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", __self: this, __source: {
427
+ fileName: _jsxFileName,
428
+ lineNumber: 503,
429
+ columnNumber: 9
430
+ } }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z", clipRule: "evenodd", __self: this, __source: {
431
+ fileName: _jsxFileName,
432
+ lineNumber: 509,
433
+ columnNumber: 11
434
+ } }))), showColumnSelector && /* @__PURE__ */ React.createElement("div", { className: "absolute right-0 mt-2 w-80 bg-white rounded-md shadow-lg z-50 border border-gray-200", __self: this, __source: {
435
+ fileName: _jsxFileName,
436
+ lineNumber: 518,
437
+ columnNumber: 9
438
+ } }, /* @__PURE__ */ React.createElement("div", { className: "p-4", __self: this, __source: {
439
+ fileName: _jsxFileName,
440
+ lineNumber: 519,
441
+ columnNumber: 11
442
+ } }, /* @__PURE__ */ React.createElement("h3", { className: "text-sm font-medium text-gray-900 mb-3", __self: this, __source: {
443
+ fileName: _jsxFileName,
444
+ lineNumber: 520,
445
+ columnNumber: 13
446
+ } }, "Visible Columns"), /* @__PURE__ */ React.createElement("div", { className: "space-y-2 max-h-64 overflow-y-auto", __self: this, __source: {
447
+ fileName: _jsxFileName,
448
+ lineNumber: 521,
449
+ columnNumber: 13
450
+ } }, fieldNames.map((field) => /* @__PURE__ */ React.createElement("label", { key: field, className: "flex items-start gap-2 cursor-pointer", __self: this, __source: {
451
+ fileName: _jsxFileName,
452
+ lineNumber: 523,
453
+ columnNumber: 17
454
+ } }, /* @__PURE__ */ React.createElement("input", { type: "checkbox", checked: visibleColumns.includes(field), onChange: (e) => {
455
+ const newColumns = e.target.checked ? [...visibleColumns, field] : visibleColumns.filter((col) => col !== field);
456
+ setVisibleColumns(newColumns);
457
+ AdminLocalStorage.setColumnVisibility(model.name, newColumns);
458
+ }, className: "h-4 w-4 mt-0.5 flex-shrink-0 text-green-web focus:ring-green-web border-gray-300 rounded", __self: this, __source: {
459
+ fileName: _jsxFileName,
460
+ lineNumber: 524,
461
+ columnNumber: 19
462
+ } }), /* @__PURE__ */ React.createElement("span", { className: "text-sm text-gray-700 leading-5", __self: this, __source: {
463
+ fileName: _jsxFileName,
464
+ lineNumber: 536,
465
+ columnNumber: 19
466
+ } }, formatFieldName(field))))), /* @__PURE__ */ React.createElement("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", __self: this, __source: {
467
+ fileName: _jsxFileName,
468
+ lineNumber: 540,
469
+ columnNumber: 13
470
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => {
471
+ setVisibleColumns(fieldNames);
472
+ AdminLocalStorage.setColumnVisibility(model.name, fieldNames);
473
+ }, className: "text-xs text-green-web hover:text-green-web-800", __self: this, __source: {
474
+ fileName: _jsxFileName,
475
+ lineNumber: 541,
476
+ columnNumber: 15
477
+ } }, "Select All"), /* @__PURE__ */ React.createElement("button", { onClick: () => {
478
+ const defaults = fieldNames.slice(0, 8);
479
+ setVisibleColumns(defaults);
480
+ AdminLocalStorage.setColumnVisibility(model.name, defaults);
481
+ }, className: "text-xs text-gray-600 hover:text-gray-800", __self: this, __source: {
482
+ fileName: _jsxFileName,
483
+ lineNumber: 550,
484
+ columnNumber: 15
485
+ } }, "Reset to Defaults")))));
486
+ const searchFieldSelector = /* @__PURE__ */ React.createElement("div", { className: "relative", "data-dropdown": "search-field-selector", __self: this, __source: {
487
+ fileName: _jsxFileName,
807
488
  lineNumber: 569,
808
489
  columnNumber: 5
809
- }, this);
810
- const filterPanel = showFilters && /* @__PURE__ */ jsxDEV("div", { className: "mb-4 bg-gray-50 border border-gray-200 rounded-lg p-4", children: [
811
- /* @__PURE__ */ jsxDEV("div", { className: "flex items-center justify-between mb-3", children: [
812
- /* @__PURE__ */ jsxDEV("h3", { className: "text-sm font-medium text-gray-900", children: "Filters" }, void 0, false, {
813
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
814
- lineNumber: 651,
815
- columnNumber: 9
816
- }, this),
817
- /* @__PURE__ */ jsxDEV("div", { className: "flex items-center space-x-2", children: [
818
- /* @__PURE__ */ jsxDEV(
819
- "button",
820
- {
821
- onClick: () => {
822
- setFilters({});
823
- dispatch({ type: "RESET_PAGINATION" });
824
- },
825
- className: "text-xs text-gray-600 hover:text-gray-800",
826
- children: "Clear All"
827
- },
828
- void 0,
829
- false,
830
- {
831
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
832
- lineNumber: 653,
833
- columnNumber: 11
834
- },
835
- this
836
- ),
837
- /* @__PURE__ */ jsxDEV(
838
- "button",
839
- {
840
- onClick: () => setShowFilters(false),
841
- className: "text-gray-400 hover:text-gray-600",
842
- children: /* @__PURE__ */ jsxDEV(
843
- "svg",
844
- {
845
- className: "h-5 w-5",
846
- xmlns: "http://www.w3.org/2000/svg",
847
- viewBox: "0 0 20 20",
848
- fill: "currentColor",
849
- children: /* @__PURE__ */ jsxDEV(
850
- "path",
851
- {
852
- fillRule: "evenodd",
853
- d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",
854
- clipRule: "evenodd"
855
- },
856
- void 0,
857
- false,
858
- {
859
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
860
- lineNumber: 672,
861
- columnNumber: 15
862
- },
863
- this
864
- )
865
- },
866
- void 0,
867
- false,
868
- {
869
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
870
- lineNumber: 666,
871
- columnNumber: 13
872
- },
873
- this
874
- )
875
- },
876
- void 0,
877
- false,
878
- {
879
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
880
- lineNumber: 662,
881
- columnNumber: 11
882
- },
883
- this
884
- )
885
- ] }, void 0, true, {
886
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
887
- lineNumber: 652,
888
- columnNumber: 9
889
- }, this)
890
- ] }, void 0, true, {
891
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
892
- lineNumber: 650,
893
- columnNumber: 7
894
- }, this),
895
- /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", children: filterableFieldNames.map((fieldName) => {
896
- const field = model.fields.find((f) => f.name === fieldName);
897
- if (!field) return null;
898
- const currentValue = filters[fieldName];
899
- const handleChange = (value) => {
900
- const newFilters = { ...filters };
901
- if (value === void 0 || value === null || value === "") {
902
- delete newFilters[fieldName];
903
- } else {
904
- newFilters[fieldName] = value;
905
- }
906
- setFilters(newFilters);
907
- dispatch({ type: "RESET_PAGINATION" });
490
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => setShowSearchFieldSelector(!showSearchFieldSelector), className: "h-full px-3 border-l border-gray-300 text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600", "aria-label": "Configure search fields", __self: this, __source: {
491
+ fileName: _jsxFileName,
492
+ lineNumber: 570,
493
+ columnNumber: 7
494
+ } }, /* @__PURE__ */ React.createElement("svg", { className: "h-4 w-4", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", __self: this, __source: {
495
+ fileName: _jsxFileName,
496
+ lineNumber: 575,
497
+ columnNumber: 9
498
+ } }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M3 3a1 1 0 000 2v8a2 2 0 002 2h2.586l-1.293 1.293a1 1 0 101.414 1.414L10 15.414l2.293 2.293a1 1 0 001.414-1.414L12.414 15H15a2 2 0 002-2V5a1 1 0 100-2H3zm11.707 4.707a1 1 0 00-1.414-1.414L10 9.586 8.707 8.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", clipRule: "evenodd", __self: this, __source: {
499
+ fileName: _jsxFileName,
500
+ lineNumber: 581,
501
+ columnNumber: 11
502
+ } }))), showSearchFieldSelector && /* @__PURE__ */ React.createElement("div", { className: "absolute right-0 mt-2 w-72 bg-white rounded-md shadow-lg z-50 border border-gray-200", __self: this, __source: {
503
+ fileName: _jsxFileName,
504
+ lineNumber: 590,
505
+ columnNumber: 9
506
+ } }, /* @__PURE__ */ React.createElement("div", { className: "p-4", __self: this, __source: {
507
+ fileName: _jsxFileName,
508
+ lineNumber: 591,
509
+ columnNumber: 11
510
+ } }, /* @__PURE__ */ React.createElement("h3", { className: "text-sm font-medium text-gray-900 mb-3", __self: this, __source: {
511
+ fileName: _jsxFileName,
512
+ lineNumber: 592,
513
+ columnNumber: 13
514
+ } }, "Search Fields"), searchableFieldNames.length > 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "space-y-2 max-h-48 overflow-y-auto", __self: this, __source: {
515
+ fileName: _jsxFileName,
516
+ lineNumber: 595,
517
+ columnNumber: 17
518
+ } }, searchableFieldNames.map((field) => /* @__PURE__ */ React.createElement("label", { key: field, className: "flex items-start gap-2 cursor-pointer", __self: this, __source: {
519
+ fileName: _jsxFileName,
520
+ lineNumber: 597,
521
+ columnNumber: 21
522
+ } }, /* @__PURE__ */ React.createElement("input", { type: "checkbox", checked: searchFields.includes(field), onChange: (e) => {
523
+ const newFields = e.target.checked ? [...searchFields, field] : searchFields.filter((f) => f !== field);
524
+ setSearchFields(newFields);
525
+ AdminLocalStorage.setSearchFields(model.name, newFields);
526
+ }, className: "h-4 w-4 mt-0.5 flex-shrink-0 text-green-web focus:ring-green-web border-gray-300 rounded", __self: this, __source: {
527
+ fileName: _jsxFileName,
528
+ lineNumber: 598,
529
+ columnNumber: 23
530
+ } }), /* @__PURE__ */ React.createElement("span", { className: "text-sm text-gray-700 leading-5", __self: this, __source: {
531
+ fileName: _jsxFileName,
532
+ lineNumber: 610,
533
+ columnNumber: 23
534
+ } }, formatFieldName(field))))), /* @__PURE__ */ React.createElement("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", __self: this, __source: {
535
+ fileName: _jsxFileName,
536
+ lineNumber: 616,
537
+ columnNumber: 17
538
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => {
539
+ setSearchFields(searchableFieldNames);
540
+ AdminLocalStorage.setSearchFields(model.name, searchableFieldNames);
541
+ }, className: "text-xs text-green-web hover:text-green-web-800 mr-3", __self: this, __source: {
542
+ fileName: _jsxFileName,
543
+ lineNumber: 617,
544
+ columnNumber: 19
545
+ } }, "Select All"), /* @__PURE__ */ React.createElement("button", { onClick: () => {
546
+ const defaults = getDefaultSearchFields(searchableFieldNames);
547
+ setSearchFields(defaults);
548
+ AdminLocalStorage.setSearchFields(model.name, defaults);
549
+ }, className: "text-xs text-gray-600 hover:text-gray-800", __self: this, __source: {
550
+ fileName: _jsxFileName,
551
+ lineNumber: 626,
552
+ columnNumber: 19
553
+ } }, "Reset to Defaults"))) : /* @__PURE__ */ React.createElement("div", { className: "text-sm text-gray-500", __self: this, __source: {
554
+ fileName: _jsxFileName,
555
+ lineNumber: 639,
556
+ columnNumber: 15
557
+ } }, "No searchable text fields available"))));
558
+ const filterPanel = showFilters && /* @__PURE__ */ React.createElement("div", { className: "mb-4 bg-gray-50 border border-gray-200 rounded-lg p-4", __self: this, __source: {
559
+ fileName: _jsxFileName,
560
+ lineNumber: 649,
561
+ columnNumber: 5
562
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-between mb-3", __self: this, __source: {
563
+ fileName: _jsxFileName,
564
+ lineNumber: 650,
565
+ columnNumber: 7
566
+ } }, /* @__PURE__ */ React.createElement("h3", { className: "text-sm font-medium text-gray-900", __self: this, __source: {
567
+ fileName: _jsxFileName,
568
+ lineNumber: 651,
569
+ columnNumber: 9
570
+ } }, "Filters"), /* @__PURE__ */ React.createElement("div", { className: "flex items-center space-x-2", __self: this, __source: {
571
+ fileName: _jsxFileName,
572
+ lineNumber: 652,
573
+ columnNumber: 9
574
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => {
575
+ setFilters({});
576
+ dispatch({
577
+ type: "RESET_PAGINATION"
578
+ });
579
+ }, className: "text-xs text-gray-600 hover:text-gray-800", __self: this, __source: {
580
+ fileName: _jsxFileName,
581
+ lineNumber: 653,
582
+ columnNumber: 11
583
+ } }, "Clear All"), /* @__PURE__ */ React.createElement("button", { onClick: () => setShowFilters(false), className: "text-gray-400 hover:text-gray-600", __self: this, __source: {
584
+ fileName: _jsxFileName,
585
+ lineNumber: 662,
586
+ columnNumber: 11
587
+ } }, /* @__PURE__ */ React.createElement("svg", { className: "h-5 w-5", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", __self: this, __source: {
588
+ fileName: _jsxFileName,
589
+ lineNumber: 666,
590
+ columnNumber: 13
591
+ } }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z", clipRule: "evenodd", __self: this, __source: {
592
+ fileName: _jsxFileName,
593
+ lineNumber: 672,
594
+ columnNumber: 15
595
+ } }))))), /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", __self: this, __source: {
596
+ fileName: _jsxFileName,
597
+ lineNumber: 682,
598
+ columnNumber: 7
599
+ } }, filterableFieldNames.map((fieldName) => {
600
+ const field = model.fields.find((f) => f.name === fieldName);
601
+ if (!field) return null;
602
+ const currentValue = filters[fieldName];
603
+ const handleChange = (value) => {
604
+ const newFilters = {
605
+ ...filters
908
606
  };
909
- if (field.relationName && !field.isList) {
910
- return /* @__PURE__ */ jsxDEV(
911
- RelationFilterField,
912
- {
913
- fieldName,
914
- relatedModelName: field.type,
915
- currentValue,
916
- onChange: handleChange
917
- },
918
- fieldName,
919
- false,
920
- {
921
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
922
- lineNumber: 702,
923
- columnNumber: 15
924
- },
925
- this
926
- );
607
+ if (value === void 0 || value === null || value === "") {
608
+ delete newFilters[fieldName];
609
+ } else {
610
+ newFilters[fieldName] = value;
927
611
  }
928
- if (field.type.toLowerCase() === "datetime" || field.type.toLowerCase() === "date") {
929
- return /* @__PURE__ */ jsxDEV(
930
- DateRangeFilter,
931
- {
932
- fieldName,
933
- currentValue,
934
- onChange: handleChange
935
- },
936
- fieldName,
937
- false,
938
- {
939
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
940
- lineNumber: 715,
941
- columnNumber: 15
942
- },
943
- this
944
- );
945
- }
946
- if (["int", "bigint", "float", "decimal"].includes(field.type.toLowerCase())) {
947
- return /* @__PURE__ */ jsxDEV(
948
- NumberRangeFilter,
949
- {
950
- fieldName,
951
- fieldType: field.type.toLowerCase(),
952
- currentValue,
953
- onChange: handleChange
954
- },
955
- fieldName,
956
- false,
957
- {
958
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
959
- lineNumber: 727,
960
- columnNumber: 15
961
- },
962
- this
963
- );
964
- }
965
- if (field.kind === "enum") {
966
- const enumValues = getEnumValues(field.type);
967
- if (enumValues) {
968
- return /* @__PURE__ */ jsxDEV("div", { className: "space-y-1", children: [
969
- /* @__PURE__ */ jsxDEV("label", { className: "block text-sm font-medium text-gray-700", children: formatFieldName(fieldName) }, void 0, false, {
970
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
971
- lineNumber: 743,
972
- columnNumber: 19
973
- }, this),
974
- /* @__PURE__ */ jsxDEV(
975
- "select",
976
- {
977
- value: typeof currentValue === "string" ? currentValue : "",
978
- onChange: (e) => handleChange(e.target.value || void 0),
979
- className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm",
980
- children: [
981
- /* @__PURE__ */ jsxDEV("option", { value: "", children: "All" }, void 0, false, {
982
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
983
- lineNumber: 751,
984
- columnNumber: 21
985
- }, this),
986
- enumValues.map((val) => /* @__PURE__ */ jsxDEV("option", { value: val, children: val }, val, false, {
987
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
988
- lineNumber: 753,
989
- columnNumber: 23
990
- }, this))
991
- ]
992
- },
993
- void 0,
994
- true,
995
- {
996
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
997
- lineNumber: 746,
998
- columnNumber: 19
999
- },
1000
- this
1001
- )
1002
- ] }, fieldName, true, {
1003
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1004
- lineNumber: 742,
1005
- columnNumber: 17
1006
- }, this);
1007
- }
1008
- }
1009
- if (field.type.toLowerCase() === "boolean") {
1010
- return /* @__PURE__ */ jsxDEV("div", { className: "space-y-1", children: [
1011
- /* @__PURE__ */ jsxDEV("label", { className: "block text-sm font-medium text-gray-700", children: formatFieldName(fieldName) }, void 0, false, {
1012
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1013
- lineNumber: 767,
1014
- columnNumber: 17
1015
- }, this),
1016
- /* @__PURE__ */ jsxDEV(
1017
- "select",
1018
- {
1019
- value: currentValue === void 0 || currentValue === null ? "" : currentValue.toString(),
1020
- onChange: (e) => {
1021
- const value = e.target.value;
1022
- handleChange(value === "" ? void 0 : value === "true");
1023
- },
1024
- className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm",
1025
- children: [
1026
- /* @__PURE__ */ jsxDEV("option", { value: "", children: "All" }, void 0, false, {
1027
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1028
- lineNumber: 778,
1029
- columnNumber: 19
1030
- }, this),
1031
- /* @__PURE__ */ jsxDEV("option", { value: "true", children: "Yes" }, void 0, false, {
1032
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1033
- lineNumber: 779,
1034
- columnNumber: 19
1035
- }, this),
1036
- /* @__PURE__ */ jsxDEV("option", { value: "false", children: "No" }, void 0, false, {
1037
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1038
- lineNumber: 780,
1039
- columnNumber: 19
1040
- }, this)
1041
- ]
1042
- },
1043
- void 0,
1044
- true,
1045
- {
1046
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1047
- lineNumber: 770,
1048
- columnNumber: 17
1049
- },
1050
- this
1051
- )
1052
- ] }, fieldName, true, {
1053
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1054
- lineNumber: 766,
1055
- columnNumber: 15
1056
- }, this);
612
+ setFilters(newFilters);
613
+ dispatch({
614
+ type: "RESET_PAGINATION"
615
+ });
616
+ };
617
+ if (field.relationName && !field.isList) {
618
+ return /* @__PURE__ */ React.createElement(RelationFilterField, { key: fieldName, fieldName, relatedModelName: field.type, currentValue, onChange: handleChange, __self: this, __source: {
619
+ fileName: _jsxFileName,
620
+ lineNumber: 702,
621
+ columnNumber: 15
622
+ } });
623
+ }
624
+ if (field.type.toLowerCase() === "datetime" || field.type.toLowerCase() === "date") {
625
+ return /* @__PURE__ */ React.createElement(DateRangeFilter, { key: fieldName, fieldName, currentValue, onChange: handleChange, __self: this, __source: {
626
+ fileName: _jsxFileName,
627
+ lineNumber: 715,
628
+ columnNumber: 15
629
+ } });
630
+ }
631
+ if (["int", "bigint", "float", "decimal"].includes(field.type.toLowerCase())) {
632
+ return /* @__PURE__ */ React.createElement(NumberRangeFilter, { key: fieldName, fieldName, fieldType: field.type.toLowerCase(), currentValue, onChange: handleChange, __self: this, __source: {
633
+ fileName: _jsxFileName,
634
+ lineNumber: 727,
635
+ columnNumber: 15
636
+ } });
637
+ }
638
+ if (field.kind === "enum") {
639
+ const enumValues = getEnumValues(field.type);
640
+ if (enumValues) {
641
+ return /* @__PURE__ */ React.createElement("div", { key: fieldName, className: "space-y-1", __self: this, __source: {
642
+ fileName: _jsxFileName,
643
+ lineNumber: 742,
644
+ columnNumber: 17
645
+ } }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
646
+ fileName: _jsxFileName,
647
+ lineNumber: 743,
648
+ columnNumber: 19
649
+ } }, formatFieldName(fieldName)), /* @__PURE__ */ React.createElement("select", { value: typeof currentValue === "string" ? currentValue : "", onChange: (e) => handleChange(e.target.value || void 0), className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm", __self: this, __source: {
650
+ fileName: _jsxFileName,
651
+ lineNumber: 746,
652
+ columnNumber: 19
653
+ } }, /* @__PURE__ */ React.createElement("option", { value: "", __self: this, __source: {
654
+ fileName: _jsxFileName,
655
+ lineNumber: 751,
656
+ columnNumber: 21
657
+ } }, "All"), enumValues.map((val) => /* @__PURE__ */ React.createElement("option", { key: val, value: val, __self: this, __source: {
658
+ fileName: _jsxFileName,
659
+ lineNumber: 753,
660
+ columnNumber: 23
661
+ } }, val))));
1057
662
  }
1058
- return /* @__PURE__ */ jsxDEV("div", { className: "space-y-1", children: [
1059
- /* @__PURE__ */ jsxDEV("label", { className: "block text-sm font-medium text-gray-700", children: formatFieldName(fieldName) }, void 0, false, {
1060
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1061
- lineNumber: 789,
1062
- columnNumber: 15
1063
- }, this),
1064
- /* @__PURE__ */ jsxDEV(
1065
- "input",
1066
- {
1067
- type: "text",
1068
- value: typeof currentValue === "string" ? currentValue : "",
1069
- onChange: (e) => handleChange(e.target.value || void 0),
1070
- placeholder: `Filter by ${formatFieldName(fieldName).toLowerCase()}...`,
1071
- className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm"
1072
- },
1073
- void 0,
1074
- false,
1075
- {
1076
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1077
- lineNumber: 792,
1078
- columnNumber: 15
1079
- },
1080
- this
1081
- )
1082
- ] }, fieldName, true, {
1083
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1084
- lineNumber: 788,
1085
- columnNumber: 13
1086
- }, this);
1087
- }) }, void 0, false, {
1088
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1089
- lineNumber: 682,
1090
- columnNumber: 7
1091
- }, this)
1092
- ] }, void 0, true, {
1093
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1094
- lineNumber: 649,
1095
- columnNumber: 5
1096
- }, this);
1097
- const searchFilter = /* @__PURE__ */ jsxDEV("div", { className: "mb-4 flex items-center justify-between", children: [
1098
- /* @__PURE__ */ jsxDEV("div", { className: "flex-1 max-w-lg", children: [
1099
- /* @__PURE__ */ jsxDEV("label", { htmlFor: "search", className: "sr-only", children: "Search" }, void 0, false, {
1100
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1101
- lineNumber: 809,
1102
- columnNumber: 9
1103
- }, this),
1104
- /* @__PURE__ */ jsxDEV("div", { className: "relative", children: [
1105
- /* @__PURE__ */ jsxDEV("div", { className: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none", children: loading && search !== debouncedSearch ? /* @__PURE__ */ jsxDEV(
1106
- "svg",
1107
- {
1108
- className: "animate-spin h-5 w-5 text-gray-400",
1109
- xmlns: "http://www.w3.org/2000/svg",
1110
- fill: "none",
1111
- viewBox: "0 0 24 24",
1112
- children: [
1113
- /* @__PURE__ */ jsxDEV(
1114
- "circle",
1115
- {
1116
- className: "opacity-25",
1117
- cx: "12",
1118
- cy: "12",
1119
- r: "10",
1120
- stroke: "currentColor",
1121
- strokeWidth: "4"
1122
- },
1123
- void 0,
1124
- false,
1125
- {
1126
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1127
- lineNumber: 821,
1128
- columnNumber: 17
1129
- },
1130
- this
1131
- ),
1132
- /* @__PURE__ */ jsxDEV(
1133
- "path",
1134
- {
1135
- className: "opacity-75",
1136
- fill: "currentColor",
1137
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
1138
- },
1139
- void 0,
1140
- false,
1141
- {
1142
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1143
- lineNumber: 829,
1144
- columnNumber: 17
1145
- },
1146
- this
1147
- )
1148
- ]
1149
- },
1150
- void 0,
1151
- true,
1152
- {
1153
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1154
- lineNumber: 815,
1155
- columnNumber: 15
1156
- },
1157
- this
1158
- ) : /* @__PURE__ */ jsxDEV(
1159
- "svg",
1160
- {
1161
- className: "h-5 w-5 text-gray-400",
1162
- xmlns: "http://www.w3.org/2000/svg",
1163
- viewBox: "0 0 20 20",
1164
- fill: "currentColor",
1165
- "aria-hidden": "true",
1166
- children: /* @__PURE__ */ jsxDEV(
1167
- "path",
1168
- {
1169
- fillRule: "evenodd",
1170
- d: "M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z",
1171
- clipRule: "evenodd"
1172
- },
1173
- void 0,
1174
- false,
1175
- {
1176
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1177
- lineNumber: 843,
1178
- columnNumber: 17
1179
- },
1180
- this
1181
- )
1182
- },
1183
- void 0,
1184
- false,
1185
- {
1186
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1187
- lineNumber: 836,
1188
- columnNumber: 15
1189
- },
1190
- this
1191
- ) }, void 0, false, {
1192
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1193
- lineNumber: 813,
1194
- columnNumber: 11
1195
- }, this),
1196
- /* @__PURE__ */ jsxDEV(
1197
- "input",
1198
- {
1199
- id: "search",
1200
- name: "search",
1201
- className: "block w-full pl-10 pr-12 py-2 border border-gray-300 rounded-md leading-5 bg-white placeholder-gray-500 focus:outline-none focus:placeholder-gray-400 focus:ring-1 focus:ring-green-web focus:border-green-web sm:text-sm",
1202
- placeholder: `Search ${searchFields.length > 0 ? searchFields.map((field) => field.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^./, (str) => str.toUpperCase())).join(", ") : getPluralName(model.name).toLowerCase()}...`,
1203
- type: "search",
1204
- value: state.search || "",
1205
- onChange: (e) => dispatch({ type: "SET_SEARCH", payload: e.target.value })
1206
- },
1207
- void 0,
1208
- false,
1209
- {
1210
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1211
- lineNumber: 851,
1212
- columnNumber: 11
1213
- },
1214
- this
1215
- ),
1216
- searchableFieldNames.length > 0 && /* @__PURE__ */ jsxDEV("div", { className: "absolute inset-y-0 right-0 flex items-center", children: searchFieldSelector }, void 0, false, {
1217
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1218
- lineNumber: 861,
1219
- columnNumber: 13
1220
- }, this)
1221
- ] }, void 0, true, {
1222
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1223
- lineNumber: 812,
1224
- columnNumber: 9
1225
- }, this)
1226
- ] }, void 0, true, {
1227
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1228
- lineNumber: 808,
1229
- columnNumber: 7
1230
- }, this),
1231
- /* @__PURE__ */ jsxDEV("div", { className: "ml-4 flex space-x-2", children: [
1232
- /* @__PURE__ */ jsxDEV(
1233
- "button",
1234
- {
1235
- onClick: () => setShowFilters(!showFilters),
1236
- className: `inline-flex items-center px-3 py-2 border text-sm font-medium rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web ${showFilters || Object.keys(filters).length > 0 ? "border-green-web text-green-web bg-green-50 hover:bg-green-100" : "border-gray-300 text-gray-700 bg-white hover:bg-gray-50"}`,
1237
- children: [
1238
- /* @__PURE__ */ jsxDEV("svg", { className: "w-4 h-4 mr-2", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxDEV(
1239
- "path",
1240
- {
1241
- strokeLinecap: "round",
1242
- strokeLinejoin: "round",
1243
- strokeWidth: 2,
1244
- d: "M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z"
1245
- },
1246
- void 0,
1247
- false,
1248
- {
1249
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1250
- lineNumber: 877,
1251
- columnNumber: 13
1252
- },
1253
- this
1254
- ) }, void 0, false, {
1255
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1256
- lineNumber: 876,
1257
- columnNumber: 11
1258
- }, this),
1259
- "Filters",
1260
- Object.keys(filters).length > 0 && /* @__PURE__ */ jsxDEV("span", { className: "ml-1 inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-white bg-green-web rounded-full", children: Object.keys(filters).length }, void 0, false, {
1261
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1262
- lineNumber: 886,
1263
- columnNumber: 13
1264
- }, this)
1265
- ]
1266
- },
1267
- void 0,
1268
- true,
1269
- {
1270
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1271
- lineNumber: 868,
1272
- columnNumber: 9
1273
- },
1274
- this
1275
- ),
1276
- columnSelector,
1277
- /* @__PURE__ */ jsxDEV(
1278
- Link,
1279
- {
1280
- to: createLink,
1281
- className: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-600",
1282
- children: "Create New"
1283
- },
1284
- void 0,
1285
- false,
1286
- {
1287
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1288
- lineNumber: 892,
1289
- columnNumber: 9
1290
- },
1291
- this
1292
- )
1293
- ] }, void 0, true, {
1294
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1295
- lineNumber: 867,
1296
- columnNumber: 7
1297
- }, this)
1298
- ] }, void 0, true, {
1299
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
663
+ }
664
+ if (field.type.toLowerCase() === "boolean") {
665
+ return /* @__PURE__ */ React.createElement("div", { key: fieldName, className: "space-y-1", __self: this, __source: {
666
+ fileName: _jsxFileName,
667
+ lineNumber: 766,
668
+ columnNumber: 15
669
+ } }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
670
+ fileName: _jsxFileName,
671
+ lineNumber: 767,
672
+ columnNumber: 17
673
+ } }, formatFieldName(fieldName)), /* @__PURE__ */ React.createElement("select", { value: currentValue === void 0 || currentValue === null ? "" : currentValue.toString(), onChange: (e) => {
674
+ const value = e.target.value;
675
+ handleChange(value === "" ? void 0 : value === "true");
676
+ }, className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm", __self: this, __source: {
677
+ fileName: _jsxFileName,
678
+ lineNumber: 770,
679
+ columnNumber: 17
680
+ } }, /* @__PURE__ */ React.createElement("option", { value: "", __self: this, __source: {
681
+ fileName: _jsxFileName,
682
+ lineNumber: 778,
683
+ columnNumber: 19
684
+ } }, "All"), /* @__PURE__ */ React.createElement("option", { value: "true", __self: this, __source: {
685
+ fileName: _jsxFileName,
686
+ lineNumber: 779,
687
+ columnNumber: 19
688
+ } }, "Yes"), /* @__PURE__ */ React.createElement("option", { value: "false", __self: this, __source: {
689
+ fileName: _jsxFileName,
690
+ lineNumber: 780,
691
+ columnNumber: 19
692
+ } }, "No")));
693
+ }
694
+ return /* @__PURE__ */ React.createElement("div", { key: fieldName, className: "space-y-1", __self: this, __source: {
695
+ fileName: _jsxFileName,
696
+ lineNumber: 788,
697
+ columnNumber: 13
698
+ } }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
699
+ fileName: _jsxFileName,
700
+ lineNumber: 789,
701
+ columnNumber: 15
702
+ } }, formatFieldName(fieldName)), /* @__PURE__ */ React.createElement("input", { type: "text", value: typeof currentValue === "string" ? currentValue : "", onChange: (e) => handleChange(e.target.value || void 0), placeholder: `Filter by ${formatFieldName(fieldName).toLowerCase()}...`, className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm", __self: this, __source: {
703
+ fileName: _jsxFileName,
704
+ lineNumber: 792,
705
+ columnNumber: 15
706
+ } }));
707
+ })));
708
+ const searchFilter = /* @__PURE__ */ React.createElement("div", { className: "mb-4 flex items-center justify-between", __self: this, __source: {
709
+ fileName: _jsxFileName,
1300
710
  lineNumber: 807,
1301
711
  columnNumber: 5
1302
- }, this);
1303
- return /* @__PURE__ */ jsxDEV(Fragment, { children: [
1304
- filterPanel,
1305
- searchFilter,
1306
- /* @__PURE__ */ jsxDEV(
1307
- DataTable,
1308
- {
1309
- data: items,
1310
- path: createLink.replace("/create", ""),
1311
- fields: visibleColumns.length > 0 ? visibleColumns : fieldNames,
1312
- pagination,
1313
- setSkip: (skip2) => dispatch({ type: "SET_SKIP", payload: skip2 }),
1314
- sort: state.sort,
1315
- setSort: setSortSafely
1316
- },
1317
- void 0,
1318
- false,
1319
- {
1320
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1321
- lineNumber: 906,
1322
- columnNumber: 7
1323
- },
1324
- this
1325
- )
1326
- ] }, void 0, true, {
1327
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1328
- lineNumber: 903,
1329
- columnNumber: 5
1330
- }, this);
712
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex-1 max-w-lg", __self: this, __source: {
713
+ fileName: _jsxFileName,
714
+ lineNumber: 808,
715
+ columnNumber: 7
716
+ } }, /* @__PURE__ */ React.createElement("label", { htmlFor: "search", className: "sr-only", __self: this, __source: {
717
+ fileName: _jsxFileName,
718
+ lineNumber: 809,
719
+ columnNumber: 9
720
+ } }, "Search"), /* @__PURE__ */ React.createElement("div", { className: "relative", __self: this, __source: {
721
+ fileName: _jsxFileName,
722
+ lineNumber: 812,
723
+ columnNumber: 9
724
+ } }, /* @__PURE__ */ React.createElement("div", { className: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none", __self: this, __source: {
725
+ fileName: _jsxFileName,
726
+ lineNumber: 813,
727
+ columnNumber: 11
728
+ } }, loading && search !== debouncedSearch ? /* @__PURE__ */ React.createElement("svg", { className: "animate-spin h-5 w-5 text-gray-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", __self: this, __source: {
729
+ fileName: _jsxFileName,
730
+ lineNumber: 815,
731
+ columnNumber: 15
732
+ } }, /* @__PURE__ */ React.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4", __self: this, __source: {
733
+ fileName: _jsxFileName,
734
+ lineNumber: 821,
735
+ columnNumber: 17
736
+ } }), /* @__PURE__ */ React.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z", __self: this, __source: {
737
+ fileName: _jsxFileName,
738
+ lineNumber: 829,
739
+ columnNumber: 17
740
+ } })) : /* @__PURE__ */ React.createElement("svg", { className: "h-5 w-5 text-gray-400", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", __self: this, __source: {
741
+ fileName: _jsxFileName,
742
+ lineNumber: 836,
743
+ columnNumber: 15
744
+ } }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z", clipRule: "evenodd", __self: this, __source: {
745
+ fileName: _jsxFileName,
746
+ lineNumber: 843,
747
+ columnNumber: 17
748
+ } }))), /* @__PURE__ */ React.createElement("input", { id: "search", name: "search", className: "block w-full pl-10 pr-12 py-2 border border-gray-300 rounded-md leading-5 bg-white placeholder-gray-500 focus:outline-none focus:placeholder-gray-400 focus:ring-1 focus:ring-green-web focus:border-green-web sm:text-sm", placeholder: `Search ${searchFields.length > 0 ? searchFields.map((field) => field.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^./, (str) => str.toUpperCase())).join(", ") : getPluralName(model.name).toLowerCase()}...`, type: "search", value: state.search || "", onChange: (e) => dispatch({
749
+ type: "SET_SEARCH",
750
+ payload: e.target.value
751
+ }), __self: this, __source: {
752
+ fileName: _jsxFileName,
753
+ lineNumber: 851,
754
+ columnNumber: 11
755
+ } }), searchableFieldNames.length > 0 && /* @__PURE__ */ React.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center", __self: this, __source: {
756
+ fileName: _jsxFileName,
757
+ lineNumber: 861,
758
+ columnNumber: 13
759
+ } }, searchFieldSelector))), /* @__PURE__ */ React.createElement("div", { className: "ml-4 flex space-x-2", __self: this, __source: {
760
+ fileName: _jsxFileName,
761
+ lineNumber: 867,
762
+ columnNumber: 7
763
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => setShowFilters(!showFilters), className: `inline-flex items-center px-3 py-2 border text-sm font-medium rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web ${showFilters || Object.keys(filters).length > 0 ? "border-green-web text-green-web bg-green-50 hover:bg-green-100" : "border-gray-300 text-gray-700 bg-white hover:bg-gray-50"}`, __self: this, __source: {
764
+ fileName: _jsxFileName,
765
+ lineNumber: 868,
766
+ columnNumber: 9
767
+ } }, /* @__PURE__ */ React.createElement("svg", { className: "w-4 h-4 mr-2", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", __self: this, __source: {
768
+ fileName: _jsxFileName,
769
+ lineNumber: 876,
770
+ columnNumber: 11
771
+ } }, /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z", __self: this, __source: {
772
+ fileName: _jsxFileName,
773
+ lineNumber: 877,
774
+ columnNumber: 13
775
+ } })), "Filters", Object.keys(filters).length > 0 && /* @__PURE__ */ React.createElement("span", { className: "ml-1 inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-white bg-green-web rounded-full", __self: this, __source: {
776
+ fileName: _jsxFileName,
777
+ lineNumber: 886,
778
+ columnNumber: 13
779
+ } }, Object.keys(filters).length)), columnSelector, /* @__PURE__ */ React.createElement(Link, { to: createLink, className: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-600", __self: this, __source: {
780
+ fileName: _jsxFileName,
781
+ lineNumber: 892,
782
+ columnNumber: 9
783
+ } }, "Create New")));
784
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, filterPanel, searchFilter, /* @__PURE__ */ React.createElement(DataTable, { data: items, path: createLink.replace("/create", ""), fields: visibleColumns.length > 0 ? visibleColumns : fieldNames, pagination, setSkip: (skip2) => dispatch({
785
+ type: "SET_SKIP",
786
+ payload: skip2
787
+ }), sort: state.sort, setSort: setSortSafely, __self: this, __source: {
788
+ fileName: _jsxFileName,
789
+ lineNumber: 906,
790
+ columnNumber: 7
791
+ } }));
1331
792
  }
1332
- function AdminDataErrorBoundary({ error }) {
1333
- return /* @__PURE__ */ jsxDEV(ErrorBoundary, { error }, void 0, false, {
1334
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
793
+ function AdminDataErrorBoundary({
794
+ error
795
+ }) {
796
+ return /* @__PURE__ */ React.createElement(ErrorBoundary, { error, __self: this, __source: {
797
+ fileName: _jsxFileName,
1335
798
  lineNumber: 920,
1336
799
  columnNumber: 10
1337
- }, this);
800
+ } });
1338
801
  }
1339
802
  export {
1340
803
  AdminDataErrorBoundary,