@actuate-media/cms-admin 0.76.7 → 0.78.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 +38 -0
- package/dist/__tests__/components/attribution-rows.test.d.ts +2 -0
- package/dist/__tests__/components/attribution-rows.test.d.ts.map +1 -0
- package/dist/__tests__/components/attribution-rows.test.js +82 -0
- package/dist/__tests__/components/attribution-rows.test.js.map +1 -0
- package/dist/__tests__/views/form-editor.render.test.d.ts +2 -0
- package/dist/__tests__/views/form-editor.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/form-editor.render.test.js +146 -0
- package/dist/__tests__/views/form-editor.render.test.js.map +1 -0
- package/dist/__tests__/views/form-entries.render.test.js +20 -0
- package/dist/__tests__/views/form-entries.render.test.js.map +1 -1
- package/dist/__tests__/views/form-submissions.render.test.js +12 -0
- package/dist/__tests__/views/form-submissions.render.test.js.map +1 -1
- package/dist/actuate-admin.css +1 -1
- package/dist/components/forms/ExportMenu.d.ts +8 -0
- package/dist/components/forms/ExportMenu.d.ts.map +1 -0
- package/dist/components/forms/ExportMenu.js +32 -0
- package/dist/components/forms/ExportMenu.js.map +1 -0
- package/dist/components/forms/FormEntryDetailPane.d.ts +13 -0
- package/dist/components/forms/FormEntryDetailPane.d.ts.map +1 -1
- package/dist/components/forms/FormEntryDetailPane.js +74 -8
- package/dist/components/forms/FormEntryDetailPane.js.map +1 -1
- package/dist/components/forms/WebhooksPanel.d.ts.map +1 -1
- package/dist/components/forms/WebhooksPanel.js +1 -1
- package/dist/components/forms/WebhooksPanel.js.map +1 -1
- package/dist/lib/forms-service.d.ts +29 -3
- package/dist/lib/forms-service.d.ts.map +1 -1
- package/dist/lib/forms-service.js +37 -1
- package/dist/lib/forms-service.js.map +1 -1
- package/dist/views/FormEditor.d.ts.map +1 -1
- package/dist/views/FormEditor.js +211 -116
- package/dist/views/FormEditor.js.map +1 -1
- package/dist/views/FormEntries.d.ts.map +1 -1
- package/dist/views/FormEntries.js +8 -36
- package/dist/views/FormEntries.js.map +1 -1
- package/dist/views/FormSubmissions.d.ts.map +1 -1
- package/dist/views/FormSubmissions.js +7 -36
- package/dist/views/FormSubmissions.js.map +1 -1
- package/package.json +9 -9
- package/src/__tests__/components/attribution-rows.test.ts +93 -0
- package/src/__tests__/views/form-editor.render.test.tsx +186 -0
- package/src/__tests__/views/form-entries.render.test.tsx +29 -0
- package/src/__tests__/views/form-submissions.render.test.tsx +17 -0
- package/src/components/forms/ExportMenu.tsx +70 -0
- package/src/components/forms/FormEntryDetailPane.tsx +82 -8
- package/src/components/forms/WebhooksPanel.tsx +5 -1
- package/src/lib/forms-service.ts +61 -2
- package/src/views/FormEditor.tsx +655 -510
- package/src/views/FormEntries.tsx +7 -46
- package/src/views/FormSubmissions.tsx +6 -46
package/dist/views/FormEditor.js
CHANGED
|
@@ -1,131 +1,226 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Full-page form editor — the canonical place to configure everything about a
|
|
5
|
+
* form. Backed entirely by the typed Forms API (`lib/forms-service.ts`), the
|
|
6
|
+
* same backend as the Forms list's inline Schema pane, so the two surfaces can
|
|
7
|
+
* never drift:
|
|
8
|
+
*
|
|
9
|
+
* - Details → name / description / status + post-submit confirmation
|
|
10
|
+
* (`PATCH /forms/:id` — `successMessage` / `redirectUrl`,
|
|
11
|
+
* which the public submission pipeline actually reads)
|
|
12
|
+
* - Fields → versioned schema editor (`PUT /forms/:id/schema`)
|
|
13
|
+
* - Notifications→ shared NotificationsPanel (`/forms/:id/notifications`)
|
|
14
|
+
* - Analytics → GA4 event tracking config (persisted on the definition,
|
|
15
|
+
* exposed on the public schema, fired by `<ActuateForm>`)
|
|
16
|
+
* - Embed → shared EmbedPanel (endpoints, snippet, allowed domains)
|
|
17
|
+
* - Integrations → shared WebhooksPanel (signed CRM/Zapier webhooks)
|
|
18
|
+
*
|
|
19
|
+
* New forms get a focused create screen (details + starting fields); saving
|
|
20
|
+
* routes into this editor so notifications/embed/webhooks — which need a form
|
|
21
|
+
* id — are one click away.
|
|
22
|
+
*/
|
|
23
|
+
import * as Tabs from '@radix-ui/react-tabs';
|
|
24
|
+
import { ArrowLeft, ExternalLink, Inbox, Loader2, MessageSquare, Save } from 'lucide-react';
|
|
25
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
26
|
+
import { toast } from 'sonner';
|
|
27
|
+
import { EmbedPanel } from '../components/forms/EmbedPanel.js';
|
|
28
|
+
import { FieldsPanel } from '../components/forms/FieldsPanel.js';
|
|
29
|
+
import { NotificationsPanel } from '../components/forms/NotificationsPanel.js';
|
|
30
|
+
import { WebhooksPanel } from '../components/forms/WebhooksPanel.js';
|
|
31
|
+
import { FormStatusBadge, FormsErrorState, FormsLoading, btnPrimary, btnSecondary, } from '../components/forms/primitives.js';
|
|
7
32
|
import { Toggle } from '../components/ui/Toggle.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
{
|
|
14
|
-
{
|
|
15
|
-
{
|
|
16
|
-
{
|
|
17
|
-
{
|
|
18
|
-
{
|
|
19
|
-
{ value: 'hidden', label: 'Hidden' },
|
|
33
|
+
import { emitFormsChanged } from '../lib/forms-events.js';
|
|
34
|
+
import { createForm, fetchFormById, fetchFormSchema, saveFormSchema, updateForm, } from '../lib/forms-service.js';
|
|
35
|
+
import { useNavigationBlocker } from '../router/index.js';
|
|
36
|
+
const inputCls = 'border-border bg-input-background text-foreground focus-visible:ring-ring w-full rounded-lg border px-3 py-2 text-sm focus-visible:ring-2 focus-visible:outline-none';
|
|
37
|
+
const TABS = [
|
|
38
|
+
{ id: 'details', label: 'Details' },
|
|
39
|
+
{ id: 'fields', label: 'Fields' },
|
|
40
|
+
{ id: 'notifications', label: 'Notifications' },
|
|
41
|
+
{ id: 'analytics', label: 'Analytics' },
|
|
42
|
+
{ id: 'embed', label: 'Embed' },
|
|
43
|
+
{ id: 'integrations', label: 'Integrations' },
|
|
20
44
|
];
|
|
45
|
+
function detailsFromForm(form) {
|
|
46
|
+
return {
|
|
47
|
+
name: form.name,
|
|
48
|
+
description: form.description ?? '',
|
|
49
|
+
status: form.status,
|
|
50
|
+
// The submission pipeline redirects whenever redirectUrl is non-empty,
|
|
51
|
+
// otherwise it shows successMessage — mirror that decision here.
|
|
52
|
+
confirmationType: form.redirectUrl?.trim() ? 'redirect' : 'message',
|
|
53
|
+
successMessage: form.successMessage ?? '',
|
|
54
|
+
redirectUrl: form.redirectUrl ?? '',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const DEFAULT_ANALYTICS = { enabled: false };
|
|
21
58
|
export function FormEditor({ formId, onNavigate }) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
59
|
+
if (!formId) {
|
|
60
|
+
return _jsx(NewFormEditor, { onNavigate: onNavigate });
|
|
61
|
+
}
|
|
62
|
+
return _jsx(ExistingFormEditor, { formId: formId, onNavigate: onNavigate });
|
|
63
|
+
}
|
|
64
|
+
// ─── Existing form ─────────────────────────────────────────────────────────
|
|
65
|
+
function ExistingFormEditor({ formId, onNavigate, }) {
|
|
66
|
+
const [form, setForm] = useState(null);
|
|
67
|
+
const [loading, setLoading] = useState(true);
|
|
68
|
+
const [error, setError] = useState(null);
|
|
69
|
+
const [tab, setTab] = useState('details');
|
|
70
|
+
const [details, setDetails] = useState(null);
|
|
71
|
+
const [detailsDirty, setDetailsDirty] = useState(false);
|
|
72
|
+
const [savingDetails, setSavingDetails] = useState(false);
|
|
27
73
|
const [fields, setFields] = useState([]);
|
|
28
|
-
const [
|
|
29
|
-
const [
|
|
30
|
-
const [
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
enabled: false,
|
|
38
|
-
measurementId: '',
|
|
39
|
-
submitEventName: 'form_submit',
|
|
40
|
-
startEventName: 'form_start',
|
|
41
|
-
trackAsConversion: false,
|
|
42
|
-
conversionValue: 0,
|
|
43
|
-
conversionCurrency: 'USD',
|
|
44
|
-
customParameters: {},
|
|
45
|
-
});
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
if (existingForm) {
|
|
48
|
-
const d = existingForm.data ?? existingForm;
|
|
49
|
-
setName(d.name ?? '');
|
|
50
|
-
setDescription(d.description ?? '');
|
|
51
|
-
setStatus(d.status ?? 'active');
|
|
52
|
-
if (Array.isArray(d.fields))
|
|
53
|
-
setFields(d.fields);
|
|
54
|
-
if (d.confirmation) {
|
|
55
|
-
setConfirmation((prev) => ({ ...prev, ...d.confirmation }));
|
|
56
|
-
}
|
|
57
|
-
if (d.analytics) {
|
|
58
|
-
setAnalytics((prev) => ({ ...prev, ...d.analytics }));
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}, [existingForm]);
|
|
62
|
-
const addField = useCallback((type) => {
|
|
63
|
-
setFields((prev) => [
|
|
64
|
-
...prev,
|
|
65
|
-
{
|
|
66
|
-
id: crypto.randomUUID(),
|
|
67
|
-
type,
|
|
68
|
-
label: `New ${type} field`,
|
|
69
|
-
required: false,
|
|
70
|
-
},
|
|
71
|
-
]);
|
|
72
|
-
}, []);
|
|
73
|
-
const removeField = useCallback((id) => {
|
|
74
|
-
setFields((prev) => prev.filter((f) => f.id !== id));
|
|
75
|
-
}, []);
|
|
76
|
-
const updateField = useCallback((id, updates) => {
|
|
77
|
-
setFields((prev) => prev.map((f) => (f.id === id ? { ...f, ...updates } : f)));
|
|
78
|
-
}, []);
|
|
79
|
-
const moveField = useCallback((from, to) => {
|
|
80
|
-
setFields((prev) => {
|
|
81
|
-
const next = [...prev];
|
|
82
|
-
const [moved] = next.splice(from, 1);
|
|
83
|
-
next.splice(to, 0, moved);
|
|
84
|
-
return next;
|
|
85
|
-
});
|
|
86
|
-
}, []);
|
|
87
|
-
const handleSave = async () => {
|
|
88
|
-
setSaving(true);
|
|
74
|
+
const [fieldsDirty, setFieldsDirty] = useState(false);
|
|
75
|
+
const [savingFields, setSavingFields] = useState(false);
|
|
76
|
+
const [analytics, setAnalytics] = useState(DEFAULT_ANALYTICS);
|
|
77
|
+
const [analyticsDirty, setAnalyticsDirty] = useState(false);
|
|
78
|
+
const [savingAnalytics, setSavingAnalytics] = useState(false);
|
|
79
|
+
useNavigationBlocker(detailsDirty || fieldsDirty || analyticsDirty);
|
|
80
|
+
const load = useCallback(async () => {
|
|
81
|
+
setLoading(true);
|
|
82
|
+
setError(null);
|
|
89
83
|
try {
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
fields,
|
|
95
|
-
confirmation,
|
|
96
|
-
analytics: analytics.enabled ? analytics : { enabled: false },
|
|
97
|
-
};
|
|
98
|
-
if (isNew) {
|
|
99
|
-
await cmsApi('/collections/forms', {
|
|
100
|
-
method: 'POST',
|
|
101
|
-
body: JSON.stringify(payload),
|
|
102
|
-
});
|
|
84
|
+
const [loaded, schema] = await Promise.all([fetchFormById(formId), fetchFormSchema(formId)]);
|
|
85
|
+
if (!loaded) {
|
|
86
|
+
setError('Form not found');
|
|
87
|
+
return;
|
|
103
88
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
89
|
+
setForm(loaded);
|
|
90
|
+
setDetails(detailsFromForm(loaded));
|
|
91
|
+
setAnalytics(loaded.analytics ?? DEFAULT_ANALYTICS);
|
|
92
|
+
setFields(schema.fields);
|
|
93
|
+
setDetailsDirty(false);
|
|
94
|
+
setFieldsDirty(false);
|
|
95
|
+
setAnalyticsDirty(false);
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
setError(e instanceof Error ? e.message : 'Failed to load form');
|
|
111
99
|
}
|
|
112
100
|
finally {
|
|
113
|
-
|
|
101
|
+
setLoading(false);
|
|
114
102
|
}
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
};
|
|
103
|
+
}, [formId]);
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
void load();
|
|
106
|
+
}, [load]);
|
|
107
|
+
function patchDetails(patch) {
|
|
108
|
+
setDetails((cur) => (cur ? { ...cur, ...patch } : cur));
|
|
109
|
+
setDetailsDirty(true);
|
|
110
|
+
}
|
|
111
|
+
function patchAnalytics(patch) {
|
|
112
|
+
setAnalytics((cur) => ({ ...cur, ...patch }));
|
|
113
|
+
setAnalyticsDirty(true);
|
|
114
|
+
}
|
|
115
|
+
async function saveDetails() {
|
|
116
|
+
if (!details)
|
|
117
|
+
return;
|
|
118
|
+
setSavingDetails(true);
|
|
119
|
+
const res = await updateForm(formId, {
|
|
120
|
+
name: details.name,
|
|
121
|
+
description: details.description,
|
|
122
|
+
status: details.status,
|
|
123
|
+
successMessage: details.successMessage,
|
|
124
|
+
// Message mode must clear the URL — a non-empty redirectUrl always wins
|
|
125
|
+
// in the submission pipeline.
|
|
126
|
+
redirectUrl: details.confirmationType === 'redirect' ? details.redirectUrl : '',
|
|
127
|
+
});
|
|
128
|
+
setSavingDetails(false);
|
|
129
|
+
if (res.error) {
|
|
130
|
+
toast.error(res.error);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (res.data) {
|
|
134
|
+
setForm(res.data);
|
|
135
|
+
setDetails(detailsFromForm(res.data));
|
|
136
|
+
}
|
|
137
|
+
setDetailsDirty(false);
|
|
138
|
+
toast.success('Form details saved.');
|
|
139
|
+
emitFormsChanged();
|
|
140
|
+
}
|
|
141
|
+
async function saveFields() {
|
|
142
|
+
setSavingFields(true);
|
|
143
|
+
const res = await saveFormSchema(formId, fields.map((f, i) => ({ ...f, sortOrder: i })));
|
|
144
|
+
setSavingFields(false);
|
|
145
|
+
if (res.error) {
|
|
146
|
+
toast.error(res.error);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
setFieldsDirty(false);
|
|
150
|
+
toast.success('Schema saved.');
|
|
151
|
+
emitFormsChanged();
|
|
152
|
+
}
|
|
153
|
+
async function saveAnalytics() {
|
|
154
|
+
setSavingAnalytics(true);
|
|
155
|
+
const res = await updateForm(formId, { analytics });
|
|
156
|
+
setSavingAnalytics(false);
|
|
157
|
+
if (res.error) {
|
|
158
|
+
toast.error(res.error);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (res.data)
|
|
162
|
+
setAnalytics(res.data.analytics ?? { enabled: false });
|
|
163
|
+
setAnalyticsDirty(false);
|
|
164
|
+
toast.success('Analytics settings saved.');
|
|
165
|
+
}
|
|
119
166
|
if (loading) {
|
|
120
|
-
return (_jsx("div", { className: "
|
|
167
|
+
return (_jsx("div", { className: "max-w-4xl p-3 pr-6 sm:p-4 sm:pr-8", children: _jsx(FormsLoading, { label: "Loading form\u2026" }) }));
|
|
168
|
+
}
|
|
169
|
+
if (error || !form || !details) {
|
|
170
|
+
return (_jsx("div", { className: "max-w-4xl p-3 pr-6 sm:p-4 sm:pr-8", children: _jsx(FormsErrorState, { message: error ?? 'Form not found', onRetry: () => void load() }) }));
|
|
121
171
|
}
|
|
122
|
-
return (_jsxs("div", { className: "max-w-4xl p-3 pr-6 sm:p-4 sm:pr-8", children: [_jsxs("div", { className: "mb-6 flex items-center gap-3", children: [_jsx("button", { onClick: () => onNavigate?.('/forms'),
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
},
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
172
|
+
return (_jsxs("div", { className: "max-w-4xl p-3 pr-6 sm:p-4 sm:pr-8", children: [_jsxs("div", { className: "mb-6 flex items-center gap-3", children: [_jsx("button", { onClick: () => onNavigate?.('/forms'), "aria-label": "Back to forms", className: "hover:bg-muted focus-visible:ring-ring rounded-lg p-2 transition-colors focus-visible:ring-2 focus-visible:outline-none", children: _jsx(ArrowLeft, { className: "text-muted-foreground h-5 w-5", "aria-hidden": true }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("h1", { className: "text-foreground truncate text-xl font-medium", children: form.name }), _jsx(FormStatusBadge, { status: form.status })] }), _jsxs("p", { className: "text-muted-foreground truncate font-mono text-xs", children: ["/", form.slug] })] }), _jsxs("button", { onClick: () => onNavigate?.(`/forms/${formId}/submissions`), className: btnSecondary, children: [_jsx(Inbox, { className: "h-4 w-4", "aria-hidden": true }), "View Entries"] })] }), _jsxs(Tabs.Root, { value: tab, onValueChange: setTab, children: [_jsx(Tabs.List, { className: "border-border mb-4 flex gap-0.5 overflow-x-auto border-b", "aria-label": "Form settings sections", children: TABS.map((t) => (_jsx(Tabs.Trigger, { value: t.id, className: "text-muted-foreground hover:text-foreground focus-visible:ring-ring data-[state=active]:border-primary data-[state=active]:text-foreground -mb-px border-b-2 border-transparent px-3 py-2 text-sm font-medium whitespace-nowrap transition-colors focus-visible:ring-2 focus-visible:outline-none", children: t.label }, t.id))) }), _jsx(Tabs.Content, { value: "details", tabIndex: -1, children: _jsx(DetailsTab, { details: details, onPatch: patchDetails, onSave: () => void saveDetails(), saving: savingDetails }) }), _jsx(Tabs.Content, { value: "fields", tabIndex: -1, children: _jsxs("div", { className: "border-border bg-card space-y-4 rounded-lg border p-4", children: [_jsx(FieldsPanel, { fields: fields, onChange: (next) => {
|
|
173
|
+
setFields(next);
|
|
174
|
+
setFieldsDirty(true);
|
|
175
|
+
}, hasSubmissions: (form.totalEntries ?? 0) > 0 }), _jsx("div", { className: "flex justify-end", children: _jsxs("button", { className: btnPrimary, onClick: () => void saveFields(), disabled: savingFields || !fieldsDirty, children: [savingFields ? (_jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true })) : (_jsx(Save, { className: "h-4 w-4", "aria-hidden": true })), savingFields ? 'Saving…' : 'Save Schema'] }) })] }) }), _jsx(Tabs.Content, { value: "notifications", tabIndex: -1, children: _jsx("div", { className: "border-border bg-card rounded-lg border p-4", children: _jsx(NotificationsPanel, { formId: formId }) }) }), _jsx(Tabs.Content, { value: "analytics", tabIndex: -1, children: _jsx(AnalyticsTab, { analytics: analytics, onPatch: patchAnalytics, onSave: () => void saveAnalytics(), saving: savingAnalytics }) }), _jsx(Tabs.Content, { value: "embed", tabIndex: -1, children: _jsx("div", { className: "border-border bg-card rounded-lg border p-4", children: _jsx(EmbedPanel, { formId: formId, slug: form.slug, status: form.status }) }) }), _jsx(Tabs.Content, { value: "integrations", tabIndex: -1, children: _jsx("div", { className: "border-border bg-card rounded-lg border p-4", children: _jsx(WebhooksPanel, { formId: formId, formSlug: form.slug }) }) })] })] }));
|
|
176
|
+
}
|
|
177
|
+
// ─── Details tab ────────────────────────────────────────────────────────────
|
|
178
|
+
function DetailsTab({ details, onPatch, onSave, saving, }) {
|
|
179
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "border-border bg-card rounded-lg border p-4", children: _jsxs("div", { className: "grid gap-4", children: [_jsx(Field, { label: "Form Name", children: _jsx("input", { type: "text", value: details.name, onChange: (e) => onPatch({ name: e.target.value }), placeholder: "e.g. Contact Form", className: inputCls }) }), _jsx(Field, { label: "Description", children: _jsx("input", { type: "text", value: details.description, onChange: (e) => onPatch({ description: e.target.value }), placeholder: "Brief description of this form", className: inputCls }) }), _jsx(Field, { label: "Status", hint: "Only active forms accept submissions; archived forms are hidden from embed pickers.", children: _jsxs("select", { value: details.status, onChange: (e) => onPatch({ status: e.target.value }), className: "border-border bg-input-background text-foreground focus-visible:ring-ring rounded-lg border px-3 py-2 text-sm focus-visible:ring-2 focus-visible:outline-none", children: [_jsx("option", { value: "active", children: "Active" }), _jsx("option", { value: "draft", children: "Draft" }), _jsx("option", { value: "archived", children: "Archived" })] }) })] }) }), _jsxs("div", { className: "border-border bg-card rounded-lg border p-4", children: [_jsx("h2", { className: "text-foreground mb-3 text-base font-medium", children: "Confirmation" }), _jsxs("fieldset", { className: "mb-4", children: [_jsx("legend", { className: "text-foreground mb-2 block text-sm font-medium", children: "After submission" }), _jsxs("div", { className: "flex flex-wrap gap-3", children: [_jsxs("label", { className: `flex cursor-pointer items-center gap-2 rounded-lg border px-4 py-2 transition-colors ${details.confirmationType === 'message'
|
|
180
|
+
? 'border-primary bg-accent'
|
|
181
|
+
: 'border-border hover:bg-muted bg-transparent'}`, children: [_jsx("input", { type: "radio", name: "confirmationType", value: "message", checked: details.confirmationType === 'message', onChange: () => onPatch({ confirmationType: 'message' }), className: "text-primary" }), _jsx(MessageSquare, { className: "h-4 w-4", "aria-hidden": true }), _jsx("span", { className: "text-sm", children: "Show Message" })] }), _jsxs("label", { className: `flex cursor-pointer items-center gap-2 rounded-lg border px-4 py-2 transition-colors ${details.confirmationType === 'redirect'
|
|
182
|
+
? 'border-primary bg-accent'
|
|
183
|
+
: 'border-border hover:bg-muted bg-transparent'}`, children: [_jsx("input", { type: "radio", name: "confirmationType", value: "redirect", checked: details.confirmationType === 'redirect', onChange: () => onPatch({ confirmationType: 'redirect' }), className: "text-primary" }), _jsx(ExternalLink, { className: "h-4 w-4", "aria-hidden": true }), _jsx("span", { className: "text-sm", children: "Redirect to Page" })] })] })] }), details.confirmationType === 'message' ? (_jsx(Field, { label: "Success Message", children: _jsx("textarea", { value: details.successMessage, onChange: (e) => onPatch({ successMessage: e.target.value }), rows: 3, placeholder: "Thank you! Your submission has been received.", className: inputCls }) })) : (_jsx(Field, { label: "Redirect URL", children: _jsx("input", { type: "url", value: details.redirectUrl, onChange: (e) => onPatch({ redirectUrl: e.target.value }), placeholder: "https://example.com/thank-you", className: inputCls }) }))] }), _jsx("div", { className: "flex justify-end", children: _jsxs("button", { className: btnPrimary, onClick: onSave, disabled: saving || !details.name.trim(), children: [saving ? (_jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true })) : (_jsx(Save, { className: "h-4 w-4", "aria-hidden": true })), saving ? 'Saving…' : 'Save Details'] }) })] }));
|
|
184
|
+
}
|
|
185
|
+
// ─── Analytics tab ──────────────────────────────────────────────────────────
|
|
186
|
+
function AnalyticsTab({ analytics, onPatch, onSave, saving, }) {
|
|
187
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "border-border bg-card rounded-lg border p-4", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "text-foreground block text-sm font-medium", children: "Push events to Google Analytics 4" }), _jsx("span", { className: "text-muted-foreground block text-sm", children: "Fires form start, submit, and error events on the public site." })] }), _jsx(Toggle, { checked: analytics.enabled, onCheckedChange: (v) => onPatch({ enabled: v }), "aria-label": "Push events to Google Analytics 4" })] }), analytics.enabled && (_jsxs("div", { className: "mt-4 grid gap-4", children: [_jsx(Field, { label: "GA4 Measurement ID", hint: "Leave blank to use your site's default GA4 tag", children: _jsx("input", { type: "text", value: analytics.measurementId ?? '', onChange: (e) => onPatch({ measurementId: e.target.value }), placeholder: "G-XXXXXXXXXX", className: `${inputCls} max-w-64` }) }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsx(Field, { label: "Submit Event Name", children: _jsx("input", { type: "text", value: analytics.submitEventName ?? '', onChange: (e) => onPatch({ submitEventName: e.target.value }), placeholder: "form_submit", className: inputCls }) }), _jsx(Field, { label: "Start Event Name", children: _jsx("input", { type: "text", value: analytics.startEventName ?? '', onChange: (e) => onPatch({ startEventName: e.target.value }), placeholder: "form_start", className: inputCls }) })] }), _jsxs("div", { className: "border-border border-t pt-4", children: [_jsxs("div", { className: "mb-3 flex items-center gap-3", children: [_jsx("input", { type: "checkbox", id: "trackConversion", checked: analytics.trackAsConversion ?? false, onChange: (e) => onPatch({ trackAsConversion: e.target.checked }), className: "rounded" }), _jsx("label", { htmlFor: "trackConversion", className: "text-foreground text-sm font-medium", children: "Track as conversion event" })] }), analytics.trackAsConversion && (_jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsx(Field, { label: "Conversion Value", children: _jsx("input", { type: "number", value: analytics.conversionValue ?? 0, onChange: (e) => onPatch({ conversionValue: Number(e.target.value) }), min: 0, step: 0.01, className: inputCls }) }), _jsx(Field, { label: "Currency", children: _jsxs("select", { value: analytics.conversionCurrency ?? 'USD', onChange: (e) => onPatch({ conversionCurrency: e.target.value }), className: inputCls, children: [_jsx("option", { value: "USD", children: "USD" }), _jsx("option", { value: "EUR", children: "EUR" }), _jsx("option", { value: "GBP", children: "GBP" }), _jsx("option", { value: "CAD", children: "CAD" }), _jsx("option", { value: "AUD", children: "AUD" })] }) })] }))] }), _jsx("div", { className: "border-info/30 bg-info/10 rounded-lg border p-3", children: _jsxs("p", { className: "text-foreground text-xs", children: [_jsx("strong", { children: "Note:" }), " Your site must have the GA4 snippet or GTM container installed. Actuate pushes events via", ' ', _jsx("code", { className: "bg-info/10 rounded px-1", children: "gtag()" }), " /", _jsx("code", { className: "bg-info/10 rounded px-1", children: "dataLayer" }), " \u2014 it does not load the GA4 script."] }) })] }))] }), _jsx("div", { className: "flex justify-end", children: _jsxs("button", { className: btnPrimary, onClick: onSave, disabled: saving, children: [saving ? (_jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true })) : (_jsx(Save, { className: "h-4 w-4", "aria-hidden": true })), saving ? 'Saving…' : 'Save Analytics'] }) })] }));
|
|
188
|
+
}
|
|
189
|
+
// ─── New form ───────────────────────────────────────────────────────────────
|
|
190
|
+
function NewFormEditor({ onNavigate }) {
|
|
191
|
+
const [name, setName] = useState('');
|
|
192
|
+
const [description, setDescription] = useState('');
|
|
193
|
+
const [status, setStatus] = useState('active');
|
|
194
|
+
const [fields, setFields] = useState([]);
|
|
195
|
+
const [saving, setSaving] = useState(false);
|
|
196
|
+
const [dirty, setDirty] = useState(false);
|
|
197
|
+
useNavigationBlocker(dirty && !saving);
|
|
198
|
+
async function handleCreate() {
|
|
199
|
+
setSaving(true);
|
|
200
|
+
const res = await createForm({ name, description, status, fields });
|
|
201
|
+
setSaving(false);
|
|
202
|
+
if (res.error || !res.data) {
|
|
203
|
+
toast.error(res.error ?? 'Failed to create form');
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
setDirty(false);
|
|
207
|
+
toast.success('Form created. Configure notifications, embed, and integrations here.');
|
|
208
|
+
emitFormsChanged();
|
|
209
|
+
onNavigate?.(`/forms/${res.data.id}/edit`);
|
|
210
|
+
}
|
|
211
|
+
return (_jsxs("div", { className: "max-w-4xl p-3 pr-6 sm:p-4 sm:pr-8", children: [_jsxs("div", { className: "mb-6 flex items-center gap-3", children: [_jsx("button", { onClick: () => onNavigate?.('/forms'), "aria-label": "Back to forms", className: "hover:bg-muted focus-visible:ring-ring rounded-lg p-2 transition-colors focus-visible:ring-2 focus-visible:outline-none", children: _jsx(ArrowLeft, { className: "text-muted-foreground h-5 w-5", "aria-hidden": true }) }), _jsx("h1", { className: "text-foreground flex-1 text-xl font-medium", children: "New Form" }), _jsxs("button", { onClick: () => void handleCreate(), disabled: saving || !name.trim(), className: btnPrimary, children: [saving ? (_jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true })) : (_jsx(Save, { className: "h-4 w-4", "aria-hidden": true })), saving ? 'Creating…' : 'Create Form'] })] }), _jsx("div", { className: "border-border bg-card mb-4 rounded-lg border p-4", children: _jsxs("div", { className: "grid gap-4", children: [_jsx(Field, { label: "Form Name", children: _jsx("input", { type: "text", value: name, onChange: (e) => {
|
|
212
|
+
setName(e.target.value);
|
|
213
|
+
setDirty(true);
|
|
214
|
+
}, placeholder: "e.g. Contact Form", className: inputCls }) }), _jsx(Field, { label: "Description", children: _jsx("input", { type: "text", value: description, onChange: (e) => {
|
|
215
|
+
setDescription(e.target.value);
|
|
216
|
+
setDirty(true);
|
|
217
|
+
}, placeholder: "Brief description of this form", className: inputCls }) }), _jsx(Field, { label: "Status", children: _jsxs("select", { value: status, onChange: (e) => setStatus(e.target.value), className: "border-border bg-input-background text-foreground focus-visible:ring-ring rounded-lg border px-3 py-2 text-sm focus-visible:ring-2 focus-visible:outline-none", children: [_jsx("option", { value: "active", children: "Active" }), _jsx("option", { value: "draft", children: "Draft" })] }) })] }) }), _jsxs("div", { className: "border-border bg-card rounded-lg border p-4", children: [_jsx("h2", { className: "text-foreground mb-3 text-base font-medium", children: "Fields" }), _jsx(FieldsPanel, { fields: fields, onChange: (next) => {
|
|
218
|
+
setFields(next);
|
|
219
|
+
setDirty(true);
|
|
220
|
+
}, hasSubmissions: false })] }), _jsx("p", { className: "text-muted-foreground mt-4 text-sm", children: "Confirmation, notifications, analytics, embed, and integrations are configured after the form is created." })] }));
|
|
221
|
+
}
|
|
222
|
+
// ─── Shared bits ────────────────────────────────────────────────────────────
|
|
223
|
+
function Field({ label, hint, children, }) {
|
|
224
|
+
return (_jsxs("label", { className: "block", children: [_jsx("span", { className: "text-foreground mb-1 block text-sm font-medium", children: label }), children, hint && _jsx("span", { className: "text-muted-foreground mt-1 block text-xs", children: hint })] }));
|
|
130
225
|
}
|
|
131
226
|
//# sourceMappingURL=FormEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormEditor.js","sourceRoot":"","sources":["../../src/views/FormEditor.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormEditor.js","sourceRoot":"","sources":["../../src/views/FormEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormEntries.d.ts","sourceRoot":"","sources":["../../src/views/FormEntries.tsx"],"names":[],"mappings":"AAsCA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;
|
|
1
|
+
{"version":3,"file":"FormEntries.d.ts","sourceRoot":"","sources":["../../src/views/FormEntries.tsx"],"names":[],"mappings":"AAsCA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AA0BD,wBAAgB,WAAW,CAAC,EAAE,UAAU,EAAE,EAAE,gBAAgB,2CAsW3D"}
|
|
@@ -2,21 +2,22 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
/**
|
|
4
4
|
* All Entries — a cross-form submissions inbox. Same token-only table, search,
|
|
5
|
-
* status pills (All / Unread / Starred / Archived), bulk actions,
|
|
6
|
-
* pagination, and inline detail pane as the per-form
|
|
7
|
-
* Form filter and a Form column so editors can
|
|
8
|
-
* place.
|
|
5
|
+
* status pills (All / Unread / Starred / Archived), bulk actions, server-side
|
|
6
|
+
* CSV/Excel export, pagination, and inline detail pane as the per-form
|
|
7
|
+
* Submissions view, plus a Form filter and a Form column so editors can
|
|
8
|
+
* triage every form from one place.
|
|
9
9
|
*/
|
|
10
10
|
import { useCallback, useEffect, useState } from 'react';
|
|
11
|
-
import {
|
|
11
|
+
import { Inbox, Search } from 'lucide-react';
|
|
12
12
|
import { toast } from 'sonner';
|
|
13
13
|
import { bulkUpdateEntries, deleteEntry, fetchEntries, fetchEntryCounts, fetchForms, updateEntry, } from '../lib/forms-service.js';
|
|
14
14
|
import { emitFormsChanged, onFormsChanged } from '../lib/forms-events.js';
|
|
15
15
|
import { FormEntryDetailPane } from '../components/forms/FormEntryDetailPane.js';
|
|
16
16
|
import { EntriesTable } from '../components/forms/EntriesTable.js';
|
|
17
|
+
import { ExportMenu } from '../components/forms/ExportMenu.js';
|
|
17
18
|
import { ConfirmDialog } from '../components/ui/ConfirmDialog.js';
|
|
18
19
|
import { InspectorPane, SplitPaneLayout, SplitPaneList } from '../components/ui/InspectorPane.js';
|
|
19
|
-
import { FormsEmptyState, FormsErrorState, FormsLoading, FormsPagination, SummaryChip,
|
|
20
|
+
import { FormsEmptyState, FormsErrorState, FormsLoading, FormsPagination, SummaryChip, } from '../components/forms/primitives.js';
|
|
20
21
|
const FILTERS = [
|
|
21
22
|
{ id: 'all', label: 'All' },
|
|
22
23
|
{ id: 'unread', label: 'Unread' },
|
|
@@ -36,35 +37,6 @@ function filterToParams(filter) {
|
|
|
36
37
|
return {};
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
|
-
function csvEscape(value) {
|
|
40
|
-
const s = value == null ? '' : typeof value === 'object' ? JSON.stringify(value) : String(value);
|
|
41
|
-
return /[",\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
|
|
42
|
-
}
|
|
43
|
-
function exportCsv(entries) {
|
|
44
|
-
const dataKeys = [...new Set(entries.flatMap((e) => Object.keys(e.data ?? {})))];
|
|
45
|
-
const header = ['Entry', 'Form', 'Submitted', 'Name', 'Email', 'Phone', 'Status', ...dataKeys];
|
|
46
|
-
const lines = [header.map(csvEscape).join(',')];
|
|
47
|
-
for (const e of entries) {
|
|
48
|
-
const row = [
|
|
49
|
-
e.entryNumber ?? '',
|
|
50
|
-
e.formName ?? '',
|
|
51
|
-
e.submittedAt,
|
|
52
|
-
e.senderName ?? '',
|
|
53
|
-
e.senderEmail ?? '',
|
|
54
|
-
e.senderPhone ?? '',
|
|
55
|
-
e.unread ? 'unread' : 'read',
|
|
56
|
-
...dataKeys.map((k) => e.data?.[k]),
|
|
57
|
-
];
|
|
58
|
-
lines.push(row.map(csvEscape).join(','));
|
|
59
|
-
}
|
|
60
|
-
const blob = new Blob([lines.join('\n')], { type: 'text/csv;charset=utf-8' });
|
|
61
|
-
const url = URL.createObjectURL(blob);
|
|
62
|
-
const a = document.createElement('a');
|
|
63
|
-
a.href = url;
|
|
64
|
-
a.download = 'all-entries.csv';
|
|
65
|
-
a.click();
|
|
66
|
-
URL.revokeObjectURL(url);
|
|
67
|
-
}
|
|
68
40
|
export function FormEntries({ onNavigate }) {
|
|
69
41
|
const [entries, setEntries] = useState([]);
|
|
70
42
|
const [total, setTotal] = useState(0);
|
|
@@ -189,7 +161,7 @@ export function FormEntries({ onNavigate }) {
|
|
|
189
161
|
}, [selected, refresh]);
|
|
190
162
|
const showEmpty = !loading && !error && entries.length === 0;
|
|
191
163
|
const isFiltered = filter !== 'all' || formFilter !== 'all' || search.trim().length > 0;
|
|
192
|
-
return (_jsxs("div", { className: "space-y-5 p-6", children: [_jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-foreground", children: "All Entries" }), _jsxs("p", { className: "text-muted-foreground mt-1 text-sm", children: [total, " ", total === 1 ? 'submission' : 'submissions', " across your forms"] })] }),
|
|
164
|
+
return (_jsxs("div", { className: "space-y-5 p-6", children: [_jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-foreground", children: "All Entries" }), _jsxs("p", { className: "text-muted-foreground mt-1 text-sm", children: [total, " ", total === 1 ? 'submission' : 'submissions', " across your forms"] })] }), _jsx(ExportMenu, { formId: scopedFormId, disabled: counts !== null && counts.total === 0 })] }), counts && (_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(SummaryChip, { value: counts.total, label: "total" }), _jsx(SummaryChip, { value: counts.unread, label: "unread", tone: counts.unread > 0 ? 'destructive' : 'neutral' }), _jsx(SummaryChip, { value: counts.starred, label: "starred", tone: "warning" }), _jsx(SummaryChip, { value: counts.thisWeek, label: "this week" })] })), _jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("div", { className: "flex flex-1 flex-col gap-3 sm:flex-row sm:items-center", children: [_jsxs("div", { className: "relative w-full sm:max-w-xs", children: [_jsx(Search, { className: "text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2", "aria-hidden": true }), _jsx("input", { type: "search", placeholder: "Search entries\u2026", value: search, onChange: (e) => {
|
|
193
165
|
setSearch(e.target.value);
|
|
194
166
|
setPage(1);
|
|
195
167
|
}, "aria-label": "Search entries", className: "border-border bg-input-background text-foreground focus-visible:ring-ring w-full rounded-lg border py-2 pr-3 pl-9 text-sm focus-visible:ring-2 focus-visible:outline-none" })] }), _jsxs("select", { value: formFilter, onChange: (e) => {
|