@nestledjs/data-browser 0.1.7 → 0.1.9

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,487 +1,376 @@
1
- import { jsxDEV as e } from "react/jsx-dev-runtime";
2
- import { gql as x } from "@apollo/client";
3
- import { useMutation as C } from "@apollo/client/react";
4
- import { ExclamationCircleIcon as h, CheckCircleIcon as D } from "@heroicons/react/24/outline";
5
- import { useAdminDataContext as P } from "../context/AdminDataContext.js";
6
- import { ErrorBoundary as A } from "@nestledjs/shared-components";
7
- import { Form as I } from "@nestledjs/forms";
8
- import { useState as U, useMemo as y, useEffect as _ } from "react";
9
- import { useParams as w, Link as g, useNavigate as k } from "react-router";
10
- import { getAdminDocuments as T, buildFormFields as E, cleanFormInput as $ } from "../utils/graphql-utils.js";
11
- function N(a) {
12
- return a.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^./, (n) => n.toUpperCase());
1
+ import { gql } from "@apollo/client";
2
+ import { useMutation } from "@apollo/client/react";
3
+ import { ExclamationCircleIcon, CheckCircleIcon } from "@heroicons/react/24/outline";
4
+ import { useAdminDataContext } from "../context/AdminDataContext.js";
5
+ import { ErrorBoundary } from "@nestledjs/shared-components";
6
+ import { Form } from "@nestledjs/forms";
7
+ import { useState, useMemo, useEffect } from "react";
8
+ import { useParams, Link, useNavigate } from "react-router";
9
+ import { getAdminDocuments, buildFormFields, cleanFormInput } from "../utils/graphql-utils.js";
10
+ var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx";
11
+ function toReadableText(text) {
12
+ return text.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^./, (str) => str.toUpperCase());
13
13
  }
14
- function B(a) {
15
- return !a || typeof a != "string" ? "" : a.replace(/[<>"'%;()&+]/g, "").replace(/javascript:/gi, "").replace(/on\w+\s*=/gi, "").trim().substring(0, 100);
14
+ function sanitizeInput(input) {
15
+ if (!input || typeof input !== "string") return "";
16
+ return input.replace(/[<>"'%;()&+]/g, "").replace(/javascript:/gi, "").replace(/on\w+\s*=/gi, "").trim().substring(0, 100);
16
17
  }
17
- const j = (a) => a.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
18
- function O() {
19
- const { dataType: a } = w(), { databaseModels: n, basePath: o = "/admin/data", formTheme: f } = P(), u = (b) => n.find((m) => m.name === b), s = ((b) => {
20
- const m = B(b);
21
- if (!m) return null;
22
- const l = m.split("-").map((i) => i.charAt(0).toUpperCase() + i.slice(1).toLowerCase()).join("");
23
- return n.find((i) => i.name === l) ? l : null;
24
- })(a), r = !s, c = s ? u(s) : null, p = s && !0 && !c;
25
- return r ? /* @__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: [
26
- /* @__PURE__ */ e(h, { className: "mx-auto h-12 w-12 text-red-400" }, void 0, !1, {
27
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
18
+ const toKebabCase = (str) => {
19
+ return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
20
+ };
21
+ function AdminDataCreatePage() {
22
+ const {
23
+ dataType
24
+ } = useParams();
25
+ const {
26
+ databaseModels,
27
+ basePath = "/admin/data",
28
+ formTheme
29
+ } = useAdminDataContext();
30
+ const findModelByName = (name) => {
31
+ return databaseModels.find((model2) => model2.name === name);
32
+ };
33
+ const validateDataType = (dataType2) => {
34
+ const sanitized = sanitizeInput(dataType2);
35
+ if (!sanitized) return null;
36
+ const properCaseDataType = sanitized.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join("");
37
+ const model2 = databaseModels.find((m) => m.name === properCaseDataType);
38
+ return model2 ? properCaseDataType : null;
39
+ };
40
+ const validatedDataType = validateDataType(dataType);
41
+ const shouldShowUnauthorized = !validatedDataType;
42
+ const model = validatedDataType ? findModelByName(validatedDataType) : null;
43
+ const shouldShowModelNotFound = validatedDataType && true && !model;
44
+ if (shouldShowUnauthorized) {
45
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
46
+ fileName: _jsxFileName,
47
+ lineNumber: 90,
48
+ columnNumber: 7
49
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
50
+ fileName: _jsxFileName,
51
+ lineNumber: 91,
52
+ columnNumber: 9
53
+ } }, /* @__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: {
54
+ fileName: _jsxFileName,
55
+ lineNumber: 92,
56
+ columnNumber: 11
57
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
58
+ fileName: _jsxFileName,
59
+ lineNumber: 93,
60
+ columnNumber: 13
61
+ } }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-red-400", __self: this, __source: {
62
+ fileName: _jsxFileName,
28
63
  lineNumber: 94,
29
64
  columnNumber: 15
30
- }, this),
31
- /* @__PURE__ */ e("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", children: "Unauthorized" }, void 0, !1, {
32
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
65
+ } }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
66
+ fileName: _jsxFileName,
33
67
  lineNumber: 95,
34
68
  columnNumber: 15
35
- }, this),
36
- /* @__PURE__ */ e("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", children: "Invalid data type or insufficient permissions." }, void 0, !1, {
37
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
69
+ } }, "Unauthorized"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
70
+ fileName: _jsxFileName,
38
71
  lineNumber: 96,
39
72
  columnNumber: 15
40
- }, this),
41
- /* @__PURE__ */ e("div", { className: "mt-6", children: /* @__PURE__ */ e(
42
- g,
43
- {
44
- to: o,
45
- 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",
46
- children: "Return to Data Browser"
47
- },
48
- void 0,
49
- !1,
50
- {
51
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
52
- lineNumber: 100,
53
- columnNumber: 17
54
- },
55
- this
56
- ) }, void 0, !1, {
57
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
73
+ } }, "Invalid data type or insufficient permissions."), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
74
+ fileName: _jsxFileName,
58
75
  lineNumber: 99,
59
76
  columnNumber: 15
60
- }, this)
61
- ] }, void 0, !0, {
62
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
63
- lineNumber: 93,
64
- columnNumber: 13
65
- }, this) }, void 0, !1, {
66
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
67
- lineNumber: 92,
68
- columnNumber: 11
69
- }, this) }, void 0, !1, {
70
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
71
- lineNumber: 91,
72
- columnNumber: 9
73
- }, this) }, void 0, !1, {
74
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
75
- lineNumber: 90,
76
- columnNumber: 7
77
- }, this) : p ? /* @__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: [
78
- /* @__PURE__ */ e(h, { className: "mx-auto h-12 w-12 text-yellow-400" }, void 0, !1, {
79
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
77
+ } }, /* @__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: {
78
+ fileName: _jsxFileName,
79
+ lineNumber: 100,
80
+ columnNumber: 17
81
+ } }, "Return to Data Browser"))))));
82
+ }
83
+ if (shouldShowModelNotFound) {
84
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col justify-center py-12", __self: this, __source: {
85
+ fileName: _jsxFileName,
86
+ lineNumber: 142,
87
+ columnNumber: 7
88
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 mx-auto w-full max-w-md", __self: this, __source: {
89
+ fileName: _jsxFileName,
90
+ lineNumber: 143,
91
+ columnNumber: 9
92
+ } }, /* @__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: {
93
+ fileName: _jsxFileName,
94
+ lineNumber: 144,
95
+ columnNumber: 11
96
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
97
+ fileName: _jsxFileName,
98
+ lineNumber: 145,
99
+ columnNumber: 13
100
+ } }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-yellow-400", __self: this, __source: {
101
+ fileName: _jsxFileName,
80
102
  lineNumber: 146,
81
103
  columnNumber: 15
82
- }, this),
83
- /* @__PURE__ */ e("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", children: "Model Not Found" }, void 0, !1, {
84
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
104
+ } }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
105
+ fileName: _jsxFileName,
85
106
  lineNumber: 147,
86
107
  columnNumber: 15
87
- }, this),
88
- /* @__PURE__ */ e("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", children: [
89
- 'The data model for "',
90
- s,
91
- '" could not be found.'
92
- ] }, void 0, !0, {
93
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
108
+ } }, "Model Not Found"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
109
+ fileName: _jsxFileName,
94
110
  lineNumber: 148,
95
111
  columnNumber: 15
96
- }, this),
97
- /* @__PURE__ */ e("div", { className: "mt-6", children: /* @__PURE__ */ e(
98
- g,
99
- {
100
- to: o,
101
- 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",
102
- children: "Return to Data Browser"
103
- },
104
- void 0,
105
- !1,
106
- {
107
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
108
- lineNumber: 152,
109
- columnNumber: 17
110
- },
111
- this
112
- ) }, void 0, !1, {
113
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
112
+ } }, 'The data model for "', validatedDataType, '" could not be found.'), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
113
+ fileName: _jsxFileName,
114
114
  lineNumber: 151,
115
115
  columnNumber: 15
116
- }, this)
117
- ] }, void 0, !0, {
118
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
119
- lineNumber: 145,
120
- columnNumber: 13
121
- }, this) }, void 0, !1, {
122
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
123
- lineNumber: 144,
124
- columnNumber: 11
125
- }, this) }, void 0, !1, {
126
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
127
- lineNumber: 143,
128
- columnNumber: 9
129
- }, this) }, void 0, !1, {
130
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
131
- lineNumber: 142,
132
- columnNumber: 7
133
- }, this) : /* @__PURE__ */ e(L, { model: c, basePath: o, formTheme: f }, void 0, !1, {
134
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
116
+ } }, /* @__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: {
117
+ fileName: _jsxFileName,
118
+ lineNumber: 152,
119
+ columnNumber: 17
120
+ } }, "Return to Data Browser"))))));
121
+ }
122
+ return /* @__PURE__ */ React.createElement(AdminDataCreatePageContent, { model, basePath, formTheme, __self: this, __source: {
123
+ fileName: _jsxFileName,
135
124
  lineNumber: 167,
136
125
  columnNumber: 10
137
- }, this);
126
+ } });
138
127
  }
139
- function L({ model: a, basePath: n, formTheme: o }) {
140
- const f = k(), { sdk: u } = P(), [t, s] = U({ status: "idle" }), r = y(() => {
128
+ function AdminDataCreatePageContent({
129
+ model,
130
+ basePath,
131
+ formTheme
132
+ }) {
133
+ const navigate = useNavigate();
134
+ const {
135
+ sdk
136
+ } = useAdminDataContext();
137
+ const [submissionState, setSubmissionState] = useState({
138
+ status: "idle"
139
+ });
140
+ const documents = useMemo(() => {
141
141
  try {
142
- return T(u, a);
143
- } catch (l) {
144
- return console.error("[AdminDataCreatePage] Error getting documents:", l), null;
142
+ return getAdminDocuments(sdk, model);
143
+ } catch (error) {
144
+ console.error("[AdminDataCreatePage] Error getting documents:", error);
145
+ return null;
145
146
  }
146
- }, [u, a]), c = y(() => {
147
- var l, d;
148
- if (!(r != null && r.create)) return null;
147
+ }, [sdk, model]);
148
+ const CREATE_MUTATION = useMemo(() => {
149
+ var _a, _b;
150
+ if (!(documents == null ? void 0 : documents.create)) return null;
149
151
  try {
150
- return (l = r.create) != null && l.definitions && ((d = r.create) != null && d.loc) ? r.create : x(r.create);
151
- } catch (i) {
152
- return console.error("[AdminDataCreatePage] Error parsing CREATE mutation:", i), null;
152
+ if (((_a = documents.create) == null ? void 0 : _a.definitions) && ((_b = documents.create) == null ? void 0 : _b.loc)) {
153
+ return documents.create;
154
+ }
155
+ return gql(documents.create);
156
+ } catch (error) {
157
+ console.error("[AdminDataCreatePage] Error parsing CREATE mutation:", error);
158
+ return null;
153
159
  }
154
- }, [r]), [p] = C(
155
- c || x`
160
+ }, [documents]);
161
+ const [createMutation] = useMutation(CREATE_MUTATION || gql`
156
162
  mutation PlaceholderCreate {
157
163
  __typename
158
164
  }
159
- `
160
- );
161
- if (!r || !c)
162
- return /* @__PURE__ */ e("div", { className: "min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col justify-center py-12 sm:px-6 lg:px-8", children: /* @__PURE__ */ e("div", { className: "mt-8 sm:mx-auto sm:w-full sm: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: [
163
- /* @__PURE__ */ e(h, { className: "mx-auto h-12 w-12 text-red-400" }, void 0, !1, {
164
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
165
- lineNumber: 226,
166
- columnNumber: 15
167
- }, this),
168
- /* @__PURE__ */ e("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", children: "GraphQL Schema Error" }, void 0, !1, {
169
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
170
- lineNumber: 227,
171
- columnNumber: 15
172
- }, this),
173
- /* @__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, {
174
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
175
- lineNumber: 228,
176
- columnNumber: 15
177
- }, this),
178
- /* @__PURE__ */ e("div", { className: "mt-6", children: /* @__PURE__ */ e(
179
- g,
180
- {
181
- to: n,
182
- 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",
183
- children: "Return to Data Browser"
184
- },
185
- void 0,
186
- !1,
187
- {
188
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
189
- lineNumber: 233,
190
- columnNumber: 17
191
- },
192
- this
193
- ) }, void 0, !1, {
194
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
195
- lineNumber: 232,
196
- columnNumber: 15
197
- }, this)
198
- ] }, void 0, !0, {
199
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
200
- lineNumber: 225,
201
- columnNumber: 13
202
- }, this) }, void 0, !1, {
203
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
204
- lineNumber: 224,
205
- columnNumber: 11
206
- }, this) }, void 0, !1, {
207
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
208
- lineNumber: 223,
209
- columnNumber: 9
210
- }, this) }, void 0, !1, {
211
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
165
+ `);
166
+ if (!documents || !CREATE_MUTATION) {
167
+ return /* @__PURE__ */ React.createElement("div", { className: "min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col justify-center py-12 sm:px-6 lg:px-8", __self: this, __source: {
168
+ fileName: _jsxFileName,
212
169
  lineNumber: 222,
213
170
  columnNumber: 7
214
- }, this);
215
- const b = E(u, a, "create"), m = async (l) => {
171
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-2xl", __self: this, __source: {
172
+ fileName: _jsxFileName,
173
+ lineNumber: 223,
174
+ columnNumber: 9
175
+ } }, /* @__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: {
176
+ fileName: _jsxFileName,
177
+ lineNumber: 224,
178
+ columnNumber: 11
179
+ } }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
180
+ fileName: _jsxFileName,
181
+ lineNumber: 225,
182
+ columnNumber: 13
183
+ } }, /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "mx-auto h-12 w-12 text-red-400", __self: this, __source: {
184
+ fileName: _jsxFileName,
185
+ lineNumber: 226,
186
+ columnNumber: 15
187
+ } }), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900 dark:text-gray-100", __self: this, __source: {
188
+ fileName: _jsxFileName,
189
+ lineNumber: 227,
190
+ columnNumber: 15
191
+ } }, "GraphQL Schema Error"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", __self: this, __source: {
192
+ fileName: _jsxFileName,
193
+ lineNumber: 228,
194
+ columnNumber: 15
195
+ } }, "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: {
196
+ fileName: _jsxFileName,
197
+ lineNumber: 232,
198
+ columnNumber: 15
199
+ } }, /* @__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: {
200
+ fileName: _jsxFileName,
201
+ lineNumber: 233,
202
+ columnNumber: 17
203
+ } }, "Return to Data Browser"))))));
204
+ }
205
+ const formFields = buildFormFields(sdk, model, "create");
206
+ const handleSubmit = async (formData) => {
216
207
  try {
217
- s({ status: "loading" });
218
- const d = $(l, a), i = await p({
208
+ setSubmissionState({
209
+ status: "loading"
210
+ });
211
+ const cleanedInput = cleanFormInput(formData, model);
212
+ const result = await createMutation({
219
213
  variables: {
220
- input: d
214
+ input: cleanedInput
221
215
  }
222
216
  });
223
- if (i.errors) {
224
- console.error("GraphQL errors:", i.errors), s({
217
+ if (result.errors) {
218
+ console.error("GraphQL errors:", result.errors);
219
+ setSubmissionState({
225
220
  status: "error",
226
- message: i.errors.map((v) => v.message).join(", ")
221
+ message: result.errors.map((err) => err.message).join(", ")
227
222
  });
228
223
  return;
229
224
  }
230
- s({
225
+ setSubmissionState({
231
226
  status: "success",
232
- message: `${N(a.name)} created successfully!`
233
- }), setTimeout(() => {
234
- f(`${n}/${j(a.pluralName)}`);
227
+ message: `${toReadableText(model.name)} created successfully!`
228
+ });
229
+ setTimeout(() => {
230
+ navigate(`${basePath}/${toKebabCase(model.pluralName)}`);
235
231
  }, 1500);
236
- } catch (d) {
237
- console.error("Error creating record:", d), s({
232
+ } catch (error) {
233
+ console.error("Error creating record:", error);
234
+ setSubmissionState({
238
235
  status: "error",
239
- message: d instanceof Error ? d.message : "An unexpected error occurred"
236
+ message: error instanceof Error ? error.message : "An unexpected error occurred"
240
237
  });
241
238
  }
242
239
  };
243
- return _(() => {
244
- if (t.status === "error") {
245
- const l = setTimeout(() => {
246
- s({ status: "idle" });
240
+ useEffect(() => {
241
+ if (submissionState.status === "error") {
242
+ const timer = setTimeout(() => {
243
+ setSubmissionState({
244
+ status: "idle"
245
+ });
247
246
  }, 5e3);
248
- return () => clearTimeout(l);
247
+ return () => clearTimeout(timer);
249
248
  }
250
- }, [t.status]), /* @__PURE__ */ e("div", { className: "space-y-6", children: [
251
- /* @__PURE__ */ e("div", { className: "mb-8", children: [
252
- /* @__PURE__ */ e("nav", { className: "flex mb-6", "aria-label": "Breadcrumb", children: /* @__PURE__ */ e("ol", { className: "flex items-center space-x-4", children: [
253
- /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(g, { to: n, className: "text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400", children: "Data Browser" }, void 0, !1, {
254
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
255
- lineNumber: 309,
256
- columnNumber: 17
257
- }, this) }, void 0, !1, {
258
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
259
- lineNumber: 308,
260
- columnNumber: 15
261
- }, this),
262
- /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e("div", { className: "flex items-center", children: [
263
- /* @__PURE__ */ e(
264
- "svg",
265
- {
266
- className: "flex-shrink-0 h-5 w-5 text-gray-300 dark:text-gray-600",
267
- fill: "currentColor",
268
- viewBox: "0 0 20 20",
269
- children: /* @__PURE__ */ e(
270
- "path",
271
- {
272
- fillRule: "evenodd",
273
- 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",
274
- clipRule: "evenodd"
275
- },
276
- void 0,
277
- !1,
278
- {
279
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
280
- lineNumber: 320,
281
- columnNumber: 21
282
- },
283
- this
284
- )
285
- },
286
- void 0,
287
- !1,
288
- {
289
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
290
- lineNumber: 315,
291
- columnNumber: 19
292
- },
293
- this
294
- ),
295
- /* @__PURE__ */ e(
296
- g,
297
- {
298
- to: `${n}/${j(a.pluralName)}`,
299
- className: "ml-4 text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400",
300
- children: N(a.pluralName)
301
- },
302
- void 0,
303
- !1,
304
- {
305
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
306
- lineNumber: 326,
307
- columnNumber: 19
308
- },
309
- this
310
- )
311
- ] }, void 0, !0, {
312
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
313
- lineNumber: 314,
314
- columnNumber: 17
315
- }, this) }, void 0, !1, {
316
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
317
- lineNumber: 313,
318
- columnNumber: 15
319
- }, this),
320
- /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e("div", { className: "flex items-center", children: [
321
- /* @__PURE__ */ e(
322
- "svg",
323
- {
324
- className: "flex-shrink-0 h-5 w-5 text-gray-300 dark:text-gray-600",
325
- fill: "currentColor",
326
- viewBox: "0 0 20 20",
327
- children: /* @__PURE__ */ e(
328
- "path",
329
- {
330
- fillRule: "evenodd",
331
- 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",
332
- clipRule: "evenodd"
333
- },
334
- void 0,
335
- !1,
336
- {
337
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
338
- lineNumber: 341,
339
- columnNumber: 21
340
- },
341
- this
342
- )
343
- },
344
- void 0,
345
- !1,
346
- {
347
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
348
- lineNumber: 336,
349
- columnNumber: 19
350
- },
351
- this
352
- ),
353
- /* @__PURE__ */ e("span", { className: "ml-4 text-gray-500 dark:text-gray-400", children: "Create New" }, void 0, !1, {
354
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
355
- lineNumber: 347,
356
- columnNumber: 19
357
- }, this)
358
- ] }, void 0, !0, {
359
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
360
- lineNumber: 335,
361
- columnNumber: 17
362
- }, this) }, void 0, !1, {
363
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
364
- lineNumber: 334,
365
- columnNumber: 15
366
- }, this)
367
- ] }, void 0, !0, {
368
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
369
- lineNumber: 307,
370
- columnNumber: 13
371
- }, this) }, void 0, !1, {
372
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
373
- lineNumber: 306,
374
- columnNumber: 11
375
- }, this),
376
- /* @__PURE__ */ e("h1", { className: "mt-4 text-3xl font-bold text-gray-900 dark:text-gray-100", children: [
377
- "Create ",
378
- N(a.name)
379
- ] }, void 0, !0, {
380
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
381
- lineNumber: 352,
382
- columnNumber: 11
383
- }, this)
384
- ] }, void 0, !0, {
385
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
386
- lineNumber: 305,
387
- columnNumber: 7
388
- }, this),
389
- t.status !== "idle" && /* @__PURE__ */ e(
390
- "div",
391
- {
392
- className: `mb-6 rounded-md p-4 ${t.status === "success" ? "bg-green-50 border border-green-200" : t.status === "error" ? "bg-red-50 border border-red-200" : "bg-blue-50 border border-blue-200"}`,
393
- children: /* @__PURE__ */ e("div", { className: "flex", children: [
394
- /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: t.status === "success" ? /* @__PURE__ */ e(D, { className: "h-5 w-5 text-green-400" }, void 0, !1, {
395
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
396
- lineNumber: 371,
397
- columnNumber: 19
398
- }, this) : t.status === "error" ? /* @__PURE__ */ e(h, { className: "h-5 w-5 text-red-400" }, void 0, !1, {
399
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
400
- lineNumber: 373,
401
- columnNumber: 19
402
- }, this) : /* @__PURE__ */ e("div", { className: "h-5 w-5 border-2 border-blue-400 border-t-transparent rounded-full animate-spin" }, void 0, !1, {
403
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
404
- lineNumber: 375,
405
- columnNumber: 19
406
- }, this) }, void 0, !1, {
407
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
408
- lineNumber: 369,
409
- columnNumber: 15
410
- }, this),
411
- /* @__PURE__ */ e("div", { className: "ml-3", children: /* @__PURE__ */ e(
412
- "p",
413
- {
414
- className: `text-sm font-medium ${t.status === "success" ? "text-green-800" : t.status === "error" ? "text-red-800" : "text-blue-800"}`,
415
- children: t.status === "loading" ? `Creating ${N(a.name)}...` : t.message
416
- },
417
- void 0,
418
- !1,
419
- {
420
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
421
- lineNumber: 379,
422
- columnNumber: 17
423
- },
424
- this
425
- ) }, void 0, !1, {
426
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
427
- lineNumber: 378,
428
- columnNumber: 15
429
- }, this)
430
- ] }, void 0, !0, {
431
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
432
- lineNumber: 368,
433
- columnNumber: 13
434
- }, this)
435
- },
436
- void 0,
437
- !1,
438
- {
439
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
440
- lineNumber: 359,
441
- columnNumber: 11
442
- },
443
- this
444
- ),
445
- /* @__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(
446
- I,
447
- {
448
- id: `create-${a.name.toLowerCase()}-form`,
449
- fields: b,
450
- submit: m,
451
- disabled: t.status === "loading",
452
- theme: o
453
- },
454
- void 0,
455
- !1,
456
- {
457
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
458
- lineNumber: 400,
459
- columnNumber: 13
460
- },
461
- this
462
- ) }, void 0, !1, {
463
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
464
- lineNumber: 399,
465
- columnNumber: 11
466
- }, this) }, void 0, !1, {
467
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
468
- lineNumber: 398,
469
- columnNumber: 9
470
- }, this)
471
- ] }, void 0, !0, {
472
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
249
+ }, [submissionState.status]);
250
+ return /* @__PURE__ */ React.createElement("div", { className: "space-y-6", __self: this, __source: {
251
+ fileName: _jsxFileName,
473
252
  lineNumber: 303,
474
253
  columnNumber: 5
475
- }, this);
254
+ } }, /* @__PURE__ */ React.createElement("div", { className: "mb-8", __self: this, __source: {
255
+ fileName: _jsxFileName,
256
+ lineNumber: 305,
257
+ columnNumber: 7
258
+ } }, /* @__PURE__ */ React.createElement("nav", { className: "flex mb-6", "aria-label": "Breadcrumb", __self: this, __source: {
259
+ fileName: _jsxFileName,
260
+ lineNumber: 306,
261
+ columnNumber: 11
262
+ } }, /* @__PURE__ */ React.createElement("ol", { className: "flex items-center space-x-4", __self: this, __source: {
263
+ fileName: _jsxFileName,
264
+ lineNumber: 307,
265
+ columnNumber: 13
266
+ } }, /* @__PURE__ */ React.createElement("li", { __self: this, __source: {
267
+ fileName: _jsxFileName,
268
+ lineNumber: 308,
269
+ columnNumber: 15
270
+ } }, /* @__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: {
271
+ fileName: _jsxFileName,
272
+ lineNumber: 309,
273
+ columnNumber: 17
274
+ } }, "Data Browser")), /* @__PURE__ */ React.createElement("li", { __self: this, __source: {
275
+ fileName: _jsxFileName,
276
+ lineNumber: 313,
277
+ columnNumber: 15
278
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center", __self: this, __source: {
279
+ fileName: _jsxFileName,
280
+ lineNumber: 314,
281
+ columnNumber: 17
282
+ } }, /* @__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: {
283
+ fileName: _jsxFileName,
284
+ lineNumber: 315,
285
+ columnNumber: 19
286
+ } }, /* @__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: {
287
+ fileName: _jsxFileName,
288
+ lineNumber: 320,
289
+ columnNumber: 21
290
+ } })), /* @__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: {
291
+ fileName: _jsxFileName,
292
+ lineNumber: 326,
293
+ columnNumber: 19
294
+ } }, toReadableText(model.pluralName)))), /* @__PURE__ */ React.createElement("li", { __self: this, __source: {
295
+ fileName: _jsxFileName,
296
+ lineNumber: 334,
297
+ columnNumber: 15
298
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center", __self: this, __source: {
299
+ fileName: _jsxFileName,
300
+ lineNumber: 335,
301
+ columnNumber: 17
302
+ } }, /* @__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: {
303
+ fileName: _jsxFileName,
304
+ lineNumber: 336,
305
+ columnNumber: 19
306
+ } }, /* @__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: {
307
+ fileName: _jsxFileName,
308
+ lineNumber: 341,
309
+ columnNumber: 21
310
+ } })), /* @__PURE__ */ React.createElement("span", { className: "ml-4 text-gray-500 dark:text-gray-400", __self: this, __source: {
311
+ fileName: _jsxFileName,
312
+ lineNumber: 347,
313
+ columnNumber: 19
314
+ } }, "Create New"))))), /* @__PURE__ */ React.createElement("h1", { className: "mt-4 text-3xl font-bold text-gray-900 dark:text-gray-100", __self: this, __source: {
315
+ fileName: _jsxFileName,
316
+ lineNumber: 352,
317
+ columnNumber: 11
318
+ } }, "Create ", toReadableText(model.name))), submissionState.status !== "idle" && /* @__PURE__ */ React.createElement("div", { className: `mb-6 rounded-md p-4 ${submissionState.status === "success" ? "bg-green-50 border border-green-200" : submissionState.status === "error" ? "bg-red-50 border border-red-200" : "bg-blue-50 border border-blue-200"}`, __self: this, __source: {
319
+ fileName: _jsxFileName,
320
+ lineNumber: 359,
321
+ columnNumber: 11
322
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex", __self: this, __source: {
323
+ fileName: _jsxFileName,
324
+ lineNumber: 368,
325
+ columnNumber: 13
326
+ } }, /* @__PURE__ */ React.createElement("div", { className: "flex-shrink-0", __self: this, __source: {
327
+ fileName: _jsxFileName,
328
+ lineNumber: 369,
329
+ columnNumber: 15
330
+ } }, submissionState.status === "success" ? /* @__PURE__ */ React.createElement(CheckCircleIcon, { className: "h-5 w-5 text-green-400", __self: this, __source: {
331
+ fileName: _jsxFileName,
332
+ lineNumber: 371,
333
+ columnNumber: 19
334
+ } }) : submissionState.status === "error" ? /* @__PURE__ */ React.createElement(ExclamationCircleIcon, { className: "h-5 w-5 text-red-400", __self: this, __source: {
335
+ fileName: _jsxFileName,
336
+ lineNumber: 373,
337
+ columnNumber: 19
338
+ } }) : /* @__PURE__ */ React.createElement("div", { className: "h-5 w-5 border-2 border-blue-400 border-t-transparent rounded-full animate-spin", __self: this, __source: {
339
+ fileName: _jsxFileName,
340
+ lineNumber: 375,
341
+ columnNumber: 19
342
+ } })), /* @__PURE__ */ React.createElement("div", { className: "ml-3", __self: this, __source: {
343
+ fileName: _jsxFileName,
344
+ lineNumber: 378,
345
+ columnNumber: 15
346
+ } }, /* @__PURE__ */ React.createElement("p", { className: `text-sm font-medium ${submissionState.status === "success" ? "text-green-800" : submissionState.status === "error" ? "text-red-800" : "text-blue-800"}`, __self: this, __source: {
347
+ fileName: _jsxFileName,
348
+ lineNumber: 379,
349
+ columnNumber: 17
350
+ } }, submissionState.status === "loading" ? `Creating ${toReadableText(model.name)}...` : submissionState.message)))), /* @__PURE__ */ React.createElement("div", { className: "bg-white dark:bg-gray-800 shadow-sm rounded-lg", __self: this, __source: {
351
+ fileName: _jsxFileName,
352
+ lineNumber: 398,
353
+ columnNumber: 9
354
+ } }, /* @__PURE__ */ React.createElement("div", { className: "px-6 py-8", __self: this, __source: {
355
+ fileName: _jsxFileName,
356
+ lineNumber: 399,
357
+ columnNumber: 11
358
+ } }, /* @__PURE__ */ React.createElement(Form, { id: `create-${model.name.toLowerCase()}-form`, fields: formFields, submit: handleSubmit, disabled: submissionState.status === "loading", theme: formTheme, __self: this, __source: {
359
+ fileName: _jsxFileName,
360
+ lineNumber: 400,
361
+ columnNumber: 13
362
+ } }))));
476
363
  }
477
- function V({ error: a }) {
478
- return /* @__PURE__ */ e(A, { error: a }, void 0, !1, {
479
- fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/pages/AdminDataCreatePage.tsx",
364
+ function AdminDataCreateErrorBoundary({
365
+ error
366
+ }) {
367
+ return /* @__PURE__ */ React.createElement(ErrorBoundary, { error, __self: this, __source: {
368
+ fileName: _jsxFileName,
480
369
  lineNumber: 414,
481
370
  columnNumber: 10
482
- }, this);
371
+ } });
483
372
  }
484
373
  export {
485
- V as AdminDataCreateErrorBoundary,
486
- O as AdminDataCreatePage
374
+ AdminDataCreateErrorBoundary,
375
+ AdminDataCreatePage
487
376
  };