@nestledjs/data-browser 0.1.6 → 0.1.8

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,1218 +1,805 @@
1
- import { jsxDEV as t, Fragment as K } from "react/jsx-dev-runtime";
2
- import { useQuery as ge } from "@apollo/client/react";
3
- import { DataTable as pe, ErrorBoundary as fe } from "@nestledjs/shared-components";
4
- import { getPluralName as Y } from "@nestledjs/helpers";
5
- import { AdminLocalStorage as o } from "../utils/secure-storage.js";
6
- import { kebabCase as Z, formatFieldName as L } from "../utils/string-utils.js";
7
- import { useCallback as m, useEffect as G, useMemo as f } from "react";
8
- import { useParams as Ne, Link as $ } from "react-router";
9
- import { DateRangeFilter as ye } from "../components/filters/DateRangeFilter.js";
10
- import { NumberRangeFilter as xe } from "../components/filters/NumberRangeFilter.js";
11
- import { RelationFilterField as ve } from "../components/filters/RelationFilterField.js";
12
- import { useAdminList as Pe } from "../hooks/useAdminList.js";
13
- import { getAdminDocuments as je } from "../utils/graphql-utils.js";
14
- import { useAdminDataContext as Le } from "../context/AdminDataContext.js";
15
- function Me({ modelName: v } = {}) {
16
- const E = Ne(), { sdk: w, databaseModels: k, basePath: F = "/admin/data" } = Le(), J = m((e) => {
1
+ import { useQuery } from "@apollo/client/react";
2
+ import { DataTable, ErrorBoundary } from "@nestledjs/shared-components";
3
+ import { getPluralName } from "@nestledjs/helpers";
4
+ import { AdminLocalStorage } from "../utils/secure-storage.js";
5
+ import { kebabCase, formatFieldName } from "../utils/string-utils.js";
6
+ import { useCallback, useEffect, useMemo } from "react";
7
+ import { useParams, Link } from "react-router";
8
+ import { DateRangeFilter } from "../components/filters/DateRangeFilter.js";
9
+ import { NumberRangeFilter } from "../components/filters/NumberRangeFilter.js";
10
+ import { RelationFilterField } from "../components/filters/RelationFilterField.js";
11
+ import { useAdminList } from "../hooks/useAdminList.js";
12
+ import { getAdminDocuments } from "../utils/graphql-utils.js";
13
+ import { useAdminDataContext } from "../context/AdminDataContext.js";
14
+ var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx";
15
+ function AdminDataListPage({
16
+ modelName: propModelName
17
+ } = {}) {
18
+ const params = useParams();
19
+ const {
20
+ sdk,
21
+ databaseModels,
22
+ basePath = "/admin/data"
23
+ } = useAdminDataContext();
24
+ const getEnumValues = useCallback((enumType) => {
17
25
  try {
18
- const s = w[e];
19
- if (!s || typeof s != "object")
26
+ const enumObject = sdk[enumType];
27
+ if (!enumObject || typeof enumObject !== "object") {
20
28
  return null;
21
- const a = Object.values(s).filter((r) => typeof r == "string");
22
- if (a.length === 0) {
23
- const r = Object.keys(s).filter((n) => isNaN(Number(n)));
24
- return r.length > 0 ? r : null;
25
29
  }
26
- return a;
27
- } catch (s) {
28
- return console.warn(`Failed to get enum values for type ${e}:`, s), null;
30
+ const values = Object.values(enumObject).filter((value) => typeof value === "string");
31
+ if (values.length === 0) {
32
+ const keys = Object.keys(enumObject).filter((key) => isNaN(Number(key)));
33
+ return keys.length > 0 ? keys : null;
34
+ }
35
+ return values;
36
+ } catch (error2) {
37
+ console.warn(`Failed to get enum values for type ${enumType}:`, error2);
38
+ return null;
29
39
  }
30
- }, [w]), { state: A, dispatch: l } = Pe(), {
31
- search: X,
32
- debouncedSearch: H,
33
- skip: ee,
34
- pageSize: te,
35
- sort: N,
36
- visibleColumns: _,
37
- showColumnSelector: h,
38
- searchFields: y,
39
- filters: x,
40
- showFilters: D,
41
- showSearchFieldSelector: g
42
- } = A;
43
- m(
44
- (e) => l({ type: "SET_SKIP", payload: e }),
45
- [l]
46
- );
47
- const Q = m(
48
- (e) => l({ type: "SET_FILTERS", payload: e }),
49
- [l]
50
- ), q = m(
51
- (e) => {
52
- e !== D && l({ type: "TOGGLE_FILTERS" });
53
- },
54
- [D, l]
55
- ), I = m(
56
- (e) => l({ type: "SET_VISIBLE_COLUMNS", payload: e }),
57
- [l]
58
- ), T = m(
59
- (e) => {
60
- e !== h && l({ type: "TOGGLE_COLUMN_SELECTOR" });
61
- },
62
- [h, l]
63
- ), U = m(
64
- (e) => l({ type: "SET_SEARCH_FIELDS", payload: e }),
65
- [l]
66
- ), R = m(
67
- (e) => {
68
- e !== g && l({ type: "TOGGLE_SEARCH_FIELD_SELECTOR" });
69
- },
70
- [g, l]
71
- );
72
- G(() => {
73
- const e = setTimeout(() => {
74
- l({ type: "SET_DEBOUNCED_SEARCH", payload: A.search });
40
+ }, [sdk]);
41
+ const {
42
+ state,
43
+ dispatch
44
+ } = useAdminList();
45
+ const {
46
+ search,
47
+ debouncedSearch,
48
+ skip,
49
+ pageSize,
50
+ sort,
51
+ visibleColumns,
52
+ showColumnSelector,
53
+ searchFields,
54
+ filters,
55
+ showFilters,
56
+ showSearchFieldSelector
57
+ } = state;
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]);
89
+ useEffect(() => {
90
+ const timer = setTimeout(() => {
91
+ dispatch({
92
+ type: "SET_DEBOUNCED_SEARCH",
93
+ payload: state.search
94
+ });
75
95
  }, 500);
76
- return () => clearTimeout(e);
77
- }, [A.search]);
78
- const P = v || ((E == null ? void 0 : E.dataTypePlural) ?? ""), i = f(() => {
79
- if (v)
80
- return k.find((e) => e.name === v);
81
- if (P)
82
- return k.find((e) => Z(Y(e.name)).toLowerCase() === P.toLowerCase());
83
- }, [v, P, k]), ae = f(() => i ? je(w, i) : {
84
- query: void 0,
85
- listQuery: void 0,
86
- update: void 0,
87
- delete: void 0,
88
- create: void 0
89
- }, [w, i]), { listQuery: O } = ae, j = f(() => (i == null ? void 0 : i.pluralModelPropertyName) || P.replace(/-([a-z])/g, (e, s) => s.toUpperCase()), [i, P]), S = f(() => i ? `${i.pluralModelPropertyName}_meta` : `${j}_meta`, [i, j]), c = f(() => i ? i.fields.filter((e) => !e.relationName || !e.isList).map((e) => e.name) : [], [i]), se = f(() => i ? i.fields.filter((e) => {
90
- if (e.relationName && !e.isList) return !0;
91
- if (e.relationName || e.isList || ["id", "createdAt", "updatedAt"].includes(e.name)) return !1;
92
- const s = e.type.toLowerCase();
93
- return ["boolean", "int", "float", "date", "datetime"].includes(s) || e.kind === "enum";
94
- }).map((e) => e.name) : [], [i]), u = f(() => i ? i.fields.filter((e) => {
95
- const s = e.type.toLowerCase();
96
- return !e.relationName && (s === "string" || s.includes("text") || s === "boolean");
97
- }).map((e) => e.name) : [], [i]), B = m((e) => {
98
- const a = ["name", "title", "email", "firstName", "lastName", "subject"].filter((r) => e.includes(r));
99
- return a.length >= 1 ? a.slice(0, 2) : e.slice(0, Math.min(2, e.length));
96
+ return () => clearTimeout(timer);
97
+ }, [state.search]);
98
+ const pluralParam = propModelName || ((params == null ? void 0 : params.dataTypePlural) ?? "");
99
+ const model = useMemo(() => {
100
+ if (propModelName) {
101
+ return databaseModels.find((m) => m.name === propModelName);
102
+ }
103
+ if (!pluralParam) return void 0;
104
+ return databaseModels.find((m) => {
105
+ const modelUrlName = kebabCase(getPluralName(m.name));
106
+ return modelUrlName.toLowerCase() === pluralParam.toLowerCase();
107
+ });
108
+ }, [propModelName, pluralParam, databaseModels]);
109
+ const documents = useMemo(() => {
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
+ };
117
+ return getAdminDocuments(sdk, model);
118
+ }, [sdk, model]);
119
+ const {
120
+ listQuery: query
121
+ } = documents;
122
+ const dataPath = useMemo(() => {
123
+ return (model == null ? void 0 : model.pluralModelPropertyName) || pluralParam.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
124
+ }, [model, pluralParam]);
125
+ const paginationPath = useMemo(() => {
126
+ return model ? `${model.pluralModelPropertyName}_meta` : `${dataPath}_meta`;
127
+ }, [model, dataPath]);
128
+ const fieldNames = useMemo(() => {
129
+ if (!model) return [];
130
+ return model.fields.filter((field) => !field.relationName || !field.isList).map((field) => field.name);
131
+ }, [model]);
132
+ const filterableFieldNames = useMemo(() => {
133
+ if (!model) return [];
134
+ return model.fields.filter((field) => {
135
+ if (field.relationName && !field.isList) return true;
136
+ if (field.relationName) return false;
137
+ if (field.isList) return false;
138
+ if (["id", "createdAt", "updatedAt"].includes(field.name)) return false;
139
+ const fieldType = field.type.toLowerCase();
140
+ return ["boolean", "int", "float", "date", "datetime"].includes(fieldType) || field.kind === "enum";
141
+ }).map((field) => field.name);
142
+ }, [model]);
143
+ const searchableFieldNames = useMemo(() => {
144
+ if (!model) return [];
145
+ return model.fields.filter((field) => {
146
+ const fieldType = field.type.toLowerCase();
147
+ return !field.relationName && (fieldType === "string" || fieldType.includes("text") || fieldType === "boolean");
148
+ }).map((field) => field.name);
149
+ }, [model]);
150
+ const getDefaultSearchFields = useCallback((availableFields) => {
151
+ const goodFields = ["name", "title", "email", "firstName", "lastName", "subject"];
152
+ const matches = goodFields.filter((field) => availableFields.includes(field));
153
+ if (matches.length >= 1) {
154
+ return matches.slice(0, 2);
155
+ }
156
+ return availableFields.slice(0, Math.min(2, availableFields.length));
100
157
  }, []);
101
- G(() => {
102
- if (!i) return;
103
- const s = (o.getColumnVisibility(i.name) || c.slice(0, 8)).filter((M) => c.includes(M));
104
- I(s);
105
- const a = o.getSortPreference(i.name), n = a && (a.orderBy === "id" || c.includes(a.orderBy)) ? a : { orderBy: "id", orderDirection: "desc" };
106
- l({ type: "SET_SORT", payload: n });
107
- const d = o.getSearchFields(i.name), p = B(u), b = (d || p).filter((M) => u.includes(M));
108
- U(b), l({ type: "SET_SEARCH", payload: "" }), l({ type: "SET_DEBOUNCED_SEARCH", payload: "" }), l({ type: "RESET_FILTERS" }), l({ type: "RESET_PAGINATION" });
109
- }, [i == null ? void 0 : i.name, c, u, B, I, U, l]);
110
- const ie = m(
111
- (e) => {
112
- const s = typeof e == "function" ? e(N) : e;
113
- (s.orderBy !== N.orderBy || s.orderDirection !== N.orderDirection) && (l({ type: "SET_SORT", payload: s }), i && o.setSortPreference(i.name, s));
114
- },
115
- [N.orderBy, N.orderDirection, i, l]
116
- ), z = m(
117
- (e) => {
118
- const s = e.target;
119
- if (h) {
120
- const a = document.querySelector('[data-dropdown="column-selector"]');
121
- a && !a.contains(s) && T(!1);
158
+ useEffect(() => {
159
+ if (!model) return;
160
+ const storedCols = AdminLocalStorage.getColumnVisibility(model.name) || fieldNames.slice(0, 8);
161
+ const filteredCols = storedCols.filter((c) => fieldNames.includes(c));
162
+ setVisibleColumns(filteredCols);
163
+ const storedSort = AdminLocalStorage.getSortPreference(model.name);
164
+ const sortFieldValid = storedSort && (storedSort.orderBy === "id" || fieldNames.includes(storedSort.orderBy));
165
+ const nextSort = sortFieldValid ? storedSort : {
166
+ orderBy: "id",
167
+ orderDirection: "desc"
168
+ };
169
+ dispatch({
170
+ type: "SET_SORT",
171
+ payload: nextSort
172
+ });
173
+ const storedSearch = AdminLocalStorage.getSearchFields(model.name);
174
+ const defaults = getDefaultSearchFields(searchableFieldNames);
175
+ const filteredSearch = (storedSearch || defaults).filter((f) => searchableFieldNames.includes(f));
176
+ setSearchFields(filteredSearch);
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
+ });
191
+ }, [model == null ? void 0 : model.name, fieldNames, searchableFieldNames, getDefaultSearchFields, setVisibleColumns, setSearchFields, dispatch]);
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);
122
201
  }
123
- if (g) {
124
- const a = document.querySelector(
125
- '[data-dropdown="search-field-selector"]'
126
- );
127
- a && !a.contains(s) && R(!1);
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);
128
210
  }
129
- },
130
- [
131
- h,
132
- g,
133
- T,
134
- R
135
- ]
136
- );
137
- G(() => {
138
- if (h || g)
139
- return document.addEventListener("mousedown", z), () => document.removeEventListener("mousedown", z);
140
- }, [h, g, z]);
141
- const le = {
211
+ }
212
+ if (showSearchFieldSelector) {
213
+ const searchFieldSelector2 = document.querySelector('[data-dropdown="search-field-selector"]');
214
+ if (searchFieldSelector2 && !searchFieldSelector2.contains(target)) {
215
+ setShowSearchFieldSelector(false);
216
+ }
217
+ }
218
+ }, [showColumnSelector, showSearchFieldSelector, setShowColumnSelector, setShowSearchFieldSelector]);
219
+ useEffect(() => {
220
+ if (showColumnSelector || showSearchFieldSelector) {
221
+ document.addEventListener("mousedown", handleClickOutside);
222
+ return () => document.removeEventListener("mousedown", handleClickOutside);
223
+ }
224
+ }, [showColumnSelector, showSearchFieldSelector, handleClickOutside]);
225
+ const variables = {
142
226
  input: {
143
- take: te,
144
- skip: ee,
145
- search: H,
146
- searchFields: y.length > 0 ? y : void 0,
147
- orderBy: N.orderBy,
148
- orderDirection: N.orderDirection,
149
- filters: Object.keys(x).length > 0 ? x : void 0
227
+ take: pageSize,
228
+ skip,
229
+ search: debouncedSearch,
230
+ searchFields: searchFields.length > 0 ? searchFields : void 0,
231
+ orderBy: sort.orderBy,
232
+ orderDirection: sort.orderDirection,
233
+ filters: Object.keys(filters).length > 0 ? filters : void 0
150
234
  }
151
- }, { data: V, loading: re, error: C, networkStatus: we, refetch: Ae } = ge(O ?? w.__AdminUsersDocument, {
152
- variables: le,
153
- skip: !i || !O,
235
+ };
236
+ const {
237
+ data,
238
+ loading,
239
+ error,
240
+ networkStatus,
241
+ refetch
242
+ } = useQuery(query ?? sdk.__AdminUsersDocument, {
243
+ variables,
244
+ skip: !model || !query,
154
245
  errorPolicy: "all",
155
246
  // Continue processing even if there are GraphQL errors
156
- notifyOnNetworkStatusChange: !0,
247
+ notifyOnNetworkStatusChange: true,
157
248
  fetchPolicy: "cache-first",
158
249
  // Add timeout for network requests
159
250
  context: {
160
251
  timeout: 3e4
161
252
  // 30 second timeout
162
253
  }
163
- }), { validatedItems: ne, validatedPagination: de, dataError: _e } = f(() => {
164
- var e, s;
165
- if (C) {
166
- console.warn("[AdminList] GraphQL error:", C.message);
167
- const a = C;
168
- a.networkError && console.error("[AdminList] Network error:", a.networkError), ((e = a.graphQLErrors) == null ? void 0 : e.length) > 0 && console.error("[AdminList] GraphQL errors:", a.graphQLErrors);
254
+ });
255
+ const {
256
+ validatedItems,
257
+ validatedPagination,
258
+ dataError
259
+ } = useMemo(() => {
260
+ var _a, _b;
261
+ if (error) {
262
+ console.warn("[AdminList] GraphQL error:", error.message);
263
+ const apolloError = error;
264
+ if (apolloError.networkError) {
265
+ console.error("[AdminList] Network error:", apolloError.networkError);
266
+ }
267
+ if (((_a = apolloError.graphQLErrors) == null ? void 0 : _a.length) > 0) {
268
+ console.error("[AdminList] GraphQL errors:", apolloError.graphQLErrors);
269
+ }
169
270
  }
170
- if (!V)
271
+ if (!data) {
171
272
  return {
172
273
  validatedItems: [],
173
274
  validatedPagination: void 0,
174
- dataError: C || null
275
+ dataError: error || null
175
276
  };
277
+ }
176
278
  try {
177
- const a = V;
178
- let r = j && a[j] ? a[j] : [];
179
- const n = S && a[S] ? a[S] : void 0;
180
- if (!r || r.length === 0) {
181
- for (const [p, b] of Object.entries(a))
182
- if (Array.isArray(b) && b.length > 0 && (s = b[0]) != null && s.id) {
183
- r = b;
184
- break;
279
+ const anyData = data;
280
+ let processedItems = dataPath && anyData[dataPath] ? anyData[dataPath] : [];
281
+ const processedPagination = paginationPath && anyData[paginationPath] ? anyData[paginationPath] : void 0;
282
+ if (!processedItems || processedItems.length === 0) {
283
+ for (const [key, value] of Object.entries(anyData)) {
284
+ if (Array.isArray(value)) {
285
+ if (value.length > 0 && ((_b = value[0]) == null ? void 0 : _b.id)) {
286
+ processedItems = value;
287
+ break;
288
+ }
185
289
  }
290
+ }
186
291
  }
187
- return Array.isArray(r) ? {
188
- validatedItems: r.filter((p, b) => !p || typeof p != "object" ? (console.warn(`[AdminList] Invalid item at index ${b}:`, p), !1) : p.id ? !0 : (console.warn(`[AdminList] Item missing ID at index ${b}:`, p), !1)),
189
- validatedPagination: n,
190
- dataError: null
191
- } : (console.warn("[AdminList] Expected array but got:", typeof r), {
192
- validatedItems: [],
193
- validatedPagination: n,
194
- dataError: new Error("Invalid data format: expected array")
292
+ if (!Array.isArray(processedItems)) {
293
+ console.warn("[AdminList] Expected array but got:", typeof processedItems);
294
+ return {
295
+ validatedItems: [],
296
+ validatedPagination: processedPagination,
297
+ dataError: new Error("Invalid data format: expected array")
298
+ };
299
+ }
300
+ const filteredItems = processedItems.filter((item, index) => {
301
+ if (!item || typeof item !== "object") {
302
+ console.warn(`[AdminList] Invalid item at index ${index}:`, item);
303
+ return false;
304
+ }
305
+ if (!item.id) {
306
+ console.warn(`[AdminList] Item missing ID at index ${index}:`, item);
307
+ return false;
308
+ }
309
+ return true;
195
310
  });
196
- } catch (a) {
197
- return console.error("[AdminList] Error processing data:", a), {
311
+ return {
312
+ validatedItems: filteredItems,
313
+ validatedPagination: processedPagination,
314
+ dataError: null
315
+ };
316
+ } catch (err) {
317
+ console.error("[AdminList] Error processing data:", err);
318
+ return {
198
319
  validatedItems: [],
199
320
  validatedPagination: void 0,
200
- dataError: a instanceof Error ? a : new Error("Unknown data processing error")
321
+ dataError: err instanceof Error ? err : new Error("Unknown data processing error")
201
322
  };
202
323
  }
203
- }, [V, j, S, C]), me = ne, oe = de;
204
- if (!i)
205
- return /* @__PURE__ */ t("div", { className: "min-h-screen bg-gray-50 flex flex-col justify-center py-12 sm:px-6 lg:px-8", children: /* @__PURE__ */ t("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", children: /* @__PURE__ */ t("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ t("div", { className: "text-center", children: [
206
- /* @__PURE__ */ t(
207
- "svg",
208
- {
209
- className: "mx-auto h-12 w-12 text-red-400",
210
- fill: "none",
211
- stroke: "currentColor",
212
- viewBox: "0 0 24 24",
213
- children: /* @__PURE__ */ t(
214
- "path",
215
- {
216
- strokeLinecap: "round",
217
- strokeLinejoin: "round",
218
- strokeWidth: 2,
219
- d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
220
- },
221
- void 0,
222
- !1,
223
- {
224
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
225
- lineNumber: 419,
226
- columnNumber: 17
227
- },
228
- this
229
- )
230
- },
231
- void 0,
232
- !1,
233
- {
234
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
235
- lineNumber: 413,
236
- columnNumber: 15
237
- },
238
- this
239
- ),
240
- /* @__PURE__ */ t("h2", { className: "mt-4 text-lg font-medium text-gray-900", children: "Invalid Data Type" }, void 0, !1, {
241
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
242
- lineNumber: 426,
243
- columnNumber: 15
244
- }, this),
245
- /* @__PURE__ */ t("p", { className: "mt-2 text-sm text-gray-600", children: [
246
- 'The data type "',
247
- P,
248
- '" is not recognized.'
249
- ] }, void 0, !0, {
250
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
251
- lineNumber: 427,
252
- columnNumber: 15
253
- }, this),
254
- /* @__PURE__ */ t("div", { className: "mt-6", children: /* @__PURE__ */ t(
255
- $,
256
- {
257
- to: F,
258
- 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",
259
- children: "Return to Data Browser"
260
- },
261
- void 0,
262
- !1,
263
- {
264
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
265
- lineNumber: 431,
266
- columnNumber: 17
267
- },
268
- this
269
- ) }, void 0, !1, {
270
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
271
- lineNumber: 430,
272
- columnNumber: 15
273
- }, this)
274
- ] }, void 0, !0, {
275
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
276
- lineNumber: 412,
277
- columnNumber: 13
278
- }, this) }, void 0, !1, {
279
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
280
- lineNumber: 411,
281
- columnNumber: 11
282
- }, this) }, void 0, !1, {
283
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
284
- lineNumber: 410,
285
- columnNumber: 9
286
- }, this) }, void 0, !1, {
287
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
324
+ }, [data, dataPath, paginationPath, error]);
325
+ const items = validatedItems;
326
+ const pagination = validatedPagination;
327
+ if (!model) {
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,
288
330
  lineNumber: 409,
289
331
  columnNumber: 7
290
- }, this);
291
- if (!O)
292
- return /* @__PURE__ */ t("div", { className: "min-h-screen bg-gray-50 flex flex-col justify-center py-12 sm:px-6 lg:px-8", children: /* @__PURE__ */ t("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", children: /* @__PURE__ */ t("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ t("div", { className: "text-center", children: [
293
- /* @__PURE__ */ t(
294
- "svg",
295
- {
296
- className: "mx-auto h-12 w-12 text-yellow-400",
297
- fill: "none",
298
- stroke: "currentColor",
299
- viewBox: "0 0 24 24",
300
- children: /* @__PURE__ */ t(
301
- "path",
302
- {
303
- strokeLinecap: "round",
304
- strokeLinejoin: "round",
305
- strokeWidth: 2,
306
- 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"
307
- },
308
- void 0,
309
- !1,
310
- {
311
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
312
- lineNumber: 457,
313
- columnNumber: 17
314
- },
315
- this
316
- )
317
- },
318
- void 0,
319
- !1,
320
- {
321
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
322
- lineNumber: 451,
323
- columnNumber: 15
324
- },
325
- this
326
- ),
327
- /* @__PURE__ */ t("h2", { className: "mt-4 text-lg font-medium text-gray-900", children: "GraphQL Schema Not Available" }, void 0, !1, {
328
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
329
- lineNumber: 464,
330
- columnNumber: 15
331
- }, this),
332
- /* @__PURE__ */ t("p", { className: "mt-2 text-sm text-gray-600", children: [
333
- 'No GraphQL query found for "',
334
- i.name,
335
- '". The admin schema may need to be regenerated.'
336
- ] }, void 0, !0, {
337
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
338
- lineNumber: 467,
339
- columnNumber: 15
340
- }, this),
341
- /* @__PURE__ */ t("div", { className: "mt-6 space-y-3", children: [
342
- /* @__PURE__ */ t(
343
- "button",
344
- {
345
- onClick: () => window.location.reload(),
346
- 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",
347
- children: "Reload Page"
348
- },
349
- void 0,
350
- !1,
351
- {
352
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
353
- lineNumber: 472,
354
- columnNumber: 17
355
- },
356
- this
357
- ),
358
- /* @__PURE__ */ t(
359
- $,
360
- {
361
- to: F,
362
- 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",
363
- children: "Return to Data Browser"
364
- },
365
- void 0,
366
- !1,
367
- {
368
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
369
- lineNumber: 478,
370
- columnNumber: 17
371
- },
372
- this
373
- )
374
- ] }, void 0, !0, {
375
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
376
- lineNumber: 471,
377
- columnNumber: 15
378
- }, this)
379
- ] }, void 0, !0, {
380
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
381
- lineNumber: 450,
382
- columnNumber: 13
383
- }, this) }, void 0, !1, {
384
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
385
- lineNumber: 449,
386
- columnNumber: 11
387
- }, this) }, void 0, !1, {
388
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
389
- lineNumber: 448,
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,
390
335
  columnNumber: 9
391
- }, this) }, void 0, !1, {
392
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
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"))))));
369
+ }
370
+ if (!query) {
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,
393
373
  lineNumber: 447,
394
374
  columnNumber: 7
395
- }, this);
396
- const W = `${F}/${Z(i.name)}/create`, ce = /* @__PURE__ */ t("div", { className: "relative", "data-dropdown": "column-selector", children: [
397
- /* @__PURE__ */ t(
398
- "button",
399
- {
400
- onClick: () => T(!h),
401
- 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",
402
- children: [
403
- "Columns",
404
- /* @__PURE__ */ t(
405
- "svg",
406
- {
407
- className: "-mr-0.5 ml-2 h-4 w-4",
408
- xmlns: "http://www.w3.org/2000/svg",
409
- viewBox: "0 0 20 20",
410
- fill: "currentColor",
411
- children: /* @__PURE__ */ t(
412
- "path",
413
- {
414
- fillRule: "evenodd",
415
- 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",
416
- clipRule: "evenodd"
417
- },
418
- void 0,
419
- !1,
420
- {
421
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
422
- lineNumber: 509,
423
- columnNumber: 11
424
- },
425
- this
426
- )
427
- },
428
- void 0,
429
- !1,
430
- {
431
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
432
- lineNumber: 503,
433
- columnNumber: 9
434
- },
435
- this
436
- )
437
- ]
438
- },
439
- void 0,
440
- !0,
441
- {
442
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
443
- lineNumber: 498,
444
- columnNumber: 7
445
- },
446
- this
447
- ),
448
- h && /* @__PURE__ */ t("div", { className: "absolute right-0 mt-2 w-80 bg-white rounded-md shadow-lg z-50 border border-gray-200", children: /* @__PURE__ */ t("div", { className: "p-4", children: [
449
- /* @__PURE__ */ t("h3", { className: "text-sm font-medium text-gray-900 mb-3", children: "Visible Columns" }, void 0, !1, {
450
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
451
- lineNumber: 520,
452
- columnNumber: 13
453
- }, this),
454
- /* @__PURE__ */ t("div", { className: "space-y-2 max-h-64 overflow-y-auto", children: c.map((e) => /* @__PURE__ */ t("label", { className: "flex items-start gap-2 cursor-pointer", children: [
455
- /* @__PURE__ */ t(
456
- "input",
457
- {
458
- type: "checkbox",
459
- checked: _.includes(e),
460
- onChange: (s) => {
461
- const a = s.target.checked ? [..._, e] : _.filter((r) => r !== e);
462
- I(a), o.setColumnVisibility(i.name, a);
463
- },
464
- className: "h-4 w-4 mt-0.5 flex-shrink-0 text-green-web focus:ring-green-web border-gray-300 rounded"
465
- },
466
- void 0,
467
- !1,
468
- {
469
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
470
- lineNumber: 524,
471
- columnNumber: 19
472
- },
473
- this
474
- ),
475
- /* @__PURE__ */ t("span", { className: "text-sm text-gray-700 leading-5", children: L(e) }, void 0, !1, {
476
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
477
- lineNumber: 536,
478
- columnNumber: 19
479
- }, this)
480
- ] }, e, !0, {
481
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
482
- lineNumber: 523,
483
- columnNumber: 17
484
- }, this)) }, void 0, !1, {
485
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
486
- lineNumber: 521,
487
- columnNumber: 13
488
- }, this),
489
- /* @__PURE__ */ t("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", children: [
490
- /* @__PURE__ */ t(
491
- "button",
492
- {
493
- onClick: () => {
494
- I(c), o.setColumnVisibility(i.name, c);
495
- },
496
- className: "text-xs text-green-web hover:text-green-web-800",
497
- children: "Select All"
498
- },
499
- void 0,
500
- !1,
501
- {
502
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
503
- lineNumber: 541,
504
- columnNumber: 15
505
- },
506
- this
507
- ),
508
- /* @__PURE__ */ t(
509
- "button",
510
- {
511
- onClick: () => {
512
- const e = c.slice(0, 8);
513
- I(e), o.setColumnVisibility(i.name, e);
514
- },
515
- className: "text-xs text-gray-600 hover:text-gray-800",
516
- children: "Reset to Defaults"
517
- },
518
- void 0,
519
- !1,
520
- {
521
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
522
- lineNumber: 550,
523
- columnNumber: 15
524
- },
525
- this
526
- )
527
- ] }, void 0, !0, {
528
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
529
- lineNumber: 540,
530
- columnNumber: 13
531
- }, this)
532
- ] }, void 0, !0, {
533
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
534
- lineNumber: 519,
535
- columnNumber: 11
536
- }, this) }, void 0, !1, {
537
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
538
- lineNumber: 518,
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,
539
378
  columnNumber: 9
540
- }, this)
541
- ] }, void 0, !0, {
542
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
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"))))));
416
+ }
417
+ const createLink = `${basePath}/${kebabCase(model.name)}/create`;
418
+ const columnSelector = /* @__PURE__ */ React.createElement("div", { className: "relative", "data-dropdown": "column-selector", __self: this, __source: {
419
+ fileName: _jsxFileName,
543
420
  lineNumber: 497,
544
421
  columnNumber: 5
545
- }, this), ue = /* @__PURE__ */ t("div", { className: "relative", "data-dropdown": "search-field-selector", children: [
546
- /* @__PURE__ */ t(
547
- "button",
548
- {
549
- onClick: () => R(!g),
550
- className: "h-full px-3 border-l border-gray-300 text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600",
551
- "aria-label": "Configure search fields",
552
- children: /* @__PURE__ */ t(
553
- "svg",
554
- {
555
- className: "h-4 w-4",
556
- xmlns: "http://www.w3.org/2000/svg",
557
- viewBox: "0 0 20 20",
558
- fill: "currentColor",
559
- children: /* @__PURE__ */ t(
560
- "path",
561
- {
562
- fillRule: "evenodd",
563
- 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",
564
- clipRule: "evenodd"
565
- },
566
- void 0,
567
- !1,
568
- {
569
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
570
- lineNumber: 581,
571
- columnNumber: 11
572
- },
573
- this
574
- )
575
- },
576
- void 0,
577
- !1,
578
- {
579
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
580
- lineNumber: 575,
581
- columnNumber: 9
582
- },
583
- this
584
- )
585
- },
586
- void 0,
587
- !1,
588
- {
589
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
590
- lineNumber: 570,
591
- columnNumber: 7
592
- },
593
- this
594
- ),
595
- g && /* @__PURE__ */ t("div", { className: "absolute right-0 mt-2 w-72 bg-white rounded-md shadow-lg z-50 border border-gray-200", children: /* @__PURE__ */ t("div", { className: "p-4", children: [
596
- /* @__PURE__ */ t("h3", { className: "text-sm font-medium text-gray-900 mb-3", children: "Search Fields" }, void 0, !1, {
597
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
598
- lineNumber: 592,
599
- columnNumber: 13
600
- }, this),
601
- u.length > 0 ? /* @__PURE__ */ t(K, { children: [
602
- /* @__PURE__ */ t("div", { className: "space-y-2 max-h-48 overflow-y-auto", children: u.map((e) => /* @__PURE__ */ t("label", { className: "flex items-start gap-2 cursor-pointer", children: [
603
- /* @__PURE__ */ t(
604
- "input",
605
- {
606
- type: "checkbox",
607
- checked: y.includes(e),
608
- onChange: (s) => {
609
- const a = s.target.checked ? [...y, e] : y.filter((r) => r !== e);
610
- U(a), o.setSearchFields(i.name, a);
611
- },
612
- className: "h-4 w-4 mt-0.5 flex-shrink-0 text-green-web focus:ring-green-web border-gray-300 rounded"
613
- },
614
- void 0,
615
- !1,
616
- {
617
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
618
- lineNumber: 598,
619
- columnNumber: 23
620
- },
621
- this
622
- ),
623
- /* @__PURE__ */ t("span", { className: "text-sm text-gray-700 leading-5", children: L(e) }, void 0, !1, {
624
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
625
- lineNumber: 610,
626
- columnNumber: 23
627
- }, this)
628
- ] }, e, !0, {
629
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
630
- lineNumber: 597,
631
- columnNumber: 21
632
- }, this)) }, void 0, !1, {
633
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
634
- lineNumber: 595,
635
- columnNumber: 17
636
- }, this),
637
- /* @__PURE__ */ t("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", children: [
638
- /* @__PURE__ */ t(
639
- "button",
640
- {
641
- onClick: () => {
642
- U(u), o.setSearchFields(i.name, u);
643
- },
644
- className: "text-xs text-green-web hover:text-green-web-800 mr-3",
645
- children: "Select All"
646
- },
647
- void 0,
648
- !1,
649
- {
650
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
651
- lineNumber: 617,
652
- columnNumber: 19
653
- },
654
- this
655
- ),
656
- /* @__PURE__ */ t(
657
- "button",
658
- {
659
- onClick: () => {
660
- const e = B(u);
661
- U(e), o.setSearchFields(i.name, e);
662
- },
663
- className: "text-xs text-gray-600 hover:text-gray-800",
664
- children: "Reset to Defaults"
665
- },
666
- void 0,
667
- !1,
668
- {
669
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
670
- lineNumber: 626,
671
- columnNumber: 19
672
- },
673
- this
674
- )
675
- ] }, void 0, !0, {
676
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
677
- lineNumber: 616,
678
- columnNumber: 17
679
- }, this)
680
- ] }, void 0, !0, {
681
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
682
- lineNumber: 594,
683
- columnNumber: 15
684
- }, this) : /* @__PURE__ */ t("div", { className: "text-sm text-gray-500", children: "No searchable text fields available" }, void 0, !1, {
685
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
686
- lineNumber: 639,
687
- columnNumber: 15
688
- }, this)
689
- ] }, void 0, !0, {
690
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
691
- lineNumber: 591,
692
- columnNumber: 11
693
- }, this) }, void 0, !1, {
694
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
695
- lineNumber: 590,
696
- columnNumber: 9
697
- }, this)
698
- ] }, void 0, !0, {
699
- 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,
700
488
  lineNumber: 569,
701
489
  columnNumber: 5
702
- }, this), be = D && /* @__PURE__ */ t("div", { className: "mb-4 bg-gray-50 border border-gray-200 rounded-lg p-4", children: [
703
- /* @__PURE__ */ t("div", { className: "flex items-center justify-between mb-3", children: [
704
- /* @__PURE__ */ t("h3", { className: "text-sm font-medium text-gray-900", children: "Filters" }, void 0, !1, {
705
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
706
- lineNumber: 651,
707
- columnNumber: 9
708
- }, this),
709
- /* @__PURE__ */ t("div", { className: "flex items-center space-x-2", children: [
710
- /* @__PURE__ */ t(
711
- "button",
712
- {
713
- onClick: () => {
714
- Q({}), l({ type: "RESET_PAGINATION" });
715
- },
716
- className: "text-xs text-gray-600 hover:text-gray-800",
717
- children: "Clear All"
718
- },
719
- void 0,
720
- !1,
721
- {
722
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
723
- lineNumber: 653,
724
- columnNumber: 11
725
- },
726
- this
727
- ),
728
- /* @__PURE__ */ t(
729
- "button",
730
- {
731
- onClick: () => q(!1),
732
- className: "text-gray-400 hover:text-gray-600",
733
- children: /* @__PURE__ */ t(
734
- "svg",
735
- {
736
- className: "h-5 w-5",
737
- xmlns: "http://www.w3.org/2000/svg",
738
- viewBox: "0 0 20 20",
739
- fill: "currentColor",
740
- children: /* @__PURE__ */ t(
741
- "path",
742
- {
743
- fillRule: "evenodd",
744
- 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",
745
- clipRule: "evenodd"
746
- },
747
- void 0,
748
- !1,
749
- {
750
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
751
- lineNumber: 672,
752
- columnNumber: 15
753
- },
754
- this
755
- )
756
- },
757
- void 0,
758
- !1,
759
- {
760
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
761
- lineNumber: 666,
762
- columnNumber: 13
763
- },
764
- this
765
- )
766
- },
767
- void 0,
768
- !1,
769
- {
770
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
771
- lineNumber: 662,
772
- columnNumber: 11
773
- },
774
- this
775
- )
776
- ] }, void 0, !0, {
777
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
778
- lineNumber: 652,
779
- columnNumber: 9
780
- }, this)
781
- ] }, void 0, !0, {
782
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
783
- lineNumber: 650,
784
- columnNumber: 7
785
- }, this),
786
- /* @__PURE__ */ t("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", children: se.map((e) => {
787
- const s = i.fields.find((n) => n.name === e);
788
- if (!s) return null;
789
- const a = x[e], r = (n) => {
790
- const d = { ...x };
791
- n == null || n === "" ? delete d[e] : d[e] = n, Q(d), l({ 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
792
606
  };
793
- if (s.relationName && !s.isList)
794
- return /* @__PURE__ */ t(
795
- ve,
796
- {
797
- fieldName: e,
798
- relatedModelName: s.type,
799
- currentValue: a,
800
- onChange: r
801
- },
802
- e,
803
- !1,
804
- {
805
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
806
- lineNumber: 702,
807
- columnNumber: 15
808
- },
809
- this
810
- );
811
- if (s.type.toLowerCase() === "datetime" || s.type.toLowerCase() === "date")
812
- return /* @__PURE__ */ t(
813
- ye,
814
- {
815
- fieldName: e,
816
- currentValue: a,
817
- onChange: r
818
- },
819
- e,
820
- !1,
821
- {
822
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
823
- lineNumber: 715,
824
- columnNumber: 15
825
- },
826
- this
827
- );
828
- if (["int", "bigint", "float", "decimal"].includes(s.type.toLowerCase()))
829
- return /* @__PURE__ */ t(
830
- xe,
831
- {
832
- fieldName: e,
833
- fieldType: s.type.toLowerCase(),
834
- currentValue: a,
835
- onChange: r
836
- },
837
- e,
838
- !1,
839
- {
840
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
841
- lineNumber: 727,
842
- columnNumber: 15
843
- },
844
- this
845
- );
846
- if (s.kind === "enum") {
847
- const n = J(s.type);
848
- if (n)
849
- return /* @__PURE__ */ t("div", { className: "space-y-1", children: [
850
- /* @__PURE__ */ t("label", { className: "block text-sm font-medium text-gray-700", children: L(e) }, void 0, !1, {
851
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
852
- lineNumber: 743,
853
- columnNumber: 19
854
- }, this),
855
- /* @__PURE__ */ t(
856
- "select",
857
- {
858
- value: typeof a == "string" ? a : "",
859
- onChange: (d) => r(d.target.value || void 0),
860
- 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",
861
- children: [
862
- /* @__PURE__ */ t("option", { value: "", children: "All" }, void 0, !1, {
863
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
864
- lineNumber: 751,
865
- columnNumber: 21
866
- }, this),
867
- n.map((d) => /* @__PURE__ */ t("option", { value: d, children: d }, d, !1, {
868
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
869
- lineNumber: 753,
870
- columnNumber: 23
871
- }, this))
872
- ]
873
- },
874
- void 0,
875
- !0,
876
- {
877
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
878
- lineNumber: 746,
879
- columnNumber: 19
880
- },
881
- this
882
- )
883
- ] }, e, !0, {
884
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
885
- lineNumber: 742,
886
- columnNumber: 17
887
- }, this);
607
+ if (value === void 0 || value === null || value === "") {
608
+ delete newFilters[fieldName];
609
+ } else {
610
+ newFilters[fieldName] = value;
888
611
  }
889
- return s.type.toLowerCase() === "boolean" ? /* @__PURE__ */ t("div", { className: "space-y-1", children: [
890
- /* @__PURE__ */ t("label", { className: "block text-sm font-medium text-gray-700", children: L(e) }, void 0, !1, {
891
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
892
- lineNumber: 767,
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,
893
644
  columnNumber: 17
894
- }, this),
895
- /* @__PURE__ */ t(
896
- "select",
897
- {
898
- value: a == null ? "" : a.toString(),
899
- onChange: (n) => {
900
- const d = n.target.value;
901
- r(d === "" ? void 0 : d === "true");
902
- },
903
- 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",
904
- children: [
905
- /* @__PURE__ */ t("option", { value: "", children: "All" }, void 0, !1, {
906
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
907
- lineNumber: 778,
908
- columnNumber: 19
909
- }, this),
910
- /* @__PURE__ */ t("option", { value: "true", children: "Yes" }, void 0, !1, {
911
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
912
- lineNumber: 779,
913
- columnNumber: 19
914
- }, this),
915
- /* @__PURE__ */ t("option", { value: "false", children: "No" }, void 0, !1, {
916
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
917
- lineNumber: 780,
918
- columnNumber: 19
919
- }, this)
920
- ]
921
- },
922
- void 0,
923
- !0,
924
- {
925
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
926
- lineNumber: 770,
927
- columnNumber: 17
928
- },
929
- this
930
- )
931
- ] }, e, !0, {
932
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
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))));
662
+ }
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,
933
667
  lineNumber: 766,
934
668
  columnNumber: 15
935
- }, this) : /* @__PURE__ */ t("div", { className: "space-y-1", children: [
936
- /* @__PURE__ */ t("label", { className: "block text-sm font-medium text-gray-700", children: L(e) }, void 0, !1, {
937
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
938
- lineNumber: 789,
939
- columnNumber: 15
940
- }, this),
941
- /* @__PURE__ */ t(
942
- "input",
943
- {
944
- type: "text",
945
- value: typeof a == "string" ? a : "",
946
- onChange: (n) => r(n.target.value || void 0),
947
- placeholder: `Filter by ${L(e).toLowerCase()}...`,
948
- 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"
949
- },
950
- void 0,
951
- !1,
952
- {
953
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
954
- lineNumber: 792,
955
- columnNumber: 15
956
- },
957
- this
958
- )
959
- ] }, e, !0, {
960
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
961
- lineNumber: 788,
962
- columnNumber: 13
963
- }, this);
964
- }) }, void 0, !1, {
965
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
966
- lineNumber: 682,
967
- columnNumber: 7
968
- }, this)
969
- ] }, void 0, !0, {
970
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
971
- lineNumber: 649,
972
- columnNumber: 5
973
- }, this), he = /* @__PURE__ */ t("div", { className: "mb-4 flex items-center justify-between", children: [
974
- /* @__PURE__ */ t("div", { className: "flex-1 max-w-lg", children: [
975
- /* @__PURE__ */ t("label", { htmlFor: "search", className: "sr-only", children: "Search" }, void 0, !1, {
976
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
977
- lineNumber: 809,
978
- columnNumber: 9
979
- }, this),
980
- /* @__PURE__ */ t("div", { className: "relative", children: [
981
- /* @__PURE__ */ t("div", { className: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none", children: re && X !== H ? /* @__PURE__ */ t(
982
- "svg",
983
- {
984
- className: "animate-spin h-5 w-5 text-gray-400",
985
- xmlns: "http://www.w3.org/2000/svg",
986
- fill: "none",
987
- viewBox: "0 0 24 24",
988
- children: [
989
- /* @__PURE__ */ t(
990
- "circle",
991
- {
992
- className: "opacity-25",
993
- cx: "12",
994
- cy: "12",
995
- r: "10",
996
- stroke: "currentColor",
997
- strokeWidth: "4"
998
- },
999
- void 0,
1000
- !1,
1001
- {
1002
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1003
- lineNumber: 821,
1004
- columnNumber: 17
1005
- },
1006
- this
1007
- ),
1008
- /* @__PURE__ */ t(
1009
- "path",
1010
- {
1011
- className: "opacity-75",
1012
- fill: "currentColor",
1013
- 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"
1014
- },
1015
- void 0,
1016
- !1,
1017
- {
1018
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1019
- lineNumber: 829,
1020
- columnNumber: 17
1021
- },
1022
- this
1023
- )
1024
- ]
1025
- },
1026
- void 0,
1027
- !0,
1028
- {
1029
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1030
- lineNumber: 815,
1031
- columnNumber: 15
1032
- },
1033
- this
1034
- ) : /* @__PURE__ */ t(
1035
- "svg",
1036
- {
1037
- className: "h-5 w-5 text-gray-400",
1038
- xmlns: "http://www.w3.org/2000/svg",
1039
- viewBox: "0 0 20 20",
1040
- fill: "currentColor",
1041
- "aria-hidden": "true",
1042
- children: /* @__PURE__ */ t(
1043
- "path",
1044
- {
1045
- fillRule: "evenodd",
1046
- 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",
1047
- clipRule: "evenodd"
1048
- },
1049
- void 0,
1050
- !1,
1051
- {
1052
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1053
- lineNumber: 843,
1054
- columnNumber: 17
1055
- },
1056
- this
1057
- )
1058
- },
1059
- void 0,
1060
- !1,
1061
- {
1062
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1063
- lineNumber: 836,
1064
- columnNumber: 15
1065
- },
1066
- this
1067
- ) }, void 0, !1, {
1068
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1069
- lineNumber: 813,
1070
- columnNumber: 11
1071
- }, this),
1072
- /* @__PURE__ */ t(
1073
- "input",
1074
- {
1075
- id: "search",
1076
- name: "search",
1077
- 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",
1078
- placeholder: `Search ${y.length > 0 ? y.map((e) => e.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^./, (s) => s.toUpperCase())).join(", ") : Y(i.name).toLowerCase()}...`,
1079
- type: "search",
1080
- value: A.search || "",
1081
- onChange: (e) => l({ type: "SET_SEARCH", payload: e.target.value })
1082
- },
1083
- void 0,
1084
- !1,
1085
- {
1086
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1087
- lineNumber: 851,
1088
- columnNumber: 11
1089
- },
1090
- this
1091
- ),
1092
- u.length > 0 && /* @__PURE__ */ t("div", { className: "absolute inset-y-0 right-0 flex items-center", children: ue }, void 0, !1, {
1093
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1094
- lineNumber: 861,
1095
- columnNumber: 13
1096
- }, this)
1097
- ] }, void 0, !0, {
1098
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1099
- lineNumber: 812,
1100
- columnNumber: 9
1101
- }, this)
1102
- ] }, void 0, !0, {
1103
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1104
- lineNumber: 808,
1105
- columnNumber: 7
1106
- }, this),
1107
- /* @__PURE__ */ t("div", { className: "ml-4 flex space-x-2", children: [
1108
- /* @__PURE__ */ t(
1109
- "button",
1110
- {
1111
- onClick: () => q(!D),
1112
- 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 ${D || Object.keys(x).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"}`,
1113
- children: [
1114
- /* @__PURE__ */ t("svg", { className: "w-4 h-4 mr-2", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ t(
1115
- "path",
1116
- {
1117
- strokeLinecap: "round",
1118
- strokeLinejoin: "round",
1119
- strokeWidth: 2,
1120
- 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"
1121
- },
1122
- void 0,
1123
- !1,
1124
- {
1125
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1126
- lineNumber: 877,
1127
- columnNumber: 13
1128
- },
1129
- this
1130
- ) }, void 0, !1, {
1131
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1132
- lineNumber: 876,
1133
- columnNumber: 11
1134
- }, this),
1135
- "Filters",
1136
- Object.keys(x).length > 0 && /* @__PURE__ */ t("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(x).length }, void 0, !1, {
1137
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1138
- lineNumber: 886,
1139
- columnNumber: 13
1140
- }, this)
1141
- ]
1142
- },
1143
- void 0,
1144
- !0,
1145
- {
1146
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1147
- lineNumber: 868,
1148
- columnNumber: 9
1149
- },
1150
- this
1151
- ),
1152
- ce,
1153
- /* @__PURE__ */ t(
1154
- $,
1155
- {
1156
- to: W,
1157
- 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",
1158
- children: "Create New"
1159
- },
1160
- void 0,
1161
- !1,
1162
- {
1163
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1164
- lineNumber: 892,
1165
- columnNumber: 9
1166
- },
1167
- this
1168
- )
1169
- ] }, void 0, !0, {
1170
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1171
- lineNumber: 867,
1172
- columnNumber: 7
1173
- }, this)
1174
- ] }, void 0, !0, {
1175
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
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,
1176
710
  lineNumber: 807,
1177
711
  columnNumber: 5
1178
- }, this);
1179
- return /* @__PURE__ */ t(K, { children: [
1180
- be,
1181
- he,
1182
- /* @__PURE__ */ t(
1183
- pe,
1184
- {
1185
- data: me,
1186
- path: W.replace("/create", ""),
1187
- fields: _.length > 0 ? _ : c,
1188
- pagination: oe,
1189
- setSkip: (e) => l({ type: "SET_SKIP", payload: e }),
1190
- sort: A.sort,
1191
- setSort: ie
1192
- },
1193
- void 0,
1194
- !1,
1195
- {
1196
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1197
- lineNumber: 906,
1198
- columnNumber: 7
1199
- },
1200
- this
1201
- )
1202
- ] }, void 0, !0, {
1203
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataListPage.tsx",
1204
- lineNumber: 903,
1205
- columnNumber: 5
1206
- }, 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
+ } }));
1207
792
  }
1208
- function Ge({ error: v }) {
1209
- return /* @__PURE__ */ t(fe, { error: v }, void 0, !1, {
1210
- 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,
1211
798
  lineNumber: 920,
1212
799
  columnNumber: 10
1213
- }, this);
800
+ } });
1214
801
  }
1215
802
  export {
1216
- Ge as AdminDataErrorBoundary,
1217
- Me as AdminDataListPage
803
+ AdminDataErrorBoundary,
804
+ AdminDataListPage
1218
805
  };