@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,903 +1,764 @@
1
- import { jsxDEV as e } from "react/jsx-dev-runtime";
2
- import { gql as y } from "@apollo/client";
3
- import { useQuery as Z, useMutation as T } from "@apollo/client/react";
4
- import { loadDevMessages as Y, loadErrorMessages as K } from "@apollo/client/dev";
5
- import { ExclamationCircleIcon as p, CheckCircleIcon as H } from "@heroicons/react/24/outline";
6
- import { TrashIcon as J } from "@heroicons/react/24/solid";
7
- import { useAdminDataContext as F } from "../context/AdminDataContext.js";
8
- import { ErrorBoundary as W } from "@nestledjs/shared-components";
9
- import { Form as X } from "@nestledjs/forms";
10
- import { useState as C, useMemo as A, useEffect as S } from "react";
11
- import { useParams as ee, Link as x, useNavigate as te } from "react-router";
12
- import { getAdminDocuments as ae, buildFormFields as se, cleanFormInput as ie } from "../utils/graphql-utils.js";
13
- function M(s) {
14
- return s ? s.charAt(0).toLowerCase() + s.slice(1) : "";
1
+ import { gql } from "@apollo/client";
2
+ import { useQuery, useMutation } from "@apollo/client/react";
3
+ import { loadDevMessages, loadErrorMessages } from "@apollo/client/dev";
4
+ import { ExclamationCircleIcon, CheckCircleIcon } from "@heroicons/react/24/outline";
5
+ import { TrashIcon } from "@heroicons/react/24/solid";
6
+ import { useAdminDataContext } from "../context/AdminDataContext.js";
7
+ import { ErrorBoundary } from "@nestledjs/shared-components";
8
+ import { Form } from "@nestledjs/forms";
9
+ import { useState, useMemo, useEffect } from "react";
10
+ import { useParams, Link, useNavigate } from "react-router";
11
+ import { getAdminDocuments, buildFormFields, cleanFormInput } from "../utils/graphql-utils.js";
12
+ var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx";
13
+ function toLowerCamelCase(name) {
14
+ if (!name) return "";
15
+ return name.charAt(0).toLowerCase() + name.slice(1);
15
16
  }
16
- function le(s) {
17
- return `${M(s)}Id`;
17
+ function getModelIdVariableName(modelName) {
18
+ return `${toLowerCamelCase(modelName)}Id`;
18
19
  }
19
- function re(s) {
20
- return M(s);
20
+ function getModelResponseFieldName(modelName) {
21
+ return toLowerCamelCase(modelName);
21
22
  }
22
- function u(s) {
23
- return s.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^./, (d) => d.toUpperCase());
23
+ function toReadableText(text) {
24
+ return text.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^./, (str) => str.toUpperCase());
24
25
  }
25
- process.env.NODE_ENV !== "production" && (Y(), K());
26
- const B = (s) => !s || typeof s != "string" ? "" : s.replace(/[<>"'%;()&+]/g, "").replace(/javascript:/gi, "").replace(/on\w+\s*=/gi, "").trim().substring(0, 100), I = (s) => s.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(), ne = (s) => {
27
- if (!s) return null;
28
- const d = B(s);
29
- return d ? /^[a-zA-Z0-9_-]+$/.test(d) ? d : (console.warn(`[Security] Invalid ID format attempted: ${s}`), null) : null;
26
+ if (process.env.NODE_ENV !== "production") {
27
+ loadDevMessages();
28
+ loadErrorMessages();
29
+ }
30
+ const sanitizeInput = (input) => {
31
+ if (!input || typeof input !== "string") return "";
32
+ return input.replace(/[<>"'%;()&+]/g, "").replace(/javascript:/gi, "").replace(/on\w+\s*=/gi, "").trim().substring(0, 100);
33
+ };
34
+ const toKebabCase = (str) => {
35
+ return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
36
+ };
37
+ const validateId = (id) => {
38
+ if (!id) return null;
39
+ const sanitized = sanitizeInput(id);
40
+ if (!sanitized) return null;
41
+ if (!/^[a-zA-Z0-9_-]+$/.test(sanitized)) {
42
+ console.warn(`[Security] Invalid ID format attempted: ${id}`);
43
+ return null;
44
+ }
45
+ return sanitized;
30
46
  };
31
- function Pe() {
32
- const { dataType: s, id: d } = ee(), { databaseModels: c, basePath: j = "/admin/data", formTheme: U } = F(), P = (i) => c.find((g) => g.name === i), m = ((i) => {
33
- if (!i) return null;
34
- const g = B(i);
35
- if (!g) return null;
36
- const v = g.split("-").map((f) => f.charAt(0).toUpperCase() + f.slice(1).toLowerCase()).join("");
37
- return c.find((f) => f.name === v) ? v : (console.warn(`[Security] Invalid dataType attempted: ${i}`), null);
38
- })(s), r = ne(d), h = !m || !r, D = m ? P(m) : null, E = m && r && !D;
39
- return h ? /* @__PURE__ */ e("div", { className: "flex flex-col justify-center py-12", children: /* @__PURE__ */ e("div", { className: "mt-8 mx-auto w-full max-w-md", children: /* @__PURE__ */ e("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ e("div", { className: "text-center", children: [
40
- /* @__PURE__ */ e(p, { className: "mx-auto h-12 w-12 text-red-400" }, void 0, !1, {
41
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
47
+ function AdminDataEditPage() {
48
+ const {
49
+ dataType,
50
+ id
51
+ } = useParams();
52
+ const {
53
+ databaseModels,
54
+ basePath = "/admin/data",
55
+ formTheme
56
+ } = useAdminDataContext();
57
+ const findModelByName = (name) => {
58
+ return databaseModels.find((model2) => model2.name === name);
59
+ };
60
+ const validateDataType = (dataType2) => {
61
+ if (!dataType2) return null;
62
+ const sanitized = sanitizeInput(dataType2);
63
+ if (!sanitized) return null;
64
+ const properCaseDataType = sanitized.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join("");
65
+ const model2 = databaseModels.find((m) => m.name === properCaseDataType);
66
+ if (!model2) {
67
+ console.warn(`[Security] Invalid dataType attempted: ${dataType2}`);
68
+ return null;
69
+ }
70
+ return properCaseDataType;
71
+ };
72
+ const validatedDataType = validateDataType(dataType);
73
+ const validatedId = validateId(id);
74
+ const shouldShowUnauthorized = !validatedDataType || !validatedId;
75
+ const model = validatedDataType ? findModelByName(validatedDataType) : null;
76
+ const shouldShowModelNotFound = validatedDataType && validatedId && !model;
77
+ if (shouldShowUnauthorized) {
78
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
79
+ fileName: _jsxFileName,
80
+ lineNumber: 118,
81
+ columnNumber: 7
82
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
83
+ fileName: _jsxFileName,
84
+ lineNumber: 119,
85
+ columnNumber: 9
86
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
87
+ fileName: _jsxFileName,
88
+ lineNumber: 120,
89
+ columnNumber: 11
90
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
91
+ fileName: _jsxFileName,
92
+ lineNumber: 121,
93
+ columnNumber: 13
94
+ } }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-red-400", __self: this, __source: {
95
+ fileName: _jsxFileName,
42
96
  lineNumber: 122,
43
97
  columnNumber: 15
44
- }, this),
45
- /* @__PURE__ */ e("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", children: "Unauthorized" }, void 0, !1, {
46
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
98
+ } }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
99
+ fileName: _jsxFileName,
47
100
  lineNumber: 123,
48
101
  columnNumber: 15
49
- }, this),
50
- /* @__PURE__ */ e("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", children: "Invalid data type, ID, or insufficient permissions." }, void 0, !1, {
51
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
102
+ } }, "Unauthorized"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
103
+ fileName: _jsxFileName,
52
104
  lineNumber: 124,
53
105
  columnNumber: 15
54
- }, this),
55
- /* @__PURE__ */ e("div", { className: "mt-6", children: /* @__PURE__ */ e(
56
- x,
57
- {
58
- to: j,
59
- 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",
60
- children: "Return to Data Browser"
61
- },
62
- void 0,
63
- !1,
64
- {
65
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
66
- lineNumber: 128,
67
- columnNumber: 17
68
- },
69
- this
70
- ) }, void 0, !1, {
71
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
106
+ } }, "Invalid data type, ID, or insufficient permissions."), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
107
+ fileName: _jsxFileName,
72
108
  lineNumber: 127,
73
109
  columnNumber: 15
74
- }, this)
75
- ] }, void 0, !0, {
76
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
77
- lineNumber: 121,
78
- columnNumber: 13
79
- }, this) }, void 0, !1, {
80
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
81
- lineNumber: 120,
82
- columnNumber: 11
83
- }, this) }, void 0, !1, {
84
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
85
- lineNumber: 119,
86
- columnNumber: 9
87
- }, this) }, void 0, !1, {
88
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
89
- lineNumber: 118,
90
- columnNumber: 7
91
- }, this) : E ? /* @__PURE__ */ e("div", { className: "flex flex-col justify-center py-12", children: /* @__PURE__ */ e("div", { className: "mt-8 mx-auto w-full max-w-md", children: /* @__PURE__ */ e("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ e("div", { className: "text-center", children: [
92
- /* @__PURE__ */ e(p, { className: "mx-auto h-12 w-12 text-yellow-400" }, void 0, !1, {
93
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
110
+ } }, /* @__PURE__ */ React.createElement(Link, { to: basePath, className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
111
+ fileName: _jsxFileName,
112
+ lineNumber: 128,
113
+ columnNumber: 17
114
+ } }, "Return to Data Browser"))))));
115
+ }
116
+ if (shouldShowModelNotFound) {
117
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
118
+ fileName: _jsxFileName,
119
+ lineNumber: 144,
120
+ columnNumber: 7
121
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
122
+ fileName: _jsxFileName,
123
+ lineNumber: 145,
124
+ columnNumber: 9
125
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
126
+ fileName: _jsxFileName,
127
+ lineNumber: 146,
128
+ columnNumber: 11
129
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
130
+ fileName: _jsxFileName,
131
+ lineNumber: 147,
132
+ columnNumber: 13
133
+ } }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-yellow-400", __self: this, __source: {
134
+ fileName: _jsxFileName,
94
135
  lineNumber: 148,
95
136
  columnNumber: 15
96
- }, this),
97
- /* @__PURE__ */ e("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", children: "Model Not Found" }, void 0, !1, {
98
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
137
+ } }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
138
+ fileName: _jsxFileName,
99
139
  lineNumber: 149,
100
140
  columnNumber: 15
101
- }, this),
102
- /* @__PURE__ */ e("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", children: [
103
- 'The data model for "',
104
- m,
105
- '" could not be found.'
106
- ] }, void 0, !0, {
107
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
141
+ } }, "Model Not Found"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
142
+ fileName: _jsxFileName,
108
143
  lineNumber: 150,
109
144
  columnNumber: 15
110
- }, this),
111
- /* @__PURE__ */ e("div", { className: "mt-6", children: /* @__PURE__ */ e(
112
- x,
113
- {
114
- to: j,
115
- 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",
116
- children: "Return to Data Browser"
117
- },
118
- void 0,
119
- !1,
120
- {
121
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
122
- lineNumber: 154,
123
- columnNumber: 17
124
- },
125
- this
126
- ) }, void 0, !1, {
127
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
145
+ } }, 'The data model for "', validatedDataType, '" could not be found.'), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
146
+ fileName: _jsxFileName,
128
147
  lineNumber: 153,
129
148
  columnNumber: 15
130
- }, this)
131
- ] }, void 0, !0, {
132
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
133
- lineNumber: 147,
134
- columnNumber: 13
135
- }, this) }, void 0, !1, {
136
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
137
- lineNumber: 146,
138
- columnNumber: 11
139
- }, this) }, void 0, !1, {
140
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
141
- lineNumber: 145,
142
- columnNumber: 9
143
- }, this) }, void 0, !1, {
144
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
145
- lineNumber: 144,
146
- columnNumber: 7
147
- }, this) : /* @__PURE__ */ e(de, { model: D, id: r, basePath: j, formTheme: U }, void 0, !1, {
148
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
149
+ } }, /* @__PURE__ */ React.createElement(Link, { to: basePath, className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
150
+ fileName: _jsxFileName,
151
+ lineNumber: 154,
152
+ columnNumber: 17
153
+ } }, "Return to Data Browser"))))));
154
+ }
155
+ return /* @__PURE__ */ React.createElement(AdminDataEditPageContent, { model, id: validatedId, basePath, formTheme, __self: this, __source: {
156
+ fileName: _jsxFileName,
149
157
  lineNumber: 169,
150
158
  columnNumber: 10
151
- }, this);
159
+ } });
152
160
  }
153
- function de({ model: s, id: d, basePath: c, formTheme: j }) {
154
- const U = te(), { sdk: P } = F(), [n, m] = C({ status: "idle" }), [r, h] = C({ status: "idle" }), [D, E] = C(!1), i = A(() => {
161
+ function AdminDataEditPageContent({
162
+ model,
163
+ id,
164
+ basePath,
165
+ formTheme
166
+ }) {
167
+ const navigate = useNavigate();
168
+ const {
169
+ sdk
170
+ } = useAdminDataContext();
171
+ const [submissionState, setSubmissionState] = useState({
172
+ status: "idle"
173
+ });
174
+ const [deleteState, setDeleteState] = useState({
175
+ status: "idle"
176
+ });
177
+ const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);
178
+ const documents = useMemo(() => {
155
179
  try {
156
- return ae(P, s);
157
- } catch (l) {
158
- return console.error("[AdminDataEditPage] Error getting documents:", l), null;
180
+ return getAdminDocuments(sdk, model);
181
+ } catch (error2) {
182
+ console.error("[AdminDataEditPage] Error getting documents:", error2);
183
+ return null;
159
184
  }
160
- }, [P, s]), g = A(() => {
161
- var l, a;
162
- if (!(i != null && i.query)) return null;
185
+ }, [sdk, model]);
186
+ const QUERY = useMemo(() => {
187
+ var _a, _b;
188
+ if (!(documents == null ? void 0 : documents.query)) return null;
163
189
  try {
164
- return (l = i.query) != null && l.definitions && ((a = i.query) != null && a.loc) ? i.query : y(i.query);
165
- } catch (t) {
166
- return console.error("[AdminDataEditPage] Error parsing QUERY:", t), null;
190
+ if (((_a = documents.query) == null ? void 0 : _a.definitions) && ((_b = documents.query) == null ? void 0 : _b.loc)) {
191
+ return documents.query;
192
+ }
193
+ return gql(documents.query);
194
+ } catch (error2) {
195
+ console.error("[AdminDataEditPage] Error parsing QUERY:", error2);
196
+ return null;
167
197
  }
168
- }, [i]), v = A(() => {
169
- var l, a;
170
- if (!(i != null && i.update)) return null;
198
+ }, [documents]);
199
+ const UPDATE_MUTATION = useMemo(() => {
200
+ var _a, _b;
201
+ if (!(documents == null ? void 0 : documents.update)) return null;
171
202
  try {
172
- return (l = i.update) != null && l.definitions && ((a = i.update) != null && a.loc) ? i.update : y(i.update);
173
- } catch (t) {
174
- return console.error("[AdminDataEditPage] Error parsing UPDATE mutation:", t), null;
203
+ if (((_a = documents.update) == null ? void 0 : _a.definitions) && ((_b = documents.update) == null ? void 0 : _b.loc)) {
204
+ return documents.update;
205
+ }
206
+ return gql(documents.update);
207
+ } catch (error2) {
208
+ console.error("[AdminDataEditPage] Error parsing UPDATE mutation:", error2);
209
+ return null;
175
210
  }
176
- }, [i]), _ = A(() => {
177
- var l, a;
178
- if (!(i != null && i.delete)) return null;
211
+ }, [documents]);
212
+ const DELETE_MUTATION = useMemo(() => {
213
+ var _a, _b;
214
+ if (!(documents == null ? void 0 : documents.delete)) return null;
179
215
  try {
180
- return (l = i.delete) != null && l.definitions && ((a = i.delete) != null && a.loc) ? i.delete : y(i.delete);
181
- } catch (t) {
182
- return console.error("[AdminDataEditPage] Error parsing DELETE mutation:", t), null;
216
+ if (((_a = documents.delete) == null ? void 0 : _a.definitions) && ((_b = documents.delete) == null ? void 0 : _b.loc)) {
217
+ return documents.delete;
218
+ }
219
+ return gql(documents.delete);
220
+ } catch (error2) {
221
+ console.error("[AdminDataEditPage] Error parsing DELETE mutation:", error2);
222
+ return null;
183
223
  }
184
- }, [i]), f = le(s.name), R = re(s.name), { data: k, loading: z, error: L, refetch: $ } = Z(
185
- g || y`
224
+ }, [documents]);
225
+ const idVariableName = getModelIdVariableName(model.name);
226
+ const responseFieldName = getModelResponseFieldName(model.name);
227
+ const {
228
+ data,
229
+ loading,
230
+ error,
231
+ refetch
232
+ } = useQuery(QUERY || gql`
186
233
  query PlaceholderQuery {
187
234
  __typename
188
235
  }
189
- `,
190
- {
191
- variables: { [f]: d },
192
- errorPolicy: "all",
193
- skip: !g || !d
194
- }
195
- ), [O] = T(
196
- v || y`
236
+ `, {
237
+ variables: {
238
+ [idVariableName]: id
239
+ },
240
+ errorPolicy: "all",
241
+ skip: !QUERY || !id
242
+ });
243
+ const [updateMutation] = useMutation(UPDATE_MUTATION || gql`
197
244
  mutation PlaceholderUpdate {
198
245
  __typename
199
246
  }
200
- `
201
- ), [Q] = T(
202
- _ || y`
247
+ `);
248
+ const [deleteMutation] = useMutation(DELETE_MUTATION || gql`
203
249
  mutation PlaceholderDelete {
204
250
  __typename
205
251
  }
206
- `
207
- );
208
- if (S(() => {
209
- if (n.status === "error") {
210
- const l = setTimeout(() => {
211
- m({ status: "idle" });
252
+ `);
253
+ useEffect(() => {
254
+ if (submissionState.status === "error") {
255
+ const timer = setTimeout(() => {
256
+ setSubmissionState({
257
+ status: "idle"
258
+ });
212
259
  }, 5e3);
213
- return () => clearTimeout(l);
260
+ return () => clearTimeout(timer);
214
261
  }
215
- }, [n.status]), S(() => {
216
- if (r.status === "error") {
217
- const l = setTimeout(() => {
218
- h({ status: "idle" });
262
+ }, [submissionState.status]);
263
+ useEffect(() => {
264
+ if (deleteState.status === "error") {
265
+ const timer = setTimeout(() => {
266
+ setDeleteState({
267
+ status: "idle"
268
+ });
219
269
  }, 5e3);
220
- return () => clearTimeout(l);
270
+ return () => clearTimeout(timer);
221
271
  }
222
- }, [r.status]), !i || !g || !v || !_)
223
- return /* @__PURE__ */ e("div", { className: "flex flex-col justify-center py-12", children: /* @__PURE__ */ e("div", { className: "mt-8 mx-auto w-full max-w-2xl", children: /* @__PURE__ */ e("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ e("div", { className: "text-center", children: [
224
- /* @__PURE__ */ e(p, { className: "mx-auto h-12 w-12 text-red-400" }, void 0, !1, {
225
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
226
- lineNumber: 309,
227
- columnNumber: 15
228
- }, this),
229
- /* @__PURE__ */ e("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", children: "GraphQL Schema Error" }, void 0, !1, {
230
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
231
- lineNumber: 310,
232
- columnNumber: 15
233
- }, this),
234
- /* @__PURE__ */ e("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", children: "Unable to load GraphQL documents for this model. Please ensure the API server is running and the GraphQL schema is up to date." }, void 0, !1, {
235
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
236
- lineNumber: 311,
237
- columnNumber: 15
238
- }, this),
239
- /* @__PURE__ */ e("div", { className: "mt-6", children: /* @__PURE__ */ e(
240
- x,
241
- {
242
- to: c,
243
- 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",
244
- children: "Return to Data Browser"
245
- },
246
- void 0,
247
- !1,
248
- {
249
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
250
- lineNumber: 316,
251
- columnNumber: 17
252
- },
253
- this
254
- ) }, void 0, !1, {
255
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
256
- lineNumber: 315,
257
- columnNumber: 15
258
- }, this)
259
- ] }, void 0, !0, {
260
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
261
- lineNumber: 308,
262
- columnNumber: 13
263
- }, this) }, void 0, !1, {
264
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
265
- lineNumber: 307,
266
- columnNumber: 11
267
- }, this) }, void 0, !1, {
268
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
269
- lineNumber: 306,
270
- columnNumber: 9
271
- }, this) }, void 0, !1, {
272
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
272
+ }, [deleteState.status]);
273
+ if (!documents || !QUERY || !UPDATE_MUTATION || !DELETE_MUTATION) {
274
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
275
+ fileName: _jsxFileName,
273
276
  lineNumber: 305,
274
277
  columnNumber: 7
275
- }, this);
276
- if (L)
277
- return /* @__PURE__ */ e("div", { className: "flex flex-col justify-center py-12", children: /* @__PURE__ */ e("div", { className: "mt-8 mx-auto w-full max-w-md", children: /* @__PURE__ */ e("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ e("div", { className: "text-center", children: [
278
- /* @__PURE__ */ e(p, { className: "mx-auto h-12 w-12 text-red-400" }, void 0, !1, {
279
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
280
- lineNumber: 337,
281
- columnNumber: 15
282
- }, this),
283
- /* @__PURE__ */ e("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", children: "Error Loading Data" }, void 0, !1, {
284
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
285
- lineNumber: 338,
286
- columnNumber: 15
287
- }, this),
288
- /* @__PURE__ */ e("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", children: L.message }, void 0, !1, {
289
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
290
- lineNumber: 339,
291
- columnNumber: 15
292
- }, this),
293
- /* @__PURE__ */ e("div", { className: "mt-6 space-y-3", children: [
294
- /* @__PURE__ */ e(
295
- "button",
296
- {
297
- onClick: () => $(),
298
- 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",
299
- children: "Try Again"
300
- },
301
- void 0,
302
- !1,
303
- {
304
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
305
- lineNumber: 341,
306
- columnNumber: 17
307
- },
308
- this
309
- ),
310
- /* @__PURE__ */ e(
311
- x,
312
- {
313
- to: `${c}/${I(s.pluralName)}`,
314
- 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",
315
- children: "Back to List"
316
- },
317
- void 0,
318
- !1,
319
- {
320
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
321
- lineNumber: 347,
322
- columnNumber: 17
323
- },
324
- this
325
- )
326
- ] }, void 0, !0, {
327
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
328
- lineNumber: 340,
329
- columnNumber: 15
330
- }, this)
331
- ] }, void 0, !0, {
332
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
333
- lineNumber: 336,
334
- columnNumber: 13
335
- }, this) }, void 0, !1, {
336
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
337
- lineNumber: 335,
338
- columnNumber: 11
339
- }, this) }, void 0, !1, {
340
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
341
- lineNumber: 334,
278
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-2xl", __self: this, __source: {
279
+ fileName: _jsxFileName,
280
+ lineNumber: 306,
342
281
  columnNumber: 9
343
- }, this) }, void 0, !1, {
344
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
282
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
283
+ fileName: _jsxFileName,
284
+ lineNumber: 307,
285
+ columnNumber: 11
286
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
287
+ fileName: _jsxFileName,
288
+ lineNumber: 308,
289
+ columnNumber: 13
290
+ } }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-red-400", __self: this, __source: {
291
+ fileName: _jsxFileName,
292
+ lineNumber: 309,
293
+ columnNumber: 15
294
+ } }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
295
+ fileName: _jsxFileName,
296
+ lineNumber: 310,
297
+ columnNumber: 15
298
+ } }, "GraphQL Schema Error"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
299
+ fileName: _jsxFileName,
300
+ lineNumber: 311,
301
+ columnNumber: 15
302
+ } }, "Unable to load GraphQL documents for this model. Please ensure the API server is running and the GraphQL schema is up to date."), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
303
+ fileName: _jsxFileName,
304
+ lineNumber: 315,
305
+ columnNumber: 15
306
+ } }, /* @__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: {
307
+ fileName: _jsxFileName,
308
+ lineNumber: 316,
309
+ columnNumber: 17
310
+ } }, "Return to Data Browser"))))));
311
+ }
312
+ if (error) {
313
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
314
+ fileName: _jsxFileName,
345
315
  lineNumber: 333,
346
316
  columnNumber: 7
347
- }, this);
348
- if (z)
349
- return /* @__PURE__ */ e("div", { className: "flex flex-col justify-center py-12", children: /* @__PURE__ */ e("div", { className: "mt-8 mx-auto w-full max-w-md", children: /* @__PURE__ */ e("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ e("div", { className: "text-center", children: [
350
- /* @__PURE__ */ e("div", { className: "mx-auto h-12 w-12 border-4 border-green-web border-t-transparent rounded-full animate-spin" }, void 0, !1, {
351
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
352
- lineNumber: 368,
353
- columnNumber: 15
354
- }, this),
355
- /* @__PURE__ */ e("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", children: "Loading..." }, void 0, !1, {
356
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
357
- lineNumber: 369,
358
- columnNumber: 15
359
- }, this),
360
- /* @__PURE__ */ e("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", children: [
361
- "Loading ",
362
- u(s.name),
363
- " data..."
364
- ] }, void 0, !0, {
365
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
366
- lineNumber: 370,
367
- columnNumber: 15
368
- }, this)
369
- ] }, void 0, !0, {
370
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
371
- lineNumber: 367,
372
- columnNumber: 13
373
- }, this) }, void 0, !1, {
374
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
375
- lineNumber: 366,
376
- columnNumber: 11
377
- }, this) }, void 0, !1, {
378
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
379
- lineNumber: 365,
317
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
318
+ fileName: _jsxFileName,
319
+ lineNumber: 334,
380
320
  columnNumber: 9
381
- }, this) }, void 0, !1, {
382
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
321
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
322
+ fileName: _jsxFileName,
323
+ lineNumber: 335,
324
+ columnNumber: 11
325
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
326
+ fileName: _jsxFileName,
327
+ lineNumber: 336,
328
+ columnNumber: 13
329
+ } }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-red-400", __self: this, __source: {
330
+ fileName: _jsxFileName,
331
+ lineNumber: 337,
332
+ columnNumber: 15
333
+ } }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
334
+ fileName: _jsxFileName,
335
+ lineNumber: 338,
336
+ columnNumber: 15
337
+ } }, "Error Loading Data"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
338
+ fileName: _jsxFileName,
339
+ lineNumber: 339,
340
+ columnNumber: 15
341
+ } }, error.message), /* @__PURE__ */ React.createElement("div", { className: "mt-6 space-y-3", __self: this, __source: {
342
+ fileName: _jsxFileName,
343
+ lineNumber: 340,
344
+ columnNumber: 15
345
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: () => refetch(), className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
346
+ fileName: _jsxFileName,
347
+ lineNumber: 341,
348
+ columnNumber: 17
349
+ } }, "Try Again"), /* @__PURE__ */ React.createElement(Link, { to: `${basePath}/${toKebabCase(model.pluralName)}`, className: "w-full flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
350
+ fileName: _jsxFileName,
351
+ lineNumber: 347,
352
+ columnNumber: 17
353
+ } }, "Back to List"))))));
354
+ }
355
+ if (loading) {
356
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
357
+ fileName: _jsxFileName,
383
358
  lineNumber: 364,
384
359
  columnNumber: 7
385
- }, this);
386
- const w = k == null ? void 0 : k[R];
387
- if (!w)
388
- return /* @__PURE__ */ e("div", { className: "flex flex-col justify-center py-12", children: /* @__PURE__ */ e("div", { className: "mt-8 mx-auto w-full max-w-md", children: /* @__PURE__ */ e("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", children: /* @__PURE__ */ e("div", { className: "text-center", children: [
389
- /* @__PURE__ */ e(p, { className: "mx-auto h-12 w-12 text-yellow-400" }, void 0, !1, {
390
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
391
- lineNumber: 389,
392
- columnNumber: 15
393
- }, this),
394
- /* @__PURE__ */ e("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", children: "Not Found" }, void 0, !1, {
395
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
396
- lineNumber: 390,
397
- columnNumber: 15
398
- }, this),
399
- /* @__PURE__ */ e("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", children: [
400
- "The ",
401
- u(s.name),
402
- " you're looking for doesn't exist or has been deleted."
403
- ] }, void 0, !0, {
404
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
405
- lineNumber: 391,
406
- columnNumber: 15
407
- }, this),
408
- /* @__PURE__ */ e("div", { className: "mt-6", children: /* @__PURE__ */ e(
409
- x,
410
- {
411
- to: `${c}/${I(s.pluralName)}`,
412
- 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",
413
- children: "Back to List"
414
- },
415
- void 0,
416
- !1,
417
- {
418
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
419
- lineNumber: 396,
420
- columnNumber: 17
421
- },
422
- this
423
- ) }, void 0, !1, {
424
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
425
- lineNumber: 395,
426
- columnNumber: 15
427
- }, this)
428
- ] }, void 0, !0, {
429
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
430
- lineNumber: 388,
431
- columnNumber: 13
432
- }, this) }, void 0, !1, {
433
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
434
- lineNumber: 387,
435
- columnNumber: 11
436
- }, this) }, void 0, !1, {
437
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
438
- lineNumber: 386,
360
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
361
+ fileName: _jsxFileName,
362
+ lineNumber: 365,
439
363
  columnNumber: 9
440
- }, this) }, void 0, !1, {
441
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
364
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
365
+ fileName: _jsxFileName,
366
+ lineNumber: 366,
367
+ columnNumber: 11
368
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
369
+ fileName: _jsxFileName,
370
+ lineNumber: 367,
371
+ columnNumber: 13
372
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mx-auto h-12 w-12 border-4 border-green-web border-t-transparent rounded-full animate-spin", __self: this, __source: {
373
+ fileName: _jsxFileName,
374
+ lineNumber: 368,
375
+ columnNumber: 15
376
+ } }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
377
+ fileName: _jsxFileName,
378
+ lineNumber: 369,
379
+ columnNumber: 15
380
+ } }, "Loading..."), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
381
+ fileName: _jsxFileName,
382
+ lineNumber: 370,
383
+ columnNumber: 15
384
+ } }, "Loading ", toReadableText(model.name), " data...")))));
385
+ }
386
+ const item = data == null ? void 0 : data[responseFieldName];
387
+ if (!item) {
388
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
389
+ fileName: _jsxFileName,
442
390
  lineNumber: 385,
443
391
  columnNumber: 7
444
- }, this);
445
- const V = se(P, s, "update"), o = {};
446
- if (w) {
447
- s.fields.filter((a) => (a.isId, !(a.isReadOnly || a.isGenerated || a.isUpdatedAt || a.name === "createdAt" || a.relationName && a.isList))).forEach((a) => {
448
- var N;
449
- let t = w[a.name];
450
- if (a.relationName && !a.isList) {
451
- const b = ((N = a.relationFromFields) == null ? void 0 : N[0]) || a.name;
452
- t = w[b], t && typeof t == "object" && (t = t.id || ""), o[b] = t || "";
392
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
393
+ fileName: _jsxFileName,
394
+ lineNumber: 386,
395
+ columnNumber: 9
396
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
397
+ fileName: _jsxFileName,
398
+ lineNumber: 387,
399
+ columnNumber: 11
400
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
401
+ fileName: _jsxFileName,
402
+ lineNumber: 388,
403
+ columnNumber: 13
404
+ } }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-yellow-400", __self: this, __source: {
405
+ fileName: _jsxFileName,
406
+ lineNumber: 389,
407
+ columnNumber: 15
408
+ } }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
409
+ fileName: _jsxFileName,
410
+ lineNumber: 390,
411
+ columnNumber: 15
412
+ } }, "Not Found"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
413
+ fileName: _jsxFileName,
414
+ lineNumber: 391,
415
+ columnNumber: 15
416
+ } }, "The ", toReadableText(model.name), " you're looking for doesn't exist or has been deleted."), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
417
+ fileName: _jsxFileName,
418
+ lineNumber: 395,
419
+ columnNumber: 15
420
+ } }, /* @__PURE__ */ React.createElement(Link, { to: `${basePath}/${toKebabCase(model.pluralName)}`, className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
421
+ fileName: _jsxFileName,
422
+ lineNumber: 396,
423
+ columnNumber: 17
424
+ } }, "Back to List"))))));
425
+ }
426
+ const formFields = buildFormFields(sdk, model, "update");
427
+ const initialValues = {};
428
+ if (item) {
429
+ const editableFields = model.fields.filter((field) => {
430
+ if (field.isId && false) ;
431
+ if (field.isReadOnly || field.isGenerated) return false;
432
+ if (field.isUpdatedAt || field.name === "createdAt") return false;
433
+ if (field.relationName && field.isList) return false;
434
+ return true;
435
+ });
436
+ editableFields.forEach((field) => {
437
+ var _a;
438
+ let value = item[field.name];
439
+ if (field.relationName && !field.isList) {
440
+ const relationFieldName = ((_a = field.relationFromFields) == null ? void 0 : _a[0]) || field.name;
441
+ value = item[relationFieldName];
442
+ if (value && typeof value === "object") {
443
+ value = value.id || "";
444
+ }
445
+ initialValues[relationFieldName] = value || "";
453
446
  } else {
454
- if (a.type.toLowerCase() === "datetime" || a.type.toLowerCase() === "date")
455
- if (t != null && t !== "")
447
+ if (field.type.toLowerCase() === "datetime" || field.type.toLowerCase() === "date") {
448
+ if (value !== null && value !== void 0 && value !== "") {
456
449
  try {
457
- const b = t instanceof Date ? t : new Date(t);
458
- a.type.toLowerCase() === "date" ? t = b.toISOString().split("T")[0] : t = b.toISOString().substring(0, 16);
459
- } catch (b) {
460
- console.warn(`Failed to convert date value for field ${a.name}:`, b), t = "";
450
+ const dateValue = value instanceof Date ? value : new Date(value);
451
+ if (field.type.toLowerCase() === "date") {
452
+ value = dateValue.toISOString().split("T")[0];
453
+ } else {
454
+ const isoString = dateValue.toISOString();
455
+ value = isoString.substring(0, 16);
456
+ }
457
+ } catch (e) {
458
+ console.warn(`Failed to convert date value for field ${field.name}:`, e);
459
+ value = "";
461
460
  }
462
- else
463
- t = "";
464
- t === null && a.type.toLowerCase() !== "boolean" && (t = ""), a.type.toLowerCase() === "boolean" && (t = !!t), t !== null && typeof t == "object" && (console.warn(`Field ${a.name} has object value, converting to string:`, t), typeof t == "object" && "id" in t ? t = t.id : t = ""), o[a.name] = t;
461
+ } else {
462
+ value = "";
463
+ }
464
+ }
465
+ if (value === null && field.type.toLowerCase() !== "boolean") {
466
+ value = "";
467
+ }
468
+ if (field.type.toLowerCase() === "boolean") {
469
+ value = Boolean(value);
470
+ }
471
+ if (value !== null && typeof value === "object") {
472
+ console.warn(`Field ${field.name} has object value, converting to string:`, value);
473
+ if (typeof value === "object" && "id" in value) {
474
+ value = value.id;
475
+ } else {
476
+ value = "";
477
+ }
478
+ }
479
+ initialValues[field.name] = value;
465
480
  }
466
481
  });
467
- for (const [a, t] of Object.entries(o)) {
468
- if (t === void 0) {
469
- console.warn(`[AdminDataEditPage] Found undefined value for field ${a}, converting to empty string`), o[a] = "";
482
+ for (const [key, value] of Object.entries(initialValues)) {
483
+ if (value === void 0) {
484
+ console.warn(`[AdminDataEditPage] Found undefined value for field ${key}, converting to empty string`);
485
+ initialValues[key] = "";
486
+ continue;
487
+ }
488
+ if (value === null) {
470
489
  continue;
471
490
  }
472
- if (t !== null && typeof t == "object")
473
- if (console.warn(`[AdminDataEditPage] Found non-primitive value for field ${a}, converting:`, t), "id" in t && typeof t.id == "string")
474
- o[a] = t.id;
475
- else if (t instanceof Date) {
476
- const N = s.fields.find((b) => b.name === a);
477
- o[a] = (N == null ? void 0 : N.type.toLowerCase()) === "date" ? t.toISOString().split("T")[0] : t.toISOString();
478
- } else
479
- o[a] = "";
491
+ if (typeof value !== "object") {
492
+ continue;
493
+ }
494
+ console.warn(`[AdminDataEditPage] Found non-primitive value for field ${key}, converting:`, value);
495
+ if ("id" in value && typeof value.id === "string") {
496
+ initialValues[key] = value.id;
497
+ } else if (value instanceof Date) {
498
+ const field = model.fields.find((f) => f.name === key);
499
+ initialValues[key] = (field == null ? void 0 : field.type.toLowerCase()) === "date" ? value.toISOString().split("T")[0] : value.toISOString();
500
+ } else {
501
+ initialValues[key] = "";
502
+ }
480
503
  }
481
- console.log("[AdminDataEditPage] Final initialValues:", o), console.log("[AdminDataEditPage] Value types:", Object.entries(o).map(([a, t]) => ({
482
- key: a,
483
- type: typeof t,
484
- isDate: t instanceof Date,
485
- value: t
504
+ console.log("[AdminDataEditPage] Final initialValues:", initialValues);
505
+ console.log("[AdminDataEditPage] Value types:", Object.entries(initialValues).map(([key, val]) => ({
506
+ key,
507
+ type: typeof val,
508
+ isDate: val instanceof Date,
509
+ value: val
486
510
  })));
487
511
  }
488
- const q = async (l) => {
512
+ const handleSubmit = async (formData) => {
489
513
  try {
490
- m({ status: "loading" });
491
- const a = ie(l, s), t = await O({
514
+ setSubmissionState({
515
+ status: "loading"
516
+ });
517
+ const cleanedInput = cleanFormInput(formData, model);
518
+ const result = await updateMutation({
492
519
  variables: {
493
- input: a,
494
- [f]: d
520
+ input: cleanedInput,
521
+ [idVariableName]: id
495
522
  }
496
523
  });
497
- if (t.errors) {
498
- console.error("GraphQL errors:", t.errors), m({
524
+ if (result.errors) {
525
+ console.error("GraphQL errors:", result.errors);
526
+ setSubmissionState({
499
527
  status: "error",
500
- message: t.errors.map((N) => N.message).join(", ")
528
+ message: result.errors.map((err) => err.message).join(", ")
501
529
  });
502
530
  return;
503
531
  }
504
- m({
532
+ setSubmissionState({
505
533
  status: "success",
506
- message: `${u(s.name)} updated successfully!`
507
- }), await $();
508
- } catch (a) {
509
- console.error("Error updating record:", a), m({
534
+ message: `${toReadableText(model.name)} updated successfully!`
535
+ });
536
+ await refetch();
537
+ } catch (error2) {
538
+ console.error("Error updating record:", error2);
539
+ setSubmissionState({
510
540
  status: "error",
511
- message: a instanceof Error ? a.message : "An unexpected error occurred"
541
+ message: error2 instanceof Error ? error2.message : "An unexpected error occurred"
512
542
  });
513
543
  }
514
- }, G = async () => {
544
+ };
545
+ const handleDelete = async () => {
515
546
  try {
516
- h({ status: "loading" });
517
- const l = await Q({
547
+ setDeleteState({
548
+ status: "loading"
549
+ });
550
+ const result = await deleteMutation({
518
551
  variables: {
519
- [f]: d
552
+ [idVariableName]: id
520
553
  }
521
554
  });
522
- if (l.errors) {
523
- console.error("GraphQL errors:", l.errors), h({
555
+ if (result.errors) {
556
+ console.error("GraphQL errors:", result.errors);
557
+ setDeleteState({
524
558
  status: "error",
525
- message: l.errors.map((a) => a.message).join(", ")
559
+ message: result.errors.map((err) => err.message).join(", ")
526
560
  });
527
561
  return;
528
562
  }
529
- h({
563
+ setDeleteState({
530
564
  status: "success",
531
- message: `${u(s.name)} deleted successfully!`
532
- }), setTimeout(() => {
533
- U(`${c}/${I(s.pluralName)}`);
565
+ message: `${toReadableText(model.name)} deleted successfully!`
566
+ });
567
+ setTimeout(() => {
568
+ navigate(`${basePath}/${toKebabCase(model.pluralName)}`);
534
569
  }, 1500);
535
- } catch (l) {
536
- console.error("Error deleting record:", l), h({
570
+ } catch (error2) {
571
+ console.error("Error deleting record:", error2);
572
+ setDeleteState({
537
573
  status: "error",
538
- message: l instanceof Error ? l.message : "An unexpected error occurred"
574
+ message: error2 instanceof Error ? error2.message : "An unexpected error occurred"
539
575
  });
540
576
  }
541
577
  };
542
- return /* @__PURE__ */ e("div", { className: "space-y-6", children: [
543
- /* @__PURE__ */ e("div", { className: "mb-8", children: [
544
- /* @__PURE__ */ e("nav", { className: "flex mb-6", "aria-label": "Breadcrumb", children: /* @__PURE__ */ e("ol", { className: "flex items-center space-x-4", children: [
545
- /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(x, { to: c, className: "text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400", children: "Data Browser" }, void 0, !1, {
546
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
547
- lineNumber: 620,
548
- columnNumber: 17
549
- }, this) }, void 0, !1, {
550
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
551
- lineNumber: 619,
552
- columnNumber: 15
553
- }, this),
554
- /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e("div", { className: "flex items-center", children: [
555
- /* @__PURE__ */ e(
556
- "svg",
557
- {
558
- className: "flex-shrink-0 h-5 w-5 text-gray-300 dark:text-gray-600",
559
- fill: "currentColor",
560
- viewBox: "0 0 20 20",
561
- children: /* @__PURE__ */ e(
562
- "path",
563
- {
564
- fillRule: "evenodd",
565
- d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 111.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z",
566
- clipRule: "evenodd"
567
- },
568
- void 0,
569
- !1,
570
- {
571
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
572
- lineNumber: 631,
573
- columnNumber: 21
574
- },
575
- this
576
- )
577
- },
578
- void 0,
579
- !1,
580
- {
581
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
582
- lineNumber: 626,
583
- columnNumber: 19
584
- },
585
- this
586
- ),
587
- /* @__PURE__ */ e(
588
- x,
589
- {
590
- to: `${c}/${I(s.pluralName)}`,
591
- className: "ml-4 text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400",
592
- children: u(s.pluralName)
593
- },
594
- void 0,
595
- !1,
596
- {
597
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
598
- lineNumber: 637,
599
- columnNumber: 19
600
- },
601
- this
602
- )
603
- ] }, void 0, !0, {
604
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
605
- lineNumber: 625,
606
- columnNumber: 17
607
- }, this) }, void 0, !1, {
608
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
609
- lineNumber: 624,
610
- columnNumber: 15
611
- }, this),
612
- /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e("div", { className: "flex items-center", children: [
613
- /* @__PURE__ */ e(
614
- "svg",
615
- {
616
- className: "flex-shrink-0 h-5 w-5 text-gray-300 dark:text-gray-600",
617
- fill: "currentColor",
618
- viewBox: "0 0 20 20",
619
- children: /* @__PURE__ */ e(
620
- "path",
621
- {
622
- fillRule: "evenodd",
623
- d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 111.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z",
624
- clipRule: "evenodd"
625
- },
626
- void 0,
627
- !1,
628
- {
629
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
630
- lineNumber: 652,
631
- columnNumber: 21
632
- },
633
- this
634
- )
635
- },
636
- void 0,
637
- !1,
638
- {
639
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
640
- lineNumber: 647,
641
- columnNumber: 19
642
- },
643
- this
644
- ),
645
- /* @__PURE__ */ e("span", { className: "ml-4 text-gray-500 dark:text-gray-400", children: "Edit" }, void 0, !1, {
646
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
647
- lineNumber: 658,
648
- columnNumber: 19
649
- }, this)
650
- ] }, void 0, !0, {
651
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
652
- lineNumber: 646,
653
- columnNumber: 17
654
- }, this) }, void 0, !1, {
655
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
656
- lineNumber: 645,
657
- columnNumber: 15
658
- }, this)
659
- ] }, void 0, !0, {
660
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
661
- lineNumber: 618,
662
- columnNumber: 13
663
- }, this) }, void 0, !1, {
664
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
665
- lineNumber: 617,
666
- columnNumber: 11
667
- }, this),
668
- /* @__PURE__ */ e("div", { className: "flex items-center justify-between", children: [
669
- /* @__PURE__ */ e("h1", { className: "text-3xl font-bold text-gray-900 dark:text-gray-100", children: [
670
- "Edit ",
671
- u(s.name)
672
- ] }, void 0, !0, {
673
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
674
- lineNumber: 664,
675
- columnNumber: 13
676
- }, this),
677
- /* @__PURE__ */ e(
678
- "button",
679
- {
680
- onClick: () => E(!0),
681
- disabled: r.status === "loading",
682
- className: "inline-flex items-center px-3 py-2 border border-red-300 shadow-sm text-sm leading-4 font-medium rounded-md text-red-700 bg-white hover:bg-red-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 disabled:opacity-50 disabled:cursor-not-allowed",
683
- children: [
684
- /* @__PURE__ */ e(J, { className: "h-4 w-4 mr-2" }, void 0, !1, {
685
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
686
- lineNumber: 670,
687
- columnNumber: 15
688
- }, this),
689
- "Delete"
690
- ]
691
- },
692
- void 0,
693
- !0,
694
- {
695
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
696
- lineNumber: 665,
697
- columnNumber: 13
698
- },
699
- this
700
- )
701
- ] }, void 0, !0, {
702
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
703
- lineNumber: 663,
704
- columnNumber: 11
705
- }, this)
706
- ] }, void 0, !0, {
707
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
708
- lineNumber: 616,
709
- columnNumber: 7
710
- }, this),
711
- D && /* @__PURE__ */ e("div", { className: "fixed inset-0 bg-gray-600 dark:bg-gray-900 bg-opacity-50 dark:bg-opacity-75 overflow-y-auto h-full w-full z-50 flex items-center justify-center", children: /* @__PURE__ */ e("div", { className: "bg-white dark:bg-gray-800 p-6 rounded-lg shadow-xl max-w-md w-full mx-4", children: [
712
- /* @__PURE__ */ e("div", { className: "flex items-center", children: [
713
- /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: /* @__PURE__ */ e(p, { className: "h-6 w-6 text-red-600" }, void 0, !1, {
714
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
715
- lineNumber: 682,
716
- columnNumber: 19
717
- }, this) }, void 0, !1, {
718
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
719
- lineNumber: 681,
720
- columnNumber: 17
721
- }, this),
722
- /* @__PURE__ */ e("div", { className: "ml-3", children: [
723
- /* @__PURE__ */ e("h3", { className: "text-lg font-medium text-gray-900 dark:text-gray-100", children: [
724
- "Delete ",
725
- u(s.name)
726
- ] }, void 0, !0, {
727
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
728
- lineNumber: 685,
729
- columnNumber: 19
730
- }, this),
731
- /* @__PURE__ */ e("div", { className: "mt-2", children: /* @__PURE__ */ e("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: [
732
- "Are you sure you want to delete this",
733
- " ",
734
- u(s.name).toLowerCase(),
735
- "? This action cannot be undone."
736
- ] }, void 0, !0, {
737
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
738
- lineNumber: 689,
739
- columnNumber: 21
740
- }, this) }, void 0, !1, {
741
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
742
- lineNumber: 688,
743
- columnNumber: 19
744
- }, this)
745
- ] }, void 0, !0, {
746
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
747
- lineNumber: 684,
748
- columnNumber: 17
749
- }, this)
750
- ] }, void 0, !0, {
751
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
752
- lineNumber: 680,
753
- columnNumber: 15
754
- }, this),
755
- /* @__PURE__ */ e("div", { className: "mt-5 sm:mt-4 sm:flex sm:flex-row-reverse", children: [
756
- /* @__PURE__ */ e(
757
- "button",
758
- {
759
- onClick: G,
760
- disabled: r.status === "loading",
761
- className: "w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed",
762
- children: r.status === "loading" ? "Deleting..." : "Delete"
763
- },
764
- void 0,
765
- !1,
766
- {
767
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
768
- lineNumber: 697,
769
- columnNumber: 17
770
- },
771
- this
772
- ),
773
- /* @__PURE__ */ e(
774
- "button",
775
- {
776
- onClick: () => E(!1),
777
- disabled: r.status === "loading",
778
- className: "mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web sm:mt-0 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed",
779
- children: "Cancel"
780
- },
781
- void 0,
782
- !1,
783
- {
784
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
785
- lineNumber: 704,
786
- columnNumber: 17
787
- },
788
- this
789
- )
790
- ] }, void 0, !0, {
791
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
792
- lineNumber: 696,
793
- columnNumber: 15
794
- }, this)
795
- ] }, void 0, !0, {
796
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
797
- lineNumber: 679,
798
- columnNumber: 13
799
- }, this) }, void 0, !1, {
800
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
801
- lineNumber: 678,
802
- columnNumber: 11
803
- }, this),
804
- (n.status !== "idle" || r.status !== "idle") && /* @__PURE__ */ e(
805
- "div",
806
- {
807
- className: `mb-6 rounded-md p-4 ${n.status === "success" || r.status === "success" ? "bg-green-50 border border-green-200" : n.status === "error" || r.status === "error" ? "bg-red-50 border border-red-200" : "bg-blue-50 border border-blue-200"}`,
808
- children: /* @__PURE__ */ e("div", { className: "flex", children: [
809
- /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: n.status === "success" || r.status === "success" ? /* @__PURE__ */ e(H, { className: "h-5 w-5 text-green-400" }, void 0, !1, {
810
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
811
- lineNumber: 730,
812
- columnNumber: 19
813
- }, this) : n.status === "error" || r.status === "error" ? /* @__PURE__ */ e(p, { className: "h-5 w-5 text-red-400" }, void 0, !1, {
814
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
815
- lineNumber: 732,
816
- columnNumber: 19
817
- }, this) : /* @__PURE__ */ e("div", { className: "h-5 w-5 border-2 border-blue-400 border-t-transparent rounded-full animate-spin" }, void 0, !1, {
818
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
819
- lineNumber: 734,
820
- columnNumber: 19
821
- }, this) }, void 0, !1, {
822
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
823
- lineNumber: 728,
824
- columnNumber: 15
825
- }, this),
826
- /* @__PURE__ */ e("div", { className: "ml-3", children: /* @__PURE__ */ e(
827
- "p",
828
- {
829
- className: `text-sm font-medium ${n.status === "success" || r.status === "success" ? "text-green-800" : n.status === "error" || r.status === "error" ? "text-red-800" : "text-blue-800"}`,
830
- children: n.status === "loading" ? `Updating ${u(s.name)}...` : r.status === "loading" ? `Deleting ${u(s.name)}...` : n.message || r.message
831
- },
832
- void 0,
833
- !1,
834
- {
835
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
836
- lineNumber: 738,
837
- columnNumber: 17
838
- },
839
- this
840
- ) }, void 0, !1, {
841
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
842
- lineNumber: 737,
843
- columnNumber: 15
844
- }, this)
845
- ] }, void 0, !0, {
846
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
847
- lineNumber: 727,
848
- columnNumber: 13
849
- }, this)
850
- },
851
- void 0,
852
- !1,
853
- {
854
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
855
- lineNumber: 718,
856
- columnNumber: 11
857
- },
858
- this
859
- ),
860
- /* @__PURE__ */ e("div", { className: "bg-white dark:bg-gray-800 shadow-sm rounded-lg", children: /* @__PURE__ */ e("div", { className: "px-6 py-8", children: /* @__PURE__ */ e(
861
- X,
862
- {
863
- id: `edit-${s.name.toLowerCase()}-form`,
864
- fields: V,
865
- submit: q,
866
- disabled: n.status === "loading" || r.status === "loading",
867
- defaultValues: o,
868
- theme: j
869
- },
870
- void 0,
871
- !1,
872
- {
873
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
874
- lineNumber: 761,
875
- columnNumber: 13
876
- },
877
- this
878
- ) }, void 0, !1, {
879
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
880
- lineNumber: 760,
881
- columnNumber: 11
882
- }, this) }, void 0, !1, {
883
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
884
- lineNumber: 759,
885
- columnNumber: 9
886
- }, this)
887
- ] }, void 0, !0, {
888
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
578
+ return /* @__PURE__ */ React.createElement("div", { className: "space-y-6", __self: this, __source: {
579
+ fileName: _jsxFileName,
889
580
  lineNumber: 614,
890
581
  columnNumber: 5
891
- }, this);
582
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mb-8", __self: this, __source: {
583
+ fileName: _jsxFileName,
584
+ lineNumber: 616,
585
+ columnNumber: 7
586
+ } }, /* @__PURE__ */ React.createElement("nav", { className: "flex mb-6", "aria-label": "Breadcrumb", __self: this, __source: {
587
+ fileName: _jsxFileName,
588
+ lineNumber: 617,
589
+ columnNumber: 11
590
+ } }, /* @__PURE__ */ React.createElement("ol", { className: "flex items-center space-x-4", __self: this, __source: {
591
+ fileName: _jsxFileName,
592
+ lineNumber: 618,
593
+ columnNumber: 13
594
+ } }, /* @__PURE__ */ React.createElement("li", { __self: this, __source: {
595
+ fileName: _jsxFileName,
596
+ lineNumber: 619,
597
+ columnNumber: 15
598
+ } }, /* @__PURE__ */ React.createElement(Link, { to: basePath, className: "text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400", __self: this, __source: {
599
+ fileName: _jsxFileName,
600
+ lineNumber: 620,
601
+ columnNumber: 17
602
+ } }, "Data Browser")), /* @__PURE__ */ React.createElement("li", { __self: this, __source: {
603
+ fileName: _jsxFileName,
604
+ lineNumber: 624,
605
+ columnNumber: 15
606
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center", __self: this, __source: {
607
+ fileName: _jsxFileName,
608
+ lineNumber: 625,
609
+ columnNumber: 17
610
+ } }, /* @__PURE__ */ React.createElement("svg", { className: "flex-shrink-0 h-5 w-5 text-gray-300 dark:text-gray-600", fill: "currentColor", viewBox: "0 0 20 20", __self: this, __source: {
611
+ fileName: _jsxFileName,
612
+ lineNumber: 626,
613
+ columnNumber: 19
614
+ } }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 111.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z", clipRule: "evenodd", __self: this, __source: {
615
+ fileName: _jsxFileName,
616
+ lineNumber: 631,
617
+ columnNumber: 21
618
+ } })), /* @__PURE__ */ React.createElement(Link, { to: `${basePath}/${toKebabCase(model.pluralName)}`, className: "ml-4 text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400", __self: this, __source: {
619
+ fileName: _jsxFileName,
620
+ lineNumber: 637,
621
+ columnNumber: 19
622
+ } }, toReadableText(model.pluralName)))), /* @__PURE__ */ React.createElement("li", { __self: this, __source: {
623
+ fileName: _jsxFileName,
624
+ lineNumber: 645,
625
+ columnNumber: 15
626
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center", __self: this, __source: {
627
+ fileName: _jsxFileName,
628
+ lineNumber: 646,
629
+ columnNumber: 17
630
+ } }, /* @__PURE__ */ React.createElement("svg", { className: "flex-shrink-0 h-5 w-5 text-gray-300 dark:text-gray-600", fill: "currentColor", viewBox: "0 0 20 20", __self: this, __source: {
631
+ fileName: _jsxFileName,
632
+ lineNumber: 647,
633
+ columnNumber: 19
634
+ } }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 111.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z", clipRule: "evenodd", __self: this, __source: {
635
+ fileName: _jsxFileName,
636
+ lineNumber: 652,
637
+ columnNumber: 21
638
+ } })), /* @__PURE__ */ React.createElement("span", { className: "ml-4 text-gray-500 dark:text-gray-400", __self: this, __source: {
639
+ fileName: _jsxFileName,
640
+ lineNumber: 658,
641
+ columnNumber: 19
642
+ } }, "Edit"))))), /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-between", __self: this, __source: {
643
+ fileName: _jsxFileName,
644
+ lineNumber: 663,
645
+ columnNumber: 11
646
+ } }, /* @__PURE__ */ React.createElement("h1", { className: "text-3xl font-bold text-gray-900 dark:text-gray-100", __self: this, __source: {
647
+ fileName: _jsxFileName,
648
+ lineNumber: 664,
649
+ columnNumber: 13
650
+ } }, "Edit ", toReadableText(model.name)), /* @__PURE__ */ React.createElement("button", { onClick: () => setShowDeleteConfirm(true), disabled: deleteState.status === "loading", className: "inline-flex items-center px-3 py-2 border border-red-300 shadow-sm text-sm leading-4 font-medium rounded-md text-red-700 bg-white hover:bg-red-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 disabled:opacity-50 disabled:cursor-not-allowed", __self: this, __source: {
651
+ fileName: _jsxFileName,
652
+ lineNumber: 665,
653
+ columnNumber: 13
654
+ } }, /* @__PURE__ */ React.createElement(TrashIcon, { className: "h-4 w-4 mr-2", __self: this, __source: {
655
+ fileName: _jsxFileName,
656
+ lineNumber: 670,
657
+ columnNumber: 15
658
+ } }), "Delete"))), showDeleteConfirm && /* @__PURE__ */ React.createElement("div", { className: "fixed inset-0 bg-gray-600 dark:bg-gray-900 bg-opacity-50 dark:bg-opacity-75 overflow-y-auto h-full w-full z-50 flex items-center justify-center", __self: this, __source: {
659
+ fileName: _jsxFileName,
660
+ lineNumber: 678,
661
+ columnNumber: 11
662
+ } }, /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 p-6 rounded-lg shadow-xl max-w-md w-full mx-4", __self: this, __source: {
663
+ fileName: _jsxFileName,
664
+ lineNumber: 679,
665
+ columnNumber: 13
666
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center", __self: this, __source: {
667
+ fileName: _jsxFileName,
668
+ lineNumber: 680,
669
+ columnNumber: 15
670
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex-shrink-0", __self: this, __source: {
671
+ fileName: _jsxFileName,
672
+ lineNumber: 681,
673
+ columnNumber: 17
674
+ } }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "h-6 w-6 text-red-600", __self: this, __source: {
675
+ fileName: _jsxFileName,
676
+ lineNumber: 682,
677
+ columnNumber: 19
678
+ } })), /* @__PURE__ */ React.createElement("div", { className: "ml-3", __self: this, __source: {
679
+ fileName: _jsxFileName,
680
+ lineNumber: 684,
681
+ columnNumber: 17
682
+ } }, /* @__PURE__ */ React.createElement("h3", { className: "text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
683
+ fileName: _jsxFileName,
684
+ lineNumber: 685,
685
+ columnNumber: 19
686
+ } }, "Delete ", toReadableText(model.name)), /* @__PURE__ */ React.createElement("div", { className: "mt-2", __self: this, __source: {
687
+ fileName: _jsxFileName,
688
+ lineNumber: 688,
689
+ columnNumber: 19
690
+ } }, /* @__PURE__ */ React.createElement("p", { className: "text-sm text-gray-500 dark:text-gray-400", __self: this, __source: {
691
+ fileName: _jsxFileName,
692
+ lineNumber: 689,
693
+ columnNumber: 21
694
+ } }, "Are you sure you want to delete this", " ", toReadableText(model.name).toLowerCase(), "? This action cannot be undone.")))), /* @__PURE__ */ React.createElement("div", { className: "mt-5 sm:mt-4 sm:flex sm:flex-row-reverse", __self: this, __source: {
695
+ fileName: _jsxFileName,
696
+ lineNumber: 696,
697
+ columnNumber: 15
698
+ } }, /* @__PURE__ */ React.createElement("button", { onClick: handleDelete, disabled: deleteState.status === "loading", className: "w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed", __self: this, __source: {
699
+ fileName: _jsxFileName,
700
+ lineNumber: 697,
701
+ columnNumber: 17
702
+ } }, deleteState.status === "loading" ? "Deleting..." : "Delete"), /* @__PURE__ */ React.createElement("button", { onClick: () => setShowDeleteConfirm(false), disabled: deleteState.status === "loading", className: "mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web sm:mt-0 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed", __self: this, __source: {
703
+ fileName: _jsxFileName,
704
+ lineNumber: 704,
705
+ columnNumber: 17
706
+ } }, "Cancel")))), (submissionState.status !== "idle" || deleteState.status !== "idle") && /* @__PURE__ */ React.createElement("div", { className: `mb-6 rounded-md p-4 ${submissionState.status === "success" || deleteState.status === "success" ? "bg-green-50 border border-green-200" : submissionState.status === "error" || deleteState.status === "error" ? "bg-red-50 border border-red-200" : "bg-blue-50 border border-blue-200"}`, __self: this, __source: {
707
+ fileName: _jsxFileName,
708
+ lineNumber: 718,
709
+ columnNumber: 11
710
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex", __self: this, __source: {
711
+ fileName: _jsxFileName,
712
+ lineNumber: 727,
713
+ columnNumber: 13
714
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex-shrink-0", __self: this, __source: {
715
+ fileName: _jsxFileName,
716
+ lineNumber: 728,
717
+ columnNumber: 15
718
+ } }, submissionState.status === "success" || deleteState.status === "success" ? /* @__PURE__ */ React.createElement(CheckCircleIcon, { className: "h-5 w-5 text-green-400", __self: this, __source: {
719
+ fileName: _jsxFileName,
720
+ lineNumber: 730,
721
+ columnNumber: 19
722
+ } }) : submissionState.status === "error" || deleteState.status === "error" ? /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "h-5 w-5 text-red-400", __self: this, __source: {
723
+ fileName: _jsxFileName,
724
+ lineNumber: 732,
725
+ columnNumber: 19
726
+ } }) : /* @__PURE__ */ React.createElement("div", { className: "h-5 w-5 border-2 border-blue-400 border-t-transparent rounded-full animate-spin", __self: this, __source: {
727
+ fileName: _jsxFileName,
728
+ lineNumber: 734,
729
+ columnNumber: 19
730
+ } })), /* @__PURE__ */ React.createElement("div", { className: "ml-3", __self: this, __source: {
731
+ fileName: _jsxFileName,
732
+ lineNumber: 737,
733
+ columnNumber: 15
734
+ } }, /* @__PURE__ */ React.createElement("p", { className: `text-sm font-medium ${submissionState.status === "success" || deleteState.status === "success" ? "text-green-800" : submissionState.status === "error" || deleteState.status === "error" ? "text-red-800" : "text-blue-800"}`, __self: this, __source: {
735
+ fileName: _jsxFileName,
736
+ lineNumber: 738,
737
+ columnNumber: 17
738
+ } }, submissionState.status === "loading" ? `Updating ${toReadableText(model.name)}...` : deleteState.status === "loading" ? `Deleting ${toReadableText(model.name)}...` : submissionState.message || deleteState.message)))), /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 shadow-sm rounded-lg", __self: this, __source: {
739
+ fileName: _jsxFileName,
740
+ lineNumber: 759,
741
+ columnNumber: 9
742
+ } }, /* @__PURE__ */ React.createElement("div", { className: "px-6 py-8", __self: this, __source: {
743
+ fileName: _jsxFileName,
744
+ lineNumber: 760,
745
+ columnNumber: 11
746
+ } }, /* @__PURE__ */ React.createElement(Form, { id: `edit-${model.name.toLowerCase()}-form`, fields: formFields, submit: handleSubmit, disabled: submissionState.status === "loading" || deleteState.status === "loading", defaultValues: initialValues, theme: formTheme, __self: this, __source: {
747
+ fileName: _jsxFileName,
748
+ lineNumber: 761,
749
+ columnNumber: 13
750
+ } }))));
892
751
  }
893
- function ve({ error: s }) {
894
- return /* @__PURE__ */ e(W, { error: s }, void 0, !1, {
895
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataEditPage.tsx",
752
+ function AdminDataEditErrorBoundary({
753
+ error
754
+ }) {
755
+ return /* @__PURE__ */ React.createElement(ErrorBoundary, { error, __self: this, __source: {
756
+ fileName: _jsxFileName,
896
757
  lineNumber: 776,
897
758
  columnNumber: 10
898
- }, this);
759
+ } });
899
760
  }
900
761
  export {
901
- ve as AdminDataEditErrorBoundary,
902
- Pe as AdminDataEditPage
762
+ AdminDataEditErrorBoundary,
763
+ AdminDataEditPage
903
764
  };