@object-ui/plugin-form 6.2.3 → 7.1.0
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.
- package/CHANGELOG.md +342 -0
- package/dist/{packages/plugin-form/src/DrawerForm.d.ts → DrawerForm.d.ts} +14 -1
- package/dist/{packages/plugin-form/src/EmbeddableForm.d.ts → EmbeddableForm.d.ts} +1 -1
- package/dist/LineItemsPanel.d.ts +20 -0
- package/dist/MasterDetailForm.d.ts +70 -0
- package/dist/{packages/plugin-form/src/ModalForm.d.ts → ModalForm.d.ts} +17 -1
- package/dist/{packages/plugin-form/src/ObjectForm.d.ts → ObjectForm.d.ts} +1 -1
- package/dist/{packages/plugin-form/src/SplitForm.d.ts → SplitForm.d.ts} +1 -1
- package/dist/{packages/plugin-form/src/TabbedForm.d.ts → TabbedForm.d.ts} +1 -1
- package/dist/{packages/plugin-form/src/WizardForm.d.ts → WizardForm.d.ts} +13 -1
- package/dist/{packages/plugin-form/src/autoLayout.d.ts → autoLayout.d.ts} +1 -1
- package/dist/deriveMasterDetail.d.ts +86 -0
- package/dist/fieldGroups.d.ts +27 -0
- package/dist/index.d.ts +26 -2
- package/dist/index.js +1965 -875
- package/dist/index.umd.cjs +1 -1
- package/dist/masterDetailTx.d.ts +80 -0
- package/dist/sectionFields.d.ts +22 -0
- package/dist/successBehavior.d.ts +21 -0
- package/package.json +11 -11
- package/dist/packages/plugin-form/src/index.d.ts +0 -20
- /package/dist/{packages/plugin-form/src/FormAnalytics.d.ts → FormAnalytics.d.ts} +0 -0
- /package/dist/{packages/plugin-form/src/FormSection.d.ts → FormSection.d.ts} +0 -0
- /package/dist/{packages/plugin-form/src/sanitize.d.ts → sanitize.d.ts} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,96 +1,156 @@
|
|
|
1
|
-
import e, { useCallback as t,
|
|
2
|
-
import { ComponentRegistry as
|
|
3
|
-
import { SchemaRenderer as
|
|
4
|
-
import { buildValidationRules as
|
|
5
|
-
import { Button as
|
|
6
|
-
import { usePermissions as
|
|
7
|
-
import { Check as
|
|
8
|
-
import { Fragment as
|
|
1
|
+
import e, { useCallback as t, useContext as n, useEffect as r, useId as i, useMemo as a, useRef as o, useState as s } from "react";
|
|
2
|
+
import { ComponentRegistry as c } from "@object-ui/core";
|
|
3
|
+
import { SchemaRenderer as l, SchemaRendererContext as u, usePreviewMode as d, useRecordContext as f, useSafeFieldLabel as p, useSchemaContext as m } from "@object-ui/react";
|
|
4
|
+
import { LineItemsField as h, buildValidationRules as g, evaluateCondition as _, formatFileSize as v, mapFieldTypeToFormType as y } from "@object-ui/fields";
|
|
5
|
+
import { Button as b, Card as x, CardContent as S, CardDescription as C, CardHeader as w, CardTitle as T, Dialog as E, DialogDescription as D, DialogHeader as O, DialogTitle as k, MobileDialogContent as A, ResizableHandle as j, ResizablePanel as M, ResizablePanelGroup as N, Sheet as P, SheetContent as F, SheetDescription as I, SheetHeader as L, SheetTitle as R, Skeleton as z, Tabs as B, TabsContent as V, TabsList as H, TabsTrigger as U, cn as W, toast as G, useIsMobile as ee } from "@object-ui/components";
|
|
6
|
+
import { usePermissions as K } from "@object-ui/permissions";
|
|
7
|
+
import { Check as q, CheckCircle2 as te, ChevronDown as J, ChevronLeft as ne, ChevronRight as Y, Loader2 as re, Lock as ie, ShieldCheck as ae } from "lucide-react";
|
|
8
|
+
import { Fragment as oe, jsx as X, jsxs as Z } from "react/jsx-runtime";
|
|
9
|
+
//#region src/successBehavior.ts
|
|
10
|
+
function se(e) {
|
|
11
|
+
try {
|
|
12
|
+
return typeof window > "u" ? !1 : new URL(e, window.location.href).origin === window.location.origin;
|
|
13
|
+
} catch {
|
|
14
|
+
return !1;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function ce(e, t) {
|
|
18
|
+
if (!e) return null;
|
|
19
|
+
let n = t?.id ?? t?.recordId ?? t?._id;
|
|
20
|
+
if (n == null || n === "") return null;
|
|
21
|
+
let r = e.replace(/\{(?:id|recordId)\}/g, String(n));
|
|
22
|
+
return se(r) ? r : null;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
9
25
|
//#region src/FormSection.tsx
|
|
10
|
-
var
|
|
11
|
-
let [u, d] =
|
|
26
|
+
var Q = ({ label: e, description: t, collapsible: n = !1, collapsed: r = !1, columns: i = 1, children: a, className: o, gridClassName: c, showBorder: l }) => {
|
|
27
|
+
let [u, d] = s(r), f = {
|
|
12
28
|
1: "grid-cols-1",
|
|
13
29
|
2: "grid-cols-1 md:grid-cols-2",
|
|
14
30
|
3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
|
|
15
31
|
4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4"
|
|
16
32
|
}, p = () => {
|
|
17
33
|
n && d(!u);
|
|
18
|
-
}, m = l ?? !!e,
|
|
19
|
-
className:
|
|
34
|
+
}, m = l ?? !!e, h = e || t ? /* @__PURE__ */ Z("div", {
|
|
35
|
+
className: W("flex items-start gap-2", !m && "mb-4", n && "cursor-pointer select-none"),
|
|
20
36
|
onClick: p,
|
|
21
37
|
role: n ? "button" : void 0,
|
|
22
38
|
"aria-expanded": n ? !u : void 0,
|
|
23
|
-
children: [n && /* @__PURE__ */
|
|
39
|
+
children: [n && /* @__PURE__ */ X("span", {
|
|
24
40
|
className: "mt-0.5 text-muted-foreground",
|
|
25
|
-
children:
|
|
26
|
-
}), /* @__PURE__ */
|
|
41
|
+
children: X(u ? Y : J, { className: "h-4 w-4" })
|
|
42
|
+
}), /* @__PURE__ */ Z("div", {
|
|
27
43
|
className: "flex-1",
|
|
28
|
-
children: [e && /* @__PURE__ */
|
|
44
|
+
children: [e && /* @__PURE__ */ X("h3", {
|
|
29
45
|
className: "text-base font-semibold text-foreground",
|
|
30
46
|
children: e
|
|
31
|
-
}), t && /* @__PURE__ */
|
|
47
|
+
}), t && /* @__PURE__ */ X("p", {
|
|
32
48
|
className: "text-sm text-muted-foreground mt-0.5",
|
|
33
49
|
children: t
|
|
34
50
|
})]
|
|
35
51
|
})]
|
|
36
|
-
}) : null,
|
|
37
|
-
className:
|
|
52
|
+
}) : null, g = u ? null : /* @__PURE__ */ X("div", {
|
|
53
|
+
className: W("grid gap-4", c || f[i]),
|
|
38
54
|
children: a
|
|
39
55
|
});
|
|
40
|
-
return m ? /* @__PURE__ */
|
|
41
|
-
className:
|
|
42
|
-
children: [
|
|
56
|
+
return m ? /* @__PURE__ */ Z(x, {
|
|
57
|
+
className: W("form-section", o),
|
|
58
|
+
children: [h && /* @__PURE__ */ Z(w, {
|
|
43
59
|
className: "pb-3",
|
|
44
60
|
children: [
|
|
45
|
-
e && /* @__PURE__ */
|
|
61
|
+
e && /* @__PURE__ */ X(T, {
|
|
46
62
|
className: "text-base",
|
|
47
63
|
children: e
|
|
48
64
|
}),
|
|
49
|
-
t && /* @__PURE__ */
|
|
50
|
-
n && /* @__PURE__ */
|
|
65
|
+
t && /* @__PURE__ */ X(C, { children: t }),
|
|
66
|
+
n && /* @__PURE__ */ X("button", {
|
|
51
67
|
type: "button",
|
|
52
68
|
className: "absolute right-4 top-4 text-muted-foreground",
|
|
53
69
|
onClick: p,
|
|
54
70
|
"aria-expanded": !u,
|
|
55
71
|
"aria-label": u ? "Expand section" : "Collapse section",
|
|
56
|
-
children:
|
|
72
|
+
children: X(u ? Y : J, { className: "h-4 w-4" })
|
|
57
73
|
})
|
|
58
74
|
]
|
|
59
|
-
}),
|
|
60
|
-
}) : /* @__PURE__ */
|
|
61
|
-
className:
|
|
62
|
-
children: [
|
|
75
|
+
}), g && /* @__PURE__ */ X(S, { children: g })]
|
|
76
|
+
}) : /* @__PURE__ */ Z("div", {
|
|
77
|
+
className: W("form-section", o),
|
|
78
|
+
children: [h, g]
|
|
63
79
|
});
|
|
64
|
-
}
|
|
65
|
-
|
|
80
|
+
};
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/sectionFields.ts
|
|
83
|
+
function le(e, t) {
|
|
84
|
+
return typeof t == "string" && t.trim() ? {
|
|
85
|
+
...e,
|
|
86
|
+
visible: (e) => _(t, e)
|
|
87
|
+
} : e;
|
|
88
|
+
}
|
|
89
|
+
function ue(e, t) {
|
|
90
|
+
let n = t.objectSchema?.fields?.[e];
|
|
91
|
+
return n ? {
|
|
92
|
+
name: e,
|
|
93
|
+
label: t.fieldLabel(t.objectName, e, n.label || e),
|
|
94
|
+
type: y(n.type),
|
|
95
|
+
required: n.required || !1,
|
|
96
|
+
disabled: t.readOnly || t.mode === "view" || n.readonly,
|
|
97
|
+
placeholder: n.placeholder,
|
|
98
|
+
description: n.help || n.description,
|
|
99
|
+
validation: g(n),
|
|
100
|
+
field: n,
|
|
101
|
+
options: n.options,
|
|
102
|
+
multiple: n.multiple
|
|
103
|
+
} : {
|
|
104
|
+
name: e,
|
|
105
|
+
label: e,
|
|
106
|
+
type: "input"
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function de(e, t) {
|
|
110
|
+
if (typeof e == "string") {
|
|
111
|
+
let n = t.objectSchema?.fields?.[e];
|
|
112
|
+
return le(ue(e, t), n?.visible_on ?? n?.visibleOn);
|
|
113
|
+
}
|
|
114
|
+
let n = e;
|
|
115
|
+
if (typeof n.field != "string") return le(n, n.visibleOn);
|
|
116
|
+
let r = n.field, i = ue(r, t);
|
|
117
|
+
return n.type != null && (i.type = y(n.type)), n.widget != null && (i.widget = n.widget), n.label != null && (i.label = n.label), n.placeholder != null && (i.placeholder = n.placeholder), n.helpText != null && (i.description = n.helpText), n.required != null && (i.required = n.required), n.readonly != null && (i.disabled = n.readonly || i.disabled), n.immutable != null && (i.immutable = n.immutable), n.hidden != null && (i.hidden = n.hidden), n.colSpan != null && (i.colSpan = n.colSpan), n.options != null && (i.options = n.options), n.multiple != null && (i.multiple = n.multiple), n.reference != null && (i.reference = n.reference), n.maxLength != null && (i.maxLength = n.maxLength), n.minLength != null && (i.minLength = n.minLength), n.min != null && (i.min = n.min), n.max != null && (i.max = n.max), n.precision != null && (i.precision = n.precision), n.scale != null && (i.scale = n.scale), n.language != null && (i.language = n.language), Array.isArray(n.fields) && (i.fields = n.fields), le(i, n.visibleOn);
|
|
118
|
+
}
|
|
119
|
+
function fe(e, t) {
|
|
120
|
+
return (e.fields ?? []).map((e) => de(e, t));
|
|
121
|
+
}
|
|
122
|
+
//#endregion
|
|
123
|
+
//#region src/TabbedForm.tsx
|
|
124
|
+
var pe = ({ schema: n, dataSource: r, className: i }) => {
|
|
125
|
+
let { fieldLabel: a } = p(), [o, c] = s(null), [u, d] = s({}), [f, m] = s(!0), [h, g] = s(null), [_, v] = s(n.defaultTab || n.sections[0]?.name || n.sections[0]?.label || "tab-0");
|
|
66
126
|
e.useEffect(() => {
|
|
67
127
|
(async () => {
|
|
68
128
|
if (!r) {
|
|
69
|
-
|
|
129
|
+
m(!1);
|
|
70
130
|
return;
|
|
71
131
|
}
|
|
72
132
|
try {
|
|
73
|
-
|
|
133
|
+
c(await r.getObjectSchema(n.objectName));
|
|
74
134
|
} catch (e) {
|
|
75
|
-
|
|
135
|
+
g(e);
|
|
76
136
|
}
|
|
77
137
|
})();
|
|
78
138
|
}, [n.objectName, r]), e.useEffect(() => {
|
|
79
|
-
(
|
|
139
|
+
(o || !r) && (async () => {
|
|
80
140
|
if (n.mode === "create" || !n.recordId || !r) {
|
|
81
|
-
|
|
141
|
+
d(n.initialData || n.initialValues || {}), m(!1);
|
|
82
142
|
return;
|
|
83
143
|
}
|
|
84
144
|
try {
|
|
85
|
-
|
|
145
|
+
d(await r.findOne(n.objectName, n.recordId) || {});
|
|
86
146
|
} catch (e) {
|
|
87
|
-
|
|
147
|
+
g(e);
|
|
88
148
|
} finally {
|
|
89
|
-
|
|
149
|
+
m(!1);
|
|
90
150
|
}
|
|
91
151
|
})();
|
|
92
152
|
}, [
|
|
93
|
-
|
|
153
|
+
o,
|
|
94
154
|
n.mode,
|
|
95
155
|
n.recordId,
|
|
96
156
|
n.initialData,
|
|
@@ -98,38 +158,19 @@ var X = ({ label: e, description: t, collapsible: n = !1, collapsed: r = !1, col
|
|
|
98
158
|
r,
|
|
99
159
|
n.objectName
|
|
100
160
|
]);
|
|
101
|
-
let
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
name: e,
|
|
110
|
-
label: a(n.objectName, e, r.label || e),
|
|
111
|
-
type: p(r.type),
|
|
112
|
-
required: r.required || !1,
|
|
113
|
-
disabled: n.readOnly || n.mode === "view" || r.readonly,
|
|
114
|
-
placeholder: r.placeholder,
|
|
115
|
-
description: r.help || r.description,
|
|
116
|
-
validation: u(r),
|
|
117
|
-
field: r,
|
|
118
|
-
options: r.options,
|
|
119
|
-
multiple: r.multiple
|
|
120
|
-
});
|
|
121
|
-
} else t.push({
|
|
122
|
-
name: e,
|
|
123
|
-
label: e,
|
|
124
|
-
type: "input"
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
return t;
|
|
128
|
-
}, [
|
|
129
|
-
s,
|
|
161
|
+
let y = t((e) => fe(e, {
|
|
162
|
+
objectSchema: o,
|
|
163
|
+
objectName: n.objectName,
|
|
164
|
+
readOnly: n.readOnly,
|
|
165
|
+
mode: n.mode,
|
|
166
|
+
fieldLabel: a
|
|
167
|
+
}), [
|
|
168
|
+
o,
|
|
130
169
|
n.readOnly,
|
|
131
|
-
n.mode
|
|
132
|
-
|
|
170
|
+
n.mode,
|
|
171
|
+
n.objectName,
|
|
172
|
+
a
|
|
173
|
+
]), b = t(async (e) => {
|
|
133
174
|
if (!r) return n.onSuccess && await n.onSuccess(e), e;
|
|
134
175
|
try {
|
|
135
176
|
let t;
|
|
@@ -137,101 +178,101 @@ var X = ({ label: e, description: t, collapsible: n = !1, collapsed: r = !1, col
|
|
|
137
178
|
} catch (e) {
|
|
138
179
|
throw n.onError && n.onError(e), e;
|
|
139
180
|
}
|
|
140
|
-
}, [n, r]),
|
|
181
|
+
}, [n, r]), x = t(() => {
|
|
141
182
|
n.onCancel && n.onCancel();
|
|
142
|
-
}, [n]),
|
|
143
|
-
if (
|
|
183
|
+
}, [n]), S = (e, t) => e.name || e.label || `tab-${t}`;
|
|
184
|
+
if (h) return /* @__PURE__ */ Z("div", {
|
|
144
185
|
className: "p-4 border border-red-300 bg-red-50 rounded-md",
|
|
145
|
-
children: [/* @__PURE__ */
|
|
186
|
+
children: [/* @__PURE__ */ X("h3", {
|
|
146
187
|
className: "text-red-800 font-semibold",
|
|
147
188
|
children: "Error loading form"
|
|
148
|
-
}), /* @__PURE__ */
|
|
189
|
+
}), /* @__PURE__ */ X("p", {
|
|
149
190
|
className: "text-red-600 text-sm mt-1",
|
|
150
|
-
children:
|
|
191
|
+
children: h.message
|
|
151
192
|
})]
|
|
152
193
|
});
|
|
153
|
-
if (
|
|
194
|
+
if (f) return /* @__PURE__ */ Z("div", {
|
|
154
195
|
className: "p-8 text-center",
|
|
155
|
-
children: [/* @__PURE__ */
|
|
196
|
+
children: [/* @__PURE__ */ X("div", { className: "inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900" }), /* @__PURE__ */ X("p", {
|
|
156
197
|
className: "mt-2 text-sm text-gray-600",
|
|
157
198
|
children: "Loading form..."
|
|
158
199
|
})]
|
|
159
200
|
});
|
|
160
|
-
let
|
|
201
|
+
let C = {
|
|
161
202
|
type: "form",
|
|
162
|
-
fields: n.sections.flatMap((e) =>
|
|
203
|
+
fields: n.sections.flatMap((e) => y(e)),
|
|
163
204
|
layout: "vertical",
|
|
164
|
-
defaultValues:
|
|
205
|
+
defaultValues: u,
|
|
165
206
|
submitLabel: n.submitText || (n.mode === "create" ? "Create" : "Update"),
|
|
166
207
|
cancelLabel: n.cancelText,
|
|
167
208
|
showSubmit: n.showSubmit !== !1 && n.mode !== "view",
|
|
168
209
|
showCancel: n.showCancel !== !1,
|
|
169
|
-
onSubmit:
|
|
170
|
-
onCancel:
|
|
171
|
-
},
|
|
172
|
-
return /* @__PURE__ */
|
|
173
|
-
className:
|
|
174
|
-
children: /* @__PURE__ */
|
|
175
|
-
value:
|
|
176
|
-
onValueChange:
|
|
177
|
-
orientation:
|
|
178
|
-
className:
|
|
179
|
-
children: [/* @__PURE__ */
|
|
180
|
-
className:
|
|
181
|
-
children: n.sections.map((e, t) => /* @__PURE__ */
|
|
182
|
-
value:
|
|
183
|
-
className:
|
|
210
|
+
onSubmit: b,
|
|
211
|
+
onCancel: x
|
|
212
|
+
}, w = n.tabPosition === "left" || n.tabPosition === "right";
|
|
213
|
+
return /* @__PURE__ */ X("div", {
|
|
214
|
+
className: W("w-full", i, n.className),
|
|
215
|
+
children: /* @__PURE__ */ Z(B, {
|
|
216
|
+
value: _,
|
|
217
|
+
onValueChange: v,
|
|
218
|
+
orientation: w ? "vertical" : "horizontal",
|
|
219
|
+
className: W(w && "flex gap-4"),
|
|
220
|
+
children: [/* @__PURE__ */ X(H, {
|
|
221
|
+
className: W(w ? "flex-col h-auto" : "", n.tabPosition === "bottom" && "order-last", n.tabPosition === "right" && "order-last"),
|
|
222
|
+
children: n.sections.map((e, t) => /* @__PURE__ */ X(U, {
|
|
223
|
+
value: S(e, t),
|
|
224
|
+
className: w ? "w-full justify-start" : "",
|
|
184
225
|
children: e.label || `Tab ${t + 1}`
|
|
185
|
-
},
|
|
186
|
-
}), /* @__PURE__ */
|
|
226
|
+
}, S(e, t)))
|
|
227
|
+
}), /* @__PURE__ */ X("div", {
|
|
187
228
|
className: "flex-1",
|
|
188
|
-
children: n.sections.map((e, t) => /* @__PURE__ */
|
|
189
|
-
value:
|
|
229
|
+
children: n.sections.map((e, t) => /* @__PURE__ */ X(V, {
|
|
230
|
+
value: S(e, t),
|
|
190
231
|
className: "mt-0",
|
|
191
|
-
children: /* @__PURE__ */
|
|
232
|
+
children: /* @__PURE__ */ X(Q, {
|
|
192
233
|
description: e.description,
|
|
193
234
|
columns: e.columns || 1,
|
|
194
|
-
children: /* @__PURE__ */
|
|
195
|
-
...
|
|
196
|
-
fields:
|
|
235
|
+
children: /* @__PURE__ */ X(l, { schema: {
|
|
236
|
+
...C,
|
|
237
|
+
fields: y(e),
|
|
197
238
|
showSubmit: n.showSubmit !== !1 && n.mode !== "view",
|
|
198
239
|
showCancel: n.showCancel !== !1
|
|
199
240
|
} })
|
|
200
241
|
})
|
|
201
|
-
},
|
|
242
|
+
}, S(e, t)))
|
|
202
243
|
})]
|
|
203
244
|
})
|
|
204
245
|
});
|
|
205
|
-
},
|
|
206
|
-
let { fieldLabel:
|
|
246
|
+
}, me = ({ schema: n, dataSource: r, className: i }) => {
|
|
247
|
+
let { fieldLabel: o } = p(), [c, u] = s(null), [d, f] = s({}), [m, h] = s(!0), [g, _] = s(null), [v, y] = s(0), [x, S] = s(/* @__PURE__ */ new Set()), [C, w] = s(!1), T = e.useId(), [E, D] = s(0), O = e.useRef(!1), k = n.sections.length, A = v === 0, j = v === k - 1;
|
|
207
248
|
e.useEffect(() => {
|
|
208
249
|
(async () => {
|
|
209
250
|
if (!r) {
|
|
210
|
-
|
|
251
|
+
h(!1);
|
|
211
252
|
return;
|
|
212
253
|
}
|
|
213
254
|
try {
|
|
214
|
-
|
|
255
|
+
u(await r.getObjectSchema(n.objectName));
|
|
215
256
|
} catch (e) {
|
|
216
|
-
|
|
257
|
+
_(e);
|
|
217
258
|
}
|
|
218
259
|
})();
|
|
219
260
|
}, [n.objectName, r]), e.useEffect(() => {
|
|
220
|
-
(
|
|
261
|
+
(c || !r) && (async () => {
|
|
221
262
|
if (n.mode === "create" || !n.recordId || !r) {
|
|
222
|
-
|
|
263
|
+
O.current ||= (f(n.initialData || n.initialValues || {}), !0), h(!1);
|
|
223
264
|
return;
|
|
224
265
|
}
|
|
225
266
|
try {
|
|
226
|
-
|
|
267
|
+
f(await r.findOne(n.objectName, n.recordId) || {});
|
|
227
268
|
} catch (e) {
|
|
228
|
-
|
|
269
|
+
_(e);
|
|
229
270
|
} finally {
|
|
230
|
-
|
|
271
|
+
h(!1);
|
|
231
272
|
}
|
|
232
273
|
})();
|
|
233
274
|
}, [
|
|
234
|
-
|
|
275
|
+
c,
|
|
235
276
|
n.mode,
|
|
236
277
|
n.recordId,
|
|
237
278
|
n.initialData,
|
|
@@ -239,129 +280,112 @@ var X = ({ label: e, description: t, collapsible: n = !1, collapsed: r = !1, col
|
|
|
239
280
|
r,
|
|
240
281
|
n.objectName
|
|
241
282
|
]);
|
|
242
|
-
let
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
else if (f?.fields?.[e]) {
|
|
251
|
-
let i = f.fields[e];
|
|
252
|
-
t.push(r({
|
|
253
|
-
name: e,
|
|
254
|
-
label: s(n.objectName, e, i.label || e),
|
|
255
|
-
type: p(i.type),
|
|
256
|
-
required: i.required || !1,
|
|
257
|
-
disabled: n.readOnly || n.mode === "view" || i.readonly,
|
|
258
|
-
placeholder: i.placeholder,
|
|
259
|
-
description: i.help || i.description,
|
|
260
|
-
validation: u(i),
|
|
261
|
-
field: i,
|
|
262
|
-
options: i.options,
|
|
263
|
-
multiple: i.multiple
|
|
264
|
-
}, i.visible_on ?? i.visibleOn));
|
|
265
|
-
} else t.push({
|
|
266
|
-
name: e,
|
|
267
|
-
label: e,
|
|
268
|
-
type: "input"
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
return t;
|
|
272
|
-
}, [
|
|
273
|
-
f,
|
|
283
|
+
let M = t((e) => fe(e, {
|
|
284
|
+
objectSchema: c,
|
|
285
|
+
objectName: n.objectName,
|
|
286
|
+
readOnly: n.readOnly,
|
|
287
|
+
mode: n.mode,
|
|
288
|
+
fieldLabel: o
|
|
289
|
+
}), [
|
|
290
|
+
c,
|
|
274
291
|
n.readOnly,
|
|
275
292
|
n.mode,
|
|
276
|
-
n.objectName
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
293
|
+
n.objectName,
|
|
294
|
+
o
|
|
295
|
+
]), N = a(() => v >= 0 && v < k ? M(n.sections[v]) : [], [
|
|
296
|
+
v,
|
|
297
|
+
k,
|
|
280
298
|
n.sections,
|
|
281
|
-
|
|
282
|
-
]),
|
|
299
|
+
M
|
|
300
|
+
]), P = t(async (e) => {
|
|
283
301
|
let t = {
|
|
284
|
-
...
|
|
302
|
+
...d,
|
|
285
303
|
...e
|
|
286
304
|
};
|
|
287
|
-
if (
|
|
288
|
-
|
|
305
|
+
if (f(t), S((e) => new Set(e).add(v)), j) {
|
|
306
|
+
w(!0);
|
|
289
307
|
try {
|
|
290
308
|
if (!r) return n.onSuccess && await n.onSuccess(t), t;
|
|
291
309
|
let e;
|
|
292
|
-
|
|
310
|
+
if (n.mode === "create" ? e = await r.create(n.objectName, t) : n.mode === "edit" && n.recordId && (e = await r.update(n.objectName, n.recordId, t)), n.onSuccess) await n.onSuccess(e);
|
|
311
|
+
else {
|
|
312
|
+
let t = ce(n.navigateOnSuccess, e);
|
|
313
|
+
if (t) return window.location.assign(t), e;
|
|
314
|
+
G.success(n.successMessage || (n.mode === "create" ? "Created" : "Saved")), n.resetOnSuccess && n.mode === "create" && (f({}), S(/* @__PURE__ */ new Set()), y(0), D((e) => e + 1));
|
|
315
|
+
}
|
|
316
|
+
return e;
|
|
293
317
|
} catch (e) {
|
|
294
318
|
throw n.onError && n.onError(e), e;
|
|
295
319
|
} finally {
|
|
296
|
-
|
|
320
|
+
w(!1);
|
|
297
321
|
}
|
|
298
|
-
} else
|
|
322
|
+
} else F(v + 1);
|
|
299
323
|
}, [
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
324
|
+
d,
|
|
325
|
+
v,
|
|
326
|
+
j,
|
|
303
327
|
n,
|
|
304
328
|
r
|
|
305
|
-
]),
|
|
306
|
-
e >= 0 && e <
|
|
307
|
-
}, [
|
|
308
|
-
|
|
309
|
-
}, [
|
|
329
|
+
]), F = t((e) => {
|
|
330
|
+
e >= 0 && e < k && (y(e), n.onStepChange && n.onStepChange(e));
|
|
331
|
+
}, [k, n]), I = t(() => {
|
|
332
|
+
F(v - 1);
|
|
333
|
+
}, [v, F]), L = t(() => {
|
|
310
334
|
n.onCancel && n.onCancel();
|
|
311
|
-
}, [n]),
|
|
312
|
-
(n.allowSkip ||
|
|
335
|
+
}, [n]), R = t((e) => {
|
|
336
|
+
(n.allowSkip || x.has(e) || e <= v) && F(e);
|
|
313
337
|
}, [
|
|
314
338
|
n.allowSkip,
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
339
|
+
x,
|
|
340
|
+
v,
|
|
341
|
+
F
|
|
318
342
|
]);
|
|
319
|
-
if (
|
|
343
|
+
if (g) return /* @__PURE__ */ Z("div", {
|
|
320
344
|
className: "p-4 border border-red-300 bg-red-50 rounded-md",
|
|
321
|
-
children: [/* @__PURE__ */
|
|
345
|
+
children: [/* @__PURE__ */ X("h3", {
|
|
322
346
|
className: "text-red-800 font-semibold",
|
|
323
347
|
children: "Error loading form"
|
|
324
|
-
}), /* @__PURE__ */
|
|
348
|
+
}), /* @__PURE__ */ X("p", {
|
|
325
349
|
className: "text-red-600 text-sm mt-1",
|
|
326
|
-
children:
|
|
350
|
+
children: g.message
|
|
327
351
|
})]
|
|
328
352
|
});
|
|
329
|
-
if (
|
|
353
|
+
if (m) return /* @__PURE__ */ Z("div", {
|
|
330
354
|
className: "p-8 text-center",
|
|
331
|
-
children: [/* @__PURE__ */
|
|
355
|
+
children: [/* @__PURE__ */ X("div", { className: "inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900" }), /* @__PURE__ */ X("p", {
|
|
332
356
|
className: "mt-2 text-sm text-gray-600",
|
|
333
357
|
children: "Loading form..."
|
|
334
358
|
})]
|
|
335
359
|
});
|
|
336
|
-
let z = n.sections[
|
|
337
|
-
return /* @__PURE__ */
|
|
338
|
-
className:
|
|
360
|
+
let z = n.sections[v];
|
|
361
|
+
return /* @__PURE__ */ Z("div", {
|
|
362
|
+
className: W("w-full", i, n.className),
|
|
339
363
|
children: [
|
|
340
|
-
n.showStepIndicator !== !1 && /* @__PURE__ */
|
|
364
|
+
n.showStepIndicator !== !1 && /* @__PURE__ */ X("nav", {
|
|
341
365
|
"aria-label": "Progress",
|
|
342
366
|
className: "mb-8",
|
|
343
|
-
children: /* @__PURE__ */
|
|
367
|
+
children: /* @__PURE__ */ X("ol", {
|
|
344
368
|
className: "flex items-center",
|
|
345
369
|
children: n.sections.map((e, t) => {
|
|
346
|
-
let r = t ===
|
|
347
|
-
return /* @__PURE__ */
|
|
348
|
-
className:
|
|
349
|
-
children: [t !==
|
|
370
|
+
let r = t === v, i = x.has(t), a = n.allowSkip || i || t <= v;
|
|
371
|
+
return /* @__PURE__ */ Z("li", {
|
|
372
|
+
className: W("relative flex-1", t !== k - 1 && "pr-8 sm:pr-12"),
|
|
373
|
+
children: [t !== k - 1 && /* @__PURE__ */ X("div", {
|
|
350
374
|
className: "absolute top-3 sm:top-4 left-6 -right-4 sm:left-10 sm:-right-2 h-0.5",
|
|
351
375
|
"aria-hidden": "true",
|
|
352
|
-
children: /* @__PURE__ */
|
|
353
|
-
}), /* @__PURE__ */
|
|
376
|
+
children: /* @__PURE__ */ X("div", { className: W("h-full", i ? "bg-primary" : "bg-muted") })
|
|
377
|
+
}), /* @__PURE__ */ Z("button", {
|
|
354
378
|
type: "button",
|
|
355
|
-
className:
|
|
356
|
-
onClick: () =>
|
|
379
|
+
className: W("group relative flex items-center", a ? "cursor-pointer" : "cursor-not-allowed"),
|
|
380
|
+
onClick: () => R(t),
|
|
357
381
|
disabled: !a,
|
|
358
|
-
children: [/* @__PURE__ */
|
|
359
|
-
className:
|
|
360
|
-
children: i ? /* @__PURE__ */
|
|
361
|
-
}), /* @__PURE__ */
|
|
382
|
+
children: [/* @__PURE__ */ X("span", {
|
|
383
|
+
className: W("flex h-6 w-6 sm:h-8 sm:w-8 items-center justify-center rounded-full text-xs sm:text-sm font-medium transition-colors", i && "bg-primary text-primary-foreground", r && !i && "border-2 border-primary bg-background text-primary", !r && !i && "border-2 border-muted bg-background text-muted-foreground"),
|
|
384
|
+
children: i ? /* @__PURE__ */ X(q, { className: "h-3 w-3 sm:h-4 sm:w-4" }) : t + 1
|
|
385
|
+
}), /* @__PURE__ */ X("span", {
|
|
362
386
|
className: "ml-2 sm:ml-3 text-xs sm:text-sm font-medium hidden sm:block",
|
|
363
|
-
children: /* @__PURE__ */
|
|
364
|
-
className:
|
|
387
|
+
children: /* @__PURE__ */ X("span", {
|
|
388
|
+
className: W(r ? "text-foreground" : "text-muted-foreground"),
|
|
365
389
|
children: e.label || `Step ${t + 1}`
|
|
366
390
|
})
|
|
367
391
|
})]
|
|
@@ -370,186 +394,168 @@ var X = ({ label: e, description: t, collapsible: n = !1, collapsed: r = !1, col
|
|
|
370
394
|
})
|
|
371
395
|
})
|
|
372
396
|
}),
|
|
373
|
-
/* @__PURE__ */
|
|
397
|
+
/* @__PURE__ */ X("div", {
|
|
374
398
|
className: "min-h-[200px]",
|
|
375
|
-
children: z && /* @__PURE__ */
|
|
399
|
+
children: z && /* @__PURE__ */ X(Q, {
|
|
376
400
|
label: z.label,
|
|
377
401
|
description: z.description,
|
|
378
402
|
columns: z.columns || 1,
|
|
379
|
-
children:
|
|
403
|
+
children: N.length > 0 ? /* @__PURE__ */ X(l, { schema: {
|
|
380
404
|
type: "form",
|
|
381
|
-
|
|
405
|
+
objectName: n.objectName,
|
|
406
|
+
id: T,
|
|
407
|
+
fields: N,
|
|
382
408
|
layout: "vertical",
|
|
383
|
-
defaultValues:
|
|
409
|
+
defaultValues: d,
|
|
384
410
|
showSubmit: !1,
|
|
385
411
|
showCancel: !1,
|
|
386
|
-
onSubmit:
|
|
387
|
-
} }) : /* @__PURE__ */
|
|
412
|
+
onSubmit: P
|
|
413
|
+
} }, E) : /* @__PURE__ */ X("div", {
|
|
388
414
|
className: "text-center py-8 text-muted-foreground",
|
|
389
415
|
children: "No fields configured for this step"
|
|
390
416
|
})
|
|
391
417
|
})
|
|
392
418
|
}),
|
|
393
|
-
/* @__PURE__ */
|
|
419
|
+
/* @__PURE__ */ Z("div", {
|
|
394
420
|
className: "flex items-center justify-between mt-6 pt-4 border-t",
|
|
395
|
-
children: [/* @__PURE__ */
|
|
421
|
+
children: [/* @__PURE__ */ X("div", { children: n.showCancel !== !1 && /* @__PURE__ */ X(b, {
|
|
396
422
|
variant: "ghost",
|
|
397
|
-
onClick:
|
|
423
|
+
onClick: L,
|
|
398
424
|
children: n.cancelText || "Cancel"
|
|
399
|
-
}) }), /* @__PURE__ */
|
|
425
|
+
}) }), /* @__PURE__ */ Z("div", {
|
|
400
426
|
className: "flex items-center gap-2",
|
|
401
427
|
children: [
|
|
402
|
-
/* @__PURE__ */
|
|
428
|
+
/* @__PURE__ */ Z("span", {
|
|
403
429
|
className: "text-sm text-muted-foreground mr-2",
|
|
404
430
|
children: [
|
|
405
431
|
"Step ",
|
|
406
|
-
|
|
432
|
+
v + 1,
|
|
407
433
|
" of ",
|
|
408
|
-
|
|
434
|
+
k
|
|
409
435
|
]
|
|
410
436
|
}),
|
|
411
|
-
!
|
|
437
|
+
!A && /* @__PURE__ */ Z(b, {
|
|
412
438
|
variant: "outline",
|
|
413
|
-
onClick:
|
|
414
|
-
children: [/* @__PURE__ */
|
|
439
|
+
onClick: I,
|
|
440
|
+
children: [/* @__PURE__ */ X(ne, { className: "h-4 w-4 mr-1" }), n.prevText || "Back"]
|
|
415
441
|
}),
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
442
|
+
j ? /* @__PURE__ */ Z(b, {
|
|
443
|
+
type: "submit",
|
|
444
|
+
form: T,
|
|
445
|
+
disabled: C || n.mode === "view",
|
|
446
|
+
children: [C && /* @__PURE__ */ X(re, {
|
|
420
447
|
className: "mr-2 h-4 w-4 animate-spin",
|
|
421
448
|
"aria-hidden": !0
|
|
422
|
-
}),
|
|
423
|
-
}) : /* @__PURE__ */
|
|
424
|
-
|
|
425
|
-
|
|
449
|
+
}), C ? "Submitting..." : n.submitText || (n.mode === "create" ? "Create" : "Update")]
|
|
450
|
+
}) : /* @__PURE__ */ Z(b, {
|
|
451
|
+
type: "submit",
|
|
452
|
+
form: T,
|
|
453
|
+
children: [n.nextText || "Next", /* @__PURE__ */ X(Y, { className: "h-4 w-4 ml-1" })]
|
|
426
454
|
})
|
|
427
455
|
]
|
|
428
456
|
})]
|
|
429
457
|
})
|
|
430
458
|
]
|
|
431
459
|
});
|
|
432
|
-
},
|
|
433
|
-
let { fieldLabel:
|
|
434
|
-
|
|
460
|
+
}, he = ({ schema: e, dataSource: n, className: i }) => {
|
|
461
|
+
let { fieldLabel: o } = p(), [c, u] = s(null), [d, f] = s({}), [m, h] = s(!0), [g, _] = s(null);
|
|
462
|
+
r(() => {
|
|
435
463
|
(async () => {
|
|
436
|
-
if (!
|
|
437
|
-
|
|
464
|
+
if (!n) {
|
|
465
|
+
h(!1);
|
|
438
466
|
return;
|
|
439
467
|
}
|
|
440
468
|
try {
|
|
441
|
-
|
|
469
|
+
u(await n.getObjectSchema(e.objectName));
|
|
442
470
|
} catch (e) {
|
|
443
|
-
|
|
471
|
+
_(e), h(!1);
|
|
444
472
|
}
|
|
445
473
|
})();
|
|
446
|
-
}, [e.objectName,
|
|
447
|
-
(
|
|
474
|
+
}, [e.objectName, n]), r(() => {
|
|
475
|
+
(c || !n) && (async () => {
|
|
448
476
|
if (e.mode === "create" || !e.recordId) {
|
|
449
|
-
|
|
477
|
+
f(e.initialData || e.initialValues || {}), h(!1);
|
|
450
478
|
return;
|
|
451
479
|
}
|
|
452
|
-
if (!
|
|
453
|
-
|
|
480
|
+
if (!n) {
|
|
481
|
+
f(e.initialData || e.initialValues || {}), h(!1);
|
|
454
482
|
return;
|
|
455
483
|
}
|
|
456
484
|
try {
|
|
457
|
-
|
|
485
|
+
f(await n.findOne(e.objectName, e.recordId) || {});
|
|
458
486
|
} catch (e) {
|
|
459
|
-
|
|
487
|
+
_(e);
|
|
460
488
|
} finally {
|
|
461
|
-
|
|
489
|
+
h(!1);
|
|
462
490
|
}
|
|
463
491
|
})();
|
|
464
492
|
}, [
|
|
465
|
-
|
|
493
|
+
c,
|
|
466
494
|
e.mode,
|
|
467
495
|
e.recordId,
|
|
468
496
|
e.initialData,
|
|
469
497
|
e.initialValues,
|
|
470
|
-
|
|
498
|
+
n,
|
|
471
499
|
e.objectName
|
|
472
500
|
]);
|
|
473
|
-
let
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
else if (f?.fields?.[t]) {
|
|
482
|
-
let i = f.fields[t];
|
|
483
|
-
n.push(r({
|
|
484
|
-
name: t,
|
|
485
|
-
label: s(e.objectName, t, i.label || t),
|
|
486
|
-
type: p(i.type),
|
|
487
|
-
required: i.required || !1,
|
|
488
|
-
disabled: e.readOnly || e.mode === "view" || i.readonly,
|
|
489
|
-
placeholder: i.placeholder,
|
|
490
|
-
description: i.help || i.description,
|
|
491
|
-
validation: u(i),
|
|
492
|
-
field: i,
|
|
493
|
-
options: i.options,
|
|
494
|
-
multiple: i.multiple
|
|
495
|
-
}, i.visible_on ?? i.visibleOn));
|
|
496
|
-
} else n.push({
|
|
497
|
-
name: t,
|
|
498
|
-
label: t,
|
|
499
|
-
type: "input"
|
|
500
|
-
});
|
|
501
|
-
}
|
|
502
|
-
return n;
|
|
503
|
-
}, [
|
|
504
|
-
f,
|
|
501
|
+
let v = t((t) => fe(t, {
|
|
502
|
+
objectSchema: c,
|
|
503
|
+
objectName: e.objectName,
|
|
504
|
+
readOnly: e.readOnly,
|
|
505
|
+
mode: e.mode,
|
|
506
|
+
fieldLabel: o
|
|
507
|
+
}), [
|
|
508
|
+
c,
|
|
505
509
|
e.readOnly,
|
|
506
510
|
e.mode,
|
|
507
|
-
e.objectName
|
|
508
|
-
|
|
509
|
-
|
|
511
|
+
e.objectName,
|
|
512
|
+
o
|
|
513
|
+
]), y = t(async (t) => {
|
|
514
|
+
if (!n) return e.onSuccess && await e.onSuccess(t), t;
|
|
510
515
|
try {
|
|
511
|
-
let
|
|
512
|
-
return e.mode === "create" ?
|
|
516
|
+
let r;
|
|
517
|
+
return e.mode === "create" ? r = await n.create(e.objectName, t) : e.mode === "edit" && e.recordId && (r = await n.update(e.objectName, e.recordId, t)), e.onSuccess && await e.onSuccess(r), r;
|
|
513
518
|
} catch (t) {
|
|
514
519
|
throw e.onError && e.onError(t), t;
|
|
515
520
|
}
|
|
516
|
-
}, [e,
|
|
521
|
+
}, [e, n]), b = t(() => {
|
|
517
522
|
e.onCancel && e.onCancel();
|
|
518
|
-
}, [e]),
|
|
519
|
-
|
|
520
|
-
let
|
|
521
|
-
if (
|
|
523
|
+
}, [e]), x = a(() => e.sections.slice(0, 1), [e.sections]), S = a(() => e.sections.slice(1), [e.sections]);
|
|
524
|
+
a(() => e.sections.flatMap((e) => v(e)), [e.sections, v]);
|
|
525
|
+
let C = e.splitDirection || "horizontal", w = e.splitSize || 50;
|
|
526
|
+
if (g) return /* @__PURE__ */ Z("div", {
|
|
522
527
|
className: "p-4 border border-red-300 bg-red-50 rounded-md",
|
|
523
|
-
children: [/* @__PURE__ */
|
|
528
|
+
children: [/* @__PURE__ */ X("h3", {
|
|
524
529
|
className: "text-red-800 font-semibold",
|
|
525
530
|
children: "Error loading form"
|
|
526
|
-
}), /* @__PURE__ */
|
|
531
|
+
}), /* @__PURE__ */ X("p", {
|
|
527
532
|
className: "text-red-600 text-sm mt-1",
|
|
528
|
-
children:
|
|
533
|
+
children: g.message
|
|
529
534
|
})]
|
|
530
535
|
});
|
|
531
|
-
if (
|
|
536
|
+
if (m) return /* @__PURE__ */ Z("div", {
|
|
532
537
|
className: "p-8 text-center",
|
|
533
|
-
children: [/* @__PURE__ */
|
|
538
|
+
children: [/* @__PURE__ */ X("div", { className: "inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900" }), /* @__PURE__ */ X("p", {
|
|
534
539
|
className: "mt-2 text-sm text-gray-600",
|
|
535
540
|
children: "Loading form..."
|
|
536
541
|
})]
|
|
537
542
|
});
|
|
538
|
-
let
|
|
543
|
+
let T = {
|
|
539
544
|
type: "form",
|
|
545
|
+
objectName: e.objectName,
|
|
540
546
|
layout: "vertical",
|
|
541
|
-
defaultValues:
|
|
542
|
-
onSubmit:
|
|
543
|
-
onCancel:
|
|
544
|
-
},
|
|
547
|
+
defaultValues: d,
|
|
548
|
+
onSubmit: y,
|
|
549
|
+
onCancel: b
|
|
550
|
+
}, E = (t, n) => /* @__PURE__ */ X("div", {
|
|
545
551
|
className: "space-y-4 p-4",
|
|
546
|
-
children: t.map((t, r) => /* @__PURE__ */
|
|
552
|
+
children: t.map((t, r) => /* @__PURE__ */ X(Q, {
|
|
547
553
|
label: t.label,
|
|
548
554
|
description: t.description,
|
|
549
555
|
columns: t.columns || 1,
|
|
550
|
-
children: /* @__PURE__ */
|
|
551
|
-
...
|
|
552
|
-
fields:
|
|
556
|
+
children: /* @__PURE__ */ X(l, { schema: {
|
|
557
|
+
...T,
|
|
558
|
+
fields: v(t),
|
|
553
559
|
showSubmit: n && e.showSubmit !== !1 && e.mode !== "view",
|
|
554
560
|
showCancel: n && e.showCancel !== !1,
|
|
555
561
|
submitLabel: e.submitText || (e.mode === "create" ? "Create" : "Update"),
|
|
@@ -557,28 +563,787 @@ var X = ({ label: e, description: t, collapsible: n = !1, collapsed: r = !1, col
|
|
|
557
563
|
} })
|
|
558
564
|
}, t.name || t.label || r))
|
|
559
565
|
});
|
|
560
|
-
return /* @__PURE__ */
|
|
561
|
-
className:
|
|
562
|
-
children: /* @__PURE__ */
|
|
563
|
-
orientation:
|
|
566
|
+
return /* @__PURE__ */ X("div", {
|
|
567
|
+
className: W("w-full", i, e.className),
|
|
568
|
+
children: /* @__PURE__ */ Z(N, {
|
|
569
|
+
orientation: C,
|
|
564
570
|
className: "min-h-[300px] rounded-lg border",
|
|
565
|
-
children: [/* @__PURE__ */
|
|
566
|
-
defaultSize:
|
|
571
|
+
children: [/* @__PURE__ */ X(M, {
|
|
572
|
+
defaultSize: w,
|
|
567
573
|
minSize: 20,
|
|
568
|
-
children:
|
|
569
|
-
}),
|
|
570
|
-
defaultSize: 100 -
|
|
574
|
+
children: E(x, S.length === 0)
|
|
575
|
+
}), S.length > 0 && /* @__PURE__ */ Z(oe, { children: [/* @__PURE__ */ X(j, { withHandle: e.splitResizable !== !1 }), /* @__PURE__ */ X(M, {
|
|
576
|
+
defaultSize: 100 - w,
|
|
571
577
|
minSize: 20,
|
|
572
|
-
children:
|
|
578
|
+
children: E(S, !0)
|
|
573
579
|
})] })]
|
|
574
580
|
})
|
|
575
581
|
});
|
|
576
|
-
},
|
|
582
|
+
}, $ = (e) => e == null ? void 0 : e.id ?? e._id ?? e.recordId, ge = new Set([
|
|
583
|
+
"id",
|
|
584
|
+
"_id",
|
|
585
|
+
"recordId"
|
|
586
|
+
]);
|
|
587
|
+
function _e(e, t) {
|
|
588
|
+
return e ? Object.entries(e).every(([e, n]) => e === t || ge.has(e) ? !0 : n == null || n === "") : !0;
|
|
589
|
+
}
|
|
590
|
+
function ve(e, t, n) {
|
|
591
|
+
let r = [{
|
|
592
|
+
object: e,
|
|
593
|
+
action: "create",
|
|
594
|
+
data: t
|
|
595
|
+
}];
|
|
596
|
+
for (let e of n) for (let t of e.rows) _e(t, e.relationshipField) || r.push({
|
|
597
|
+
object: e.childObject,
|
|
598
|
+
action: "create",
|
|
599
|
+
data: {
|
|
600
|
+
...t,
|
|
601
|
+
[e.relationshipField]: { $ref: 0 }
|
|
602
|
+
}
|
|
603
|
+
});
|
|
604
|
+
return r;
|
|
605
|
+
}
|
|
606
|
+
function ye(e, t, n, r) {
|
|
607
|
+
let i = [{
|
|
608
|
+
object: e,
|
|
609
|
+
action: "update",
|
|
610
|
+
id: t,
|
|
611
|
+
data: n
|
|
612
|
+
}];
|
|
613
|
+
for (let e of r) {
|
|
614
|
+
let n = (e.rows || []).map((n) => ({
|
|
615
|
+
...n,
|
|
616
|
+
[e.relationshipField]: t
|
|
617
|
+
})), { toCreate: r, toUpdate: a, toDelete: o } = be(e.original || [], n);
|
|
618
|
+
for (let t of r) {
|
|
619
|
+
if (_e(t, e.relationshipField)) continue;
|
|
620
|
+
let { id: n, _id: r, recordId: a, ...o } = t;
|
|
621
|
+
i.push({
|
|
622
|
+
object: e.childObject,
|
|
623
|
+
action: "create",
|
|
624
|
+
data: o
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
for (let t of a) i.push({
|
|
628
|
+
object: e.childObject,
|
|
629
|
+
action: "update",
|
|
630
|
+
id: $(t),
|
|
631
|
+
data: t
|
|
632
|
+
});
|
|
633
|
+
for (let t of o) i.push({
|
|
634
|
+
object: e.childObject,
|
|
635
|
+
action: "delete",
|
|
636
|
+
id: t
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
return i;
|
|
640
|
+
}
|
|
641
|
+
function be(e, t) {
|
|
642
|
+
let n = new Set(t.map($).filter(Boolean));
|
|
643
|
+
return {
|
|
644
|
+
toCreate: t.filter((e) => !$(e)),
|
|
645
|
+
toUpdate: t.filter((e) => $(e)),
|
|
646
|
+
toDelete: (e || []).map($).filter((e) => !!e && !n.has(e))
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
function xe(e, t) {
|
|
650
|
+
return Array.isArray(e) ? e.reduce((e, n) => {
|
|
651
|
+
let r = Number(n?.[t]);
|
|
652
|
+
return e + (Number.isFinite(r) ? r : 0);
|
|
653
|
+
}, 0) : 0;
|
|
654
|
+
}
|
|
655
|
+
function Se(e) {
|
|
656
|
+
return Array.isArray(e) ? e : e && Array.isArray(e.records) ? e.records : e && Array.isArray(e.data) ? e.data : e && (e.id || e._id) ? [e] : [];
|
|
657
|
+
}
|
|
658
|
+
async function Ce(e, t, n) {
|
|
659
|
+
return n.length === 0 ? [] : typeof e.bulk == "function" ? Se(await e.bulk(t, "create", n)) : Se(await Promise.all(n.map((n) => e.create(t, n))));
|
|
660
|
+
}
|
|
661
|
+
async function we(e, t, n, r) {
|
|
662
|
+
let i = [], a = r.rows.filter((e) => $(e) || !_e(e, r.relationshipField)).map((e) => ({
|
|
663
|
+
...e,
|
|
664
|
+
[r.relationshipField]: n
|
|
665
|
+
}));
|
|
666
|
+
if (r.original !== void 0) {
|
|
667
|
+
let { toCreate: t, toUpdate: n, toDelete: o } = be(r.original, a), s = await Ce(e, r.childObject, t);
|
|
668
|
+
for (let e of s) {
|
|
669
|
+
let t = $(e);
|
|
670
|
+
t && i.push({
|
|
671
|
+
object: r.childObject,
|
|
672
|
+
id: t
|
|
673
|
+
});
|
|
674
|
+
}
|
|
675
|
+
await Promise.all(n.map((t) => e.update(r.childObject, $(t), t))), await Promise.all(o.map((t) => e.delete(r.childObject, t)));
|
|
676
|
+
} else {
|
|
677
|
+
let t = await Ce(e, r.childObject, a);
|
|
678
|
+
for (let e of t) {
|
|
679
|
+
let t = $(e);
|
|
680
|
+
t && i.push({
|
|
681
|
+
object: r.childObject,
|
|
682
|
+
id: t
|
|
683
|
+
});
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
if (r.totalField) {
|
|
687
|
+
let i = xe(r.rows, r.amountField || "amount");
|
|
688
|
+
await e.update(t, n, { [r.totalField]: i });
|
|
689
|
+
}
|
|
690
|
+
return { created: i };
|
|
691
|
+
}
|
|
692
|
+
//#endregion
|
|
693
|
+
//#region src/deriveMasterDetail.ts
|
|
694
|
+
var Te = new Set([
|
|
695
|
+
"id",
|
|
696
|
+
"_id",
|
|
697
|
+
"recordId",
|
|
698
|
+
"created_at",
|
|
699
|
+
"updated_at",
|
|
700
|
+
"created_by",
|
|
701
|
+
"updated_by",
|
|
702
|
+
"createdAt",
|
|
703
|
+
"updatedAt",
|
|
704
|
+
"createdBy",
|
|
705
|
+
"updatedBy",
|
|
706
|
+
"organization_id",
|
|
707
|
+
"tenant_id",
|
|
708
|
+
"space",
|
|
709
|
+
"owner"
|
|
710
|
+
]), Ee = new Set([
|
|
711
|
+
"position",
|
|
712
|
+
"sort_order",
|
|
713
|
+
"sequence",
|
|
714
|
+
"line_no",
|
|
715
|
+
"line_number",
|
|
716
|
+
"sort"
|
|
717
|
+
]), De = new Set([
|
|
718
|
+
"formula",
|
|
719
|
+
"summary",
|
|
720
|
+
"rollup",
|
|
721
|
+
"autonumber",
|
|
722
|
+
"auto_number",
|
|
723
|
+
"file",
|
|
724
|
+
"image",
|
|
725
|
+
"avatar",
|
|
726
|
+
"json",
|
|
727
|
+
"object",
|
|
728
|
+
"grid",
|
|
729
|
+
"table",
|
|
730
|
+
"location",
|
|
731
|
+
"vector",
|
|
732
|
+
"html",
|
|
733
|
+
"markdown",
|
|
734
|
+
"richtext"
|
|
735
|
+
]);
|
|
736
|
+
function Oe(e) {
|
|
737
|
+
switch (e) {
|
|
738
|
+
case "number":
|
|
739
|
+
case "percent":
|
|
740
|
+
case "rating":
|
|
741
|
+
case "slider": return "number";
|
|
742
|
+
case "currency": return "currency";
|
|
743
|
+
case "date":
|
|
744
|
+
case "datetime":
|
|
745
|
+
case "time": return "date";
|
|
746
|
+
case "select":
|
|
747
|
+
case "picklist":
|
|
748
|
+
case "radio":
|
|
749
|
+
case "boolean":
|
|
750
|
+
case "toggle": return "select";
|
|
751
|
+
case "lookup":
|
|
752
|
+
case "master_detail": return "lookup";
|
|
753
|
+
default: return "text";
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
function ke(e) {
|
|
757
|
+
if (e?.type === "boolean" || e?.type === "toggle") return [{
|
|
758
|
+
label: "Yes",
|
|
759
|
+
value: "true"
|
|
760
|
+
}, {
|
|
761
|
+
label: "No",
|
|
762
|
+
value: "false"
|
|
763
|
+
}];
|
|
764
|
+
let t = e?.options;
|
|
765
|
+
if (Array.isArray(t)) return t.map((e) => typeof e == "object" && e ? {
|
|
766
|
+
label: String(e.label ?? e.value),
|
|
767
|
+
value: String(e.value)
|
|
768
|
+
} : {
|
|
769
|
+
label: String(e),
|
|
770
|
+
value: String(e)
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
function Ae(e, t) {
|
|
774
|
+
let n = e?.fields;
|
|
775
|
+
if (!n || typeof n != "object") return;
|
|
776
|
+
let r;
|
|
777
|
+
for (let [e, i] of Object.entries(n)) {
|
|
778
|
+
let n = i;
|
|
779
|
+
if (n?.reference === t) {
|
|
780
|
+
if (n?.type === "master_detail") return e;
|
|
781
|
+
n?.type === "lookup" && !r && (r = e);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
return r;
|
|
785
|
+
}
|
|
786
|
+
var je = [
|
|
787
|
+
"name",
|
|
788
|
+
"title",
|
|
789
|
+
"subject",
|
|
790
|
+
"label",
|
|
791
|
+
"full_name",
|
|
792
|
+
"display_name",
|
|
793
|
+
"code"
|
|
794
|
+
], Me = {
|
|
795
|
+
select: 0,
|
|
796
|
+
currency: 1,
|
|
797
|
+
number: 1,
|
|
798
|
+
lookup: 2,
|
|
799
|
+
date: 3,
|
|
800
|
+
text: 4
|
|
801
|
+
};
|
|
802
|
+
function Ne(e, t) {
|
|
803
|
+
if (t <= 0 || e.length <= t) return e;
|
|
804
|
+
let n = /* @__PURE__ */ new Set(), r = e.find((e) => je.includes(e.field)) ?? e[0];
|
|
805
|
+
r && n.add(r.field);
|
|
806
|
+
for (let t of e) t.required && n.add(t.field);
|
|
807
|
+
let i = e.map((e, t) => ({
|
|
808
|
+
c: e,
|
|
809
|
+
i: t
|
|
810
|
+
})).filter(({ c: e }) => !n.has(e.field)).sort((e, t) => (Me[e.c.type] ?? 5) - (Me[t.c.type] ?? 5) || e.i - t.i);
|
|
811
|
+
for (let { c: e } of i) {
|
|
812
|
+
if (n.size >= t) break;
|
|
813
|
+
n.add(e.field);
|
|
814
|
+
}
|
|
815
|
+
return e.map((e) => n.has(e.field) ? e : {
|
|
816
|
+
...e,
|
|
817
|
+
defaultHidden: !0
|
|
818
|
+
});
|
|
819
|
+
}
|
|
820
|
+
function Pe(e, t = {}) {
|
|
821
|
+
let n = e?.fields;
|
|
822
|
+
if (!n || typeof n != "object") return [];
|
|
823
|
+
let r = new Set([...t.exclude ?? [], ...t.relationshipField ? [t.relationshipField] : []]), i = [];
|
|
824
|
+
for (let [e, t] of Object.entries(n)) {
|
|
825
|
+
let n = t;
|
|
826
|
+
if (Te.has(e) || r.has(e) || Ee.has(e) || n?.system || n?.readonly || n?.hidden || De.has(n?.type)) continue;
|
|
827
|
+
let a = {
|
|
828
|
+
field: e,
|
|
829
|
+
label: n?.label || e,
|
|
830
|
+
type: Oe(n?.type),
|
|
831
|
+
required: !!n?.required
|
|
832
|
+
}, o = ke(n);
|
|
833
|
+
a.type === "select" && o && (a.options = o), a.type === "lookup" && (a.reference = n?.reference, a.displayField = n?.display_field || n?.reference_field), n?.readonlyWhen && (a.readonlyWhen = n.readonlyWhen), (n?.requiredWhen ?? n?.conditionalRequired) && (a.requiredWhen = n.requiredWhen ?? n.conditionalRequired);
|
|
834
|
+
let s = typeof n?.expression == "string" ? n.expression : n?.expression?.source;
|
|
835
|
+
s && typeof s == "string" && (a.computed = !0, a.expr = s, a.required = !1, typeof n?.scale == "number" && (a.scale = n.scale)), i.push(a);
|
|
836
|
+
}
|
|
837
|
+
return Ne(i, t.maxColumns ?? 6);
|
|
838
|
+
}
|
|
839
|
+
var Fe = new Set([
|
|
840
|
+
"formula",
|
|
841
|
+
"summary",
|
|
842
|
+
"rollup",
|
|
843
|
+
"autonumber",
|
|
844
|
+
"auto_number"
|
|
845
|
+
]);
|
|
846
|
+
function Ie(e, t = {}) {
|
|
847
|
+
let n = e?.fields;
|
|
848
|
+
if (!n || typeof n != "object") return [];
|
|
849
|
+
let r = new Set([...t.exclude ?? [], ...t.relationshipField ? [t.relationshipField] : []]), i = [];
|
|
850
|
+
for (let [e, t] of Object.entries(n)) {
|
|
851
|
+
let n = t;
|
|
852
|
+
Te.has(e) || r.has(e) || Ee.has(e) || n?.system || n?.hidden || Fe.has(n?.type) || i.push(e);
|
|
853
|
+
}
|
|
854
|
+
return i;
|
|
855
|
+
}
|
|
856
|
+
var Le = new Set([
|
|
857
|
+
"textarea",
|
|
858
|
+
"richtext",
|
|
859
|
+
"html",
|
|
860
|
+
"markdown",
|
|
861
|
+
"rich-text",
|
|
862
|
+
"file",
|
|
863
|
+
"image",
|
|
864
|
+
"avatar",
|
|
865
|
+
"attachment",
|
|
866
|
+
"json",
|
|
867
|
+
"location",
|
|
868
|
+
"address"
|
|
869
|
+
]);
|
|
870
|
+
function Re(e, t, n = {}) {
|
|
871
|
+
if (t === "grid" || t === "form") return t;
|
|
872
|
+
let r = e?.fields ?? {}, i = Ie(e, { relationshipField: n.relationshipField });
|
|
873
|
+
return i.some((e) => Le.has(r[e]?.type)) || i.length > 8 ? "form" : "grid";
|
|
874
|
+
}
|
|
875
|
+
var ze = [
|
|
876
|
+
"amount",
|
|
877
|
+
"total",
|
|
878
|
+
"subtotal",
|
|
879
|
+
"line_total",
|
|
880
|
+
"line_amount",
|
|
881
|
+
"net_amount"
|
|
882
|
+
];
|
|
883
|
+
function Be(e) {
|
|
884
|
+
let t = e.filter((e) => e.type === "number" || e.type === "currency");
|
|
885
|
+
if (t.length === 0) return;
|
|
886
|
+
let n = t.find((e) => e.computed);
|
|
887
|
+
if (n) return n.field;
|
|
888
|
+
let r = t.find((e) => ze.includes(e.field));
|
|
889
|
+
if (r) return r.field;
|
|
890
|
+
let i = [...t].reverse().find((e) => e.type === "currency");
|
|
891
|
+
return i ? i.field : t[t.length - 1].field;
|
|
892
|
+
}
|
|
893
|
+
function Ve(e, t, n, r = {}) {
|
|
894
|
+
let i = r.relationshipField || Ae(t, n);
|
|
895
|
+
if (!i) throw Error(`MasterDetailForm: could not find a lookup/master_detail field on "${e}" referencing "${n}". Set relationshipField explicitly.`);
|
|
896
|
+
let a = r.columns?.length ? r.columns : Pe(t, { relationshipField: i }), o = r.amountField || Be(a);
|
|
897
|
+
return {
|
|
898
|
+
childObject: e,
|
|
899
|
+
relationshipField: i,
|
|
900
|
+
columns: a,
|
|
901
|
+
formFields: Ie(t, { relationshipField: i }),
|
|
902
|
+
mode: Re(t, r.inlineEdit ?? (t?.fields)?.[i]?.inlineEdit, { relationshipField: i }),
|
|
903
|
+
amountField: o,
|
|
904
|
+
sortField: Object.keys(t?.fields ?? {}).find((e) => Ee.has(e))
|
|
905
|
+
};
|
|
906
|
+
}
|
|
907
|
+
//#endregion
|
|
908
|
+
//#region src/MasterDetailForm.tsx
|
|
909
|
+
function He(e) {
|
|
910
|
+
if (!e) return {};
|
|
911
|
+
let t = {};
|
|
912
|
+
return e.querySelectorAll("[name]").forEach((e) => {
|
|
913
|
+
let n = e.getAttribute("name");
|
|
914
|
+
if (n) {
|
|
915
|
+
if (e.tagName === "INPUT") {
|
|
916
|
+
let r = e;
|
|
917
|
+
if (r.type === "checkbox") {
|
|
918
|
+
t[n] = r.checked;
|
|
919
|
+
return;
|
|
920
|
+
}
|
|
921
|
+
if (r.type === "radio") {
|
|
922
|
+
r.checked && (t[n] = r.value);
|
|
923
|
+
return;
|
|
924
|
+
}
|
|
925
|
+
if (r.type === "number" || r.type === "range") {
|
|
926
|
+
if (r.value === "") {
|
|
927
|
+
t[n] = null;
|
|
928
|
+
return;
|
|
929
|
+
}
|
|
930
|
+
let e = Number(r.value);
|
|
931
|
+
t[n] = Number.isFinite(e) ? e : r.value;
|
|
932
|
+
return;
|
|
933
|
+
}
|
|
934
|
+
t[n] = r.value;
|
|
935
|
+
return;
|
|
936
|
+
}
|
|
937
|
+
t[n] = e.value;
|
|
938
|
+
}
|
|
939
|
+
}), t;
|
|
940
|
+
}
|
|
941
|
+
var Ue = ({ details: e, state: t, setRows: n, formHostRef: i, taxRateField: a, formKey: c, onRowExpand: l, onAddViaForm: u }) => {
|
|
942
|
+
let [d, f] = s({}), p = o("");
|
|
943
|
+
r(() => {
|
|
944
|
+
let e = i.current;
|
|
945
|
+
if (!e) return;
|
|
946
|
+
let t = () => {
|
|
947
|
+
let t = He(e), n;
|
|
948
|
+
try {
|
|
949
|
+
n = JSON.stringify(t);
|
|
950
|
+
} catch {
|
|
951
|
+
n = String(Math.random());
|
|
952
|
+
}
|
|
953
|
+
n !== p.current && (p.current = n, f(t));
|
|
954
|
+
};
|
|
955
|
+
t();
|
|
956
|
+
let n = () => t();
|
|
957
|
+
e.addEventListener("input", n), e.addEventListener("change", n);
|
|
958
|
+
let r = [
|
|
959
|
+
120,
|
|
960
|
+
360,
|
|
961
|
+
800
|
|
962
|
+
].map((e) => setTimeout(t, e));
|
|
963
|
+
return () => {
|
|
964
|
+
e.removeEventListener("input", n), e.removeEventListener("change", n), r.forEach(clearTimeout);
|
|
965
|
+
};
|
|
966
|
+
}, [
|
|
967
|
+
i,
|
|
968
|
+
c,
|
|
969
|
+
e.length
|
|
970
|
+
]);
|
|
971
|
+
let m = d[a], g = m === void 0 ? null : Number.isFinite(Number(m)) ? Number(m) : 0, _ = e.reduce((e, n, r) => e + xe(t[r]?.rows ?? [], n.amountField || "amount"), 0), v = g !== null && e.some((e) => !!e.amountField), y = g ?? 0, b = y / 100 * _, x = _ + b, S = (e) => `¥${e.toLocaleString(void 0, {
|
|
972
|
+
minimumFractionDigits: 2,
|
|
973
|
+
maximumFractionDigits: 2
|
|
974
|
+
})}`;
|
|
975
|
+
return /* @__PURE__ */ Z(oe, { children: [e.map((e, r) => /* @__PURE__ */ Z("section", {
|
|
976
|
+
className: "space-y-2",
|
|
977
|
+
children: [/* @__PURE__ */ X("h3", {
|
|
978
|
+
className: "text-sm font-medium text-foreground",
|
|
979
|
+
children: e.title || "Line Items"
|
|
980
|
+
}), e.columns?.length ? /* @__PURE__ */ X(h, {
|
|
981
|
+
value: t[r]?.rows ?? [],
|
|
982
|
+
onChange: (e) => n(r, e),
|
|
983
|
+
contextRecord: d,
|
|
984
|
+
...e.inlineMode === "form" || (e.formFields?.length ?? 0) > (e.columns?.length ?? 0) ? { onRowExpand: (e) => l(r, e) } : {},
|
|
985
|
+
displayMode: e.inlineMode === "form" ? "list" : "grid",
|
|
986
|
+
...e.inlineMode === "form" ? { onAdd: () => u(r) } : {},
|
|
987
|
+
field: {
|
|
988
|
+
columns: e.columns,
|
|
989
|
+
total_field: v ? void 0 : e.amountField || (e.totalField ? "amount" : void 0),
|
|
990
|
+
sort_field: e.sortField,
|
|
991
|
+
min_rows: e.minRows,
|
|
992
|
+
max_rows: e.maxRows,
|
|
993
|
+
add_label: e.inlineMode === "form" ? e.addLabel || "Add" : e.addLabel
|
|
994
|
+
}
|
|
995
|
+
}) : /* @__PURE__ */ X("p", {
|
|
996
|
+
className: "py-4 text-sm text-muted-foreground",
|
|
997
|
+
children: "Loading columns…"
|
|
998
|
+
})]
|
|
999
|
+
}, `${e.childObject}-${r}`)), v && /* @__PURE__ */ X("div", {
|
|
1000
|
+
className: "flex justify-end",
|
|
1001
|
+
children: /* @__PURE__ */ Z("dl", {
|
|
1002
|
+
className: "w-64 space-y-1.5 text-sm",
|
|
1003
|
+
"data-testid": "md-totals",
|
|
1004
|
+
children: [
|
|
1005
|
+
/* @__PURE__ */ Z("div", {
|
|
1006
|
+
className: "flex items-center justify-between",
|
|
1007
|
+
children: [/* @__PURE__ */ X("dt", {
|
|
1008
|
+
className: "text-muted-foreground",
|
|
1009
|
+
children: "Subtotal"
|
|
1010
|
+
}), /* @__PURE__ */ X("dd", {
|
|
1011
|
+
className: "tabular-nums",
|
|
1012
|
+
"data-testid": "md-subtotal",
|
|
1013
|
+
children: S(_)
|
|
1014
|
+
})]
|
|
1015
|
+
}),
|
|
1016
|
+
/* @__PURE__ */ Z("div", {
|
|
1017
|
+
className: "flex items-center justify-between",
|
|
1018
|
+
children: [/* @__PURE__ */ Z("dt", {
|
|
1019
|
+
className: "text-muted-foreground",
|
|
1020
|
+
children: [
|
|
1021
|
+
"Tax (",
|
|
1022
|
+
y,
|
|
1023
|
+
"%)"
|
|
1024
|
+
]
|
|
1025
|
+
}), /* @__PURE__ */ X("dd", {
|
|
1026
|
+
className: "tabular-nums",
|
|
1027
|
+
"data-testid": "md-tax",
|
|
1028
|
+
children: S(b)
|
|
1029
|
+
})]
|
|
1030
|
+
}),
|
|
1031
|
+
/* @__PURE__ */ Z("div", {
|
|
1032
|
+
className: "flex items-center justify-between border-t border-border pt-1.5 text-base font-semibold",
|
|
1033
|
+
children: [/* @__PURE__ */ X("dt", { children: "Total" }), /* @__PURE__ */ X("dd", {
|
|
1034
|
+
className: "tabular-nums",
|
|
1035
|
+
"data-testid": "md-grand-total",
|
|
1036
|
+
children: S(x)
|
|
1037
|
+
})]
|
|
1038
|
+
})
|
|
1039
|
+
]
|
|
1040
|
+
})
|
|
1041
|
+
})] });
|
|
1042
|
+
}, We = ({ schema: e, dataSource: n, className: i }) => {
|
|
1043
|
+
let c = e.details || [], l = e.mode === "edit" && !!e.recordId, u = c.some((e) => !e.relationshipField || !e.columns?.length), [d, f] = s(u ? null : c), p = d ?? c;
|
|
1044
|
+
r(() => {
|
|
1045
|
+
if (!u) {
|
|
1046
|
+
f(c);
|
|
1047
|
+
return;
|
|
1048
|
+
}
|
|
1049
|
+
if (!n || typeof n.getObjectSchema != "function") return;
|
|
1050
|
+
let t = !1;
|
|
1051
|
+
return (async () => {
|
|
1052
|
+
let r = await Promise.all(c.map(async (t) => {
|
|
1053
|
+
if (t.relationshipField && t.columns?.length) return t;
|
|
1054
|
+
try {
|
|
1055
|
+
let r = await n.getObjectSchema(t.childObject), i = Ve(t.childObject, r, e.objectName, {
|
|
1056
|
+
relationshipField: t.relationshipField,
|
|
1057
|
+
columns: t.columns,
|
|
1058
|
+
amountField: t.amountField
|
|
1059
|
+
});
|
|
1060
|
+
return {
|
|
1061
|
+
...t,
|
|
1062
|
+
relationshipField: i.relationshipField,
|
|
1063
|
+
columns: i.columns,
|
|
1064
|
+
formFields: t.formFields ?? i.formFields,
|
|
1065
|
+
inlineMode: t.inlineMode ?? i.mode,
|
|
1066
|
+
amountField: t.amountField ?? i.amountField,
|
|
1067
|
+
sortField: t.sortField ?? i.sortField
|
|
1068
|
+
};
|
|
1069
|
+
} catch {
|
|
1070
|
+
return t;
|
|
1071
|
+
}
|
|
1072
|
+
}));
|
|
1073
|
+
t || f(r);
|
|
1074
|
+
})(), () => {
|
|
1075
|
+
t = !0;
|
|
1076
|
+
};
|
|
1077
|
+
}, [
|
|
1078
|
+
n,
|
|
1079
|
+
e.objectName,
|
|
1080
|
+
e.details
|
|
1081
|
+
]);
|
|
1082
|
+
let [m, h] = s(() => c.map(() => ({
|
|
1083
|
+
rows: [],
|
|
1084
|
+
original: []
|
|
1085
|
+
}))), g = o(m);
|
|
1086
|
+
g.current = m;
|
|
1087
|
+
let [_, v] = s(0), [y, C] = s(!1), E = o(!1), D = o(null), O = t(() => {
|
|
1088
|
+
E.current = !1, C(!1), D.current &&= (clearTimeout(D.current), null);
|
|
1089
|
+
}, []);
|
|
1090
|
+
r(() => {
|
|
1091
|
+
let t = !1;
|
|
1092
|
+
if (!(!l || !n)) return (async () => {
|
|
1093
|
+
let r = await Promise.all(p.map(async (t) => {
|
|
1094
|
+
if (!t.relationshipField) return {
|
|
1095
|
+
rows: [],
|
|
1096
|
+
original: []
|
|
1097
|
+
};
|
|
1098
|
+
try {
|
|
1099
|
+
let r = (await n.find(t.childObject, {
|
|
1100
|
+
$filter: { [t.relationshipField]: e.recordId },
|
|
1101
|
+
$top: 500
|
|
1102
|
+
}))?.data ?? [];
|
|
1103
|
+
return {
|
|
1104
|
+
rows: r.map((e) => ({ ...e })),
|
|
1105
|
+
original: r.map((e) => ({ ...e }))
|
|
1106
|
+
};
|
|
1107
|
+
} catch {
|
|
1108
|
+
return {
|
|
1109
|
+
rows: [],
|
|
1110
|
+
original: []
|
|
1111
|
+
};
|
|
1112
|
+
}
|
|
1113
|
+
}));
|
|
1114
|
+
t || h(r);
|
|
1115
|
+
})(), () => {
|
|
1116
|
+
t = !0;
|
|
1117
|
+
};
|
|
1118
|
+
}, [
|
|
1119
|
+
l,
|
|
1120
|
+
n,
|
|
1121
|
+
e.recordId,
|
|
1122
|
+
d
|
|
1123
|
+
]);
|
|
1124
|
+
let k = t((e, t) => {
|
|
1125
|
+
h((n) => n.map((n, r) => r === e ? {
|
|
1126
|
+
...n,
|
|
1127
|
+
rows: t
|
|
1128
|
+
} : n));
|
|
1129
|
+
}, []), A = e.taxRateField || "tax_rate", [j, M] = s(null), N = j ? m[j.detailIdx]?.rows?.[j.rowIdx] : void 0, P = j ? p[j.detailIdx] : void 0, F = t((e, t, n) => {
|
|
1130
|
+
h((r) => r.map((r, i) => i === e ? {
|
|
1131
|
+
...r,
|
|
1132
|
+
rows: r.rows.map((e, r) => r === t ? {
|
|
1133
|
+
...e,
|
|
1134
|
+
...n
|
|
1135
|
+
} : e)
|
|
1136
|
+
} : r));
|
|
1137
|
+
}, []), I = t((e) => {
|
|
1138
|
+
h((t) => {
|
|
1139
|
+
let n = t.map((t, n) => n === e ? {
|
|
1140
|
+
...t,
|
|
1141
|
+
rows: [...t.rows, {}]
|
|
1142
|
+
} : t);
|
|
1143
|
+
return M({
|
|
1144
|
+
detailIdx: e,
|
|
1145
|
+
rowIdx: n[e].rows.length - 1,
|
|
1146
|
+
isNew: !0
|
|
1147
|
+
}), n;
|
|
1148
|
+
});
|
|
1149
|
+
}, []), L = t(() => {
|
|
1150
|
+
M((e) => (e?.isNew && h((t) => t.map((t, n) => n === e.detailIdx ? {
|
|
1151
|
+
...t,
|
|
1152
|
+
rows: t.rows.filter((t, n) => n !== e.rowIdx)
|
|
1153
|
+
} : t)), null));
|
|
1154
|
+
}, []), R = t(async (t) => {
|
|
1155
|
+
O(), G.success(l ? e.title ? `${e.title} saved` : "Saved" : "Created"), l || (h(p.map(() => ({
|
|
1156
|
+
rows: [],
|
|
1157
|
+
original: []
|
|
1158
|
+
}))), v((e) => e + 1)), await e.onSuccess?.(t);
|
|
1159
|
+
}, [
|
|
1160
|
+
l,
|
|
1161
|
+
e.onSuccess,
|
|
1162
|
+
e.title,
|
|
1163
|
+
p.length,
|
|
1164
|
+
O
|
|
1165
|
+
]), z = t((t) => {
|
|
1166
|
+
O(), G.error(t?.message || "Save failed"), e.onError?.(t);
|
|
1167
|
+
}, [e, O]), B = t(async (t) => {
|
|
1168
|
+
let r = [];
|
|
1169
|
+
for (let i = 0; i < p.length; i++) {
|
|
1170
|
+
let a = p[i], { rows: o, original: s } = g.current[i];
|
|
1171
|
+
if (!a.relationshipField) continue;
|
|
1172
|
+
let { created: c } = await we(n, e.objectName, t, {
|
|
1173
|
+
childObject: a.childObject,
|
|
1174
|
+
relationshipField: a.relationshipField,
|
|
1175
|
+
rows: o,
|
|
1176
|
+
original: l ? s : void 0,
|
|
1177
|
+
amountField: a.amountField,
|
|
1178
|
+
totalField: a.totalField
|
|
1179
|
+
});
|
|
1180
|
+
r.push(...c);
|
|
1181
|
+
}
|
|
1182
|
+
return r;
|
|
1183
|
+
}, [
|
|
1184
|
+
p,
|
|
1185
|
+
l,
|
|
1186
|
+
n,
|
|
1187
|
+
e.objectName
|
|
1188
|
+
]), V = t(async (t) => {
|
|
1189
|
+
let r = $(t) ?? e.recordId;
|
|
1190
|
+
if (!r) throw Error("MasterDetailForm: parent record has no id after save");
|
|
1191
|
+
if (!n) throw Error("MasterDetailForm: dataSource is required");
|
|
1192
|
+
let i = [];
|
|
1193
|
+
try {
|
|
1194
|
+
i = await B(r);
|
|
1195
|
+
} catch (t) {
|
|
1196
|
+
throw l || await Promise.allSettled([...i.map((e) => n.delete(e.object, e.id)), n.delete(e.objectName, r)]), t;
|
|
1197
|
+
}
|
|
1198
|
+
await R(t);
|
|
1199
|
+
}, [
|
|
1200
|
+
n,
|
|
1201
|
+
l,
|
|
1202
|
+
B,
|
|
1203
|
+
e,
|
|
1204
|
+
R
|
|
1205
|
+
]), H = typeof n?.batchTransaction == "function", U = t(async (t) => {
|
|
1206
|
+
let r = n, i = { ...t };
|
|
1207
|
+
p.forEach((e, t) => {
|
|
1208
|
+
e.totalField && (i[e.totalField] = xe(g.current[t]?.rows ?? [], e.amountField || "amount"));
|
|
1209
|
+
});
|
|
1210
|
+
let a = l ? ye(e.objectName, e.recordId, i, p.filter((e) => e.relationshipField).map((e, t) => ({
|
|
1211
|
+
childObject: e.childObject,
|
|
1212
|
+
relationshipField: e.relationshipField,
|
|
1213
|
+
rows: g.current[t]?.rows ?? [],
|
|
1214
|
+
original: g.current[t]?.original ?? []
|
|
1215
|
+
}))) : ve(e.objectName, i, p.filter((e) => e.relationshipField).map((e, t) => ({
|
|
1216
|
+
childObject: e.childObject,
|
|
1217
|
+
relationshipField: e.relationshipField,
|
|
1218
|
+
rows: g.current[t]?.rows ?? []
|
|
1219
|
+
})));
|
|
1220
|
+
return (await r.batchTransaction(a))?.results?.[0] ?? {
|
|
1221
|
+
...i,
|
|
1222
|
+
id: e.recordId
|
|
1223
|
+
};
|
|
1224
|
+
}, [
|
|
1225
|
+
n,
|
|
1226
|
+
p,
|
|
1227
|
+
e.objectName,
|
|
1228
|
+
e.recordId,
|
|
1229
|
+
l
|
|
1230
|
+
]), ee = a(() => ({
|
|
1231
|
+
type: "object-form",
|
|
1232
|
+
objectName: e.objectName,
|
|
1233
|
+
mode: e.mode ?? "create",
|
|
1234
|
+
recordId: e.recordId,
|
|
1235
|
+
initialValues: e.initialValues,
|
|
1236
|
+
initialData: e.initialData,
|
|
1237
|
+
formType: e.formType,
|
|
1238
|
+
sections: e.sections,
|
|
1239
|
+
fields: e.fields,
|
|
1240
|
+
title: e.title,
|
|
1241
|
+
showSubmit: !1,
|
|
1242
|
+
showCancel: !1,
|
|
1243
|
+
...H ? {
|
|
1244
|
+
submitHandler: U,
|
|
1245
|
+
onSuccess: R
|
|
1246
|
+
} : { onSuccess: V },
|
|
1247
|
+
onError: z
|
|
1248
|
+
}), [
|
|
1249
|
+
e,
|
|
1250
|
+
V,
|
|
1251
|
+
H,
|
|
1252
|
+
U,
|
|
1253
|
+
R,
|
|
1254
|
+
z
|
|
1255
|
+
]), K = o(null), q = e.submitText ?? (l ? "Save" : "Create"), te = t(() => {
|
|
1256
|
+
E.current || K.current?.querySelector("form") && (E.current = !0, C(!0), setTimeout(() => {
|
|
1257
|
+
(K.current?.querySelector("form"))?.requestSubmit();
|
|
1258
|
+
}, 0), D.current = setTimeout(() => O(), 1500));
|
|
1259
|
+
}, [O]);
|
|
1260
|
+
return r(() => () => {
|
|
1261
|
+
D.current && clearTimeout(D.current);
|
|
1262
|
+
}, []), /* @__PURE__ */ Z("div", {
|
|
1263
|
+
className: W("space-y-6", i, e.className),
|
|
1264
|
+
children: [
|
|
1265
|
+
/* @__PURE__ */ X("div", {
|
|
1266
|
+
ref: K,
|
|
1267
|
+
children: /* @__PURE__ */ X(mt, {
|
|
1268
|
+
schema: ee,
|
|
1269
|
+
dataSource: n
|
|
1270
|
+
}, _)
|
|
1271
|
+
}),
|
|
1272
|
+
/* @__PURE__ */ X(Ue, {
|
|
1273
|
+
details: p,
|
|
1274
|
+
state: m,
|
|
1275
|
+
setRows: k,
|
|
1276
|
+
formHostRef: K,
|
|
1277
|
+
taxRateField: A,
|
|
1278
|
+
formKey: _,
|
|
1279
|
+
onRowExpand: (e, t) => M({
|
|
1280
|
+
detailIdx: e,
|
|
1281
|
+
rowIdx: t
|
|
1282
|
+
}),
|
|
1283
|
+
onAddViaForm: I
|
|
1284
|
+
}),
|
|
1285
|
+
j && P && /* @__PURE__ */ Z(x, {
|
|
1286
|
+
className: "border-primary/40 shadow-none ring-1 ring-primary/10",
|
|
1287
|
+
"data-testid": "md-row-form",
|
|
1288
|
+
children: [/* @__PURE__ */ Z(w, {
|
|
1289
|
+
className: "pb-2 flex flex-row items-center justify-between gap-2 space-y-0",
|
|
1290
|
+
children: [/* @__PURE__ */ Z(T, {
|
|
1291
|
+
className: "text-sm font-medium",
|
|
1292
|
+
children: [
|
|
1293
|
+
P.title || "Line item",
|
|
1294
|
+
" — row ",
|
|
1295
|
+
j.rowIdx + 1
|
|
1296
|
+
]
|
|
1297
|
+
}), /* @__PURE__ */ X(b, {
|
|
1298
|
+
type: "button",
|
|
1299
|
+
variant: "ghost",
|
|
1300
|
+
size: "sm",
|
|
1301
|
+
className: "h-7 text-xs text-muted-foreground",
|
|
1302
|
+
onClick: L,
|
|
1303
|
+
children: "Close"
|
|
1304
|
+
})]
|
|
1305
|
+
}), /* @__PURE__ */ X(S, { children: /* @__PURE__ */ X(mt, {
|
|
1306
|
+
schema: {
|
|
1307
|
+
type: "object-form",
|
|
1308
|
+
objectName: P.childObject,
|
|
1309
|
+
mode: "edit",
|
|
1310
|
+
initialData: N ?? {},
|
|
1311
|
+
...P.formFields?.length ? { fields: P.formFields } : {},
|
|
1312
|
+
submitText: "Apply",
|
|
1313
|
+
submitHandler: async (e) => e,
|
|
1314
|
+
onSuccess: (e) => {
|
|
1315
|
+
F(j.detailIdx, j.rowIdx, e), M(null);
|
|
1316
|
+
},
|
|
1317
|
+
onCancel: L
|
|
1318
|
+
},
|
|
1319
|
+
dataSource: n
|
|
1320
|
+
}, `row-${j.detailIdx}-${j.rowIdx}`) })]
|
|
1321
|
+
}),
|
|
1322
|
+
e.showSubmit !== !1 && /* @__PURE__ */ Z("div", {
|
|
1323
|
+
className: "flex items-center justify-end gap-2 border-t border-border pt-4",
|
|
1324
|
+
children: [e.onCancel && /* @__PURE__ */ X(b, {
|
|
1325
|
+
type: "button",
|
|
1326
|
+
variant: "outline",
|
|
1327
|
+
onClick: e.onCancel,
|
|
1328
|
+
disabled: y,
|
|
1329
|
+
"data-testid": "md-form-cancel",
|
|
1330
|
+
children: "Cancel"
|
|
1331
|
+
}), /* @__PURE__ */ X(b, {
|
|
1332
|
+
type: "button",
|
|
1333
|
+
onClick: te,
|
|
1334
|
+
disabled: y || u && !d,
|
|
1335
|
+
"data-testid": "md-form-submit",
|
|
1336
|
+
children: y ? "Saving…" : q
|
|
1337
|
+
})]
|
|
1338
|
+
})
|
|
1339
|
+
]
|
|
1340
|
+
});
|
|
1341
|
+
}, Ge = new Set([
|
|
577
1342
|
"field:formula",
|
|
578
1343
|
"field:summary",
|
|
579
1344
|
"field:auto_number",
|
|
580
1345
|
"field:autonumber"
|
|
581
|
-
]),
|
|
1346
|
+
]), Ke = new Set([
|
|
582
1347
|
"field:textarea",
|
|
583
1348
|
"field:markdown",
|
|
584
1349
|
"field:html",
|
|
@@ -589,28 +1354,28 @@ var X = ({ label: e, description: t, collapsible: n = !1, collapsed: r = !1, col
|
|
|
589
1354
|
"html",
|
|
590
1355
|
"grid",
|
|
591
1356
|
"rich-text"
|
|
592
|
-
]),
|
|
1357
|
+
]), qe = new Set([
|
|
593
1358
|
"formula",
|
|
594
1359
|
"summary",
|
|
595
1360
|
"auto_number",
|
|
596
1361
|
"autonumber"
|
|
597
1362
|
]);
|
|
598
|
-
function
|
|
599
|
-
return
|
|
1363
|
+
function Je(e) {
|
|
1364
|
+
return Ke.has(e);
|
|
600
1365
|
}
|
|
601
|
-
function
|
|
602
|
-
return
|
|
1366
|
+
function Ye(e) {
|
|
1367
|
+
return qe.has(e);
|
|
603
1368
|
}
|
|
604
|
-
function
|
|
1369
|
+
function Xe(e) {
|
|
605
1370
|
return e <= 3 ? 1 : 2;
|
|
606
1371
|
}
|
|
607
|
-
function
|
|
608
|
-
return t <= 1 ? e : e.map((e) => e.colSpan === void 0 && e.type &&
|
|
1372
|
+
function Ze(e, t) {
|
|
1373
|
+
return t <= 1 ? e : e.map((e) => e.colSpan === void 0 && e.type && Je(e.type) ? {
|
|
609
1374
|
...e,
|
|
610
1375
|
colSpan: t
|
|
611
1376
|
} : e);
|
|
612
1377
|
}
|
|
613
|
-
var
|
|
1378
|
+
var Qe = new Set([
|
|
614
1379
|
"id",
|
|
615
1380
|
"created_at",
|
|
616
1381
|
"createdAt",
|
|
@@ -637,42 +1402,46 @@ var ue = new Set([
|
|
|
637
1402
|
"_version",
|
|
638
1403
|
"_rev"
|
|
639
1404
|
]);
|
|
640
|
-
function
|
|
641
|
-
return e.filter((e) =>
|
|
1405
|
+
function $e(e, t) {
|
|
1406
|
+
return e.filter((e) => {
|
|
1407
|
+
if (Qe.has(e.name)) return !1;
|
|
1408
|
+
let n = t?.fields?.[e.name];
|
|
1409
|
+
return !(n?.hidden === !0 || n?.readonly === !0);
|
|
1410
|
+
});
|
|
642
1411
|
}
|
|
643
|
-
function
|
|
1412
|
+
function et(e, t) {
|
|
644
1413
|
return e.filter((e) => {
|
|
645
|
-
if (
|
|
1414
|
+
if (Qe.has(e.name) || e.type && Ge.has(e.type)) return !1;
|
|
646
1415
|
if (!t?.fields) return !0;
|
|
647
1416
|
let n = t.fields[e.name];
|
|
648
|
-
return n ? n.readonly === !0 ? !1 : !
|
|
1417
|
+
return n ? n.readonly === !0 ? !1 : !Ye(n.type) : !0;
|
|
649
1418
|
});
|
|
650
1419
|
}
|
|
651
|
-
function
|
|
1420
|
+
function tt(e, t) {
|
|
652
1421
|
return e.filter((e) => {
|
|
653
|
-
if (e.type &&
|
|
1422
|
+
if (e.type && Ge.has(e.type)) return !1;
|
|
654
1423
|
let n = t?.fields?.[e.name];
|
|
655
|
-
return n ? !
|
|
1424
|
+
return n ? !Ye(n.type) : !0;
|
|
656
1425
|
});
|
|
657
1426
|
}
|
|
658
|
-
function
|
|
1427
|
+
function nt(e) {
|
|
659
1428
|
return e <= 1 ? "default" : e === 2 ? "xl" : "full";
|
|
660
1429
|
}
|
|
661
|
-
function
|
|
1430
|
+
function rt(e, t, n, r) {
|
|
662
1431
|
let i = [...e];
|
|
663
|
-
if (i =
|
|
1432
|
+
if (i = $e(i, t), r === "create" && (i = tt(i, t)), n !== void 0) return i = Ze(i, n), {
|
|
664
1433
|
fields: i,
|
|
665
1434
|
columns: n
|
|
666
1435
|
};
|
|
667
|
-
let a =
|
|
668
|
-
return i =
|
|
1436
|
+
let a = Xe(i.length);
|
|
1437
|
+
return i = Ze(i, a), {
|
|
669
1438
|
fields: i,
|
|
670
1439
|
columns: a
|
|
671
1440
|
};
|
|
672
1441
|
}
|
|
673
1442
|
//#endregion
|
|
674
1443
|
//#region src/sanitize.ts
|
|
675
|
-
var
|
|
1444
|
+
var it = new Set([
|
|
676
1445
|
"id",
|
|
677
1446
|
"_id",
|
|
678
1447
|
"created_at",
|
|
@@ -681,7 +1450,7 @@ var he = new Set([
|
|
|
681
1450
|
"updatedAt",
|
|
682
1451
|
"organization_id",
|
|
683
1452
|
"organizationId"
|
|
684
|
-
]),
|
|
1453
|
+
]), at = new Set([
|
|
685
1454
|
"formula",
|
|
686
1455
|
"rollup",
|
|
687
1456
|
"lookup_value",
|
|
@@ -689,15 +1458,15 @@ var he = new Set([
|
|
|
689
1458
|
"autonumber",
|
|
690
1459
|
"computed"
|
|
691
1460
|
]);
|
|
692
|
-
function
|
|
1461
|
+
function ot(e, t) {
|
|
693
1462
|
if (!e || typeof e != "object") return e;
|
|
694
1463
|
let n = {}, r = t?.fields;
|
|
695
|
-
for (let [t, i] of Object.entries(e)) if (!
|
|
1464
|
+
for (let [t, i] of Object.entries(e)) if (!it.has(t)) {
|
|
696
1465
|
if (r) {
|
|
697
1466
|
let e = r[t];
|
|
698
1467
|
if (!e) continue;
|
|
699
1468
|
let n = String(e.type || "").toLowerCase();
|
|
700
|
-
if (
|
|
1469
|
+
if (at.has(n) || e.computed === !0 || e.formula || e.readOnly === !0 || e.readonly === !0) continue;
|
|
701
1470
|
}
|
|
702
1471
|
n[t] = i;
|
|
703
1472
|
}
|
|
@@ -705,248 +1474,262 @@ function _e(e, t) {
|
|
|
705
1474
|
}
|
|
706
1475
|
//#endregion
|
|
707
1476
|
//#region src/DrawerForm.tsx
|
|
708
|
-
var
|
|
1477
|
+
var st = {
|
|
709
1478
|
1: void 0,
|
|
710
1479
|
2: "grid gap-4 grid-cols-1 @md:grid-cols-2",
|
|
711
1480
|
3: "grid gap-4 grid-cols-1 @md:grid-cols-2 @2xl:grid-cols-3",
|
|
712
1481
|
4: "grid gap-4 grid-cols-1 @md:grid-cols-2 @2xl:grid-cols-3 @4xl:grid-cols-4"
|
|
713
|
-
},
|
|
714
|
-
let { fieldLabel:
|
|
1482
|
+
}, ct = ({ schema: e, dataSource: n, className: i }) => {
|
|
1483
|
+
let { fieldLabel: o } = p(), c = d(), [u, f] = s(null), [m, h] = s([]), [_, v] = s({}), [b, x] = s(!0), [S, C] = s(null), w = e.open !== !1, T = e.drawerSide || "right", [E, D] = s(() => {
|
|
715
1484
|
let t = {};
|
|
716
1485
|
return e.sections?.forEach((e, n) => {
|
|
717
1486
|
let r = e.name || String(n);
|
|
718
1487
|
e.collapsed && (t[r] = !0);
|
|
719
1488
|
}), t;
|
|
720
1489
|
});
|
|
721
|
-
|
|
1490
|
+
r(() => {
|
|
722
1491
|
(async () => {
|
|
723
|
-
if (!
|
|
724
|
-
|
|
1492
|
+
if (!n) {
|
|
1493
|
+
x(!1);
|
|
725
1494
|
return;
|
|
726
1495
|
}
|
|
727
1496
|
try {
|
|
728
|
-
f(await
|
|
1497
|
+
f(await n.getObjectSchema(e.objectName));
|
|
729
1498
|
} catch (e) {
|
|
730
|
-
|
|
1499
|
+
C(e), x(!1);
|
|
731
1500
|
}
|
|
732
1501
|
})();
|
|
733
|
-
}, [e.objectName,
|
|
734
|
-
(
|
|
1502
|
+
}, [e.objectName, n]), r(() => {
|
|
1503
|
+
(u || !n) && (async () => {
|
|
735
1504
|
if (e.mode === "create" || !e.recordId) {
|
|
736
|
-
|
|
1505
|
+
v(e.initialData || e.initialValues || {}), x(!1);
|
|
737
1506
|
return;
|
|
738
1507
|
}
|
|
739
|
-
if (!
|
|
740
|
-
|
|
1508
|
+
if (!n) {
|
|
1509
|
+
v(e.initialData || e.initialValues || {}), x(!1);
|
|
741
1510
|
return;
|
|
742
1511
|
}
|
|
743
1512
|
try {
|
|
744
|
-
|
|
1513
|
+
v(await n.findOne(e.objectName, e.recordId) || {});
|
|
745
1514
|
} catch (e) {
|
|
746
|
-
|
|
1515
|
+
C(e);
|
|
747
1516
|
} finally {
|
|
748
|
-
|
|
1517
|
+
x(!1);
|
|
749
1518
|
}
|
|
750
1519
|
})();
|
|
751
1520
|
}, [
|
|
752
|
-
|
|
1521
|
+
u,
|
|
753
1522
|
e.mode,
|
|
754
1523
|
e.recordId,
|
|
755
1524
|
e.initialData,
|
|
756
1525
|
e.initialValues,
|
|
757
|
-
|
|
1526
|
+
n,
|
|
758
1527
|
e.objectName
|
|
759
1528
|
]);
|
|
760
|
-
let
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
name: t,
|
|
769
|
-
label: s(e.objectName, t, r.label || t),
|
|
770
|
-
type: p(r.type),
|
|
771
|
-
required: r.required || !1,
|
|
772
|
-
disabled: e.readOnly || e.mode === "view" || r.readonly,
|
|
773
|
-
placeholder: r.placeholder,
|
|
774
|
-
description: r.help || r.description,
|
|
775
|
-
validation: u(r),
|
|
776
|
-
field: r,
|
|
777
|
-
options: r.options,
|
|
778
|
-
multiple: r.multiple
|
|
779
|
-
});
|
|
780
|
-
} else n.push({
|
|
781
|
-
name: t,
|
|
782
|
-
label: t,
|
|
783
|
-
type: "input"
|
|
784
|
-
});
|
|
785
|
-
}
|
|
786
|
-
return n;
|
|
787
|
-
}, [
|
|
788
|
-
d,
|
|
1529
|
+
let O = t((t) => fe(t, {
|
|
1530
|
+
objectSchema: u,
|
|
1531
|
+
objectName: e.objectName,
|
|
1532
|
+
readOnly: e.readOnly,
|
|
1533
|
+
mode: e.mode,
|
|
1534
|
+
fieldLabel: o
|
|
1535
|
+
}), [
|
|
1536
|
+
u,
|
|
789
1537
|
e.readOnly,
|
|
790
|
-
e.mode
|
|
1538
|
+
e.mode,
|
|
1539
|
+
e.objectName,
|
|
1540
|
+
o
|
|
791
1541
|
]);
|
|
792
|
-
|
|
793
|
-
if (!
|
|
1542
|
+
r(() => {
|
|
1543
|
+
if (!u && n) return;
|
|
794
1544
|
if (e.customFields?.length) {
|
|
795
|
-
h(e.customFields),
|
|
1545
|
+
h(e.customFields), x(!1);
|
|
796
1546
|
return;
|
|
797
1547
|
}
|
|
798
1548
|
if (e.sections?.length) {
|
|
799
|
-
|
|
1549
|
+
x(!1);
|
|
800
1550
|
return;
|
|
801
1551
|
}
|
|
802
|
-
if (!
|
|
803
|
-
let t = e.fields || Object.keys(
|
|
804
|
-
for (let
|
|
805
|
-
let t = typeof
|
|
1552
|
+
if (!u) return;
|
|
1553
|
+
let t = e.fields || Object.keys(u.fields || {}), r = [];
|
|
1554
|
+
for (let n of t) {
|
|
1555
|
+
let t = typeof n == "string" ? n : n.name;
|
|
806
1556
|
if (!t) continue;
|
|
807
|
-
let i =
|
|
808
|
-
i &&
|
|
1557
|
+
let i = u.fields?.[t];
|
|
1558
|
+
i && r.push({
|
|
809
1559
|
name: t,
|
|
810
|
-
label:
|
|
811
|
-
type:
|
|
1560
|
+
label: o(e.objectName, t, i.label || t),
|
|
1561
|
+
type: y(i.type),
|
|
812
1562
|
required: i.required || !1,
|
|
813
1563
|
disabled: e.readOnly || e.mode === "view" || i.readonly,
|
|
814
1564
|
placeholder: i.placeholder,
|
|
815
1565
|
description: i.help || i.description,
|
|
816
|
-
validation:
|
|
1566
|
+
validation: g(i),
|
|
817
1567
|
field: i,
|
|
818
1568
|
options: i.options,
|
|
819
1569
|
multiple: i.multiple
|
|
820
1570
|
});
|
|
821
1571
|
}
|
|
822
|
-
h(
|
|
1572
|
+
h(r), x(!1);
|
|
823
1573
|
}, [
|
|
824
|
-
|
|
1574
|
+
u,
|
|
825
1575
|
e.fields,
|
|
826
1576
|
e.customFields,
|
|
827
1577
|
e.sections,
|
|
828
1578
|
e.readOnly,
|
|
829
1579
|
e.mode,
|
|
830
|
-
|
|
1580
|
+
n
|
|
831
1581
|
]);
|
|
832
|
-
let
|
|
833
|
-
if (!
|
|
1582
|
+
let k = t(async (t) => {
|
|
1583
|
+
if (!n) return e.onSuccess && await e.onSuccess(t), e.onOpenChange?.(!1), t;
|
|
834
1584
|
try {
|
|
835
|
-
let
|
|
836
|
-
return e.mode === "create" ?
|
|
1585
|
+
let r, i = ot(t, u);
|
|
1586
|
+
return e.mode === "create" ? r = await n.create(e.objectName, i) : e.mode === "edit" && e.recordId && (r = await n.update(e.objectName, e.recordId, i)), e.onSuccess && await e.onSuccess(r), e.onOpenChange?.(!1), r;
|
|
837
1587
|
} catch (t) {
|
|
838
1588
|
throw e.onError && e.onError(t), t;
|
|
839
1589
|
}
|
|
840
1590
|
}, [
|
|
841
1591
|
e,
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
]),
|
|
1592
|
+
n,
|
|
1593
|
+
u
|
|
1594
|
+
]), A = t(() => {
|
|
845
1595
|
e.onCancel && e.onCancel(), e.onOpenChange?.(!1);
|
|
846
|
-
}, [e]),
|
|
847
|
-
if (e.drawerWidth) return
|
|
1596
|
+
}, [e]), j = a(() => {
|
|
1597
|
+
if (e.drawerWidth) return T === "left" || T === "right" ? {
|
|
848
1598
|
width: e.drawerWidth,
|
|
849
1599
|
maxWidth: e.drawerWidth
|
|
850
1600
|
} : {
|
|
851
1601
|
height: e.drawerWidth,
|
|
852
1602
|
maxHeight: e.drawerWidth
|
|
853
1603
|
};
|
|
854
|
-
}, [e.drawerWidth,
|
|
1604
|
+
}, [e.drawerWidth, T]), M = e.layout === "vertical" || e.layout === "horizontal" ? e.layout : "vertical", N = {
|
|
855
1605
|
type: "form",
|
|
856
|
-
|
|
857
|
-
|
|
1606
|
+
objectName: e.objectName,
|
|
1607
|
+
layout: M,
|
|
1608
|
+
defaultValues: _,
|
|
858
1609
|
submitLabel: e.submitText || (e.mode === "create" ? "Create" : "Update"),
|
|
859
1610
|
cancelLabel: e.cancelText,
|
|
860
1611
|
showSubmit: e.showSubmit !== !1 && e.mode !== "view",
|
|
861
1612
|
showCancel: e.showCancel !== !1,
|
|
862
|
-
onSubmit:
|
|
863
|
-
onCancel:
|
|
864
|
-
}
|
|
865
|
-
|
|
866
|
-
|
|
1613
|
+
onSubmit: k,
|
|
1614
|
+
onCancel: A
|
|
1615
|
+
}, z = () => {
|
|
1616
|
+
if (S) return /* @__PURE__ */ Z("div", {
|
|
1617
|
+
className: "p-4 border border-red-300 bg-red-50 rounded-md",
|
|
1618
|
+
children: [/* @__PURE__ */ X("h3", {
|
|
1619
|
+
className: "text-red-800 font-semibold",
|
|
1620
|
+
children: "Error loading form"
|
|
1621
|
+
}), /* @__PURE__ */ X("p", {
|
|
1622
|
+
className: "text-red-600 text-sm mt-1",
|
|
1623
|
+
children: S.message
|
|
1624
|
+
})]
|
|
1625
|
+
});
|
|
1626
|
+
if (b) return /* @__PURE__ */ Z("div", {
|
|
1627
|
+
className: "p-8 text-center",
|
|
1628
|
+
children: [/* @__PURE__ */ X("div", { className: "inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900" }), /* @__PURE__ */ X("p", {
|
|
1629
|
+
className: "mt-2 text-sm text-gray-600",
|
|
1630
|
+
children: "Loading form..."
|
|
1631
|
+
})]
|
|
1632
|
+
});
|
|
1633
|
+
if (e.sections?.length) {
|
|
1634
|
+
let t = [];
|
|
1635
|
+
return e.sections.forEach((e, n) => {
|
|
1636
|
+
let r = e.name || String(n), i = E[r] ?? e.collapsed ?? !1;
|
|
1637
|
+
t.push({
|
|
1638
|
+
name: `__section_${r}`,
|
|
1639
|
+
label: e.label || "",
|
|
1640
|
+
type: "section-divider",
|
|
1641
|
+
colSpan: 4,
|
|
1642
|
+
collapsible: e.collapsible,
|
|
1643
|
+
collapsed: i,
|
|
1644
|
+
onToggle: e.collapsible ? () => D((e) => ({
|
|
1645
|
+
...e,
|
|
1646
|
+
[r]: !i
|
|
1647
|
+
})) : void 0
|
|
1648
|
+
});
|
|
1649
|
+
let a = O(e);
|
|
1650
|
+
i ? t.push(...a.map((e) => ({
|
|
1651
|
+
...e,
|
|
1652
|
+
hidden: !0
|
|
1653
|
+
}))) : t.push(...a);
|
|
1654
|
+
}), /* @__PURE__ */ X(l, { schema: {
|
|
1655
|
+
...N,
|
|
1656
|
+
fields: t
|
|
1657
|
+
} });
|
|
1658
|
+
}
|
|
1659
|
+
let t = rt(m, u, e.columns, e.mode), n = st[t.columns || 1];
|
|
1660
|
+
return /* @__PURE__ */ X(l, { schema: {
|
|
1661
|
+
...N,
|
|
1662
|
+
fields: t.fields,
|
|
1663
|
+
columns: t.columns,
|
|
1664
|
+
...n ? { fieldContainerClass: n } : {}
|
|
1665
|
+
} });
|
|
1666
|
+
}, B = e.subforms, V = B?.length && e.mode !== "view" ? /* @__PURE__ */ X(We, {
|
|
1667
|
+
schema: {
|
|
1668
|
+
type: "object-master-detail-form",
|
|
1669
|
+
objectName: e.objectName,
|
|
1670
|
+
mode: e.mode === "edit" ? "edit" : "create",
|
|
1671
|
+
recordId: e.recordId,
|
|
1672
|
+
fields: e.fields,
|
|
1673
|
+
sections: e.sections,
|
|
1674
|
+
submitText: e.submitText,
|
|
1675
|
+
details: B,
|
|
1676
|
+
onSuccess: async (t) => {
|
|
1677
|
+
await e.onSuccess?.(t), e.onOpenChange?.(!1);
|
|
1678
|
+
},
|
|
1679
|
+
onError: e.onError,
|
|
1680
|
+
onCancel: () => e.onOpenChange?.(!1)
|
|
1681
|
+
},
|
|
1682
|
+
dataSource: n
|
|
1683
|
+
}) : z();
|
|
1684
|
+
return c ? /* @__PURE__ */ Z("div", {
|
|
1685
|
+
className: "@container rounded-md border bg-card p-4",
|
|
1686
|
+
children: [(e.title || e.description) && /* @__PURE__ */ Z("div", {
|
|
1687
|
+
className: "mb-3 space-y-0.5",
|
|
1688
|
+
children: [e.title && /* @__PURE__ */ X("div", {
|
|
1689
|
+
className: "text-sm font-semibold",
|
|
1690
|
+
children: e.title
|
|
1691
|
+
}), e.description && /* @__PURE__ */ X("p", {
|
|
1692
|
+
className: "text-xs text-muted-foreground",
|
|
1693
|
+
children: e.description
|
|
1694
|
+
})]
|
|
1695
|
+
}), V]
|
|
1696
|
+
}) : /* @__PURE__ */ X(P, {
|
|
1697
|
+
open: w,
|
|
867
1698
|
onOpenChange: e.onOpenChange,
|
|
868
|
-
children: /* @__PURE__ */
|
|
869
|
-
side:
|
|
870
|
-
className:
|
|
871
|
-
style:
|
|
872
|
-
children: [(e.title || e.description) && /* @__PURE__ */
|
|
1699
|
+
children: /* @__PURE__ */ Z(F, {
|
|
1700
|
+
side: T,
|
|
1701
|
+
className: W("overflow-y-auto", i, e.className),
|
|
1702
|
+
style: j,
|
|
1703
|
+
children: [(e.title || e.description) && /* @__PURE__ */ Z(L, { children: [e.title && /* @__PURE__ */ X(R, { children: e.title }), e.description ? /* @__PURE__ */ X(I, { children: e.description }) : /* @__PURE__ */ X(I, {
|
|
1704
|
+
className: "sr-only",
|
|
1705
|
+
children: "Complete the form fields, then submit or cancel."
|
|
1706
|
+
})] }), /* @__PURE__ */ X("div", {
|
|
873
1707
|
className: "@container py-4",
|
|
874
|
-
children:
|
|
875
|
-
if (b) return /* @__PURE__ */ Y("div", {
|
|
876
|
-
className: "p-4 border border-red-300 bg-red-50 rounded-md",
|
|
877
|
-
children: [/* @__PURE__ */ J("h3", {
|
|
878
|
-
className: "text-red-800 font-semibold",
|
|
879
|
-
children: "Error loading form"
|
|
880
|
-
}), /* @__PURE__ */ J("p", {
|
|
881
|
-
className: "text-red-600 text-sm mt-1",
|
|
882
|
-
children: b.message
|
|
883
|
-
})]
|
|
884
|
-
});
|
|
885
|
-
if (v) return /* @__PURE__ */ Y("div", {
|
|
886
|
-
className: "p-8 text-center",
|
|
887
|
-
children: [/* @__PURE__ */ J("div", { className: "inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900" }), /* @__PURE__ */ J("p", {
|
|
888
|
-
className: "mt-2 text-sm text-gray-600",
|
|
889
|
-
children: "Loading form..."
|
|
890
|
-
})]
|
|
891
|
-
});
|
|
892
|
-
if (e.sections?.length) {
|
|
893
|
-
let t = [];
|
|
894
|
-
return e.sections.forEach((e, n) => {
|
|
895
|
-
let r = e.name || String(n), i = w[r] ?? e.collapsed ?? !1;
|
|
896
|
-
t.push({
|
|
897
|
-
name: `__section_${r}`,
|
|
898
|
-
label: e.label || "",
|
|
899
|
-
type: "section-divider",
|
|
900
|
-
colSpan: 4,
|
|
901
|
-
collapsible: e.collapsible,
|
|
902
|
-
collapsed: i,
|
|
903
|
-
onToggle: e.collapsible ? () => T((e) => ({
|
|
904
|
-
...e,
|
|
905
|
-
[r]: !i
|
|
906
|
-
})) : void 0
|
|
907
|
-
});
|
|
908
|
-
let a = E(e);
|
|
909
|
-
i ? t.push(...a.map((e) => ({
|
|
910
|
-
...e,
|
|
911
|
-
hidden: !0
|
|
912
|
-
}))) : t.push(...a);
|
|
913
|
-
}), /* @__PURE__ */ J(c, { schema: {
|
|
914
|
-
...F,
|
|
915
|
-
fields: t
|
|
916
|
-
} });
|
|
917
|
-
}
|
|
918
|
-
let t = $(m, d, e.columns, e.mode), n = ve[t.columns || 1];
|
|
919
|
-
return /* @__PURE__ */ J(c, { schema: {
|
|
920
|
-
...F,
|
|
921
|
-
fields: t.fields,
|
|
922
|
-
columns: t.columns,
|
|
923
|
-
...n ? { fieldContainerClass: n } : {}
|
|
924
|
-
} });
|
|
925
|
-
})()
|
|
1708
|
+
children: V
|
|
926
1709
|
})]
|
|
927
1710
|
})
|
|
928
1711
|
});
|
|
929
|
-
},
|
|
1712
|
+
}, lt = {
|
|
930
1713
|
sm: "sm:max-w-sm",
|
|
931
1714
|
default: "sm:max-w-lg",
|
|
932
1715
|
lg: "sm:max-w-2xl",
|
|
933
1716
|
xl: "sm:max-w-5xl",
|
|
934
1717
|
full: "sm:max-w-[95vw] sm:w-full"
|
|
935
|
-
},
|
|
1718
|
+
}, ut = {
|
|
936
1719
|
1: void 0,
|
|
937
1720
|
2: "grid gap-4 grid-cols-1 @md:grid-cols-2",
|
|
938
1721
|
3: "grid gap-4 grid-cols-1 @md:grid-cols-2 @2xl:grid-cols-3",
|
|
939
1722
|
4: "grid gap-4 grid-cols-1 @md:grid-cols-2 @2xl:grid-cols-3 @4xl:grid-cols-4"
|
|
940
|
-
},
|
|
941
|
-
let { fieldLabel:
|
|
942
|
-
if (!
|
|
1723
|
+
}, dt = ({ schema: e, dataSource: n, className: o }) => {
|
|
1724
|
+
let { fieldLabel: c } = p(), u = d(), f = K(), m = t((t) => {
|
|
1725
|
+
if (!f?.isLoaded) return t;
|
|
943
1726
|
let n = [];
|
|
944
1727
|
for (let r of t) {
|
|
945
1728
|
if (!r?.name) {
|
|
946
1729
|
n.push(r);
|
|
947
1730
|
continue;
|
|
948
1731
|
}
|
|
949
|
-
|
|
1732
|
+
f.checkField(e.objectName, r.name, "read") && (!f.checkField(e.objectName, r.name, "write") && e.mode !== "view" ? n.push({
|
|
950
1733
|
...r,
|
|
951
1734
|
readOnly: !0,
|
|
952
1735
|
disabled: !0
|
|
@@ -954,155 +1737,132 @@ var ve = {
|
|
|
954
1737
|
}
|
|
955
1738
|
return n;
|
|
956
1739
|
}, [
|
|
957
|
-
|
|
1740
|
+
f,
|
|
958
1741
|
e.objectName,
|
|
959
1742
|
e.mode
|
|
960
|
-
]), [
|
|
961
|
-
|
|
962
|
-
|
|
1743
|
+
]), [h, _] = s(null), [v, x] = s([]), [S, C] = s({}), [w, T] = s(!0), [j, M] = s(null), [N, P] = s(!1), F = e.open !== !1, I = i(), L = a(() => e.sections?.length || e.customFields?.length ? null : rt(v, h, e.columns, e.mode), [
|
|
1744
|
+
v,
|
|
1745
|
+
h,
|
|
963
1746
|
e.columns,
|
|
964
1747
|
e.mode,
|
|
965
1748
|
e.sections,
|
|
966
1749
|
e.customFields
|
|
967
|
-
]),
|
|
1750
|
+
]), R = lt[a(() => {
|
|
968
1751
|
if (e.modalSize) return e.modalSize;
|
|
969
|
-
if (L?.columns && L.columns > 1) return
|
|
1752
|
+
if (L?.columns && L.columns > 1) return nt(L.columns);
|
|
970
1753
|
if (e.sections?.length) {
|
|
971
1754
|
let t = Math.max(...e.sections.map((e) => Number(e.columns) || 1));
|
|
972
|
-
if (t > 1) return
|
|
1755
|
+
if (t > 1) return nt(t);
|
|
973
1756
|
}
|
|
974
1757
|
return "default";
|
|
975
1758
|
}, [
|
|
976
1759
|
e.modalSize,
|
|
977
1760
|
L,
|
|
978
1761
|
e.sections
|
|
979
|
-
])] ||
|
|
980
|
-
|
|
1762
|
+
])] || lt.default;
|
|
1763
|
+
r(() => {
|
|
981
1764
|
(async () => {
|
|
982
|
-
if (!
|
|
983
|
-
|
|
1765
|
+
if (!n) {
|
|
1766
|
+
T(!1);
|
|
984
1767
|
return;
|
|
985
1768
|
}
|
|
986
1769
|
try {
|
|
987
|
-
|
|
1770
|
+
_(await n.getObjectSchema(e.objectName));
|
|
988
1771
|
} catch (e) {
|
|
989
|
-
|
|
1772
|
+
M(e), T(!1);
|
|
990
1773
|
}
|
|
991
1774
|
})();
|
|
992
|
-
}, [e.objectName,
|
|
993
|
-
(
|
|
1775
|
+
}, [e.objectName, n]), r(() => {
|
|
1776
|
+
(h || !n) && (async () => {
|
|
994
1777
|
if (e.mode === "create" || !e.recordId) {
|
|
995
|
-
|
|
1778
|
+
C(e.initialData || e.initialValues || {}), T(!1);
|
|
996
1779
|
return;
|
|
997
1780
|
}
|
|
998
|
-
if (!
|
|
999
|
-
|
|
1781
|
+
if (!n) {
|
|
1782
|
+
C(e.initialData || e.initialValues || {}), T(!1);
|
|
1000
1783
|
return;
|
|
1001
1784
|
}
|
|
1002
1785
|
try {
|
|
1003
|
-
|
|
1786
|
+
C(await n.findOne(e.objectName, e.recordId) || {});
|
|
1004
1787
|
} catch (e) {
|
|
1005
|
-
|
|
1788
|
+
M(e);
|
|
1006
1789
|
} finally {
|
|
1007
|
-
|
|
1790
|
+
T(!1);
|
|
1008
1791
|
}
|
|
1009
1792
|
})();
|
|
1010
1793
|
}, [
|
|
1011
|
-
|
|
1794
|
+
h,
|
|
1012
1795
|
e.mode,
|
|
1013
1796
|
e.recordId,
|
|
1014
1797
|
e.initialData,
|
|
1015
1798
|
e.initialValues,
|
|
1016
|
-
|
|
1799
|
+
n,
|
|
1017
1800
|
e.objectName
|
|
1018
1801
|
]);
|
|
1019
|
-
let
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
else if (_?.fields?.[t]) {
|
|
1028
|
-
let i = _.fields[t];
|
|
1029
|
-
n.push(r({
|
|
1030
|
-
name: t,
|
|
1031
|
-
label: f(e.objectName, t, i.label || t),
|
|
1032
|
-
type: p(i.type),
|
|
1033
|
-
required: i.required || !1,
|
|
1034
|
-
disabled: e.readOnly || e.mode === "view" || i.readonly,
|
|
1035
|
-
placeholder: i.placeholder,
|
|
1036
|
-
description: i.help || i.description,
|
|
1037
|
-
validation: u(i),
|
|
1038
|
-
field: i,
|
|
1039
|
-
options: i.options,
|
|
1040
|
-
multiple: i.multiple
|
|
1041
|
-
}, i.visible_on ?? i.visibleOn));
|
|
1042
|
-
} else n.push({
|
|
1043
|
-
name: t,
|
|
1044
|
-
label: t,
|
|
1045
|
-
type: "input"
|
|
1046
|
-
});
|
|
1047
|
-
}
|
|
1048
|
-
return n;
|
|
1049
|
-
}, [
|
|
1050
|
-
_,
|
|
1802
|
+
let G = t((t) => fe(t, {
|
|
1803
|
+
objectSchema: h,
|
|
1804
|
+
objectName: e.objectName,
|
|
1805
|
+
readOnly: e.readOnly,
|
|
1806
|
+
mode: e.mode,
|
|
1807
|
+
fieldLabel: c
|
|
1808
|
+
}), [
|
|
1809
|
+
h,
|
|
1051
1810
|
e.readOnly,
|
|
1052
1811
|
e.mode,
|
|
1053
|
-
e.objectName
|
|
1812
|
+
e.objectName,
|
|
1813
|
+
c
|
|
1054
1814
|
]);
|
|
1055
|
-
|
|
1056
|
-
if (!
|
|
1815
|
+
r(() => {
|
|
1816
|
+
if (!h && n) return;
|
|
1057
1817
|
if (e.customFields?.length) {
|
|
1058
|
-
|
|
1818
|
+
x(e.customFields), T(!1);
|
|
1059
1819
|
return;
|
|
1060
1820
|
}
|
|
1061
1821
|
if (e.sections?.length) {
|
|
1062
|
-
|
|
1822
|
+
T(!1);
|
|
1063
1823
|
return;
|
|
1064
1824
|
}
|
|
1065
|
-
if (!
|
|
1066
|
-
let t = e.fields || Object.keys(
|
|
1067
|
-
for (let
|
|
1068
|
-
let t = typeof
|
|
1825
|
+
if (!h) return;
|
|
1826
|
+
let t = e.fields || Object.keys(h.fields || {}), r = [];
|
|
1827
|
+
for (let n of t) {
|
|
1828
|
+
let t = typeof n == "string" ? n : n.name;
|
|
1069
1829
|
if (!t) continue;
|
|
1070
|
-
let i =
|
|
1071
|
-
i &&
|
|
1830
|
+
let i = h.fields?.[t];
|
|
1831
|
+
i && r.push({
|
|
1072
1832
|
name: t,
|
|
1073
|
-
label:
|
|
1074
|
-
type:
|
|
1833
|
+
label: c(e.objectName, t, i.label || t),
|
|
1834
|
+
type: y(i.type),
|
|
1075
1835
|
required: i.required || !1,
|
|
1076
1836
|
disabled: e.readOnly || e.mode === "view" || i.readonly,
|
|
1077
1837
|
placeholder: i.placeholder,
|
|
1078
1838
|
description: i.help || i.description,
|
|
1079
|
-
validation:
|
|
1839
|
+
validation: g(i),
|
|
1080
1840
|
field: i,
|
|
1081
1841
|
options: i.options,
|
|
1082
1842
|
multiple: i.multiple
|
|
1083
1843
|
});
|
|
1084
1844
|
}
|
|
1085
|
-
|
|
1845
|
+
x(r), T(!1);
|
|
1086
1846
|
}, [
|
|
1087
|
-
|
|
1847
|
+
h,
|
|
1088
1848
|
e.fields,
|
|
1089
1849
|
e.customFields,
|
|
1090
1850
|
e.sections,
|
|
1091
1851
|
e.readOnly,
|
|
1092
1852
|
e.mode,
|
|
1093
|
-
|
|
1853
|
+
n
|
|
1094
1854
|
]);
|
|
1095
|
-
let
|
|
1855
|
+
let ee = t(async (t) => {
|
|
1096
1856
|
P(!0);
|
|
1097
1857
|
try {
|
|
1098
|
-
if (!
|
|
1099
|
-
let
|
|
1100
|
-
if (
|
|
1858
|
+
if (!n) return e.onSuccess && await e.onSuccess(t), e.onOpenChange?.(!1), t;
|
|
1859
|
+
let r, i = ot(t, h);
|
|
1860
|
+
if (f?.isLoaded) {
|
|
1101
1861
|
let t = {};
|
|
1102
|
-
for (let n of Object.keys(
|
|
1103
|
-
|
|
1862
|
+
for (let n of Object.keys(i)) f.checkField(e.objectName, n, "write") && (t[n] = i[n]);
|
|
1863
|
+
i = t;
|
|
1104
1864
|
}
|
|
1105
|
-
return e.mode === "create" ?
|
|
1865
|
+
return e.mode === "create" ? r = await n.create(e.objectName, i) : e.mode === "edit" && e.recordId && (r = await n.update(e.objectName, e.recordId, i)), e.onSuccess && await e.onSuccess(r), e.onOpenChange?.(!1), r;
|
|
1106
1866
|
} catch (t) {
|
|
1107
1867
|
throw e.onError && e.onError(t), t;
|
|
1108
1868
|
} finally {
|
|
@@ -1110,110 +1870,221 @@ var ve = {
|
|
|
1110
1870
|
}
|
|
1111
1871
|
}, [
|
|
1112
1872
|
e,
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
]),
|
|
1873
|
+
n,
|
|
1874
|
+
h,
|
|
1875
|
+
f
|
|
1876
|
+
]), q = t(() => {
|
|
1117
1877
|
e.onCancel && e.onCancel(), e.onOpenChange?.(!1);
|
|
1118
|
-
}, [e]), te = e.layout === "vertical" || e.layout === "horizontal" ? e.layout : "vertical",
|
|
1878
|
+
}, [e]), te = e.layout === "vertical" || e.layout === "horizontal" ? e.layout : "vertical", J = e.showSubmit !== !1 && e.mode !== "view", ne = e.showCancel !== !1, Y = e.submitText || (e.mode === "create" ? "Create" : "Update"), ie = e.cancelText || "Cancel", ae = {
|
|
1119
1879
|
type: "form",
|
|
1880
|
+
objectName: e.objectName,
|
|
1120
1881
|
layout: te,
|
|
1121
|
-
defaultValues:
|
|
1122
|
-
submitLabel:
|
|
1123
|
-
cancelLabel:
|
|
1124
|
-
showSubmit:
|
|
1125
|
-
showCancel:
|
|
1126
|
-
onSubmit:
|
|
1127
|
-
onCancel:
|
|
1882
|
+
defaultValues: S,
|
|
1883
|
+
submitLabel: Y,
|
|
1884
|
+
cancelLabel: ie,
|
|
1885
|
+
showSubmit: J,
|
|
1886
|
+
showCancel: ne,
|
|
1887
|
+
onSubmit: ee,
|
|
1888
|
+
onCancel: q,
|
|
1128
1889
|
showActions: !1,
|
|
1129
1890
|
id: I
|
|
1130
|
-
},
|
|
1131
|
-
if (
|
|
1891
|
+
}, oe = () => {
|
|
1892
|
+
if (j) return /* @__PURE__ */ Z("div", {
|
|
1132
1893
|
className: "p-4 border border-red-300 bg-red-50 rounded-md",
|
|
1133
|
-
children: [/* @__PURE__ */
|
|
1894
|
+
children: [/* @__PURE__ */ X("h3", {
|
|
1134
1895
|
className: "text-red-800 font-semibold",
|
|
1135
1896
|
children: "Error loading form"
|
|
1136
|
-
}), /* @__PURE__ */
|
|
1897
|
+
}), /* @__PURE__ */ X("p", {
|
|
1137
1898
|
className: "text-red-600 text-sm mt-1",
|
|
1138
|
-
children:
|
|
1899
|
+
children: j.message
|
|
1139
1900
|
})]
|
|
1140
1901
|
});
|
|
1141
|
-
if (
|
|
1902
|
+
if (w) return /* @__PURE__ */ X("div", {
|
|
1142
1903
|
className: "space-y-4",
|
|
1143
1904
|
"data-testid": "modal-form-skeleton",
|
|
1144
1905
|
children: [
|
|
1145
1906
|
1,
|
|
1146
1907
|
2,
|
|
1147
1908
|
3
|
|
1148
|
-
].map((e) => /* @__PURE__ */
|
|
1909
|
+
].map((e) => /* @__PURE__ */ Z("div", {
|
|
1149
1910
|
className: "space-y-2",
|
|
1150
|
-
children: [/* @__PURE__ */
|
|
1911
|
+
children: [/* @__PURE__ */ X(z, { className: "h-4 w-24" }), /* @__PURE__ */ X(z, { className: "h-10 w-full" })]
|
|
1151
1912
|
}, e))
|
|
1152
1913
|
});
|
|
1153
|
-
if (e.sections?.length)
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1914
|
+
if (e.sections?.length) {
|
|
1915
|
+
let t = e.sections, n = (e, t) => e.name || e.label || String(t), r = (e) => /* @__PURE__ */ X(l, { schema: {
|
|
1916
|
+
...ae,
|
|
1917
|
+
fields: m(G(e))
|
|
1918
|
+
} });
|
|
1919
|
+
return e.contentLayout === "tabbed" && t.length > 1 ? /* @__PURE__ */ Z(B, {
|
|
1920
|
+
defaultValue: n(t[0], 0),
|
|
1921
|
+
className: "w-full",
|
|
1922
|
+
children: [/* @__PURE__ */ X(H, {
|
|
1923
|
+
className: "mb-4",
|
|
1924
|
+
children: t.map((e, t) => /* @__PURE__ */ X(U, {
|
|
1925
|
+
value: n(e, t),
|
|
1926
|
+
children: e.label || `Section ${t + 1}`
|
|
1927
|
+
}, n(e, t)))
|
|
1928
|
+
}), t.map((e, t) => /* @__PURE__ */ X(V, {
|
|
1929
|
+
value: n(e, t),
|
|
1930
|
+
children: /* @__PURE__ */ X(Q, {
|
|
1931
|
+
description: e.description,
|
|
1932
|
+
columns: e.columns || 1,
|
|
1933
|
+
gridClassName: ut[e.columns || 1],
|
|
1934
|
+
children: r(e)
|
|
1935
|
+
})
|
|
1936
|
+
}, n(e, t)))]
|
|
1937
|
+
}) : /* @__PURE__ */ X("div", {
|
|
1938
|
+
className: "space-y-6",
|
|
1939
|
+
children: t.map((e, t) => /* @__PURE__ */ X(Q, {
|
|
1158
1940
|
label: e.label,
|
|
1159
1941
|
description: e.description,
|
|
1160
|
-
columns:
|
|
1161
|
-
gridClassName:
|
|
1162
|
-
children:
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
return /* @__PURE__ */ J(c, { schema: {
|
|
1171
|
-
...Z,
|
|
1172
|
-
fields: g(t.fields),
|
|
1942
|
+
columns: e.columns || 1,
|
|
1943
|
+
gridClassName: ut[e.columns || 1],
|
|
1944
|
+
children: r(e)
|
|
1945
|
+
}, n(e, t)))
|
|
1946
|
+
});
|
|
1947
|
+
}
|
|
1948
|
+
let t = L ?? rt(v, h, e.columns, e.mode), n = ut[t.columns || 1];
|
|
1949
|
+
return /* @__PURE__ */ X(l, { schema: {
|
|
1950
|
+
...ae,
|
|
1951
|
+
fields: m(t.fields),
|
|
1173
1952
|
columns: t.columns,
|
|
1174
1953
|
...n ? { fieldContainerClass: n } : {}
|
|
1175
1954
|
} });
|
|
1176
|
-
},
|
|
1177
|
-
return /* @__PURE__ */
|
|
1955
|
+
}, se = e.subforms;
|
|
1956
|
+
if (u) return /* @__PURE__ */ Z("div", {
|
|
1957
|
+
className: "@container rounded-md border bg-card p-4",
|
|
1958
|
+
children: [(e.title || e.description) && /* @__PURE__ */ Z("div", {
|
|
1959
|
+
className: "mb-3 space-y-0.5",
|
|
1960
|
+
children: [e.title && /* @__PURE__ */ X("div", {
|
|
1961
|
+
className: "text-sm font-semibold",
|
|
1962
|
+
children: e.title
|
|
1963
|
+
}), e.description && /* @__PURE__ */ X("p", {
|
|
1964
|
+
className: "text-xs text-muted-foreground",
|
|
1965
|
+
children: e.description
|
|
1966
|
+
})]
|
|
1967
|
+
}), oe()]
|
|
1968
|
+
});
|
|
1969
|
+
if (se?.length && e.mode !== "view") return /* @__PURE__ */ X(E, {
|
|
1970
|
+
open: F,
|
|
1971
|
+
onOpenChange: e.onOpenChange,
|
|
1972
|
+
children: /* @__PURE__ */ Z(A, {
|
|
1973
|
+
className: W(R, "flex flex-col h-[100dvh] sm:h-auto sm:max-h-[90vh] overflow-hidden p-0", o, e.className),
|
|
1974
|
+
children: [(e.title || e.description) && /* @__PURE__ */ Z(O, {
|
|
1975
|
+
className: "shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b",
|
|
1976
|
+
children: [e.title && /* @__PURE__ */ X(k, { children: e.title }), e.description ? /* @__PURE__ */ X(D, { children: e.description }) : /* @__PURE__ */ X(D, {
|
|
1977
|
+
className: "sr-only",
|
|
1978
|
+
children: "Enter the record and its line items, then save."
|
|
1979
|
+
})]
|
|
1980
|
+
}), /* @__PURE__ */ X("div", {
|
|
1981
|
+
className: "@container flex-1 overflow-y-auto px-4 sm:px-6 py-4",
|
|
1982
|
+
children: /* @__PURE__ */ X(We, {
|
|
1983
|
+
schema: {
|
|
1984
|
+
type: "object-master-detail-form",
|
|
1985
|
+
objectName: e.objectName,
|
|
1986
|
+
mode: e.mode === "edit" ? "edit" : "create",
|
|
1987
|
+
recordId: e.recordId,
|
|
1988
|
+
fields: e.fields,
|
|
1989
|
+
sections: e.sections,
|
|
1990
|
+
submitText: Y,
|
|
1991
|
+
details: se,
|
|
1992
|
+
onSuccess: async (t) => {
|
|
1993
|
+
await e.onSuccess?.(t), e.onOpenChange?.(!1);
|
|
1994
|
+
},
|
|
1995
|
+
onError: e.onError,
|
|
1996
|
+
onCancel: () => e.onOpenChange?.(!1)
|
|
1997
|
+
},
|
|
1998
|
+
dataSource: n
|
|
1999
|
+
})
|
|
2000
|
+
})]
|
|
2001
|
+
})
|
|
2002
|
+
});
|
|
2003
|
+
let ce = !w && !j && (J || ne);
|
|
2004
|
+
return /* @__PURE__ */ X(E, {
|
|
1178
2005
|
open: F,
|
|
1179
2006
|
onOpenChange: e.onOpenChange,
|
|
1180
|
-
children: /* @__PURE__ */
|
|
1181
|
-
className: R
|
|
2007
|
+
children: /* @__PURE__ */ Z(A, {
|
|
2008
|
+
className: W(R, "flex flex-col h-[100dvh] sm:h-auto sm:max-h-[90vh] overflow-hidden p-0", o, e.className),
|
|
1182
2009
|
children: [
|
|
1183
|
-
(e.title || e.description) && /* @__PURE__ */
|
|
2010
|
+
(e.title || e.description) && /* @__PURE__ */ Z(O, {
|
|
1184
2011
|
className: "shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b",
|
|
1185
|
-
children: [e.title && /* @__PURE__ */
|
|
2012
|
+
children: [e.title && /* @__PURE__ */ X(k, { children: e.title }), e.description ? /* @__PURE__ */ X(D, { children: e.description }) : /* @__PURE__ */ X(D, {
|
|
2013
|
+
className: "sr-only",
|
|
2014
|
+
children: "Complete the form fields, then submit or cancel."
|
|
2015
|
+
})]
|
|
1186
2016
|
}),
|
|
1187
|
-
/* @__PURE__ */
|
|
2017
|
+
/* @__PURE__ */ X("div", {
|
|
1188
2018
|
className: "@container flex-1 overflow-y-auto px-4 sm:px-6 py-4",
|
|
1189
|
-
children:
|
|
2019
|
+
children: oe()
|
|
1190
2020
|
}),
|
|
1191
|
-
|
|
2021
|
+
ce && /* @__PURE__ */ X("div", {
|
|
1192
2022
|
className: "shrink-0 border-t px-4 sm:px-6 py-3 bg-background",
|
|
1193
2023
|
"data-testid": "modal-form-footer",
|
|
1194
|
-
children: /* @__PURE__ */
|
|
2024
|
+
children: /* @__PURE__ */ Z("div", {
|
|
1195
2025
|
className: "flex flex-col sm:flex-row gap-2 sm:justify-end",
|
|
1196
|
-
children: [
|
|
2026
|
+
children: [ne && /* @__PURE__ */ X(b, {
|
|
1197
2027
|
type: "button",
|
|
1198
2028
|
variant: "outline",
|
|
1199
|
-
onClick:
|
|
1200
|
-
disabled:
|
|
2029
|
+
onClick: q,
|
|
2030
|
+
disabled: N,
|
|
1201
2031
|
className: "w-full sm:w-auto",
|
|
1202
|
-
children:
|
|
1203
|
-
}),
|
|
2032
|
+
children: ie
|
|
2033
|
+
}), J && /* @__PURE__ */ Z(b, {
|
|
1204
2034
|
type: "submit",
|
|
1205
2035
|
form: I,
|
|
1206
|
-
disabled:
|
|
2036
|
+
disabled: N,
|
|
1207
2037
|
className: "w-full sm:w-auto",
|
|
1208
|
-
children: [
|
|
2038
|
+
children: [N && /* @__PURE__ */ X(re, { className: "mr-2 h-4 w-4 animate-spin" }), Y]
|
|
1209
2039
|
})]
|
|
1210
2040
|
})
|
|
1211
2041
|
})
|
|
1212
2042
|
]
|
|
1213
2043
|
})
|
|
1214
2044
|
});
|
|
1215
|
-
}
|
|
1216
|
-
|
|
2045
|
+
};
|
|
2046
|
+
//#endregion
|
|
2047
|
+
//#region src/fieldGroups.ts
|
|
2048
|
+
function ft(e) {
|
|
2049
|
+
return Array.isArray(e) ? e.filter((e) => !!e && typeof e == "object").map((e) => ({
|
|
2050
|
+
key: typeof e.key == "string" ? e.key : "",
|
|
2051
|
+
label: typeof e.label == "string" ? e.label : void 0,
|
|
2052
|
+
collapsible: typeof e.collapsible == "boolean" ? e.collapsible : void 0,
|
|
2053
|
+
collapsed: typeof e.collapsed == "boolean" ? e.collapsed : void 0
|
|
2054
|
+
})).filter((e) => e.key) : [];
|
|
2055
|
+
}
|
|
2056
|
+
function pt(e, t) {
|
|
2057
|
+
let n = ft(t);
|
|
2058
|
+
if (n.length === 0) return null;
|
|
2059
|
+
let r = new Set(n.map((e) => e.key)), i = (e) => {
|
|
2060
|
+
let t = e.group;
|
|
2061
|
+
return typeof t == "string" && r.has(t) ? t : null;
|
|
2062
|
+
};
|
|
2063
|
+
if (!e.some((e) => i(e) !== null)) return null;
|
|
2064
|
+
let a = /* @__PURE__ */ new Map();
|
|
2065
|
+
for (let e of n) a.set(e.key, []);
|
|
2066
|
+
let o = [];
|
|
2067
|
+
for (let t of e) {
|
|
2068
|
+
let e = i(t);
|
|
2069
|
+
e ? a.get(e).push(t) : o.push(t);
|
|
2070
|
+
}
|
|
2071
|
+
let s = [];
|
|
2072
|
+
for (let e of n) {
|
|
2073
|
+
let t = a.get(e.key);
|
|
2074
|
+
t.length !== 0 && s.push({
|
|
2075
|
+
name: e.key,
|
|
2076
|
+
label: e.label ?? e.key,
|
|
2077
|
+
fields: t.map((e) => e.name),
|
|
2078
|
+
...e.collapsible === void 0 ? {} : { collapsible: e.collapsible },
|
|
2079
|
+
...e.collapsed === void 0 ? {} : { collapsed: e.collapsed }
|
|
2080
|
+
});
|
|
2081
|
+
}
|
|
2082
|
+
return o.length > 0 && s.push({ fields: o.map((e) => e.name) }), s;
|
|
2083
|
+
}
|
|
2084
|
+
//#endregion
|
|
2085
|
+
//#region src/ObjectForm.tsx
|
|
2086
|
+
var mt = ({ schema: e, dataSource: t }) => {
|
|
2087
|
+
let n = K(), r = a(() => {
|
|
1217
2088
|
if (!n?.isLoaded) return e;
|
|
1218
2089
|
let t = (t) => t?.name ? n.checkField(e.objectName, t.name, "read") ? !n.checkField(e.objectName, t.name, "write") && e.mode !== "view" ? {
|
|
1219
2090
|
...t,
|
|
@@ -1228,8 +2099,30 @@ var ve = {
|
|
|
1228
2099
|
fields: r(e.fields)
|
|
1229
2100
|
}))
|
|
1230
2101
|
};
|
|
1231
|
-
}, [e, n]), { sectionLabel:
|
|
1232
|
-
if (r.formType
|
|
2102
|
+
}, [e, n]), { sectionLabel: i } = p(), o = (e) => e?.name ? i(r.objectName, e.name, e.label || e.name) : e?.label;
|
|
2103
|
+
if (r.subforms?.length && r.mode !== "view" && r.formType !== "drawer" && r.formType !== "modal") return /* @__PURE__ */ X(We, {
|
|
2104
|
+
schema: {
|
|
2105
|
+
type: "object-master-detail-form",
|
|
2106
|
+
objectName: r.objectName,
|
|
2107
|
+
mode: r.mode === "edit" ? "edit" : "create",
|
|
2108
|
+
recordId: r.recordId,
|
|
2109
|
+
initialValues: r.initialValues,
|
|
2110
|
+
initialData: r.initialData,
|
|
2111
|
+
formType: r.formType === "tabbed" ? "tabbed" : "simple",
|
|
2112
|
+
sections: r.sections,
|
|
2113
|
+
fields: r.fields,
|
|
2114
|
+
title: r.title,
|
|
2115
|
+
submitText: r.submitText,
|
|
2116
|
+
showSubmit: r.showSubmit,
|
|
2117
|
+
details: r.subforms,
|
|
2118
|
+
onSuccess: r.onSuccess,
|
|
2119
|
+
onError: r.onError,
|
|
2120
|
+
onCancel: r.onCancel,
|
|
2121
|
+
className: r.className
|
|
2122
|
+
},
|
|
2123
|
+
dataSource: t
|
|
2124
|
+
});
|
|
2125
|
+
if (r.formType === "tabbed" && r.sections?.length) return /* @__PURE__ */ X(pe, {
|
|
1233
2126
|
schema: {
|
|
1234
2127
|
...r,
|
|
1235
2128
|
formType: "tabbed",
|
|
@@ -1246,7 +2139,7 @@ var ve = {
|
|
|
1246
2139
|
dataSource: t,
|
|
1247
2140
|
className: r.className
|
|
1248
2141
|
});
|
|
1249
|
-
if (r.formType === "wizard" && r.sections?.length) return /* @__PURE__ */
|
|
2142
|
+
if (r.formType === "wizard" && r.sections?.length) return /* @__PURE__ */ X(me, {
|
|
1250
2143
|
schema: {
|
|
1251
2144
|
...r,
|
|
1252
2145
|
formType: "wizard",
|
|
@@ -1266,7 +2159,7 @@ var ve = {
|
|
|
1266
2159
|
dataSource: t,
|
|
1267
2160
|
className: r.className
|
|
1268
2161
|
});
|
|
1269
|
-
if (r.formType === "split" && r.sections?.length) return /* @__PURE__ */
|
|
2162
|
+
if (r.formType === "split" && r.sections?.length) return /* @__PURE__ */ X(he, {
|
|
1270
2163
|
schema: {
|
|
1271
2164
|
...r,
|
|
1272
2165
|
formType: "split",
|
|
@@ -1286,7 +2179,7 @@ var ve = {
|
|
|
1286
2179
|
});
|
|
1287
2180
|
if (r.formType === "drawer") {
|
|
1288
2181
|
let { layout: e, ...n } = r, i = r.layout === "vertical" || r.layout === "horizontal" ? r.layout : void 0;
|
|
1289
|
-
return /* @__PURE__ */
|
|
2182
|
+
return /* @__PURE__ */ X(ct, {
|
|
1290
2183
|
schema: {
|
|
1291
2184
|
...n,
|
|
1292
2185
|
layout: i,
|
|
@@ -1311,7 +2204,7 @@ var ve = {
|
|
|
1311
2204
|
}
|
|
1312
2205
|
if (r.formType === "modal") {
|
|
1313
2206
|
let { layout: e, ...n } = r, i = r.layout === "vertical" || r.layout === "horizontal" ? r.layout : void 0;
|
|
1314
|
-
return /* @__PURE__ */
|
|
2207
|
+
return /* @__PURE__ */ X(dt, {
|
|
1315
2208
|
schema: {
|
|
1316
2209
|
...n,
|
|
1317
2210
|
layout: i,
|
|
@@ -1332,54 +2225,54 @@ var ve = {
|
|
|
1332
2225
|
className: r.className
|
|
1333
2226
|
});
|
|
1334
2227
|
}
|
|
1335
|
-
return /* @__PURE__ */
|
|
2228
|
+
return /* @__PURE__ */ X(ht, {
|
|
1336
2229
|
schema: r,
|
|
1337
2230
|
dataSource: t
|
|
1338
2231
|
});
|
|
1339
|
-
},
|
|
1340
|
-
let { fieldLabel: a, sectionLabel:
|
|
1341
|
-
if (!
|
|
2232
|
+
}, ht = ({ schema: n, dataSource: i }) => {
|
|
2233
|
+
let { fieldLabel: a, sectionLabel: o } = p(), c = ee(), u = K(), d = t((e) => {
|
|
2234
|
+
if (!u?.isLoaded) return e;
|
|
1342
2235
|
let t = [];
|
|
1343
|
-
for (let
|
|
1344
|
-
...
|
|
2236
|
+
for (let r of e) u.checkField(n.objectName, r.name, "read") && (!u.checkField(n.objectName, r.name, "write") && n.mode !== "view" ? t.push({
|
|
2237
|
+
...r,
|
|
1345
2238
|
readOnly: !0,
|
|
1346
2239
|
disabled: !0,
|
|
1347
|
-
description:
|
|
1348
|
-
}) : t.push(
|
|
2240
|
+
description: r.description ?? "You do not have edit access to this field."
|
|
2241
|
+
}) : t.push(r));
|
|
1349
2242
|
return t;
|
|
1350
2243
|
}, [
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
]), [
|
|
1355
|
-
|
|
1356
|
-
D && (S(
|
|
2244
|
+
u,
|
|
2245
|
+
n.objectName,
|
|
2246
|
+
n.mode
|
|
2247
|
+
]), [f, m] = s(null), [h, b] = s([]), [x, S] = s(null), [C, w] = s(!0), [T, E] = s(null), D = n.customFields && n.customFields.length > 0;
|
|
2248
|
+
r(() => {
|
|
2249
|
+
D && (S(n.initialData || n.initialValues || {}), w(!1));
|
|
1357
2250
|
}, [
|
|
1358
2251
|
D,
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
]),
|
|
1362
|
-
D ?
|
|
1363
|
-
name:
|
|
2252
|
+
n.initialData,
|
|
2253
|
+
n.initialValues
|
|
2254
|
+
]), r(() => {
|
|
2255
|
+
D ? m({
|
|
2256
|
+
name: n.objectName,
|
|
1364
2257
|
fields: {}
|
|
1365
|
-
}) :
|
|
2258
|
+
}) : n.objectName && i ? (async () => {
|
|
1366
2259
|
try {
|
|
1367
2260
|
if (!i) throw Error("DataSource is required when using ObjectQL schema fetching (inline fields not provided)");
|
|
1368
|
-
let e = await i.getObjectSchema(
|
|
1369
|
-
if (!e) throw Error(`No schema found for object "${
|
|
1370
|
-
|
|
2261
|
+
let e = await i.getObjectSchema(n.objectName);
|
|
2262
|
+
if (!e) throw Error(`No schema found for object "${n.objectName}"`);
|
|
2263
|
+
m(e);
|
|
1371
2264
|
} catch (e) {
|
|
1372
2265
|
E(e), w(!1);
|
|
1373
2266
|
}
|
|
1374
2267
|
})() : D || w(!1);
|
|
1375
2268
|
}, [
|
|
1376
|
-
|
|
2269
|
+
n.objectName,
|
|
1377
2270
|
i,
|
|
1378
2271
|
D
|
|
1379
|
-
]),
|
|
1380
|
-
|
|
1381
|
-
if (!
|
|
1382
|
-
S(
|
|
2272
|
+
]), r(() => {
|
|
2273
|
+
f && !D && (async () => {
|
|
2274
|
+
if (!n.recordId || n.mode === "create") {
|
|
2275
|
+
S(n.initialData || n.initialValues || {}), w(!1);
|
|
1383
2276
|
return;
|
|
1384
2277
|
}
|
|
1385
2278
|
if (!D) {
|
|
@@ -1389,7 +2282,7 @@ var ve = {
|
|
|
1389
2282
|
}
|
|
1390
2283
|
w(!0);
|
|
1391
2284
|
try {
|
|
1392
|
-
S(await i.findOne(
|
|
2285
|
+
S(await i.findOne(n.objectName, n.recordId));
|
|
1393
2286
|
} catch (e) {
|
|
1394
2287
|
console.error("Failed to fetch record:", e), E(e);
|
|
1395
2288
|
} finally {
|
|
@@ -1398,13 +2291,13 @@ var ve = {
|
|
|
1398
2291
|
}
|
|
1399
2292
|
})();
|
|
1400
2293
|
}, [
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
2294
|
+
n.objectName,
|
|
2295
|
+
n.recordId,
|
|
2296
|
+
n.mode,
|
|
2297
|
+
n.initialValues,
|
|
2298
|
+
n.initialData,
|
|
1406
2299
|
i,
|
|
1407
|
-
|
|
2300
|
+
f,
|
|
1408
2301
|
D
|
|
1409
2302
|
]);
|
|
1410
2303
|
let O = t((e) => {
|
|
@@ -1412,186 +2305,214 @@ var ve = {
|
|
|
1412
2305
|
let t = e.visibleOn;
|
|
1413
2306
|
return typeof t == "string" && t.trim() ? {
|
|
1414
2307
|
...e,
|
|
1415
|
-
visible: (e) =>
|
|
2308
|
+
visible: (e) => _(t, e)
|
|
1416
2309
|
} : e;
|
|
1417
2310
|
}, []);
|
|
1418
|
-
|
|
1419
|
-
if (D &&
|
|
1420
|
-
b(
|
|
2311
|
+
r(() => {
|
|
2312
|
+
if (D && n.customFields) {
|
|
2313
|
+
b(n.customFields.map(O)), w(!1);
|
|
1421
2314
|
return;
|
|
1422
2315
|
}
|
|
1423
|
-
if (!
|
|
1424
|
-
let e = [], t =
|
|
2316
|
+
if (!f) return;
|
|
2317
|
+
let e = [], t = n.fields || Object.keys(f.fields || {});
|
|
1425
2318
|
(Array.isArray(t) ? t : Object.keys(t)).forEach((t) => {
|
|
1426
|
-
let
|
|
1427
|
-
if (!
|
|
1428
|
-
let i =
|
|
2319
|
+
let r = typeof t == "string" ? t : t.name;
|
|
2320
|
+
if (!r) return;
|
|
2321
|
+
let i = f.fields?.[r];
|
|
1429
2322
|
if (!i && !D) return;
|
|
1430
2323
|
let o = !i?.permissions || i?.permissions.write !== !1;
|
|
1431
|
-
if (
|
|
1432
|
-
let s =
|
|
2324
|
+
if (n.mode !== "view" && !o) return;
|
|
2325
|
+
let s = n.customFields?.find((e) => e.name === r);
|
|
1433
2326
|
if (s) e.push(O(s));
|
|
1434
2327
|
else if (i) {
|
|
1435
2328
|
let o = {
|
|
1436
|
-
name:
|
|
1437
|
-
label: a(
|
|
1438
|
-
type:
|
|
2329
|
+
name: r,
|
|
2330
|
+
label: a(n.objectName, r, i.label || t),
|
|
2331
|
+
type: y(i.type),
|
|
1439
2332
|
required: i.required || !1,
|
|
1440
|
-
disabled:
|
|
2333
|
+
disabled: n.readOnly || n.mode === "view" || i.readonly || f?.managedBy && f.managedBy !== "platform",
|
|
1441
2334
|
placeholder: i.placeholder,
|
|
1442
2335
|
description: i.help || i.description,
|
|
1443
|
-
validation:
|
|
2336
|
+
validation: g(i),
|
|
2337
|
+
visibleWhen: i.visibleWhen,
|
|
2338
|
+
readonlyWhen: i.readonlyWhen,
|
|
2339
|
+
requiredWhen: i.requiredWhen ?? i.conditionalRequired,
|
|
2340
|
+
group: i.group,
|
|
1444
2341
|
field: i
|
|
1445
2342
|
};
|
|
1446
2343
|
if ((i.type === "select" || i.type === "lookup" || i.type === "master_detail") && (o.options = i.options || [], o.multiple = i.multiple), (i.type === "number" || i.type === "currency" || i.type === "percent") && (o.inputType = "number", o.min = i.min, o.max = i.max, o.step = i.precision ? 10 ** -i.precision : void 0), i.type === "date" && (o.inputType = "date"), i.type === "datetime" && (o.inputType = "datetime-local"), (i.type === "text" || i.type === "textarea" || i.type === "markdown" || i.type === "html") && (o.maxLength = i.max_length, o.minLength = i.min_length), (i.type === "file" || i.type === "image") && (o.inputType = "file", o.multiple = i.multiple, o.accept = i.accept ? i.accept.join(",") : void 0, i.max_size)) {
|
|
1447
|
-
let e = `Max size: ${
|
|
2344
|
+
let e = `Max size: ${v(i.max_size)}`;
|
|
1448
2345
|
o.description = o.description ? `${o.description} (${e})` : e;
|
|
1449
2346
|
}
|
|
1450
|
-
i.type === "email" && (o.inputType = "email"), i.type === "phone" && (o.inputType = "tel"), i.type === "url" && (o.inputType = "url"), i.type === "password" && (o.inputType = "password"), i.type === "time" && (o.inputType = "time"), (i.type === "formula" || i.type === "summary" || i.type === "auto_number") && (o.disabled = !0), i.visible_on && (o.visible = (e) =>
|
|
2347
|
+
i.type === "email" && (o.inputType = "email"), i.type === "phone" && (o.inputType = "tel"), i.type === "url" && (o.inputType = "url"), i.type === "password" && (o.inputType = "password"), i.type === "time" && (o.inputType = "time"), (i.type === "formula" || i.type === "summary" || i.type === "auto_number") && (o.disabled = !0), i.visible_on && (o.visible = (e) => _(i.visible_on, e)), e.push(o);
|
|
1451
2348
|
}
|
|
1452
|
-
}), b(e), !D &&
|
|
2349
|
+
}), b(e), !D && n.recordId && n.mode !== "create" && i || w(!1);
|
|
1453
2350
|
}, [
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
2351
|
+
f,
|
|
2352
|
+
n.fields,
|
|
2353
|
+
n.customFields,
|
|
2354
|
+
n.readOnly,
|
|
2355
|
+
n.mode,
|
|
1459
2356
|
D,
|
|
1460
|
-
|
|
2357
|
+
n.recordId,
|
|
1461
2358
|
i
|
|
1462
2359
|
]);
|
|
1463
2360
|
let k = t(async (e, t) => {
|
|
1464
|
-
if (e && (e.nativeEvent || e._reactName === "onSubmit") && (console.warn("ObjectForm: Received Event instead of data in handleSubmit! This suggests a Form renderer issue."), t === void 0 && (
|
|
2361
|
+
if (e && (e.nativeEvent || e._reactName === "onSubmit") && (console.warn("ObjectForm: Received Event instead of data in handleSubmit! This suggests a Form renderer issue."), t === void 0 && (e = {})), D && !i) return n.onSuccess && await n.onSuccess(e), e;
|
|
1465
2362
|
if (!i) throw Error("DataSource is required for form submission (inline mode not configured)");
|
|
1466
|
-
let
|
|
1467
|
-
if (
|
|
1468
|
-
|
|
1469
|
-
for (let t of Object.keys(e))
|
|
2363
|
+
let r = e;
|
|
2364
|
+
if (u?.isLoaded && e && typeof e == "object") {
|
|
2365
|
+
r = {};
|
|
2366
|
+
for (let t of Object.keys(e)) u.checkField(n.objectName, t, "write") && (r[t] = e[t]);
|
|
1470
2367
|
}
|
|
1471
2368
|
try {
|
|
1472
2369
|
let e;
|
|
1473
|
-
if (
|
|
1474
|
-
else if (
|
|
2370
|
+
if (n.submitHandler) e = await n.submitHandler(r);
|
|
2371
|
+
else if (n.mode === "create") e = await i.create(n.objectName, r);
|
|
2372
|
+
else if (n.mode === "edit" && n.recordId) e = await i.update(n.objectName, n.recordId, r);
|
|
1475
2373
|
else throw Error("Invalid form mode or missing record ID");
|
|
1476
|
-
|
|
2374
|
+
if (n.onSuccess) await n.onSuccess(e);
|
|
2375
|
+
else if (!n.submitHandler) {
|
|
2376
|
+
let t = ce(n.navigateOnSuccess, e);
|
|
2377
|
+
if (t) return window.location.assign(t), e;
|
|
2378
|
+
G.success(n.successMessage || (n.mode === "create" ? "Created" : "Saved"));
|
|
2379
|
+
}
|
|
2380
|
+
return e;
|
|
1477
2381
|
} catch (e) {
|
|
1478
|
-
throw console.error("Failed to submit form:", e),
|
|
2382
|
+
throw console.error("Failed to submit form:", e), n.onError && n.onError(e), e;
|
|
1479
2383
|
}
|
|
1480
2384
|
}, [
|
|
1481
|
-
|
|
2385
|
+
n,
|
|
1482
2386
|
i,
|
|
1483
2387
|
D,
|
|
1484
|
-
|
|
2388
|
+
u
|
|
1485
2389
|
]), A = t(() => {
|
|
1486
|
-
|
|
1487
|
-
}, [
|
|
2390
|
+
n.onCancel && n.onCancel();
|
|
2391
|
+
}, [n]), j = {
|
|
1488
2392
|
...e.useMemo(() => {
|
|
1489
|
-
if (!
|
|
2393
|
+
if (!f?.fields) return {};
|
|
1490
2394
|
let e = {};
|
|
1491
|
-
return Object.keys(
|
|
1492
|
-
let n =
|
|
2395
|
+
return Object.keys(f.fields).forEach((t) => {
|
|
2396
|
+
let n = f.fields[t];
|
|
1493
2397
|
n.defaultValue !== void 0 && (e[t] = n.defaultValue);
|
|
1494
2398
|
}), e;
|
|
1495
|
-
}, [
|
|
2399
|
+
}, [f]),
|
|
1496
2400
|
...x
|
|
1497
|
-
}
|
|
1498
|
-
|
|
2401
|
+
}, M = e.useMemo(() => n.sections?.length ? null : pt(h, f?.fieldGroups), [
|
|
2402
|
+
n.sections,
|
|
2403
|
+
h,
|
|
2404
|
+
f
|
|
2405
|
+
]), N = n.sections?.length ? n.sections : M, [P, F] = s({});
|
|
2406
|
+
if (T) return /* @__PURE__ */ Z("div", {
|
|
1499
2407
|
className: "p-3 sm:p-4 border border-red-300 bg-red-50 rounded-md",
|
|
1500
|
-
children: [/* @__PURE__ */
|
|
2408
|
+
children: [/* @__PURE__ */ X("h3", {
|
|
1501
2409
|
className: "text-red-800 font-semibold",
|
|
1502
2410
|
children: "Error loading form"
|
|
1503
|
-
}), /* @__PURE__ */
|
|
2411
|
+
}), /* @__PURE__ */ X("p", {
|
|
1504
2412
|
className: "text-red-600 text-sm mt-1",
|
|
1505
2413
|
children: T.message
|
|
1506
2414
|
})]
|
|
1507
2415
|
});
|
|
1508
|
-
if (C) return /* @__PURE__ */
|
|
2416
|
+
if (C) return /* @__PURE__ */ Z("div", {
|
|
1509
2417
|
className: "p-4 sm:p-8 text-center",
|
|
1510
|
-
children: [/* @__PURE__ */
|
|
2418
|
+
children: [/* @__PURE__ */ X("div", { className: "inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900" }), /* @__PURE__ */ X("p", {
|
|
1511
2419
|
className: "mt-2 text-sm text-gray-600",
|
|
1512
2420
|
children: "Loading form..."
|
|
1513
2421
|
})]
|
|
1514
2422
|
});
|
|
1515
|
-
let
|
|
1516
|
-
if (
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
let
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
2423
|
+
let I = n.layout === "vertical" || n.layout === "horizontal" ? n.layout : "vertical";
|
|
2424
|
+
if (N?.length && (!n.formType || n.formType === "simple")) {
|
|
2425
|
+
let e = [];
|
|
2426
|
+
return N.forEach((t, r) => {
|
|
2427
|
+
let i = t.fields.map((e) => typeof e == "string" ? e : e.field ?? e.name), a = d(h.filter((e) => i.includes(e.name)));
|
|
2428
|
+
if (a.length === 0) return;
|
|
2429
|
+
let s = t.name || t.label || String(r), c = t.name ? o(n.objectName, t.name, t.label || t.name) : t.label, l = P[s] ?? t.collapsed ?? !1;
|
|
2430
|
+
c && e.push({
|
|
2431
|
+
name: `__section_${s}`,
|
|
2432
|
+
label: c,
|
|
2433
|
+
type: "section-divider",
|
|
2434
|
+
colSpan: 4,
|
|
2435
|
+
collapsible: t.collapsible,
|
|
2436
|
+
collapsed: l,
|
|
2437
|
+
onToggle: t.collapsible ? () => F((e) => ({
|
|
2438
|
+
...e,
|
|
2439
|
+
[s]: !l
|
|
2440
|
+
})) : void 0
|
|
2441
|
+
}), c && l ? e.push(...a.map((e) => ({
|
|
2442
|
+
...e,
|
|
2443
|
+
hidden: !0
|
|
2444
|
+
}))) : e.push(...a);
|
|
2445
|
+
}), /* @__PURE__ */ X("div", {
|
|
2446
|
+
className: "w-full",
|
|
2447
|
+
children: /* @__PURE__ */ X(l, { schema: {
|
|
2448
|
+
type: "form",
|
|
2449
|
+
objectName: n.objectName,
|
|
2450
|
+
fields: e,
|
|
2451
|
+
layout: I,
|
|
2452
|
+
defaultValues: j,
|
|
2453
|
+
showSubmit: n.showSubmit !== !1 && n.mode !== "view",
|
|
2454
|
+
showCancel: n.showCancel !== !1,
|
|
2455
|
+
submitLabel: n.submitText || (n.mode === "create" ? "Create" : "Update"),
|
|
2456
|
+
cancelLabel: n.cancelText,
|
|
2457
|
+
onSubmit: k,
|
|
2458
|
+
onCancel: A
|
|
2459
|
+
} })
|
|
2460
|
+
});
|
|
2461
|
+
}
|
|
2462
|
+
let L = n.sections?.length, R = d(h), z = L ? {
|
|
2463
|
+
fields: R,
|
|
2464
|
+
columns: n.columns
|
|
2465
|
+
} : rt(R, f, n.columns, n.mode), B = n.mobile, V = B?.fullscreenLongText ? z.fields.map((e) => {
|
|
1546
2466
|
let t = e.type;
|
|
1547
2467
|
return t === "textarea" || t === "field:textarea" || t === "string-multiline" || t === "field:markdown" || t === "field:html" ? {
|
|
1548
2468
|
...e,
|
|
1549
2469
|
mobile_fullscreen: !0
|
|
1550
2470
|
} : e;
|
|
1551
|
-
}) :
|
|
1552
|
-
if (!
|
|
1553
|
-
let e =
|
|
1554
|
-
for (let n = 0; n < e.length; n +=
|
|
1555
|
-
let r = e.slice(n, n +
|
|
2471
|
+
}) : z.fields, H = B?.stepper, U = B?.stepperMinFields ?? 8, W = Math.max(1, B?.stepperFieldsPerStep ?? 1);
|
|
2472
|
+
if (!n.formType && !L && V.length >= 2 && (H === !0 || H === "auto" && c && V.length >= U)) {
|
|
2473
|
+
let e = V, t = [];
|
|
2474
|
+
for (let n = 0; n < e.length; n += W) {
|
|
2475
|
+
let r = e.slice(n, n + W);
|
|
1556
2476
|
t.push({
|
|
1557
|
-
name: `step-${Math.floor(n /
|
|
1558
|
-
label: r[0]?.label || r[0]?.name || `Step ${Math.floor(n /
|
|
2477
|
+
name: `step-${Math.floor(n / W) + 1}`,
|
|
2478
|
+
label: r[0]?.label || r[0]?.name || `Step ${Math.floor(n / W) + 1}`,
|
|
1559
2479
|
fields: r
|
|
1560
2480
|
});
|
|
1561
2481
|
}
|
|
1562
|
-
return /* @__PURE__ */
|
|
2482
|
+
return /* @__PURE__ */ X(me, {
|
|
1563
2483
|
schema: {
|
|
1564
|
-
...
|
|
2484
|
+
...n,
|
|
1565
2485
|
formType: "wizard",
|
|
1566
2486
|
sections: t,
|
|
1567
2487
|
showStepIndicator: !0
|
|
1568
2488
|
},
|
|
1569
2489
|
dataSource: i,
|
|
1570
|
-
className:
|
|
2490
|
+
className: n.className
|
|
1571
2491
|
});
|
|
1572
2492
|
}
|
|
1573
|
-
let
|
|
2493
|
+
let q = {
|
|
1574
2494
|
type: "form",
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
2495
|
+
objectName: n.objectName,
|
|
2496
|
+
fields: V,
|
|
2497
|
+
layout: I,
|
|
2498
|
+
columns: z.columns,
|
|
2499
|
+
submitLabel: n.submitText || (n.mode === "create" ? "Create" : "Update"),
|
|
2500
|
+
cancelLabel: n.cancelText,
|
|
2501
|
+
showSubmit: n.showSubmit !== !1 && n.mode !== "view",
|
|
2502
|
+
showCancel: n.showCancel !== !1,
|
|
2503
|
+
resetOnSubmit: n.showReset || n.resetOnSuccess && n.mode === "create",
|
|
1583
2504
|
defaultValues: j,
|
|
1584
2505
|
onSubmit: k,
|
|
1585
2506
|
onCancel: A,
|
|
1586
|
-
className:
|
|
1587
|
-
mobileStickyActions: !!
|
|
2507
|
+
className: n.className,
|
|
2508
|
+
mobileStickyActions: !!B?.stickyActions
|
|
1588
2509
|
};
|
|
1589
|
-
return /* @__PURE__ */
|
|
1590
|
-
className:
|
|
1591
|
-
"data-mobile-form":
|
|
1592
|
-
children: /* @__PURE__ */
|
|
2510
|
+
return /* @__PURE__ */ X("div", {
|
|
2511
|
+
className: B?.stickyActions ? "w-full pb-20 md:pb-0" : "w-full",
|
|
2512
|
+
"data-mobile-form": B ? "true" : void 0,
|
|
2513
|
+
children: /* @__PURE__ */ X(l, { schema: q })
|
|
1593
2514
|
});
|
|
1594
|
-
},
|
|
2515
|
+
}, gt = {
|
|
1595
2516
|
text: 200,
|
|
1596
2517
|
email: 254,
|
|
1597
2518
|
url: 2048,
|
|
@@ -1599,8 +2520,8 @@ var ve = {
|
|
|
1599
2520
|
textarea: 5e3,
|
|
1600
2521
|
markdown: 5e3,
|
|
1601
2522
|
html: 5e3
|
|
1602
|
-
},
|
|
1603
|
-
function
|
|
2523
|
+
}, _t = "_company_website_2", vt = 1500;
|
|
2524
|
+
function yt(e, t = []) {
|
|
1604
2525
|
try {
|
|
1605
2526
|
let n = new URL(e, typeof window < "u" ? window.location.href : "http://localhost");
|
|
1606
2527
|
return typeof window < "u" && n.origin === window.location.origin ? !0 : n.protocol !== "https:" && n.protocol !== "http:" ? !1 : t.some((e) => {
|
|
@@ -1615,36 +2536,36 @@ function Oe(e, t = []) {
|
|
|
1615
2536
|
return !1;
|
|
1616
2537
|
}
|
|
1617
2538
|
}
|
|
1618
|
-
function
|
|
2539
|
+
function bt(e) {
|
|
1619
2540
|
return e && e.map((e) => {
|
|
1620
|
-
let t =
|
|
2541
|
+
let t = gt[String(e.type || "").toLowerCase()];
|
|
1621
2542
|
return !t || (e.maxLength ?? e.max_length) ? e : {
|
|
1622
2543
|
...e,
|
|
1623
2544
|
maxLength: t
|
|
1624
2545
|
};
|
|
1625
2546
|
});
|
|
1626
2547
|
}
|
|
1627
|
-
var
|
|
1628
|
-
let [l, u] =
|
|
1629
|
-
|
|
2548
|
+
var xt = ({ config: e, dataSource: n, prefillParams: i, className: c }) => {
|
|
2549
|
+
let [l, u] = s(!1), [d, f] = s(!1), [p, m] = s(null), [h, g] = s(!(e.consent?.required ?? !!e.consent)), [_, v] = s(null), y = o(null), x = o(Date.now());
|
|
2550
|
+
r(() => {
|
|
1630
2551
|
l || (x.current = Date.now());
|
|
1631
2552
|
}, [l]);
|
|
1632
|
-
let S = e.honeypot === !1 ? null : e.honeypot ||
|
|
1633
|
-
if (!
|
|
2553
|
+
let S = e.honeypot === !1 ? null : e.honeypot || _t, C = e.minFillTime ?? vt, w = a(() => bt(e.customFields), [e.customFields]), T = a(() => {
|
|
2554
|
+
if (!n || w && w.length > 0 || !e.fields || e.fields.length === 0) return;
|
|
1634
2555
|
let t = async (e, t) => t;
|
|
1635
2556
|
return {
|
|
1636
|
-
...
|
|
2557
|
+
...n,
|
|
1637
2558
|
create: t,
|
|
1638
2559
|
update: (e, t, n) => Promise.resolve(n),
|
|
1639
2560
|
delete: () => Promise.reject(/* @__PURE__ */ Error("Not permitted on public form"))
|
|
1640
2561
|
};
|
|
1641
2562
|
}, [
|
|
1642
|
-
|
|
2563
|
+
n,
|
|
1643
2564
|
w,
|
|
1644
2565
|
e.fields
|
|
1645
|
-
]), E =
|
|
2566
|
+
]), E = a(() => {
|
|
1646
2567
|
let t = {};
|
|
1647
|
-
if (
|
|
2568
|
+
if (i) for (let [e, n] of Object.entries(i)) t[e] = n;
|
|
1648
2569
|
if (typeof window < "u" && e.allowedPrefillFields?.length) {
|
|
1649
2570
|
let n = new Set(e.allowedPrefillFields);
|
|
1650
2571
|
new URLSearchParams(window.location.search).forEach((e, r) => {
|
|
@@ -1652,78 +2573,78 @@ var Ae = ({ config: e, dataSource: r, prefillParams: s, className: c }) => {
|
|
|
1652
2573
|
});
|
|
1653
2574
|
}
|
|
1654
2575
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1655
|
-
}, [
|
|
1656
|
-
if (e.consent?.required && !
|
|
1657
|
-
|
|
2576
|
+
}, [i, e.allowedPrefillFields]), D = t(async (t) => {
|
|
2577
|
+
if (e.consent?.required && !h) {
|
|
2578
|
+
v(e.texts?.consentRequired ?? "Please accept the privacy policy to continue.");
|
|
1658
2579
|
return;
|
|
1659
2580
|
}
|
|
1660
|
-
if (
|
|
2581
|
+
if (v(null), S && y.current?.value) {
|
|
1661
2582
|
u(!0);
|
|
1662
2583
|
return;
|
|
1663
2584
|
}
|
|
1664
2585
|
if (C > 0 && Date.now() - x.current < C) {
|
|
1665
|
-
|
|
2586
|
+
m(e.texts?.rateLimited ?? "Please take a moment to review your answers before submitting.");
|
|
1666
2587
|
return;
|
|
1667
2588
|
}
|
|
1668
|
-
let
|
|
1669
|
-
S && delete
|
|
2589
|
+
let r = { ...t };
|
|
2590
|
+
S && delete r[S], e.captchaToken && (r._captcha = e.captchaToken), f(!0), m(null);
|
|
1670
2591
|
try {
|
|
1671
|
-
|
|
2592
|
+
n && await n.create(e.objectName, r), u(!0);
|
|
1672
2593
|
let t = e.thankYouPage?.redirectUrl;
|
|
1673
|
-
if (t) if (
|
|
2594
|
+
if (t) if (yt(t, e.allowedRedirectHosts)) {
|
|
1674
2595
|
let n = e.thankYouPage?.redirectDelay ?? 3e3;
|
|
1675
2596
|
setTimeout(() => {
|
|
1676
2597
|
window.location.href = t;
|
|
1677
2598
|
}, n);
|
|
1678
|
-
} else console.warn("[EmbeddableForm] Blocked unsafe redirect target:", t),
|
|
2599
|
+
} else console.warn("[EmbeddableForm] Blocked unsafe redirect target:", t), m(e.texts?.redirectBlocked ?? null);
|
|
1679
2600
|
} catch (e) {
|
|
1680
|
-
|
|
2601
|
+
m(e instanceof Error ? e.message : "Failed to submit form. Please try again.");
|
|
1681
2602
|
} finally {
|
|
1682
2603
|
f(!1);
|
|
1683
2604
|
}
|
|
1684
2605
|
}, [
|
|
1685
|
-
|
|
2606
|
+
n,
|
|
1686
2607
|
e,
|
|
1687
|
-
|
|
2608
|
+
h,
|
|
1688
2609
|
S,
|
|
1689
2610
|
C
|
|
1690
2611
|
]), O = t(() => {
|
|
1691
|
-
u(!1),
|
|
1692
|
-
}, []), k =
|
|
2612
|
+
u(!1), m(null);
|
|
2613
|
+
}, []), k = a(() => {
|
|
1693
2614
|
let t = {};
|
|
1694
2615
|
return e.branding?.backgroundColor && (t.backgroundColor = e.branding.backgroundColor), t;
|
|
1695
2616
|
}, [e.branding]);
|
|
1696
2617
|
if (l) {
|
|
1697
2618
|
let t = e.thankYouPage, n = e.texts ?? {}, r = Math.ceil((t?.redirectDelay ?? 3e3) / 1e3), i = (n.redirecting ?? "Redirecting in {{seconds}} seconds…").replace("{{seconds}}", String(r));
|
|
1698
|
-
return /* @__PURE__ */
|
|
2619
|
+
return /* @__PURE__ */ X("div", {
|
|
1699
2620
|
className: `min-h-screen flex items-center justify-center p-4 bg-gradient-to-b from-muted/40 via-background to-background ${c || ""}`,
|
|
1700
2621
|
style: k,
|
|
1701
|
-
children: /* @__PURE__ */
|
|
2622
|
+
children: /* @__PURE__ */ Z("div", {
|
|
1702
2623
|
className: "max-w-md w-full bg-card border rounded-xl shadow-sm p-8 text-center space-y-4",
|
|
1703
2624
|
children: [
|
|
1704
|
-
/* @__PURE__ */
|
|
2625
|
+
/* @__PURE__ */ X("div", {
|
|
1705
2626
|
className: "mx-auto inline-flex h-14 w-14 items-center justify-center rounded-full bg-emerald-50 text-emerald-600 dark:bg-emerald-500/10 dark:text-emerald-400",
|
|
1706
|
-
children: /* @__PURE__ */
|
|
2627
|
+
children: /* @__PURE__ */ X(te, {
|
|
1707
2628
|
className: "h-8 w-8",
|
|
1708
2629
|
"aria-hidden": "true"
|
|
1709
2630
|
})
|
|
1710
2631
|
}),
|
|
1711
|
-
/* @__PURE__ */
|
|
2632
|
+
/* @__PURE__ */ X("h2", {
|
|
1712
2633
|
className: "text-xl font-semibold text-foreground",
|
|
1713
2634
|
children: t?.title || n.thankYouTitle || "Thank You!"
|
|
1714
2635
|
}),
|
|
1715
|
-
/* @__PURE__ */
|
|
2636
|
+
/* @__PURE__ */ X("p", {
|
|
1716
2637
|
className: "text-sm text-muted-foreground",
|
|
1717
2638
|
children: t?.message || n.thankYouMessage || "Your submission has been received successfully."
|
|
1718
2639
|
}),
|
|
1719
|
-
e.allowMultiple && /* @__PURE__ */
|
|
2640
|
+
e.allowMultiple && /* @__PURE__ */ X(b, {
|
|
1720
2641
|
variant: "outline",
|
|
1721
2642
|
size: "sm",
|
|
1722
2643
|
onClick: O,
|
|
1723
2644
|
className: "mt-2",
|
|
1724
2645
|
children: n.submitAnother ?? "Submit Another Response"
|
|
1725
2646
|
}),
|
|
1726
|
-
t?.redirectUrl && /* @__PURE__ */
|
|
2647
|
+
t?.redirectUrl && /* @__PURE__ */ X("p", {
|
|
1727
2648
|
className: "text-xs text-muted-foreground",
|
|
1728
2649
|
children: i
|
|
1729
2650
|
})
|
|
@@ -1732,51 +2653,51 @@ var Ae = ({ config: e, dataSource: r, prefillParams: s, className: c }) => {
|
|
|
1732
2653
|
});
|
|
1733
2654
|
}
|
|
1734
2655
|
let A = e.texts ?? {}, j = !!e.consent?.required, M = `${e.formId}-consent`;
|
|
1735
|
-
return /* @__PURE__ */
|
|
2656
|
+
return /* @__PURE__ */ X("div", {
|
|
1736
2657
|
className: `min-h-screen flex items-center justify-center p-4 sm:p-6 bg-gradient-to-b from-muted/40 via-background to-background ${c || ""}`,
|
|
1737
2658
|
style: k,
|
|
1738
|
-
children: /* @__PURE__ */
|
|
2659
|
+
children: /* @__PURE__ */ Z("div", {
|
|
1739
2660
|
className: "max-w-2xl w-full bg-card border rounded-xl shadow-sm overflow-hidden",
|
|
1740
2661
|
children: [
|
|
1741
|
-
e.branding?.coverImage && /* @__PURE__ */
|
|
2662
|
+
e.branding?.coverImage && /* @__PURE__ */ X("div", {
|
|
1742
2663
|
className: "h-28 sm:h-32 w-full bg-cover bg-center",
|
|
1743
2664
|
style: { backgroundImage: `url(${JSON.stringify(e.branding.coverImage)})` },
|
|
1744
2665
|
role: "presentation"
|
|
1745
2666
|
}),
|
|
1746
|
-
/* @__PURE__ */
|
|
2667
|
+
/* @__PURE__ */ Z("div", {
|
|
1747
2668
|
className: "px-6 sm:px-8 pt-7 pb-5 border-b bg-muted/20",
|
|
1748
2669
|
style: e.branding?.primaryColor ? { borderBottomColor: e.branding.primaryColor } : void 0,
|
|
1749
2670
|
children: [
|
|
1750
|
-
e.branding?.logo && /* @__PURE__ */
|
|
2671
|
+
e.branding?.logo && /* @__PURE__ */ X("img", {
|
|
1751
2672
|
src: e.branding.logo,
|
|
1752
2673
|
alt: "",
|
|
1753
2674
|
className: "h-8 mb-4"
|
|
1754
2675
|
}),
|
|
1755
|
-
e.title && /* @__PURE__ */
|
|
2676
|
+
e.title && /* @__PURE__ */ X("h1", {
|
|
1756
2677
|
className: "text-2xl font-semibold tracking-tight text-foreground",
|
|
1757
2678
|
children: e.title
|
|
1758
2679
|
}),
|
|
1759
|
-
e.description && /* @__PURE__ */
|
|
2680
|
+
e.description && /* @__PURE__ */ X("p", {
|
|
1760
2681
|
className: "text-sm text-muted-foreground mt-2 leading-relaxed",
|
|
1761
2682
|
children: e.description
|
|
1762
2683
|
}),
|
|
1763
|
-
/* @__PURE__ */
|
|
2684
|
+
/* @__PURE__ */ X("p", {
|
|
1764
2685
|
className: "text-[11px] text-muted-foreground/70 mt-3",
|
|
1765
2686
|
"aria-hidden": "true",
|
|
1766
2687
|
children: A.requiredHint ?? "* Required field"
|
|
1767
2688
|
})
|
|
1768
2689
|
]
|
|
1769
2690
|
}),
|
|
1770
|
-
/* @__PURE__ */
|
|
2691
|
+
/* @__PURE__ */ Z("div", {
|
|
1771
2692
|
className: "relative px-6 sm:px-8 py-6",
|
|
1772
2693
|
children: [
|
|
1773
|
-
p && /* @__PURE__ */
|
|
2694
|
+
p && /* @__PURE__ */ X("div", {
|
|
1774
2695
|
role: "alert",
|
|
1775
2696
|
"aria-live": "assertive",
|
|
1776
2697
|
className: "mb-4 p-3 bg-destructive/10 border border-destructive/30 rounded-md text-sm text-destructive",
|
|
1777
2698
|
children: p
|
|
1778
2699
|
}),
|
|
1779
|
-
/* @__PURE__ */
|
|
2700
|
+
/* @__PURE__ */ X(mt, {
|
|
1780
2701
|
schema: {
|
|
1781
2702
|
type: "object-form",
|
|
1782
2703
|
objectName: e.objectName,
|
|
@@ -1789,14 +2710,14 @@ var Ae = ({ config: e, dataSource: r, prefillParams: s, className: c }) => {
|
|
|
1789
2710
|
},
|
|
1790
2711
|
dataSource: T
|
|
1791
2712
|
}),
|
|
1792
|
-
S && /* @__PURE__ */
|
|
2713
|
+
S && /* @__PURE__ */ Z("div", {
|
|
1793
2714
|
"aria-hidden": "true",
|
|
1794
2715
|
className: "absolute left-[-10000px] top-auto h-px w-px overflow-hidden",
|
|
1795
|
-
children: [/* @__PURE__ */
|
|
2716
|
+
children: [/* @__PURE__ */ X("label", {
|
|
1796
2717
|
htmlFor: `${e.formId}-${S}`,
|
|
1797
2718
|
children: "Do not fill this field"
|
|
1798
|
-
}), /* @__PURE__ */
|
|
1799
|
-
ref:
|
|
2719
|
+
}), /* @__PURE__ */ X("input", {
|
|
2720
|
+
ref: y,
|
|
1800
2721
|
id: `${e.formId}-${S}`,
|
|
1801
2722
|
type: "text",
|
|
1802
2723
|
name: S,
|
|
@@ -1805,31 +2726,31 @@ var Ae = ({ config: e, dataSource: r, prefillParams: s, className: c }) => {
|
|
|
1805
2726
|
defaultValue: ""
|
|
1806
2727
|
})]
|
|
1807
2728
|
}),
|
|
1808
|
-
e.consent && /* @__PURE__ */
|
|
2729
|
+
e.consent && /* @__PURE__ */ Z("div", {
|
|
1809
2730
|
className: "mt-4",
|
|
1810
|
-
children: [/* @__PURE__ */
|
|
2731
|
+
children: [/* @__PURE__ */ Z("label", {
|
|
1811
2732
|
className: "flex items-start gap-2 text-sm text-foreground cursor-pointer select-none",
|
|
1812
|
-
children: [/* @__PURE__ */
|
|
2733
|
+
children: [/* @__PURE__ */ X("input", {
|
|
1813
2734
|
type: "checkbox",
|
|
1814
2735
|
id: M,
|
|
1815
|
-
checked:
|
|
2736
|
+
checked: h,
|
|
1816
2737
|
onChange: (e) => {
|
|
1817
|
-
|
|
2738
|
+
g(e.target.checked), e.target.checked && v(null);
|
|
1818
2739
|
},
|
|
1819
2740
|
"aria-required": j || void 0,
|
|
1820
|
-
"aria-invalid":
|
|
1821
|
-
"aria-describedby":
|
|
2741
|
+
"aria-invalid": _ ? "true" : void 0,
|
|
2742
|
+
"aria-describedby": _ ? `${M}-error` : void 0,
|
|
1822
2743
|
className: "mt-0.5 h-4 w-4 rounded border-input accent-primary"
|
|
1823
|
-
}), /* @__PURE__ */
|
|
2744
|
+
}), /* @__PURE__ */ Z("span", {
|
|
1824
2745
|
className: "leading-relaxed",
|
|
1825
2746
|
children: [
|
|
1826
2747
|
e.consent.label ?? A.consentLabelDefault ?? "I agree to the privacy policy.",
|
|
1827
|
-
j && /* @__PURE__ */
|
|
2748
|
+
j && /* @__PURE__ */ X("span", {
|
|
1828
2749
|
"aria-hidden": "true",
|
|
1829
2750
|
className: "text-destructive ml-0.5",
|
|
1830
2751
|
children: "*"
|
|
1831
2752
|
}),
|
|
1832
|
-
e.consent.privacyUrl && /* @__PURE__ */
|
|
2753
|
+
e.consent.privacyUrl && /* @__PURE__ */ Z(oe, { children: [" ", /* @__PURE__ */ X("a", {
|
|
1833
2754
|
href: e.consent.privacyUrl,
|
|
1834
2755
|
target: "_blank",
|
|
1835
2756
|
rel: "noopener noreferrer",
|
|
@@ -1838,42 +2759,42 @@ var Ae = ({ config: e, dataSource: r, prefillParams: s, className: c }) => {
|
|
|
1838
2759
|
})] })
|
|
1839
2760
|
]
|
|
1840
2761
|
})]
|
|
1841
|
-
}),
|
|
2762
|
+
}), _ && /* @__PURE__ */ X("p", {
|
|
1842
2763
|
id: `${M}-error`,
|
|
1843
2764
|
role: "alert",
|
|
1844
2765
|
className: "mt-1.5 text-xs text-destructive",
|
|
1845
|
-
children:
|
|
2766
|
+
children: _
|
|
1846
2767
|
})]
|
|
1847
2768
|
}),
|
|
1848
|
-
d && /* @__PURE__ */
|
|
2769
|
+
d && /* @__PURE__ */ Z("div", {
|
|
1849
2770
|
className: "mt-3 flex items-center gap-2 text-xs text-muted-foreground",
|
|
1850
|
-
children: [/* @__PURE__ */
|
|
2771
|
+
children: [/* @__PURE__ */ X(re, {
|
|
1851
2772
|
className: "h-3.5 w-3.5 animate-spin",
|
|
1852
2773
|
"aria-hidden": "true"
|
|
1853
|
-
}), /* @__PURE__ */
|
|
2774
|
+
}), /* @__PURE__ */ X("span", { children: A.submitting ?? "Submitting…" })]
|
|
1854
2775
|
})
|
|
1855
2776
|
]
|
|
1856
2777
|
}),
|
|
1857
|
-
/* @__PURE__ */
|
|
2778
|
+
/* @__PURE__ */ Z("div", {
|
|
1858
2779
|
className: "px-6 sm:px-8 py-4 border-t bg-muted/20 flex flex-col sm:flex-row items-center justify-between gap-2",
|
|
1859
|
-
children: [/* @__PURE__ */
|
|
2780
|
+
children: [/* @__PURE__ */ Z("p", {
|
|
1860
2781
|
className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground",
|
|
1861
|
-
children: [/* @__PURE__ */
|
|
2782
|
+
children: [/* @__PURE__ */ X(ie, {
|
|
1862
2783
|
className: "h-3 w-3",
|
|
1863
2784
|
"aria-hidden": "true"
|
|
1864
|
-
}), /* @__PURE__ */
|
|
1865
|
-
}), /* @__PURE__ */
|
|
2785
|
+
}), /* @__PURE__ */ X("span", { children: A.secureNotice ?? "Your information is transmitted securely and only used to respond to your request." })]
|
|
2786
|
+
}), /* @__PURE__ */ Z("div", {
|
|
1866
2787
|
className: "flex items-center gap-3 text-xs text-muted-foreground/80",
|
|
1867
|
-
children: [e.privacyPolicyUrl && /* @__PURE__ */
|
|
2788
|
+
children: [e.privacyPolicyUrl && /* @__PURE__ */ Z("a", {
|
|
1868
2789
|
href: e.privacyPolicyUrl,
|
|
1869
2790
|
target: "_blank",
|
|
1870
2791
|
rel: "noopener noreferrer",
|
|
1871
2792
|
className: "inline-flex items-center gap-1 underline hover:text-foreground",
|
|
1872
|
-
children: [/* @__PURE__ */
|
|
2793
|
+
children: [/* @__PURE__ */ X(ae, {
|
|
1873
2794
|
className: "h-3 w-3",
|
|
1874
2795
|
"aria-hidden": "true"
|
|
1875
2796
|
}), A.consentLink ?? "Privacy policy"]
|
|
1876
|
-
}), /* @__PURE__ */
|
|
2797
|
+
}), /* @__PURE__ */ X("span", { children: A.poweredBy ?? "Powered by ObjectStack" })]
|
|
1877
2798
|
})]
|
|
1878
2799
|
})
|
|
1879
2800
|
]
|
|
@@ -1882,96 +2803,96 @@ var Ae = ({ config: e, dataSource: r, prefillParams: s, className: c }) => {
|
|
|
1882
2803
|
};
|
|
1883
2804
|
//#endregion
|
|
1884
2805
|
//#region src/FormAnalytics.tsx
|
|
1885
|
-
function
|
|
2806
|
+
function St(e) {
|
|
1886
2807
|
return e < 60 ? `${Math.round(e)}s` : e < 3600 ? `${Math.floor(e / 60)}m ${Math.round(e % 60)}s` : `${Math.floor(e / 3600)}h ${Math.floor(e % 3600 / 60)}m`;
|
|
1887
2808
|
}
|
|
1888
|
-
var
|
|
1889
|
-
let
|
|
2809
|
+
var Ct = ({ formId: e, formTitle: t, metrics: n, className: r }) => {
|
|
2810
|
+
let i = a(() => {
|
|
1890
2811
|
if (!n.abandonedSubmissions) return 100;
|
|
1891
2812
|
let e = n.totalSubmissions + n.abandonedSubmissions;
|
|
1892
2813
|
return e === 0 ? 0 : Math.round(n.totalSubmissions / e * 100);
|
|
1893
|
-
}, [n.totalSubmissions, n.abandonedSubmissions]), o =
|
|
1894
|
-
return /* @__PURE__ */
|
|
2814
|
+
}, [n.totalSubmissions, n.abandonedSubmissions]), o = a(() => n.dailySubmissions?.length ? Math.max(...n.dailySubmissions.map((e) => e.count), 1) : 1, [n.dailySubmissions]);
|
|
2815
|
+
return /* @__PURE__ */ Z("div", {
|
|
1895
2816
|
className: `space-y-4 ${r || ""}`,
|
|
1896
2817
|
children: [
|
|
1897
|
-
/* @__PURE__ */
|
|
2818
|
+
/* @__PURE__ */ Z("div", { children: [/* @__PURE__ */ X("h2", {
|
|
1898
2819
|
className: "text-lg font-semibold text-foreground",
|
|
1899
2820
|
children: t || "Form Analytics"
|
|
1900
|
-
}), /* @__PURE__ */
|
|
2821
|
+
}), /* @__PURE__ */ Z("p", {
|
|
1901
2822
|
className: "text-sm text-muted-foreground",
|
|
1902
2823
|
children: ["Form ID: ", e]
|
|
1903
2824
|
})] }),
|
|
1904
|
-
/* @__PURE__ */
|
|
2825
|
+
/* @__PURE__ */ Z("div", {
|
|
1905
2826
|
className: "grid grid-cols-1 sm:grid-cols-3 gap-4",
|
|
1906
2827
|
children: [
|
|
1907
|
-
/* @__PURE__ */
|
|
2828
|
+
/* @__PURE__ */ X(x, { children: /* @__PURE__ */ Z(w, {
|
|
1908
2829
|
className: "pb-2",
|
|
1909
|
-
children: [/* @__PURE__ */
|
|
2830
|
+
children: [/* @__PURE__ */ X(C, { children: "Total Submissions" }), /* @__PURE__ */ X(T, {
|
|
1910
2831
|
className: "text-2xl",
|
|
1911
2832
|
children: n.totalSubmissions.toLocaleString()
|
|
1912
2833
|
})]
|
|
1913
2834
|
}) }),
|
|
1914
|
-
/* @__PURE__ */
|
|
2835
|
+
/* @__PURE__ */ Z(x, { children: [/* @__PURE__ */ Z(w, {
|
|
1915
2836
|
className: "pb-2",
|
|
1916
|
-
children: [/* @__PURE__ */
|
|
2837
|
+
children: [/* @__PURE__ */ X(C, { children: "Fill Rate" }), /* @__PURE__ */ Z(T, {
|
|
1917
2838
|
className: "text-2xl",
|
|
1918
|
-
children: [
|
|
2839
|
+
children: [i, "%"]
|
|
1919
2840
|
})]
|
|
1920
|
-
}), /* @__PURE__ */
|
|
2841
|
+
}), /* @__PURE__ */ X(S, { children: /* @__PURE__ */ X("div", {
|
|
1921
2842
|
className: "w-full bg-muted rounded-full h-2",
|
|
1922
|
-
children: /* @__PURE__ */
|
|
2843
|
+
children: /* @__PURE__ */ X("div", {
|
|
1923
2844
|
className: "bg-primary rounded-full h-2 transition-all",
|
|
1924
|
-
style: { width: `${
|
|
2845
|
+
style: { width: `${i}%` }
|
|
1925
2846
|
})
|
|
1926
2847
|
}) })] }),
|
|
1927
|
-
/* @__PURE__ */
|
|
2848
|
+
/* @__PURE__ */ X(x, { children: /* @__PURE__ */ Z(w, {
|
|
1928
2849
|
className: "pb-2",
|
|
1929
|
-
children: [/* @__PURE__ */
|
|
2850
|
+
children: [/* @__PURE__ */ X(C, { children: "Avg. Completion Time" }), /* @__PURE__ */ X(T, {
|
|
1930
2851
|
className: "text-2xl",
|
|
1931
|
-
children: n.avgCompletionTime ?
|
|
2852
|
+
children: n.avgCompletionTime ? St(n.avgCompletionTime) : "—"
|
|
1932
2853
|
})]
|
|
1933
2854
|
}) })
|
|
1934
2855
|
]
|
|
1935
2856
|
}),
|
|
1936
|
-
n.dailySubmissions && n.dailySubmissions.length > 0 && /* @__PURE__ */
|
|
2857
|
+
n.dailySubmissions && n.dailySubmissions.length > 0 && /* @__PURE__ */ Z(x, { children: [/* @__PURE__ */ X(w, { children: /* @__PURE__ */ X(T, {
|
|
1937
2858
|
className: "text-sm font-medium",
|
|
1938
2859
|
children: "Daily Submissions"
|
|
1939
|
-
}) }), /* @__PURE__ */
|
|
2860
|
+
}) }), /* @__PURE__ */ X(S, { children: /* @__PURE__ */ X("div", {
|
|
1940
2861
|
className: "flex items-end gap-1 h-32",
|
|
1941
|
-
children: n.dailySubmissions.map((e, t) => /* @__PURE__ */
|
|
2862
|
+
children: n.dailySubmissions.map((e, t) => /* @__PURE__ */ Z("div", {
|
|
1942
2863
|
className: "flex-1 flex flex-col items-center gap-1",
|
|
1943
|
-
children: [/* @__PURE__ */
|
|
2864
|
+
children: [/* @__PURE__ */ X("div", {
|
|
1944
2865
|
className: "w-full bg-primary/80 rounded-t transition-all hover:bg-primary",
|
|
1945
2866
|
style: {
|
|
1946
2867
|
height: `${e.count / o * 100}%`,
|
|
1947
2868
|
minHeight: e.count > 0 ? "4px" : "0"
|
|
1948
2869
|
},
|
|
1949
2870
|
title: `${e.date}: ${e.count} submissions`
|
|
1950
|
-
}), /* @__PURE__ */
|
|
2871
|
+
}), /* @__PURE__ */ X("span", {
|
|
1951
2872
|
className: "text-[10px] text-muted-foreground truncate w-full text-center",
|
|
1952
2873
|
children: e.date.slice(-5)
|
|
1953
2874
|
})]
|
|
1954
2875
|
}, t))
|
|
1955
2876
|
}) })] }),
|
|
1956
|
-
n.fieldDropOff && n.fieldDropOff.length > 0 && /* @__PURE__ */
|
|
2877
|
+
n.fieldDropOff && n.fieldDropOff.length > 0 && /* @__PURE__ */ Z(x, { children: [/* @__PURE__ */ Z(w, { children: [/* @__PURE__ */ X(T, {
|
|
1957
2878
|
className: "text-sm font-medium",
|
|
1958
2879
|
children: "Field Completion Rates"
|
|
1959
|
-
}), /* @__PURE__ */
|
|
2880
|
+
}), /* @__PURE__ */ X(C, { children: "Percentage of users who completed each field" })] }), /* @__PURE__ */ X(S, { children: /* @__PURE__ */ X("div", {
|
|
1960
2881
|
className: "space-y-3",
|
|
1961
|
-
children: n.fieldDropOff.map((e, t) => /* @__PURE__ */
|
|
2882
|
+
children: n.fieldDropOff.map((e, t) => /* @__PURE__ */ Z("div", {
|
|
1962
2883
|
className: "space-y-1",
|
|
1963
|
-
children: [/* @__PURE__ */
|
|
2884
|
+
children: [/* @__PURE__ */ Z("div", {
|
|
1964
2885
|
className: "flex justify-between text-sm",
|
|
1965
|
-
children: [/* @__PURE__ */
|
|
2886
|
+
children: [/* @__PURE__ */ X("span", {
|
|
1966
2887
|
className: "text-foreground",
|
|
1967
2888
|
children: e.label
|
|
1968
|
-
}), /* @__PURE__ */
|
|
2889
|
+
}), /* @__PURE__ */ Z("span", {
|
|
1969
2890
|
className: "text-muted-foreground",
|
|
1970
2891
|
children: [e.completionRate, "%"]
|
|
1971
2892
|
})]
|
|
1972
|
-
}), /* @__PURE__ */
|
|
2893
|
+
}), /* @__PURE__ */ X("div", {
|
|
1973
2894
|
className: "w-full bg-muted rounded-full h-1.5",
|
|
1974
|
-
children: /* @__PURE__ */
|
|
2895
|
+
children: /* @__PURE__ */ X("div", {
|
|
1975
2896
|
className: `rounded-full h-1.5 transition-all ${e.completionRate >= 80 ? "bg-green-500" : e.completionRate >= 50 ? "bg-yellow-500" : "bg-destructive"}`,
|
|
1976
2897
|
style: { width: `${e.completionRate}%` }
|
|
1977
2898
|
})
|
|
@@ -1980,8 +2901,110 @@ var Me = ({ formId: e, formTitle: t, metrics: n, className: r }) => {
|
|
|
1980
2901
|
}) })] })
|
|
1981
2902
|
]
|
|
1982
2903
|
});
|
|
1983
|
-
},
|
|
1984
|
-
|
|
2904
|
+
}, wt = ({ schema: e }) => {
|
|
2905
|
+
let n = m()?.dataSource, i;
|
|
2906
|
+
try {
|
|
2907
|
+
i = f();
|
|
2908
|
+
} catch {
|
|
2909
|
+
i = void 0;
|
|
2910
|
+
}
|
|
2911
|
+
let o = e.parentObject || i?.objectName, c = e.parentId || e.recordId || i?.recordId, [l, u] = s([]), [d, p] = s([]), [g, _] = s(!0), [v, y] = s(!1), [C, E] = s(!1), [D, O] = s(null), k = t(async () => {
|
|
2912
|
+
if (!n || !c) {
|
|
2913
|
+
_(!1);
|
|
2914
|
+
return;
|
|
2915
|
+
}
|
|
2916
|
+
_(!0);
|
|
2917
|
+
try {
|
|
2918
|
+
let t = (await n.find(e.childObject, {
|
|
2919
|
+
$filter: { [e.relationshipField]: c },
|
|
2920
|
+
$top: 500
|
|
2921
|
+
}))?.data ?? [];
|
|
2922
|
+
u(t.map((e) => ({ ...e }))), p(t.map((e) => ({ ...e }))), E(!1);
|
|
2923
|
+
} catch (e) {
|
|
2924
|
+
O(e?.message || "Failed to load line items");
|
|
2925
|
+
} finally {
|
|
2926
|
+
_(!1);
|
|
2927
|
+
}
|
|
2928
|
+
}, [
|
|
2929
|
+
n,
|
|
2930
|
+
c,
|
|
2931
|
+
e.childObject,
|
|
2932
|
+
e.relationshipField
|
|
2933
|
+
]);
|
|
2934
|
+
r(() => {
|
|
2935
|
+
k();
|
|
2936
|
+
}, [k]);
|
|
2937
|
+
let A = t((e) => {
|
|
2938
|
+
u(e), E(!0);
|
|
2939
|
+
}, []), j = t(async () => {
|
|
2940
|
+
if (!(!n || !c)) {
|
|
2941
|
+
y(!0), O(null);
|
|
2942
|
+
try {
|
|
2943
|
+
await we(n, o || e.childObject, c, {
|
|
2944
|
+
childObject: e.childObject,
|
|
2945
|
+
relationshipField: e.relationshipField,
|
|
2946
|
+
rows: l,
|
|
2947
|
+
original: d,
|
|
2948
|
+
amountField: e.amountField,
|
|
2949
|
+
totalField: o ? e.totalField : void 0
|
|
2950
|
+
}), await k();
|
|
2951
|
+
} catch (e) {
|
|
2952
|
+
O(e?.message || "Failed to save line items");
|
|
2953
|
+
} finally {
|
|
2954
|
+
y(!1);
|
|
2955
|
+
}
|
|
2956
|
+
}
|
|
2957
|
+
}, [
|
|
2958
|
+
n,
|
|
2959
|
+
c,
|
|
2960
|
+
l,
|
|
2961
|
+
d,
|
|
2962
|
+
e,
|
|
2963
|
+
o,
|
|
2964
|
+
k
|
|
2965
|
+
]), M = a(() => ({
|
|
2966
|
+
columns: e.columns,
|
|
2967
|
+
total_field: e.totalField ? e.amountField || "amount" : void 0,
|
|
2968
|
+
min_rows: e.minRows,
|
|
2969
|
+
max_rows: e.maxRows,
|
|
2970
|
+
allow_add: !e.readonly,
|
|
2971
|
+
allow_delete: !e.readonly
|
|
2972
|
+
}), [e]);
|
|
2973
|
+
return /* @__PURE__ */ Z(x, {
|
|
2974
|
+
className: W("shadow-none"),
|
|
2975
|
+
children: [/* @__PURE__ */ Z(w, {
|
|
2976
|
+
className: "flex-row items-center justify-between gap-2 pb-2",
|
|
2977
|
+
children: [/* @__PURE__ */ X(T, {
|
|
2978
|
+
className: "text-sm font-medium",
|
|
2979
|
+
children: e.title || "Line Items"
|
|
2980
|
+
}), !e.readonly && /* @__PURE__ */ X(b, {
|
|
2981
|
+
type: "button",
|
|
2982
|
+
size: "sm",
|
|
2983
|
+
onClick: j,
|
|
2984
|
+
disabled: v || g || !C || !c,
|
|
2985
|
+
children: v ? "Saving…" : "Save"
|
|
2986
|
+
})]
|
|
2987
|
+
}), /* @__PURE__ */ Z(S, { children: [D && /* @__PURE__ */ X("p", {
|
|
2988
|
+
className: "mb-2 text-sm text-destructive",
|
|
2989
|
+
children: D
|
|
2990
|
+
}), g ? /* @__PURE__ */ X("p", {
|
|
2991
|
+
className: "py-6 text-center text-sm text-muted-foreground",
|
|
2992
|
+
children: "Loading…"
|
|
2993
|
+
}) : c ? /* @__PURE__ */ X(h, {
|
|
2994
|
+
value: l,
|
|
2995
|
+
onChange: A,
|
|
2996
|
+
field: M,
|
|
2997
|
+
readonly: e.readonly
|
|
2998
|
+
}) : /* @__PURE__ */ X("p", {
|
|
2999
|
+
className: "py-6 text-center text-sm text-muted-foreground",
|
|
3000
|
+
children: "Save the record first to add line items."
|
|
3001
|
+
})] })]
|
|
3002
|
+
});
|
|
3003
|
+
}, Tt = ({ schema: e }) => /* @__PURE__ */ X(mt, {
|
|
3004
|
+
schema: e,
|
|
3005
|
+
dataSource: n(u)?.dataSource ?? void 0
|
|
3006
|
+
});
|
|
3007
|
+
c.register("object-form", Tt, {
|
|
1985
3008
|
namespace: "plugin-form",
|
|
1986
3009
|
label: "Object Form",
|
|
1987
3010
|
category: "plugin",
|
|
@@ -2122,7 +3145,7 @@ s.register("object-form", Ne, {
|
|
|
2122
3145
|
]
|
|
2123
3146
|
}
|
|
2124
3147
|
]
|
|
2125
|
-
}),
|
|
3148
|
+
}), c.register("form", Tt, {
|
|
2126
3149
|
namespace: "view",
|
|
2127
3150
|
skipFallback: !0,
|
|
2128
3151
|
label: "Data Form View",
|
|
@@ -2150,7 +3173,7 @@ s.register("object-form", Ne, {
|
|
|
2150
3173
|
]
|
|
2151
3174
|
}
|
|
2152
3175
|
]
|
|
2153
|
-
}),
|
|
3176
|
+
}), c.register("embeddable-form", ({ schema: e }) => /* @__PURE__ */ X(xt, { config: e }), {
|
|
2154
3177
|
namespace: "plugin-form",
|
|
2155
3178
|
label: "Embeddable Form",
|
|
2156
3179
|
category: "plugin",
|
|
@@ -2188,7 +3211,7 @@ s.register("object-form", Ne, {
|
|
|
2188
3211
|
label: "Allow Multiple Submissions"
|
|
2189
3212
|
}
|
|
2190
3213
|
]
|
|
2191
|
-
}),
|
|
3214
|
+
}), c.register("form-analytics", ({ schema: e }) => /* @__PURE__ */ X(Ct, {
|
|
2192
3215
|
formId: e.formId,
|
|
2193
3216
|
formTitle: e.formTitle,
|
|
2194
3217
|
metrics: e.metrics || { totalSubmissions: 0 }
|
|
@@ -2214,6 +3237,73 @@ s.register("object-form", Ne, {
|
|
|
2214
3237
|
label: "Submission Metrics"
|
|
2215
3238
|
}
|
|
2216
3239
|
]
|
|
3240
|
+
}), c.register("object-master-detail-form", ({ schema: e }) => /* @__PURE__ */ X(We, {
|
|
3241
|
+
schema: e,
|
|
3242
|
+
dataSource: n(u)?.dataSource ?? void 0
|
|
3243
|
+
}), {
|
|
3244
|
+
namespace: "plugin-form",
|
|
3245
|
+
label: "Master-Detail Form",
|
|
3246
|
+
category: "plugin",
|
|
3247
|
+
inputs: [
|
|
3248
|
+
{
|
|
3249
|
+
name: "objectName",
|
|
3250
|
+
type: "string",
|
|
3251
|
+
label: "Parent Object",
|
|
3252
|
+
required: !0
|
|
3253
|
+
},
|
|
3254
|
+
{
|
|
3255
|
+
name: "mode",
|
|
3256
|
+
type: "enum",
|
|
3257
|
+
label: "Mode",
|
|
3258
|
+
enum: ["create", "edit"]
|
|
3259
|
+
},
|
|
3260
|
+
{
|
|
3261
|
+
name: "sections",
|
|
3262
|
+
type: "array",
|
|
3263
|
+
label: "Parent Sections"
|
|
3264
|
+
},
|
|
3265
|
+
{
|
|
3266
|
+
name: "details",
|
|
3267
|
+
type: "array",
|
|
3268
|
+
label: "Detail Collections",
|
|
3269
|
+
required: !0
|
|
3270
|
+
}
|
|
3271
|
+
]
|
|
3272
|
+
}), c.register("line_items", ({ schema: e }) => /* @__PURE__ */ X(wt, { schema: e }), {
|
|
3273
|
+
namespace: "record",
|
|
3274
|
+
skipFallback: !0,
|
|
3275
|
+
label: "Line Items",
|
|
3276
|
+
category: "record",
|
|
3277
|
+
inputs: [
|
|
3278
|
+
{
|
|
3279
|
+
name: "childObject",
|
|
3280
|
+
type: "string",
|
|
3281
|
+
label: "Child Object",
|
|
3282
|
+
required: !0
|
|
3283
|
+
},
|
|
3284
|
+
{
|
|
3285
|
+
name: "relationshipField",
|
|
3286
|
+
type: "string",
|
|
3287
|
+
label: "Relationship Field",
|
|
3288
|
+
required: !0
|
|
3289
|
+
},
|
|
3290
|
+
{
|
|
3291
|
+
name: "columns",
|
|
3292
|
+
type: "array",
|
|
3293
|
+
label: "Columns",
|
|
3294
|
+
required: !0
|
|
3295
|
+
},
|
|
3296
|
+
{
|
|
3297
|
+
name: "totalField",
|
|
3298
|
+
type: "string",
|
|
3299
|
+
label: "Parent Total Field"
|
|
3300
|
+
},
|
|
3301
|
+
{
|
|
3302
|
+
name: "amountField",
|
|
3303
|
+
type: "string",
|
|
3304
|
+
label: "Amount Column"
|
|
3305
|
+
}
|
|
3306
|
+
]
|
|
2217
3307
|
});
|
|
2218
3308
|
//#endregion
|
|
2219
|
-
export {
|
|
3309
|
+
export { ct as DrawerForm, xt as EmbeddableForm, Ct as FormAnalytics, Q as FormSection, wt as LineItemsPanel, We as MasterDetailForm, dt as ModalForm, mt as ObjectForm, he as SplitForm, pe as TabbedForm, me as WizardForm, Ze as applyAutoColSpan, rt as applyAutoLayout, Pe as deriveColumns, Ve as deriveDetail, Ie as deriveFormFields, tt as filterAutoGeneratedFields, et as filterCreateModeFields, $e as filterSystemFields, Ae as findRelationshipField, Xe as inferColumns, nt as inferModalSize, Ye as isAutoGeneratedFieldType, Je as isWideFieldType, Re as resolveInlineMode };
|