@nestledjs/data-browser 0.1.11 → 0.1.13

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,20 +1,27 @@
1
- import { jsxDEV, Fragment } from "react/jsx-dev-runtime";
1
+ import React, { useCallback, useEffect, useMemo } from "react";
2
2
  import { useQuery } from "@apollo/client/react";
3
3
  import { DataTable, ErrorBoundary } from "@nestledjs/shared-components";
4
4
  import { getPluralName } from "@nestledjs/helpers";
5
5
  import { AdminLocalStorage } from "../utils/secure-storage.js";
6
6
  import { kebabCase, formatFieldName } from "../utils/string-utils.js";
7
- import { useCallback, useEffect, useMemo } from "react";
8
- import { useParams, Link } from "react-router";
7
+ import { useParams, useSearchParams, Link } from "react-router";
9
8
  import { DateRangeFilter } from "../components/filters/DateRangeFilter.js";
10
9
  import { NumberRangeFilter } from "../components/filters/NumberRangeFilter.js";
11
10
  import { RelationFilterField } from "../components/filters/RelationFilterField.js";
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/data-browser/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 [searchParams] = useSearchParams();
20
+ const {
21
+ sdk,
22
+ databaseModels,
23
+ basePath = "/admin/data"
24
+ } = useAdminDataContext();
18
25
  const getEnumValues = useCallback((enumType) => {
19
26
  try {
20
27
  const enumObject = sdk[enumType];
@@ -32,7 +39,10 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
32
39
  return null;
33
40
  }
34
41
  }, [sdk]);
35
- const { state, dispatch } = useAdminList();
42
+ const {
43
+ state,
44
+ dispatch
45
+ } = useAdminList();
36
46
  const {
37
47
  search,
38
48
  debouncedSearch,
@@ -46,43 +56,43 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
46
56
  showFilters,
47
57
  showSearchFieldSelector
48
58
  } = 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
- );
59
+ useCallback((skip2) => dispatch({
60
+ type: "SET_SKIP",
61
+ payload: skip2
62
+ }), [dispatch]);
63
+ const setFilters = useCallback((filters2) => dispatch({
64
+ type: "SET_FILTERS",
65
+ payload: filters2
66
+ }), [dispatch]);
67
+ const setShowFilters = useCallback((show) => {
68
+ if (show !== showFilters) dispatch({
69
+ type: "TOGGLE_FILTERS"
70
+ });
71
+ }, [showFilters, dispatch]);
72
+ const setVisibleColumns = useCallback((columns) => dispatch({
73
+ type: "SET_VISIBLE_COLUMNS",
74
+ payload: columns
75
+ }), [dispatch]);
76
+ const setShowColumnSelector = useCallback((show) => {
77
+ if (show !== showColumnSelector) dispatch({
78
+ type: "TOGGLE_COLUMN_SELECTOR"
79
+ });
80
+ }, [showColumnSelector, dispatch]);
81
+ const setSearchFields = useCallback((fields) => dispatch({
82
+ type: "SET_SEARCH_FIELDS",
83
+ payload: fields
84
+ }), [dispatch]);
85
+ const setShowSearchFieldSelector = useCallback((show) => {
86
+ if (show !== showSearchFieldSelector) dispatch({
87
+ type: "TOGGLE_SEARCH_FIELD_SELECTOR"
88
+ });
89
+ }, [showSearchFieldSelector, dispatch]);
83
90
  useEffect(() => {
84
91
  const timer = setTimeout(() => {
85
- dispatch({ type: "SET_DEBOUNCED_SEARCH", payload: state.search });
92
+ dispatch({
93
+ type: "SET_DEBOUNCED_SEARCH",
94
+ payload: state.search
95
+ });
86
96
  }, 500);
87
97
  return () => clearTimeout(timer);
88
98
  }, [state.search]);
@@ -97,18 +107,52 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
97
107
  return modelUrlName.toLowerCase() === pluralParam.toLowerCase();
98
108
  });
99
109
  }, [propModelName, pluralParam, databaseModels]);
110
+ const urlFilters = useMemo(() => {
111
+ if (!model) return {};
112
+ const filters2 = {};
113
+ for (const [key, value] of searchParams.entries()) {
114
+ if (key !== "page" && key !== "search" && key !== "sort") {
115
+ const relationField = model.fields.find((f) => {
116
+ var _a;
117
+ return f.relationName && !f.isList && ((_a = f.relationFromFields) == null ? void 0 : _a[0]) === key;
118
+ });
119
+ if (relationField) {
120
+ filters2[relationField.name] = {
121
+ id: value
122
+ };
123
+ } else {
124
+ filters2[key] = value;
125
+ }
126
+ }
127
+ }
128
+ return filters2;
129
+ }, [searchParams, model]);
130
+ useEffect(() => {
131
+ if (Object.keys(urlFilters).length > 0) {
132
+ dispatch({
133
+ type: "SET_FILTERS",
134
+ payload: urlFilters
135
+ });
136
+ if (!showFilters) {
137
+ dispatch({
138
+ type: "TOGGLE_FILTERS"
139
+ });
140
+ }
141
+ }
142
+ }, [urlFilters, showFilters]);
100
143
  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
- };
144
+ if (!model) return {
145
+ query: void 0,
146
+ listQuery: void 0,
147
+ update: void 0,
148
+ delete: void 0,
149
+ create: void 0
150
+ };
109
151
  return getAdminDocuments(sdk, model);
110
152
  }, [sdk, model]);
111
- const { listQuery: query } = documents;
153
+ const {
154
+ listQuery: query
155
+ } = documents;
112
156
  const dataPath = useMemo(() => {
113
157
  return (model == null ? void 0 : model.pluralModelPropertyName) || pluralParam.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
114
158
  }, [model, pluralParam]);
@@ -152,54 +196,60 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
152
196
  setVisibleColumns(filteredCols);
153
197
  const storedSort = AdminLocalStorage.getSortPreference(model.name);
154
198
  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 });
199
+ const nextSort = sortFieldValid ? storedSort : {
200
+ orderBy: "id",
201
+ orderDirection: "desc"
202
+ };
203
+ dispatch({
204
+ type: "SET_SORT",
205
+ payload: nextSort
206
+ });
157
207
  const storedSearch = AdminLocalStorage.getSearchFields(model.name);
158
208
  const defaults = getDefaultSearchFields(searchableFieldNames);
159
209
  const filteredSearch = (storedSearch || defaults).filter((f) => searchableFieldNames.includes(f));
160
210
  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" });
211
+ dispatch({
212
+ type: "SET_SEARCH",
213
+ payload: ""
214
+ });
215
+ dispatch({
216
+ type: "SET_DEBOUNCED_SEARCH",
217
+ payload: ""
218
+ });
219
+ dispatch({
220
+ type: "RESET_FILTERS"
221
+ });
222
+ dispatch({
223
+ type: "RESET_PAGINATION"
224
+ });
165
225
  }, [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
- }
226
+ const setSortSafely = useCallback((newSort) => {
227
+ const resolvedSort = typeof newSort === "function" ? newSort(sort) : newSort;
228
+ if (resolvedSort.orderBy !== sort.orderBy || resolvedSort.orderDirection !== sort.orderDirection) {
229
+ dispatch({
230
+ type: "SET_SORT",
231
+ payload: resolvedSort
232
+ });
233
+ if (model) {
234
+ AdminLocalStorage.setSortPreference(model.name, resolvedSort);
174
235
  }
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
- }
236
+ }
237
+ }, [sort.orderBy, sort.orderDirection, model, dispatch]);
238
+ const handleClickOutside = useCallback((event) => {
239
+ const target = event.target;
240
+ if (showColumnSelector) {
241
+ const columnSelector2 = document.querySelector('[data-dropdown="column-selector"]');
242
+ if (columnSelector2 && !columnSelector2.contains(target)) {
243
+ setShowColumnSelector(false);
186
244
  }
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
- }
245
+ }
246
+ if (showSearchFieldSelector) {
247
+ const searchFieldSelector2 = document.querySelector('[data-dropdown="search-field-selector"]');
248
+ if (searchFieldSelector2 && !searchFieldSelector2.contains(target)) {
249
+ setShowSearchFieldSelector(false);
194
250
  }
195
- },
196
- [
197
- showColumnSelector,
198
- showSearchFieldSelector,
199
- setShowColumnSelector,
200
- setShowSearchFieldSelector
201
- ]
202
- );
251
+ }
252
+ }, [showColumnSelector, showSearchFieldSelector, setShowColumnSelector, setShowSearchFieldSelector]);
203
253
  useEffect(() => {
204
254
  if (showColumnSelector || showSearchFieldSelector) {
205
255
  document.addEventListener("mousedown", handleClickOutside);
@@ -217,7 +267,13 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
217
267
  filters: Object.keys(filters).length > 0 ? filters : void 0
218
268
  }
219
269
  };
220
- const { data, loading, error, networkStatus, refetch } = useQuery(query ?? sdk.__AdminUsersDocument, {
270
+ const {
271
+ data,
272
+ loading,
273
+ error,
274
+ networkStatus,
275
+ refetch
276
+ } = useQuery(query ?? sdk.__AdminUsersDocument, {
221
277
  variables,
222
278
  skip: !model || !query,
223
279
  errorPolicy: "all",
@@ -230,7 +286,11 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
230
286
  // 30 second timeout
231
287
  }
232
288
  });
233
- const { validatedItems, validatedPagination, dataError } = useMemo(() => {
289
+ const {
290
+ validatedItems,
291
+ validatedPagination,
292
+ dataError
293
+ } = useMemo(() => {
234
294
  var _a, _b;
235
295
  if (error) {
236
296
  console.warn("[AdminList] GraphQL error:", error.message);
@@ -299,1042 +359,479 @@ function AdminDataListPage({ modelName: propModelName } = {}) {
299
359
  const items = validatedItems;
300
360
  const pagination = validatedPagination;
301
361
  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",
385
- lineNumber: 409,
362
+ 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: {
363
+ fileName: _jsxFileName,
364
+ lineNumber: 451,
386
365
  columnNumber: 7
387
- }, this);
366
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", __self: this, __source: {
367
+ fileName: _jsxFileName,
368
+ lineNumber: 452,
369
+ columnNumber: 9
370
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
371
+ fileName: _jsxFileName,
372
+ lineNumber: 453,
373
+ columnNumber: 11
374
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
375
+ fileName: _jsxFileName,
376
+ lineNumber: 454,
377
+ columnNumber: 13
378
+ } }, /* @__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: {
379
+ fileName: _jsxFileName,
380
+ lineNumber: 455,
381
+ columnNumber: 15
382
+ } }, /* @__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: {
383
+ fileName: _jsxFileName,
384
+ lineNumber: 461,
385
+ columnNumber: 17
386
+ } })), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900", __self: this, __source: {
387
+ fileName: _jsxFileName,
388
+ lineNumber: 468,
389
+ columnNumber: 15
390
+ } }, "Invalid Data Type"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600", __self: this, __source: {
391
+ fileName: _jsxFileName,
392
+ lineNumber: 469,
393
+ columnNumber: 15
394
+ } }, 'The data type "', pluralParam, '" is not recognized.'), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
395
+ fileName: _jsxFileName,
396
+ lineNumber: 472,
397
+ columnNumber: 15
398
+ } }, /* @__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: {
399
+ fileName: _jsxFileName,
400
+ lineNumber: 473,
401
+ columnNumber: 17
402
+ } }, "Return to Data Browser"))))));
388
403
  }
389
404
  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",
491
- lineNumber: 447,
405
+ 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: {
406
+ fileName: _jsxFileName,
407
+ lineNumber: 489,
492
408
  columnNumber: 7
493
- }, this);
409
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", __self: this, __source: {
410
+ fileName: _jsxFileName,
411
+ lineNumber: 490,
412
+ columnNumber: 9
413
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
414
+ fileName: _jsxFileName,
415
+ lineNumber: 491,
416
+ columnNumber: 11
417
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
418
+ fileName: _jsxFileName,
419
+ lineNumber: 492,
420
+ columnNumber: 13
421
+ } }, /* @__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: {
422
+ fileName: _jsxFileName,
423
+ lineNumber: 493,
424
+ columnNumber: 15
425
+ } }, /* @__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: {
426
+ fileName: _jsxFileName,
427
+ lineNumber: 499,
428
+ columnNumber: 17
429
+ } })), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900", __self: this, __source: {
430
+ fileName: _jsxFileName,
431
+ lineNumber: 506,
432
+ columnNumber: 15
433
+ } }, "GraphQL Schema Not Available"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600", __self: this, __source: {
434
+ fileName: _jsxFileName,
435
+ lineNumber: 509,
436
+ columnNumber: 15
437
+ } }, '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: {
438
+ fileName: _jsxFileName,
439
+ lineNumber: 513,
440
+ columnNumber: 15
441
+ } }, /* @__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: {
442
+ fileName: _jsxFileName,
443
+ lineNumber: 514,
444
+ columnNumber: 17
445
+ } }, "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: {
446
+ fileName: _jsxFileName,
447
+ lineNumber: 520,
448
+ columnNumber: 17
449
+ } }, "Return to Data Browser"))))));
494
450
  }
495
451
  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",
646
- lineNumber: 497,
452
+ const columnSelector = /* @__PURE__ */ React.createElement("div", { className: "relative", "data-dropdown": "column-selector", __self: this, __source: {
453
+ fileName: _jsxFileName,
454
+ lineNumber: 539,
647
455
  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",
807
- lineNumber: 569,
456
+ } }, /* @__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: {
457
+ fileName: _jsxFileName,
458
+ lineNumber: 540,
459
+ columnNumber: 7
460
+ } }, "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: {
461
+ fileName: _jsxFileName,
462
+ lineNumber: 545,
463
+ columnNumber: 9
464
+ } }, /* @__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: {
465
+ fileName: _jsxFileName,
466
+ lineNumber: 551,
467
+ columnNumber: 11
468
+ } }))), 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: {
469
+ fileName: _jsxFileName,
470
+ lineNumber: 560,
471
+ columnNumber: 9
472
+ } }, /* @__PURE__ */ React.createElement("div", { className: "p-4", __self: this, __source: {
473
+ fileName: _jsxFileName,
474
+ lineNumber: 561,
475
+ columnNumber: 11
476
+ } }, /* @__PURE__ */ React.createElement("h3", { className: "text-sm font-medium text-gray-900 mb-3", __self: this, __source: {
477
+ fileName: _jsxFileName,
478
+ lineNumber: 562,
479
+ columnNumber: 13
480
+ } }, "Visible Columns"), /* @__PURE__ */ React.createElement("div", { className: "space-y-2 max-h-64 overflow-y-auto", __self: this, __source: {
481
+ fileName: _jsxFileName,
482
+ lineNumber: 563,
483
+ columnNumber: 13
484
+ } }, fieldNames.map((field) => /* @__PURE__ */ React.createElement("label", { key: field, className: "flex items-start gap-2 cursor-pointer", __self: this, __source: {
485
+ fileName: _jsxFileName,
486
+ lineNumber: 565,
487
+ columnNumber: 17
488
+ } }, /* @__PURE__ */ React.createElement("input", { type: "checkbox", checked: visibleColumns.includes(field), onChange: (e) => {
489
+ const newColumns = e.target.checked ? [...visibleColumns, field] : visibleColumns.filter((col) => col !== field);
490
+ setVisibleColumns(newColumns);
491
+ AdminLocalStorage.setColumnVisibility(model.name, newColumns);
492
+ }, 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: {
493
+ fileName: _jsxFileName,
494
+ lineNumber: 566,
495
+ columnNumber: 19
496
+ } }), /* @__PURE__ */ React.createElement("span", { className: "text-sm text-gray-700 leading-5", __self: this, __source: {
497
+ fileName: _jsxFileName,
498
+ lineNumber: 578,
499
+ columnNumber: 19
500
+ } }, formatFieldName(field))))), /* @__PURE__ */ React.createElement("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", __self: this, __source: {
501
+ fileName: _jsxFileName,
502
+ lineNumber: 582,
503
+ columnNumber: 13
504
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => {
505
+ setVisibleColumns(fieldNames);
506
+ AdminLocalStorage.setColumnVisibility(model.name, fieldNames);
507
+ }, className: "text-xs text-green-web hover:text-green-web-800", __self: this, __source: {
508
+ fileName: _jsxFileName,
509
+ lineNumber: 583,
510
+ columnNumber: 15
511
+ } }, "Select All"), /* @__PURE__ */ React.createElement("button", { onClick: () => {
512
+ const defaults = fieldNames.slice(0, 8);
513
+ setVisibleColumns(defaults);
514
+ AdminLocalStorage.setColumnVisibility(model.name, defaults);
515
+ }, className: "text-xs text-gray-600 hover:text-gray-800", __self: this, __source: {
516
+ fileName: _jsxFileName,
517
+ lineNumber: 592,
518
+ columnNumber: 15
519
+ } }, "Reset to Defaults")))));
520
+ const searchFieldSelector = /* @__PURE__ */ React.createElement("div", { className: "relative", "data-dropdown": "search-field-selector", __self: this, __source: {
521
+ fileName: _jsxFileName,
522
+ lineNumber: 611,
808
523
  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" });
524
+ } }, /* @__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: {
525
+ fileName: _jsxFileName,
526
+ lineNumber: 612,
527
+ columnNumber: 7
528
+ } }, /* @__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: {
529
+ fileName: _jsxFileName,
530
+ lineNumber: 617,
531
+ columnNumber: 9
532
+ } }, /* @__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: {
533
+ fileName: _jsxFileName,
534
+ lineNumber: 623,
535
+ columnNumber: 11
536
+ } }))), 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: {
537
+ fileName: _jsxFileName,
538
+ lineNumber: 632,
539
+ columnNumber: 9
540
+ } }, /* @__PURE__ */ React.createElement("div", { className: "p-4", __self: this, __source: {
541
+ fileName: _jsxFileName,
542
+ lineNumber: 633,
543
+ columnNumber: 11
544
+ } }, /* @__PURE__ */ React.createElement("h3", { className: "text-sm font-medium text-gray-900 mb-3", __self: this, __source: {
545
+ fileName: _jsxFileName,
546
+ lineNumber: 634,
547
+ columnNumber: 13
548
+ } }, "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: {
549
+ fileName: _jsxFileName,
550
+ lineNumber: 637,
551
+ columnNumber: 17
552
+ } }, searchableFieldNames.map((field) => /* @__PURE__ */ React.createElement("label", { key: field, className: "flex items-start gap-2 cursor-pointer", __self: this, __source: {
553
+ fileName: _jsxFileName,
554
+ lineNumber: 639,
555
+ columnNumber: 21
556
+ } }, /* @__PURE__ */ React.createElement("input", { type: "checkbox", checked: searchFields.includes(field), onChange: (e) => {
557
+ const newFields = e.target.checked ? [...searchFields, field] : searchFields.filter((f) => f !== field);
558
+ setSearchFields(newFields);
559
+ AdminLocalStorage.setSearchFields(model.name, newFields);
560
+ }, 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: {
561
+ fileName: _jsxFileName,
562
+ lineNumber: 640,
563
+ columnNumber: 23
564
+ } }), /* @__PURE__ */ React.createElement("span", { className: "text-sm text-gray-700 leading-5", __self: this, __source: {
565
+ fileName: _jsxFileName,
566
+ lineNumber: 652,
567
+ columnNumber: 23
568
+ } }, formatFieldName(field))))), /* @__PURE__ */ React.createElement("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", __self: this, __source: {
569
+ fileName: _jsxFileName,
570
+ lineNumber: 658,
571
+ columnNumber: 17
572
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => {
573
+ setSearchFields(searchableFieldNames);
574
+ AdminLocalStorage.setSearchFields(model.name, searchableFieldNames);
575
+ }, className: "text-xs text-green-web hover:text-green-web-800 mr-3", __self: this, __source: {
576
+ fileName: _jsxFileName,
577
+ lineNumber: 659,
578
+ columnNumber: 19
579
+ } }, "Select All"), /* @__PURE__ */ React.createElement("button", { onClick: () => {
580
+ const defaults = getDefaultSearchFields(searchableFieldNames);
581
+ setSearchFields(defaults);
582
+ AdminLocalStorage.setSearchFields(model.name, defaults);
583
+ }, className: "text-xs text-gray-600 hover:text-gray-800", __self: this, __source: {
584
+ fileName: _jsxFileName,
585
+ lineNumber: 668,
586
+ columnNumber: 19
587
+ } }, "Reset to Defaults"))) : /* @__PURE__ */ React.createElement("div", { className: "text-sm text-gray-500", __self: this, __source: {
588
+ fileName: _jsxFileName,
589
+ lineNumber: 681,
590
+ columnNumber: 15
591
+ } }, "No searchable text fields available"))));
592
+ const filterPanel = showFilters && /* @__PURE__ */ React.createElement("div", { className: "mb-4 bg-gray-50 border border-gray-200 rounded-lg p-4", __self: this, __source: {
593
+ fileName: _jsxFileName,
594
+ lineNumber: 691,
595
+ columnNumber: 5
596
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-between mb-3", __self: this, __source: {
597
+ fileName: _jsxFileName,
598
+ lineNumber: 692,
599
+ columnNumber: 7
600
+ } }, /* @__PURE__ */ React.createElement("h3", { className: "text-sm font-medium text-gray-900", __self: this, __source: {
601
+ fileName: _jsxFileName,
602
+ lineNumber: 693,
603
+ columnNumber: 9
604
+ } }, "Filters"), /* @__PURE__ */ React.createElement("div", { className: "flex items-center space-x-2", __self: this, __source: {
605
+ fileName: _jsxFileName,
606
+ lineNumber: 694,
607
+ columnNumber: 9
608
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => {
609
+ setFilters({});
610
+ dispatch({
611
+ type: "RESET_PAGINATION"
612
+ });
613
+ }, className: "text-xs text-gray-600 hover:text-gray-800", __self: this, __source: {
614
+ fileName: _jsxFileName,
615
+ lineNumber: 695,
616
+ columnNumber: 11
617
+ } }, "Clear All"), /* @__PURE__ */ React.createElement("button", { onClick: () => setShowFilters(false), className: "text-gray-400 hover:text-gray-600", __self: this, __source: {
618
+ fileName: _jsxFileName,
619
+ lineNumber: 704,
620
+ columnNumber: 11
621
+ } }, /* @__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: {
622
+ fileName: _jsxFileName,
623
+ lineNumber: 708,
624
+ columnNumber: 13
625
+ } }, /* @__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: {
626
+ fileName: _jsxFileName,
627
+ lineNumber: 714,
628
+ columnNumber: 15
629
+ } }))))), /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", __self: this, __source: {
630
+ fileName: _jsxFileName,
631
+ lineNumber: 724,
632
+ columnNumber: 7
633
+ } }, filterableFieldNames.map((fieldName) => {
634
+ const field = model.fields.find((f) => f.name === fieldName);
635
+ if (!field) return null;
636
+ const currentValue = filters[fieldName];
637
+ const handleChange = (value) => {
638
+ const newFilters = {
639
+ ...filters
908
640
  };
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
- );
927
- }
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
- }
641
+ if (value === void 0 || value === null || value === "") {
642
+ delete newFilters[fieldName];
643
+ } else {
644
+ newFilters[fieldName] = value;
1008
645
  }
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);
646
+ setFilters(newFilters);
647
+ dispatch({
648
+ type: "RESET_PAGINATION"
649
+ });
650
+ };
651
+ if (field.relationName && !field.isList) {
652
+ return /* @__PURE__ */ React.createElement(RelationFilterField, { key: fieldName, fieldName, relatedModelName: field.type, currentValue, onChange: handleChange, __self: this, __source: {
653
+ fileName: _jsxFileName,
654
+ lineNumber: 744,
655
+ columnNumber: 15
656
+ } });
657
+ }
658
+ if (field.type.toLowerCase() === "datetime" || field.type.toLowerCase() === "date") {
659
+ return /* @__PURE__ */ React.createElement(DateRangeFilter, { key: fieldName, fieldName, currentValue, onChange: handleChange, __self: this, __source: {
660
+ fileName: _jsxFileName,
661
+ lineNumber: 757,
662
+ columnNumber: 15
663
+ } });
664
+ }
665
+ if (["int", "bigint", "float", "decimal"].includes(field.type.toLowerCase())) {
666
+ return /* @__PURE__ */ React.createElement(NumberRangeFilter, { key: fieldName, fieldName, fieldType: field.type.toLowerCase(), currentValue, onChange: handleChange, __self: this, __source: {
667
+ fileName: _jsxFileName,
668
+ lineNumber: 769,
669
+ columnNumber: 15
670
+ } });
671
+ }
672
+ if (field.kind === "enum") {
673
+ const enumValues = getEnumValues(field.type);
674
+ if (enumValues) {
675
+ return /* @__PURE__ */ React.createElement("div", { key: fieldName, className: "space-y-1", __self: this, __source: {
676
+ fileName: _jsxFileName,
677
+ lineNumber: 784,
678
+ columnNumber: 17
679
+ } }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
680
+ fileName: _jsxFileName,
681
+ lineNumber: 785,
682
+ columnNumber: 19
683
+ } }, 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: {
684
+ fileName: _jsxFileName,
685
+ lineNumber: 788,
686
+ columnNumber: 19
687
+ } }, /* @__PURE__ */ React.createElement("option", { value: "", __self: this, __source: {
688
+ fileName: _jsxFileName,
689
+ lineNumber: 793,
690
+ columnNumber: 21
691
+ } }, "All"), enumValues.map((val) => /* @__PURE__ */ React.createElement("option", { key: val, value: val, __self: this, __source: {
692
+ fileName: _jsxFileName,
693
+ lineNumber: 795,
694
+ columnNumber: 23
695
+ } }, val))));
1057
696
  }
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",
697
+ }
698
+ if (field.type.toLowerCase() === "boolean") {
699
+ return /* @__PURE__ */ React.createElement("div", { key: fieldName, className: "space-y-1", __self: this, __source: {
700
+ fileName: _jsxFileName,
701
+ lineNumber: 808,
702
+ columnNumber: 15
703
+ } }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
704
+ fileName: _jsxFileName,
1101
705
  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",
706
+ columnNumber: 17
707
+ } }, formatFieldName(fieldName)), /* @__PURE__ */ React.createElement("select", { value: currentValue === void 0 || currentValue === null ? "" : currentValue.toString(), onChange: (e) => {
708
+ const value = e.target.value;
709
+ handleChange(value === "" ? void 0 : value === "true");
710
+ }, 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: {
711
+ fileName: _jsxFileName,
1223
712
  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",
1300
- lineNumber: 807,
713
+ columnNumber: 17
714
+ } }, /* @__PURE__ */ React.createElement("option", { value: "", __self: this, __source: {
715
+ fileName: _jsxFileName,
716
+ lineNumber: 820,
717
+ columnNumber: 19
718
+ } }, "All"), /* @__PURE__ */ React.createElement("option", { value: "true", __self: this, __source: {
719
+ fileName: _jsxFileName,
720
+ lineNumber: 821,
721
+ columnNumber: 19
722
+ } }, "Yes"), /* @__PURE__ */ React.createElement("option", { value: "false", __self: this, __source: {
723
+ fileName: _jsxFileName,
724
+ lineNumber: 822,
725
+ columnNumber: 19
726
+ } }, "No")));
727
+ }
728
+ return /* @__PURE__ */ React.createElement("div", { key: fieldName, className: "space-y-1", __self: this, __source: {
729
+ fileName: _jsxFileName,
730
+ lineNumber: 830,
731
+ columnNumber: 13
732
+ } }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
733
+ fileName: _jsxFileName,
734
+ lineNumber: 831,
735
+ columnNumber: 15
736
+ } }, 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: {
737
+ fileName: _jsxFileName,
738
+ lineNumber: 834,
739
+ columnNumber: 15
740
+ } }));
741
+ })));
742
+ const searchFilter = /* @__PURE__ */ React.createElement("div", { className: "mb-4 flex items-center justify-between", __self: this, __source: {
743
+ fileName: _jsxFileName,
744
+ lineNumber: 849,
1301
745
  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",
746
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex-1 max-w-lg", __self: this, __source: {
747
+ fileName: _jsxFileName,
748
+ lineNumber: 850,
749
+ columnNumber: 7
750
+ } }, /* @__PURE__ */ React.createElement("label", { htmlFor: "search", className: "sr-only", __self: this, __source: {
751
+ fileName: _jsxFileName,
752
+ lineNumber: 851,
753
+ columnNumber: 9
754
+ } }, "Search"), /* @__PURE__ */ React.createElement("div", { className: "relative", __self: this, __source: {
755
+ fileName: _jsxFileName,
756
+ lineNumber: 854,
757
+ columnNumber: 9
758
+ } }, /* @__PURE__ */ React.createElement("div", { className: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none", __self: this, __source: {
759
+ fileName: _jsxFileName,
760
+ lineNumber: 855,
761
+ columnNumber: 11
762
+ } }, 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: {
763
+ fileName: _jsxFileName,
764
+ lineNumber: 857,
765
+ columnNumber: 15
766
+ } }, /* @__PURE__ */ React.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4", __self: this, __source: {
767
+ fileName: _jsxFileName,
768
+ lineNumber: 863,
769
+ columnNumber: 17
770
+ } }), /* @__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: {
771
+ fileName: _jsxFileName,
772
+ lineNumber: 871,
773
+ columnNumber: 17
774
+ } })) : /* @__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: {
775
+ fileName: _jsxFileName,
776
+ lineNumber: 878,
777
+ columnNumber: 15
778
+ } }, /* @__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: {
779
+ fileName: _jsxFileName,
780
+ lineNumber: 885,
781
+ columnNumber: 17
782
+ } }))), /* @__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({
783
+ type: "SET_SEARCH",
784
+ payload: e.target.value
785
+ }), __self: this, __source: {
786
+ fileName: _jsxFileName,
787
+ lineNumber: 893,
788
+ columnNumber: 11
789
+ } }), searchableFieldNames.length > 0 && /* @__PURE__ */ React.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center", __self: this, __source: {
790
+ fileName: _jsxFileName,
1328
791
  lineNumber: 903,
1329
- columnNumber: 5
1330
- }, this);
792
+ columnNumber: 13
793
+ } }, searchFieldSelector))), /* @__PURE__ */ React.createElement("div", { className: "ml-4 flex space-x-2", __self: this, __source: {
794
+ fileName: _jsxFileName,
795
+ lineNumber: 909,
796
+ columnNumber: 7
797
+ } }, /* @__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: {
798
+ fileName: _jsxFileName,
799
+ lineNumber: 910,
800
+ columnNumber: 9
801
+ } }, /* @__PURE__ */ React.createElement("svg", { className: "w-4 h-4 mr-2", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", __self: this, __source: {
802
+ fileName: _jsxFileName,
803
+ lineNumber: 918,
804
+ columnNumber: 11
805
+ } }, /* @__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: {
806
+ fileName: _jsxFileName,
807
+ lineNumber: 919,
808
+ columnNumber: 13
809
+ } })), "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: {
810
+ fileName: _jsxFileName,
811
+ lineNumber: 928,
812
+ columnNumber: 13
813
+ } }, 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: {
814
+ fileName: _jsxFileName,
815
+ lineNumber: 934,
816
+ columnNumber: 9
817
+ } }, "Create New")));
818
+ 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({
819
+ type: "SET_SKIP",
820
+ payload: skip2
821
+ }), sort: state.sort, setSort: setSortSafely, __self: this, __source: {
822
+ fileName: _jsxFileName,
823
+ lineNumber: 948,
824
+ columnNumber: 7
825
+ } }));
1331
826
  }
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",
1335
- lineNumber: 920,
827
+ function AdminDataErrorBoundary({
828
+ error
829
+ }) {
830
+ return /* @__PURE__ */ React.createElement(ErrorBoundary, { error, __self: this, __source: {
831
+ fileName: _jsxFileName,
832
+ lineNumber: 962,
1336
833
  columnNumber: 10
1337
- }, this);
834
+ } });
1338
835
  }
1339
836
  export {
1340
837
  AdminDataErrorBoundary,