@kelpie/ui 0.7.0 → 0.9.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/dist/api/resource.d.ts +59 -6
- package/dist/api/resource.d.ts.map +1 -1
- package/dist/api/resource.js +106 -24
- package/dist/api/resource.js.map +1 -1
- package/dist/api/resources/companies.d.ts +2 -0
- package/dist/api/resources/companies.d.ts.map +1 -1
- package/dist/api/resources/companies.js +5 -1
- package/dist/api/resources/companies.js.map +1 -1
- package/dist/api/resources/consentPurposes.d.ts +13 -0
- package/dist/api/resources/consentPurposes.d.ts.map +1 -0
- package/dist/api/resources/consentPurposes.js +39 -0
- package/dist/api/resources/consentPurposes.js.map +1 -0
- package/dist/api/resources/customFields.d.ts +15 -0
- package/dist/api/resources/customFields.d.ts.map +1 -0
- package/dist/api/resources/customFields.js +41 -0
- package/dist/api/resources/customFields.js.map +1 -0
- package/dist/api/resources/decisions.d.ts +2 -0
- package/dist/api/resources/decisions.d.ts.map +1 -1
- package/dist/api/resources/decisions.js +1 -0
- package/dist/api/resources/decisions.js.map +1 -1
- package/dist/api/resources/emailDomainLinker.d.ts +16 -0
- package/dist/api/resources/emailDomainLinker.d.ts.map +1 -0
- package/dist/api/resources/emailDomainLinker.js +16 -0
- package/dist/api/resources/emailDomainLinker.js.map +1 -0
- package/dist/api/resources/enquiries.d.ts +39 -0
- package/dist/api/resources/enquiries.d.ts.map +1 -0
- package/dist/api/resources/enquiries.js +68 -0
- package/dist/api/resources/enquiries.js.map +1 -0
- package/dist/api/resources/forms.d.ts +21 -1
- package/dist/api/resources/forms.d.ts.map +1 -1
- package/dist/api/resources/forms.js +44 -17
- package/dist/api/resources/forms.js.map +1 -1
- package/dist/api/resources/handbookPages.d.ts +1 -1
- package/dist/api/resources/handbookPages.js +1 -1
- package/dist/api/resources/importJobs.d.ts +5 -0
- package/dist/api/resources/importJobs.d.ts.map +1 -1
- package/dist/api/resources/importJobs.js +3 -0
- package/dist/api/resources/importJobs.js.map +1 -1
- package/dist/api/resources/listMembers.d.ts +27 -0
- package/dist/api/resources/listMembers.d.ts.map +1 -0
- package/dist/api/resources/listMembers.js +108 -0
- package/dist/api/resources/listMembers.js.map +1 -0
- package/dist/api/resources/lists.d.ts +14 -0
- package/dist/api/resources/lists.d.ts.map +1 -0
- package/dist/api/resources/lists.js +34 -0
- package/dist/api/resources/lists.js.map +1 -0
- package/dist/api/resources/opportunities.d.ts +2 -0
- package/dist/api/resources/opportunities.d.ts.map +1 -1
- package/dist/api/resources/opportunities.js +1 -0
- package/dist/api/resources/opportunities.js.map +1 -1
- package/dist/api/resources/people.d.ts.map +1 -1
- package/dist/api/resources/people.js +4 -1
- package/dist/api/resources/people.js.map +1 -1
- package/dist/api/resources/roles.d.ts +2 -0
- package/dist/api/resources/roles.d.ts.map +1 -1
- package/dist/api/resources/roles.js +1 -1
- package/dist/api/resources/roles.js.map +1 -1
- package/dist/api/resources/sampleData.d.ts +17 -0
- package/dist/api/resources/sampleData.d.ts.map +1 -0
- package/dist/api/resources/sampleData.js +31 -0
- package/dist/api/resources/sampleData.js.map +1 -0
- package/dist/api/resources/webhooks.d.ts.map +1 -1
- package/dist/api/resources/webhooks.js +7 -22
- package/dist/api/resources/webhooks.js.map +1 -1
- package/dist/app/KelpieApp.d.ts.map +1 -1
- package/dist/app/KelpieApp.js +9 -1
- package/dist/app/KelpieApp.js.map +1 -1
- package/dist/components/ActivitiesPanel.d.ts.map +1 -1
- package/dist/components/ActivitiesPanel.js +3 -1
- package/dist/components/ActivitiesPanel.js.map +1 -1
- package/dist/components/ColumnPicker.d.ts +24 -0
- package/dist/components/ColumnPicker.d.ts.map +1 -0
- package/dist/components/ColumnPicker.js +56 -0
- package/dist/components/ColumnPicker.js.map +1 -0
- package/dist/components/CustomFieldsPanel.d.ts +23 -0
- package/dist/components/CustomFieldsPanel.d.ts.map +1 -0
- package/dist/components/CustomFieldsPanel.js +116 -0
- package/dist/components/CustomFieldsPanel.js.map +1 -0
- package/dist/components/DataTable.d.ts +16 -1
- package/dist/components/DataTable.d.ts.map +1 -1
- package/dist/components/DataTable.js +51 -10
- package/dist/components/DataTable.js.map +1 -1
- package/dist/components/DecisionsPanel.d.ts.map +1 -1
- package/dist/components/DecisionsPanel.js +4 -3
- package/dist/components/DecisionsPanel.js.map +1 -1
- package/dist/components/EntitySearch.d.ts.map +1 -1
- package/dist/components/EntitySearch.js +11 -5
- package/dist/components/EntitySearch.js.map +1 -1
- package/dist/components/FormsPanel.d.ts +18 -0
- package/dist/components/FormsPanel.d.ts.map +1 -0
- package/dist/components/FormsPanel.js +37 -0
- package/dist/components/FormsPanel.js.map +1 -0
- package/dist/components/ListsPanel.d.ts +14 -0
- package/dist/components/ListsPanel.d.ts.map +1 -0
- package/dist/components/ListsPanel.js +56 -0
- package/dist/components/ListsPanel.js.map +1 -0
- package/dist/components/NotesPanel.d.ts.map +1 -1
- package/dist/components/NotesPanel.js +6 -5
- package/dist/components/NotesPanel.js.map +1 -1
- package/dist/components/Paginator.d.ts +26 -0
- package/dist/components/Paginator.d.ts.map +1 -0
- package/dist/components/Paginator.js +16 -0
- package/dist/components/Paginator.js.map +1 -0
- package/dist/components/PlanAttention.d.ts +3 -2
- package/dist/components/PlanAttention.d.ts.map +1 -1
- package/dist/components/PlanAttention.js +7 -3
- package/dist/components/PlanAttention.js.map +1 -1
- package/dist/components/PlanPanel.d.ts.map +1 -1
- package/dist/components/PlanPanel.js +2 -1
- package/dist/components/PlanPanel.js.map +1 -1
- package/dist/components/Shell.d.ts.map +1 -1
- package/dist/components/Shell.js +4 -0
- package/dist/components/Shell.js.map +1 -1
- package/dist/components/useHasCustomFields.d.ts +13 -0
- package/dist/components/useHasCustomFields.d.ts.map +1 -0
- package/dist/components/useHasCustomFields.js +16 -0
- package/dist/components/useHasCustomFields.js.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/listView.d.ts +15 -0
- package/dist/lib/listView.d.ts.map +1 -0
- package/dist/lib/listView.js +66 -0
- package/dist/lib/listView.js.map +1 -0
- package/dist/lib/sort.d.ts +43 -0
- package/dist/lib/sort.d.ts.map +1 -0
- package/dist/lib/sort.js +102 -0
- package/dist/lib/sort.js.map +1 -0
- package/dist/pages/CompaniesPage.d.ts.map +1 -1
- package/dist/pages/CompaniesPage.js +88 -3
- package/dist/pages/CompaniesPage.js.map +1 -1
- package/dist/pages/CompanyDetail.d.ts.map +1 -1
- package/dist/pages/CompanyDetail.js +40 -15
- package/dist/pages/CompanyDetail.js.map +1 -1
- package/dist/pages/DealDetail.d.ts.map +1 -1
- package/dist/pages/DealDetail.js +20 -1
- package/dist/pages/DealDetail.js.map +1 -1
- package/dist/pages/DealsPage.d.ts.map +1 -1
- package/dist/pages/DealsPage.js +134 -14
- package/dist/pages/DealsPage.js.map +1 -1
- package/dist/pages/DecisionsPage.d.ts.map +1 -1
- package/dist/pages/DecisionsPage.js +52 -8
- package/dist/pages/DecisionsPage.js.map +1 -1
- package/dist/pages/EnquiriesPage.d.ts +2 -0
- package/dist/pages/EnquiriesPage.d.ts.map +1 -0
- package/dist/pages/EnquiriesPage.js +251 -0
- package/dist/pages/EnquiriesPage.js.map +1 -0
- package/dist/pages/EnquiryDetail.d.ts +2 -0
- package/dist/pages/EnquiryDetail.d.ts.map +1 -0
- package/dist/pages/EnquiryDetail.js +207 -0
- package/dist/pages/EnquiryDetail.js.map +1 -0
- package/dist/pages/EnquiryStageSettingsPage.d.ts +3 -0
- package/dist/pages/EnquiryStageSettingsPage.d.ts.map +1 -0
- package/dist/pages/EnquiryStageSettingsPage.js +34 -0
- package/dist/pages/EnquiryStageSettingsPage.js.map +1 -0
- package/dist/pages/FormDetail.d.ts.map +1 -1
- package/dist/pages/FormDetail.js +19 -1
- package/dist/pages/FormDetail.js.map +1 -1
- package/dist/pages/FormsPage.d.ts.map +1 -1
- package/dist/pages/FormsPage.js +53 -2
- package/dist/pages/FormsPage.js.map +1 -1
- package/dist/pages/FundraisingPage.d.ts.map +1 -1
- package/dist/pages/FundraisingPage.js +116 -14
- package/dist/pages/FundraisingPage.js.map +1 -1
- package/dist/pages/HiringPage.d.ts.map +1 -1
- package/dist/pages/HiringPage.js +27 -4
- package/dist/pages/HiringPage.js.map +1 -1
- package/dist/pages/ListDetail.d.ts +11 -0
- package/dist/pages/ListDetail.d.ts.map +1 -0
- package/dist/pages/ListDetail.js +214 -0
- package/dist/pages/ListDetail.js.map +1 -0
- package/dist/pages/ListsPage.d.ts +9 -0
- package/dist/pages/ListsPage.d.ts.map +1 -0
- package/dist/pages/ListsPage.js +125 -0
- package/dist/pages/ListsPage.js.map +1 -0
- package/dist/pages/OpportunitiesPage.d.ts.map +1 -1
- package/dist/pages/OpportunitiesPage.js +97 -14
- package/dist/pages/OpportunitiesPage.js.map +1 -1
- package/dist/pages/OpportunityDetail.d.ts.map +1 -1
- package/dist/pages/OpportunityDetail.js +64 -3
- package/dist/pages/OpportunityDetail.js.map +1 -1
- package/dist/pages/PartnershipDetail.d.ts.map +1 -1
- package/dist/pages/PartnershipDetail.js +19 -1
- package/dist/pages/PartnershipDetail.js.map +1 -1
- package/dist/pages/PartnershipsPage.d.ts.map +1 -1
- package/dist/pages/PartnershipsPage.js +111 -14
- package/dist/pages/PartnershipsPage.js.map +1 -1
- package/dist/pages/PeoplePage.d.ts.map +1 -1
- package/dist/pages/PeoplePage.js +119 -3
- package/dist/pages/PeoplePage.js.map +1 -1
- package/dist/pages/PersonDetail.d.ts.map +1 -1
- package/dist/pages/PersonDetail.js +67 -5
- package/dist/pages/PersonDetail.js.map +1 -1
- package/dist/pages/PlanningPage.d.ts.map +1 -1
- package/dist/pages/PlanningPage.js +88 -17
- package/dist/pages/PlanningPage.js.map +1 -1
- package/dist/pages/RaiseDetail.d.ts.map +1 -1
- package/dist/pages/RaiseDetail.js +13 -1
- package/dist/pages/RaiseDetail.js.map +1 -1
- package/dist/pages/RoleDetail.d.ts.map +1 -1
- package/dist/pages/RoleDetail.js +5 -4
- package/dist/pages/RoleDetail.js.map +1 -1
- package/dist/pages/SearchPage.d.ts.map +1 -1
- package/dist/pages/SearchPage.js +1 -0
- package/dist/pages/SearchPage.js.map +1 -1
- package/dist/pages/admin/DataPage.d.ts.map +1 -1
- package/dist/pages/admin/DataPage.js +126 -13
- package/dist/pages/admin/DataPage.js.map +1 -1
- package/dist/pages/admin/FieldsPage.d.ts +2 -0
- package/dist/pages/admin/FieldsPage.d.ts.map +1 -0
- package/dist/pages/admin/FieldsPage.js +164 -0
- package/dist/pages/admin/FieldsPage.js.map +1 -0
- package/dist/pages/admin/PrivacyPage.d.ts +9 -0
- package/dist/pages/admin/PrivacyPage.d.ts.map +1 -0
- package/dist/pages/admin/PrivacyPage.js +170 -0
- package/dist/pages/admin/PrivacyPage.js.map +1 -0
- package/dist/pages/admin/WebhookDeliveries.d.ts.map +1 -1
- package/dist/pages/admin/WebhookDeliveries.js +3 -2
- package/dist/pages/admin/WebhookDeliveries.js.map +1 -1
- package/dist/pages/admin/WebhooksPage.d.ts.map +1 -1
- package/dist/pages/admin/WebhooksPage.js +3 -2
- package/dist/pages/admin/WebhooksPage.js.map +1 -1
- package/dist/pages/admin/WorkspaceSettingsPage.d.ts.map +1 -1
- package/dist/pages/admin/WorkspaceSettingsPage.js +45 -2
- package/dist/pages/admin/WorkspaceSettingsPage.js.map +1 -1
- package/dist/pages/dashboard/attention.d.ts.map +1 -1
- package/dist/pages/dashboard/attention.js +3 -0
- package/dist/pages/dashboard/attention.js.map +1 -1
- package/dist/pages/forms/AddFieldMenu.d.ts +17 -0
- package/dist/pages/forms/AddFieldMenu.d.ts.map +1 -0
- package/dist/pages/forms/AddFieldMenu.js +43 -0
- package/dist/pages/forms/AddFieldMenu.js.map +1 -0
- package/dist/pages/forms/EmbedPanel.d.ts +4 -0
- package/dist/pages/forms/EmbedPanel.d.ts.map +1 -1
- package/dist/pages/forms/EmbedPanel.js +62 -3
- package/dist/pages/forms/EmbedPanel.js.map +1 -1
- package/dist/pages/forms/FieldsEditor.d.ts.map +1 -1
- package/dist/pages/forms/FieldsEditor.js +179 -36
- package/dist/pages/forms/FieldsEditor.js.map +1 -1
- package/dist/pages/forms/FormActions.d.ts +6 -0
- package/dist/pages/forms/FormActions.d.ts.map +1 -0
- package/dist/pages/forms/FormActions.js +149 -0
- package/dist/pages/forms/FormActions.js.map +1 -0
- package/dist/pages/forms/FormSettings.d.ts.map +1 -1
- package/dist/pages/forms/FormSettings.js +15 -19
- package/dist/pages/forms/FormSettings.js.map +1 -1
- package/dist/pages/forms/SubmissionDetail.d.ts +2 -0
- package/dist/pages/forms/SubmissionDetail.d.ts.map +1 -0
- package/dist/pages/forms/SubmissionDetail.js +76 -0
- package/dist/pages/forms/SubmissionDetail.js.map +1 -0
- package/dist/pages/forms/SubmissionsTable.d.ts.map +1 -1
- package/dist/pages/forms/SubmissionsTable.js +57 -8
- package/dist/pages/forms/SubmissionsTable.js.map +1 -1
- package/dist/pages/forms/fieldList.d.ts +11 -5
- package/dist/pages/forms/fieldList.d.ts.map +1 -1
- package/dist/pages/forms/fieldList.js +66 -6
- package/dist/pages/forms/fieldList.js.map +1 -1
- package/dist/pages/forms/template.d.ts +17 -0
- package/dist/pages/forms/template.d.ts.map +1 -1
- package/dist/pages/forms/template.js +93 -0
- package/dist/pages/forms/template.js.map +1 -1
- package/dist/pages/handbook/HandbookPage.js +1 -1
- package/dist/pages/hiringDirectory.js +2 -2
- package/dist/pages/onboarding/WorkspaceStepPage.d.ts.map +1 -1
- package/dist/pages/onboarding/WorkspaceStepPage.js +15 -2
- package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -1
- package/dist/pages/positionDirectory.js +2 -2
- package/package.json +2 -2
- package/src/api/resource.ts +155 -32
- package/src/api/resources/companies.ts +7 -1
- package/src/api/resources/consentPurposes.ts +83 -0
- package/src/api/resources/customFields.ts +88 -0
- package/src/api/resources/decisions.ts +3 -0
- package/src/api/resources/emailDomainLinker.ts +43 -0
- package/src/api/resources/enquiries.ts +118 -0
- package/src/api/resources/forms.ts +59 -19
- package/src/api/resources/handbookPages.ts +1 -1
- package/src/api/resources/importJobs.ts +9 -0
- package/src/api/resources/listMembers.ts +173 -0
- package/src/api/resources/lists.ts +61 -0
- package/src/api/resources/opportunities.ts +3 -0
- package/src/api/resources/people.ts +4 -1
- package/src/api/resources/roles.ts +3 -1
- package/src/api/resources/sampleData.ts +57 -0
- package/src/api/resources/webhooks.ts +8 -24
- package/src/app/KelpieApp.tsx +16 -0
- package/src/components/ActivitiesPanel.tsx +3 -10
- package/src/components/ColumnPicker.tsx +124 -0
- package/src/components/CustomFieldsPanel.tsx +330 -0
- package/src/components/DataTable.tsx +89 -10
- package/src/components/DecisionsPanel.tsx +4 -12
- package/src/components/EntitySearch.tsx +12 -5
- package/src/components/FormsPanel.tsx +86 -0
- package/src/components/ListsPanel.tsx +176 -0
- package/src/components/NotesPanel.tsx +6 -14
- package/src/components/Paginator.tsx +78 -0
- package/src/components/PlanAttention.tsx +20 -3
- package/src/components/PlanPanel.tsx +2 -10
- package/src/components/Shell.tsx +4 -0
- package/src/components/useHasCustomFields.ts +18 -0
- package/src/index.ts +10 -1
- package/src/lib/listView.ts +149 -0
- package/src/lib/sort.ts +143 -0
- package/src/pages/CompaniesPage.tsx +125 -11
- package/src/pages/CompanyDetail.tsx +98 -63
- package/src/pages/DealDetail.tsx +34 -0
- package/src/pages/DealsPage.tsx +178 -24
- package/src/pages/DecisionsPage.tsx +75 -18
- package/src/pages/EnquiriesPage.tsx +434 -0
- package/src/pages/EnquiryDetail.tsx +554 -0
- package/src/pages/EnquiryStageSettingsPage.tsx +63 -0
- package/src/pages/FormDetail.tsx +23 -1
- package/src/pages/FormsPage.tsx +81 -17
- package/src/pages/FundraisingPage.tsx +152 -24
- package/src/pages/HiringPage.tsx +39 -11
- package/src/pages/ListDetail.tsx +470 -0
- package/src/pages/ListsPage.tsx +281 -0
- package/src/pages/OpportunitiesPage.tsx +130 -24
- package/src/pages/OpportunityDetail.tsx +168 -2
- package/src/pages/PartnershipDetail.tsx +35 -0
- package/src/pages/PartnershipsPage.tsx +149 -24
- package/src/pages/PeoplePage.tsx +157 -11
- package/src/pages/PersonDetail.tsx +157 -6
- package/src/pages/PlanningPage.tsx +259 -29
- package/src/pages/RaiseDetail.tsx +24 -0
- package/src/pages/RoleDetail.tsx +21 -26
- package/src/pages/SearchPage.tsx +1 -0
- package/src/pages/admin/DataPage.tsx +324 -13
- package/src/pages/admin/FieldsPage.tsx +455 -0
- package/src/pages/admin/PrivacyPage.tsx +461 -0
- package/src/pages/admin/WebhookDeliveries.tsx +10 -15
- package/src/pages/admin/WebhooksPage.tsx +14 -19
- package/src/pages/admin/WorkspaceSettingsPage.tsx +134 -2
- package/src/pages/dashboard/attention.ts +3 -0
- package/src/pages/forms/AddFieldMenu.tsx +121 -0
- package/src/pages/forms/EmbedPanel.tsx +163 -2
- package/src/pages/forms/FieldsEditor.tsx +539 -165
- package/src/pages/forms/FormActions.tsx +552 -0
- package/src/pages/forms/FormSettings.tsx +29 -70
- package/src/pages/forms/SubmissionDetail.tsx +249 -0
- package/src/pages/forms/SubmissionsTable.tsx +112 -26
- package/src/pages/forms/fieldList.ts +68 -5
- package/src/pages/forms/template.ts +103 -0
- package/src/pages/handbook/HandbookPage.tsx +1 -1
- package/src/pages/hiringDirectory.ts +2 -2
- package/src/pages/onboarding/WorkspaceStepPage.tsx +31 -3
- package/src/pages/positionDirectory.ts +2 -2
- package/src/styles.css +3 -3
|
@@ -1,42 +1,38 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { FORM_STATUSES } from '@kelpie/schemas';
|
|
3
|
-
import { usePipelineStages } from '../../api/resources/pipelineStages.js';
|
|
4
3
|
import { useUpdateForm } from '../../api/resources/forms.js';
|
|
5
4
|
import { ErrorPanel } from '../../components/QueryState.js';
|
|
6
5
|
import { SectionHeader } from '../../components/SectionHeader.js';
|
|
7
6
|
/**
|
|
8
|
-
*
|
|
7
|
+
* The form's identity: status, public heading, thank-you copy, and the public key.
|
|
9
8
|
*
|
|
10
9
|
* Every control commits on change, because each one is a single field and the
|
|
11
10
|
* optimistic update in `createResourceHooks` puts the old value back if the
|
|
12
11
|
* PATCH is refused. The field list is the exception and has its own Save; see
|
|
13
|
-
* `FieldsEditor`.
|
|
12
|
+
* `FieldsEditor`. What the form *does* on submit — create records, tag them,
|
|
13
|
+
* add to lists, attach the submitter — lives on the Actions tab.
|
|
14
14
|
*/
|
|
15
15
|
const inputClass = 'w-full rounded-md border border-border bg-surface-raised px-3 py-2 text-[13px] outline-none focus:border-accent focus:ring-2 focus:ring-accent/20';
|
|
16
16
|
export function FormSettings({ form }) {
|
|
17
17
|
const updateForm = useUpdateForm();
|
|
18
|
-
const stages = usePipelineStages('deal');
|
|
19
18
|
const patch = (changes) => {
|
|
20
19
|
updateForm.run({ id: form.id, changes });
|
|
21
20
|
};
|
|
22
|
-
|
|
23
|
-
const hasCompanyField = form.fields.some((field) => field.mapTo.startsWith('company.'));
|
|
24
|
-
return (_jsxs("div", { className: "max-w-xl space-y-4", children: [_jsx(SectionHeader, { title: "Settings", description: "Status, thank-you copy, and deal creation." }), updateForm.error !== null && _jsx(ErrorPanel, { error: updateForm.error }), _jsxs(Labelled, { label: "Status", children: [_jsx("select", { className: inputClass, value: form.status, onChange: (event) => {
|
|
21
|
+
return (_jsxs("div", { className: "max-w-xl space-y-4", children: [_jsx(SectionHeader, { title: "Settings", description: "Status, the public form title, thank-you copy, and the public key." }), updateForm.error !== null && _jsx(ErrorPanel, { error: updateForm.error }), _jsxs(Labelled, { label: "Status", children: [_jsx("select", { className: inputClass, value: form.status, onChange: (event) => {
|
|
25
22
|
patch({ status: event.target.value });
|
|
26
|
-
}, children: FORM_STATUSES.map((status) => (_jsx("option", { value: status, children: status }, status))) }), _jsx(Hint, { children: "A paused form still renders where it is embedded, and says it is closed." })] }), _jsxs(Labelled, { label: "
|
|
23
|
+
}, children: FORM_STATUSES.map((status) => (_jsx("option", { value: status, children: status }, status))) }), _jsx(Hint, { children: "A paused form still renders where it is embedded, and says it is closed." })] }), _jsxs(Labelled, { label: "Form title", children: [_jsx("input", { className: inputClass, defaultValue: form.title, onBlur: (event) => {
|
|
24
|
+
const next = event.target.value.trim();
|
|
25
|
+
if (next.length > 0 && next !== form.title) {
|
|
26
|
+
patch({ title: next });
|
|
27
|
+
}
|
|
28
|
+
else if (next.length === 0) {
|
|
29
|
+
event.target.value = form.title;
|
|
30
|
+
}
|
|
31
|
+
} }), _jsx(Hint, { children: "Shown as the heading on the hosted and embedded form. Defaults to the form name." })] }), _jsxs(Labelled, { label: "Thank-you message", children: [_jsx("textarea", { className: `${inputClass} min-h-[72px]`, defaultValue: form.thankYouMessage, onBlur: (event) => {
|
|
27
32
|
if (event.target.value !== form.thankYouMessage) {
|
|
28
33
|
patch({ thankYouMessage: event.target.value });
|
|
29
34
|
}
|
|
30
|
-
} }), _jsx(Hint, { children: "Shown in place of the form once a submission lands." })] }), _jsxs("
|
|
31
|
-
patch({ createDeal: event.target.checked });
|
|
32
|
-
} }), "Create a Deal on submit"] }), !hasCompanyField && (_jsx("p", { className: "text-[12px] text-danger", children: "Add a field mapped to Company \u00B7 name or Company \u00B7 domain first. A deal belongs to a company, and this form collects neither." })), form.createDeal && (_jsxs(_Fragment, { children: [_jsxs(Labelled, { label: "Deal stage", children: [_jsxs("select", { className: inputClass, value: form.dealStageId ?? '', onChange: (event) => {
|
|
33
|
-
patch({ dealStageId: event.target.value.length === 0 ? null : event.target.value });
|
|
34
|
-
}, children: [_jsx("option", { value: "", children: "First open stage" }), stages.records.map((stage) => (_jsx("option", { value: stage.id, children: stage.label }, stage.id)))] }), _jsx(Hint, { children: "Leaving this on the first open stage follows the board, so reordering it does not strand old forms on a column that moved." })] }), _jsxs(Labelled, { label: "Deal name template", children: [_jsx("input", { className: inputClass, defaultValue: form.dealNameTemplate ?? '', onBlur: (event) => {
|
|
35
|
-
const next = event.target.value.length === 0 ? null : event.target.value;
|
|
36
|
-
if (next !== form.dealNameTemplate) {
|
|
37
|
-
patch({ dealNameTemplate: next });
|
|
38
|
-
}
|
|
39
|
-
} }), _jsx(Hint, { children: 'Tokens: {{company.name}} and {{person.name}}. A field mapped to Deal · name wins over this.' })] })] }))] }), _jsxs(Labelled, { label: "Public key", children: [_jsx("input", { className: `${inputClass} font-mono text-[12px]`, value: form.publicKey, readOnly: true }), _jsx(Hint, { children: "The only credential the public submit takes. It never changes." })] })] }));
|
|
35
|
+
} }), _jsx(Hint, { children: "Shown in place of the form once a submission lands." })] }), _jsxs("p", { className: "rounded-md border border-border bg-surface px-3 py-2 text-[12px] text-ink-muted", children: ["Deal, opportunity, partnership, tags, lists, and attached records live on the", ' ', _jsx("strong", { className: "font-medium text-ink", children: "Actions" }), " tab."] }), _jsxs(Labelled, { label: "Public key", children: [_jsx("input", { className: `${inputClass} font-mono text-[12px]`, value: form.publicKey, readOnly: true }), _jsx(Hint, { children: "The only credential the public submit takes. It never changes." })] })] }));
|
|
40
36
|
}
|
|
41
37
|
function Labelled({ label, children, }) {
|
|
42
38
|
return (_jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1.5 block text-[12px] font-medium text-ink", children: label }), children] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSettings.js","sourceRoot":"","sources":["../../../src/pages/forms/FormSettings.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"FormSettings.js","sourceRoot":"","sources":["../../../src/pages/forms/FormSettings.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubmissionDetail.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/SubmissionDetail.tsx"],"names":[],"mappings":"AAuBA,wBAAgB,gBAAgB,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CA+CpD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { Link, useParams } from 'react-router';
|
|
4
|
+
import { useTimezone } from '../../api/resources/account.js';
|
|
5
|
+
import { useCompanies } from '../../api/resources/companies.js';
|
|
6
|
+
import { useForm, useFormSubmission } from '../../api/resources/forms.js';
|
|
7
|
+
import { usePeople } from '../../api/resources/people.js';
|
|
8
|
+
import { ErrorPanel, LoadingPanel, NotFoundPanel } from '../../components/QueryState.js';
|
|
9
|
+
import { SectionHeader } from '../../components/SectionHeader.js';
|
|
10
|
+
import { formatDateTime } from '../../lib/dates.js';
|
|
11
|
+
/**
|
|
12
|
+
* One submission: every answer, the records it linked, and the action log.
|
|
13
|
+
*
|
|
14
|
+
* Nested under the form so the field labels (which live on the form, not the
|
|
15
|
+
* submission) are at hand, and so "back" returns to that form's Submissions tab
|
|
16
|
+
* rather than the forms list.
|
|
17
|
+
*/
|
|
18
|
+
/** `api.md`: `?limit=` maxes out at 200. */
|
|
19
|
+
const MAX_PAGE = 200;
|
|
20
|
+
export function SubmissionDetail() {
|
|
21
|
+
const { id: formId, submissionId } = useParams();
|
|
22
|
+
const form = useForm(formId);
|
|
23
|
+
const submission = useFormSubmission(formId, submissionId);
|
|
24
|
+
const people = usePeople({ limit: MAX_PAGE });
|
|
25
|
+
const companies = useCompanies({ limit: MAX_PAGE });
|
|
26
|
+
const timezone = useTimezone();
|
|
27
|
+
const nameById = useMemo(() => new Map([...people.records, ...companies.records].map((record) => [record.id, record.name])), [people.records, companies.records]);
|
|
28
|
+
if (form.isNotFound || submission.isNotFound) {
|
|
29
|
+
return (_jsx(NotFoundPanel, { label: "Submission", backTo: formId === undefined ? '/forms' : `/forms/${formId}` }));
|
|
30
|
+
}
|
|
31
|
+
if (form.error !== null) {
|
|
32
|
+
return _jsx(ErrorPanel, { error: form.error });
|
|
33
|
+
}
|
|
34
|
+
if (submission.error !== null) {
|
|
35
|
+
return _jsx(ErrorPanel, { error: submission.error });
|
|
36
|
+
}
|
|
37
|
+
if (form.isLoading ||
|
|
38
|
+
submission.isLoading ||
|
|
39
|
+
form.record === undefined ||
|
|
40
|
+
submission.record === undefined) {
|
|
41
|
+
return _jsx(LoadingPanel, { label: "Loading submission\u2026" });
|
|
42
|
+
}
|
|
43
|
+
return (_jsx(SubmissionDetailView, { form: form.record, submission: submission.record, nameById: nameById, timezone: timezone }));
|
|
44
|
+
}
|
|
45
|
+
function SubmissionDetailView({ form, submission, nameById, timezone, }) {
|
|
46
|
+
const answers = form.fields.map((field) => ({
|
|
47
|
+
field,
|
|
48
|
+
value: displayAnswer(field, submission.answers[field.id]),
|
|
49
|
+
}));
|
|
50
|
+
return (_jsxs("div", { className: "animate-fade-in mx-auto max-w-2xl", children: [_jsxs(Link, { to: `/forms/${form.id}`, className: "mb-4 inline-flex text-[12px] font-medium text-ink-muted transition hover:text-accent", children: ["\u2190 ", form.name] }), _jsx(SectionHeader, { title: "Submission", description: `Received ${formatDateTime(submission.submittedAt, timezone)}.` }), _jsxs("div", { className: "mt-6 space-y-6", children: [_jsxs("section", { children: [_jsx("h3", { className: "mb-2 text-[11px] font-semibold uppercase tracking-wide text-ink-faint", children: "Answers" }), _jsx("dl", { className: "divide-y divide-border rounded-md border border-border", children: answers.map(({ field, value }) => (_jsxs("div", { className: "grid gap-0.5 px-3 py-2.5 sm:grid-cols-[10rem_1fr] sm:gap-3", children: [_jsxs("dt", { className: "text-[12px] font-medium text-ink-muted", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-danger", children: "*" })] }), _jsx("dd", { className: "whitespace-pre-wrap text-[13px] text-ink", children: value === null ? _jsx("span", { className: "text-ink-faint", children: "\u2014" }) : value })] }, field.id))) })] }), _jsxs("section", { children: [_jsx("h3", { className: "mb-2 text-[11px] font-semibold uppercase tracking-wide text-ink-faint", children: "Records" }), _jsxs("ul", { className: "space-y-1.5 rounded-md border border-border px-3 py-2.5 text-[13px]", children: [_jsx(RecordRow, { label: "Person", to: submission.personId === null ? null : `/people/${submission.personId}`, text: submission.personId === null
|
|
51
|
+
? null
|
|
52
|
+
: (nameById.get(submission.personId) ?? 'Person') }), _jsx(RecordRow, { label: "Company", to: submission.companyId === null ? null : `/companies/${submission.companyId}`, text: submission.companyId === null
|
|
53
|
+
? null
|
|
54
|
+
: (nameById.get(submission.companyId) ?? 'Company') }), _jsx(RecordRow, { label: "Deal", to: submission.dealId === null ? null : `/deals/${submission.dealId}`, text: submission.dealId === null ? null : 'Open deal' }), _jsx(RecordRow, { label: "Opportunity", to: submission.opportunityId === null
|
|
55
|
+
? null
|
|
56
|
+
: `/opportunities/${submission.opportunityId}`, text: submission.opportunityId === null ? null : 'Open opportunity' }), _jsx(RecordRow, { label: "Partnership", to: submission.partnershipId === null
|
|
57
|
+
? null
|
|
58
|
+
: `/partnerships/${submission.partnershipId}`, text: submission.partnershipId === null ? null : 'Open partnership' }), _jsx(RecordRow, { label: "Enquiry", to: submission.enquiryId === null ? null : `/enquiries/${submission.enquiryId}`, text: submission.enquiryId === null ? null : 'Open enquiry' })] })] }), submission.actionLog.length > 0 && (_jsxs("section", { children: [_jsx("h3", { className: "mb-2 text-[11px] font-semibold uppercase tracking-wide text-ink-faint", children: "Action log" }), _jsx("ul", { className: "divide-y divide-border rounded-md border border-border", children: submission.actionLog.map((entry, index) => (_jsxs("li", { className: "px-3 py-2.5", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-2", children: [_jsx("span", { className: "font-mono text-[12px] text-ink", children: entry.action }), _jsx(ActionStatus, { status: entry.status })] }), entry.detail.length > 0 && (_jsx("p", { className: "mt-1 text-[12px] text-ink-muted", children: entry.detail }))] }, `${entry.action}-${String(index)}`))) })] }))] })] }));
|
|
59
|
+
}
|
|
60
|
+
function RecordRow({ label, to, text, }) {
|
|
61
|
+
return (_jsxs("li", { className: "flex items-baseline gap-2 py-0.5", children: [_jsx("span", { className: "w-28 shrink-0 text-[12px] font-medium text-ink-muted", children: label }), to === null || text === null ? (_jsx("span", { className: "text-ink-faint", children: "\u2014" })) : (_jsx(Link, { to: to, className: "text-accent hover:underline", children: text }))] }));
|
|
62
|
+
}
|
|
63
|
+
function ActionStatus({ status, }) {
|
|
64
|
+
const className = status === 'ok' ? 'text-success' : status === 'error' ? 'text-danger' : 'text-ink-faint';
|
|
65
|
+
return _jsx("span", { className: `text-[11px] font-medium uppercase ${className}`, children: status });
|
|
66
|
+
}
|
|
67
|
+
function displayAnswer(field, answer) {
|
|
68
|
+
if (answer === undefined || answer.trim().length === 0) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
if (field.type === 'select') {
|
|
72
|
+
return field.options.find((option) => option.key === answer)?.value ?? answer;
|
|
73
|
+
}
|
|
74
|
+
return answer;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=SubmissionDetail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubmissionDetail.js","sourceRoot":"","sources":["../../../src/pages/forms/SubmissionDetail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubmissionsTable.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/SubmissionsTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"SubmissionsTable.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/SubmissionsTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAA6B,MAAM,iBAAiB,CAAA;AAItF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AA2B7D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAA;CACvD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAqGhG"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
|
-
import { Link } from 'react-router';
|
|
3
|
+
import { Link, useNavigate } from 'react-router';
|
|
4
4
|
import { useTimezone } from '../../api/resources/account.js';
|
|
5
5
|
import { useCompanies } from '../../api/resources/companies.js';
|
|
6
6
|
import { usePeople } from '../../api/resources/people.js';
|
|
7
7
|
import { DataTable } from '../../components/DataTable.js';
|
|
8
|
+
import { Paginator } from '../../components/Paginator.js';
|
|
8
9
|
import { ErrorPanel, LoadingPanel } from '../../components/QueryState.js';
|
|
9
10
|
import { SectionHeader } from '../../components/SectionHeader.js';
|
|
10
11
|
import { formatDateTime } from '../../lib/dates.js';
|
|
@@ -15,10 +16,15 @@ import { formatDateTime } from '../../lib/dates.js';
|
|
|
15
16
|
* same way the Decisions page does it: `api.md` has no include-expansion, and
|
|
16
17
|
* neither list takes a set of bare ids. A record past those pages is still
|
|
17
18
|
* linked, by its type rather than its name, which beats a raw id.
|
|
19
|
+
*
|
|
20
|
+
* A row opens `/forms/:id/submissions/:submissionId`. Inline person/company
|
|
21
|
+
* links still navigate, and stop the row click so opening a person does not
|
|
22
|
+
* also open the submission.
|
|
18
23
|
*/
|
|
19
24
|
/** `api.md`: `?limit=` maxes out at 200. */
|
|
20
25
|
const MAX_PAGE = 200;
|
|
21
26
|
export function SubmissionsTable({ form, submissions }) {
|
|
27
|
+
const navigate = useNavigate();
|
|
22
28
|
const people = usePeople({ limit: MAX_PAGE });
|
|
23
29
|
const companies = useCompanies({ limit: MAX_PAGE });
|
|
24
30
|
const timezone = useTimezone();
|
|
@@ -41,10 +47,18 @@ export function SubmissionsTable({ form, submissions }) {
|
|
|
41
47
|
render: (submission) => (_jsx(RecordLink, { to: "/companies", id: submission.companyId, name: nameById, fallback: "Company" })),
|
|
42
48
|
},
|
|
43
49
|
{
|
|
44
|
-
key: '
|
|
45
|
-
header: '
|
|
46
|
-
className: 'w-
|
|
47
|
-
render: (submission) =>
|
|
50
|
+
key: 'created',
|
|
51
|
+
header: 'Created',
|
|
52
|
+
className: 'w-40',
|
|
53
|
+
render: (submission) => (_jsxs("div", { className: "flex flex-wrap gap-2 text-[12px]", children: [_jsx(CreatedLink, { to: `/deals/${submission.dealId ?? ''}`, id: submission.dealId, label: "deal" }), _jsx(CreatedLink, { to: `/opportunities/${submission.opportunityId ?? ''}`, id: submission.opportunityId, label: "opp" }), _jsx(CreatedLink, { to: `/partnerships/${submission.partnershipId ?? ''}`, id: submission.partnershipId, label: "prt" }), submission.dealId === null &&
|
|
54
|
+
submission.opportunityId === null &&
|
|
55
|
+
submission.partnershipId === null && _jsx("span", { className: "text-ink-faint", children: "\u2014" })] })),
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
key: 'actions',
|
|
59
|
+
header: 'Actions',
|
|
60
|
+
className: 'w-32',
|
|
61
|
+
render: (submission) => _jsx(ActionLogChip, { entries: submission.actionLog }),
|
|
48
62
|
},
|
|
49
63
|
{
|
|
50
64
|
key: 'answers',
|
|
@@ -58,14 +72,49 @@ export function SubmissionsTable({ form, submissions }) {
|
|
|
58
72
|
if (submissions.isLoading) {
|
|
59
73
|
return _jsx(LoadingPanel, { label: "Loading submissions\u2026" });
|
|
60
74
|
}
|
|
61
|
-
return (_jsxs("div", { children: [_jsx(SectionHeader, { title: "Submissions", description: "Inbound answers, and the records each one created or matched." }), _jsx(
|
|
75
|
+
return (_jsxs("div", { children: [_jsx(SectionHeader, { title: "Submissions", description: "Inbound answers, and the records each one created or matched. Click a row to open it." }), _jsx(Paginator, { list: submissions, placement: "top" }), _jsx(DataTable, { columns: columns, rows: submissions.records, getRowId: (submission) => submission.id, emptyMessage: "No submissions yet", onRowClick: (submission) => {
|
|
76
|
+
void navigate(`/forms/${form.id}/submissions/${submission.id}`);
|
|
77
|
+
} }), _jsx(Paginator, { list: submissions })] }));
|
|
78
|
+
}
|
|
79
|
+
function CreatedLink({ to, id, label, }) {
|
|
80
|
+
if (id === null) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return (_jsx(Link, { to: to, className: "text-accent hover:underline", onClick: (event) => {
|
|
84
|
+
event.stopPropagation();
|
|
85
|
+
}, children: label }));
|
|
86
|
+
}
|
|
87
|
+
function ActionLogChip({ entries, }) {
|
|
88
|
+
if (entries.length === 0) {
|
|
89
|
+
return _jsx("span", { className: "text-ink-faint", children: "\u2014" });
|
|
90
|
+
}
|
|
91
|
+
const errors = entries.filter((entry) => entry.status === 'error').length;
|
|
92
|
+
const skipped = entries.filter((entry) => entry.status === 'skipped').length;
|
|
93
|
+
const ok = entries.length - errors - skipped;
|
|
94
|
+
const detail = entries
|
|
95
|
+
.map((entry) => `${entry.action}: ${entry.status}${entry.detail.length > 0 ? ` — ${entry.detail}` : ''}`)
|
|
96
|
+
.join('\n');
|
|
97
|
+
return (_jsxs("span", { title: detail, className: "inline-flex gap-1 font-mono text-[11px] text-ink-muted", children: [ok > 0 && _jsxs("span", { className: "text-success", children: ["\u2713", ok] }), skipped > 0 && _jsxs("span", { className: "text-ink-faint", children: ["\u2212", skipped] }), errors > 0 && _jsxs("span", { className: "text-danger", children: ["!", errors] })] }));
|
|
62
98
|
}
|
|
63
99
|
function RecordLink({ to, id, name, fallback, }) {
|
|
64
100
|
if (id === null) {
|
|
65
101
|
return _jsx("span", { className: "text-ink-faint", children: "\u2014" });
|
|
66
102
|
}
|
|
67
|
-
return (_jsx(Link, { to: `${to}/${id}`, className: "text-accent hover:underline",
|
|
103
|
+
return (_jsx(Link, { to: `${to}/${id}`, className: "text-accent hover:underline", onClick: (event) => {
|
|
104
|
+
event.stopPropagation();
|
|
105
|
+
}, children: name.get(id) ?? fallback }));
|
|
68
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Every target whose answer the row already shows in its own column: the Person
|
|
109
|
+
* link. A form asks for a name as one box or as a first and last pair, and
|
|
110
|
+
* either way the answers are what the Person column is already displaying.
|
|
111
|
+
*/
|
|
112
|
+
const PERSON_COLUMN_TARGETS = new Set([
|
|
113
|
+
'person.name',
|
|
114
|
+
'person.first_name',
|
|
115
|
+
'person.last_name',
|
|
116
|
+
'person.email',
|
|
117
|
+
]);
|
|
69
118
|
/**
|
|
70
119
|
* The first two answers that are not already a column.
|
|
71
120
|
*
|
|
@@ -75,7 +124,7 @@ function RecordLink({ to, id, name, fallback, }) {
|
|
|
75
124
|
*/
|
|
76
125
|
function summarise(form, submission) {
|
|
77
126
|
const parts = form.fields
|
|
78
|
-
.filter((field) =>
|
|
127
|
+
.filter((field) => !PERSON_COLUMN_TARGETS.has(field.mapTo))
|
|
79
128
|
.map((field) => {
|
|
80
129
|
const answer = submission.answers[field.id];
|
|
81
130
|
if (answer === undefined || answer.trim().length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubmissionsTable.js","sourceRoot":"","sources":["../../../src/pages/forms/SubmissionsTable.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"SubmissionsTable.js","sourceRoot":"","sources":["../../../src/pages/forms/SubmissionsTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -16,12 +16,12 @@ export interface EditableField extends FormFieldInput {
|
|
|
16
16
|
readonly id: string;
|
|
17
17
|
}
|
|
18
18
|
export declare const FIELD_TYPE_OPTIONS: {
|
|
19
|
-
value: "email" | "select" | "text" | "textarea";
|
|
20
|
-
label: "email" | "select" | "text" | "textarea";
|
|
19
|
+
value: "consent" | "email" | "notice" | "select" | "text" | "textarea";
|
|
20
|
+
label: "consent" | "email" | "notice" | "select" | "text" | "textarea";
|
|
21
21
|
}[];
|
|
22
22
|
export declare const MAP_TARGET_OPTIONS: {
|
|
23
|
-
value: "company.domain" | "company.name" | "deal.name" | "person.email" | "person.name" | "position.title" | "submission";
|
|
24
|
-
label: "company.domain" | "company.name" | "deal.name" | "person.email" | "person.name" | "position.title" | "submission";
|
|
23
|
+
value: "company.domain" | "company.name" | "deal.name" | "enquiry.name" | "opportunity.name" | "partnership.name" | "person.consent" | "person.email" | "person.first_name" | "person.last_name" | "person.name" | "position.title" | "submission";
|
|
24
|
+
label: "company.domain" | "company.name" | "deal.name" | "enquiry.name" | "opportunity.name" | "partnership.name" | "person.consent" | "person.email" | "person.first_name" | "person.last_name" | "person.name" | "position.title" | "submission";
|
|
25
25
|
}[];
|
|
26
26
|
/** Reads a saved form into the shape the builder edits. */
|
|
27
27
|
export declare function toEditableFields(form: Form): EditableField[];
|
|
@@ -65,6 +65,12 @@ export interface FieldListProblems {
|
|
|
65
65
|
export declare function findProblems(fields: readonly EditableField[], createsDeal: boolean): FieldListProblems;
|
|
66
66
|
/** True when the list is one the API will accept. */
|
|
67
67
|
export declare function isUsable(problems: FieldListProblems): boolean;
|
|
68
|
-
/** The types a mapping can sensibly render as.
|
|
68
|
+
/** The types a mapping can sensibly render as. */
|
|
69
69
|
export declare function typeForTarget(target: FormFieldMapTarget, current: FormFieldType): FormFieldType;
|
|
70
|
+
/**
|
|
71
|
+
* The CRM presets whose mapping no current field carries: what "Add field" may
|
|
72
|
+
* still offer. A CRM target may appear once, so a preset leaves the menu the
|
|
73
|
+
* moment a field takes its target and returns when that field releases it.
|
|
74
|
+
*/
|
|
75
|
+
export declare function unusedCrmPresets(fields: readonly EditableField[]): readonly FormFieldInput[];
|
|
70
76
|
//# sourceMappingURL=fieldList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldList.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/fieldList.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fieldList.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/fieldList.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAI9F;;;;;;;;;;GAUG;AAEH,2EAA2E;AAC3E,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,qEAAqE;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,eAAO,MAAM,kBAAkB;;;GAAiE,CAAA;AAEhG,eAAO,MAAM,kBAAkB;;;GAG5B,CAAA;AAEH,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,EAAE,CAa5D;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,cAAc,EAAE,CAEhF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,CAEnF;AAQD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAC9B,aAAa,EAAE,CAoCjB;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CACzB,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,aAAa,EAAE,CAQjB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,EAAE,CAEzF;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,aAAa,EAAE,CAkBjB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9C;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,WAAW,EAAE,OAAO,GACnB,iBAAiB,CA8DnB;AAED,qDAAqD;AACrD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAE7D;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,CAM/F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,cAAc,EAAE,CAI5F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FORM_FIELD_MAP_TARGETS, FORM_FIELD_TYPES, PERSON_EMAIL_TARGET, } from '@kelpie/schemas';
|
|
2
|
-
import { NEW_SELECT_OPTIONS } from './template.js';
|
|
1
|
+
import { FORM_FIELD_MAP_TARGETS, FORM_FIELD_TYPES, PERSON_CONSENT_TARGET, PERSON_EMAIL_TARGET, } from '@kelpie/schemas';
|
|
2
|
+
import { CRM_FIELD_PRESETS, NEW_SELECT_OPTIONS } from './template.js';
|
|
3
3
|
export const FIELD_TYPE_OPTIONS = FORM_FIELD_TYPES.map((type) => ({ value: type, label: type }));
|
|
4
4
|
export const MAP_TARGET_OPTIONS = FORM_FIELD_MAP_TARGETS.map((target) => ({
|
|
5
5
|
value: target,
|
|
@@ -15,6 +15,9 @@ export function toEditableFields(form) {
|
|
|
15
15
|
mapTo: field.mapTo,
|
|
16
16
|
options: field.options.map((option) => ({ ...option })),
|
|
17
17
|
placeholder: field.placeholder,
|
|
18
|
+
statement: field.statement,
|
|
19
|
+
consentPurposeIds: [...field.consentPurposeIds],
|
|
20
|
+
consentPurposeLabels: { ...field.consentPurposeLabels },
|
|
18
21
|
}));
|
|
19
22
|
}
|
|
20
23
|
/** Strips the local ids back off. Ids are assigned server-side on every write. */
|
|
@@ -48,14 +51,29 @@ export function editField(fields, id, change) {
|
|
|
48
51
|
return fields.map((field) => {
|
|
49
52
|
if (field.id !== id) {
|
|
50
53
|
// Only one field may carry a CRM target, so taking one releases it
|
|
51
|
-
// wherever it was. `submission`
|
|
54
|
+
// wherever it was. `submission` and `person.consent` are the targets
|
|
55
|
+
// that may repeat — consent's uniqueness is per purpose, not per
|
|
56
|
+
// target, and is enforced when the purpose is picked.
|
|
52
57
|
return change.mapTo !== undefined &&
|
|
53
58
|
change.mapTo !== 'submission' &&
|
|
59
|
+
change.mapTo !== PERSON_CONSENT_TARGET &&
|
|
54
60
|
field.mapTo === change.mapTo
|
|
55
61
|
? { ...field, mapTo: 'submission' }
|
|
56
62
|
: field;
|
|
57
63
|
}
|
|
58
64
|
const next = { ...field, ...change };
|
|
65
|
+
// A consent or notice field must map to person.consent; anything else
|
|
66
|
+
// clears any lingering purpose list.
|
|
67
|
+
const isConsentLike = next.type === 'consent' || next.type === 'notice';
|
|
68
|
+
if (isConsentLike && next.mapTo !== PERSON_CONSENT_TARGET) {
|
|
69
|
+
return { ...withoutOptions(next), mapTo: PERSON_CONSENT_TARGET };
|
|
70
|
+
}
|
|
71
|
+
if (next.mapTo === PERSON_CONSENT_TARGET && !isConsentLike) {
|
|
72
|
+
return { ...withoutOptions(next), type: 'consent' };
|
|
73
|
+
}
|
|
74
|
+
if (!isConsentLike && (next.consentPurposeIds ?? []).length > 0) {
|
|
75
|
+
return withoutOptions({ ...next, consentPurposeIds: [] });
|
|
76
|
+
}
|
|
59
77
|
if (next.type !== 'select') {
|
|
60
78
|
return withoutOptions(next);
|
|
61
79
|
}
|
|
@@ -92,6 +110,7 @@ export function findProblems(fields, createsDeal) {
|
|
|
92
110
|
const list = [];
|
|
93
111
|
const byField = new Map();
|
|
94
112
|
const seen = new Set();
|
|
113
|
+
const usedConsentPurposes = new Set();
|
|
95
114
|
if (!fields.some((field) => field.mapTo === PERSON_EMAIL_TARGET)) {
|
|
96
115
|
list.push(`One field must map to ${PERSON_EMAIL_TARGET}, or no submission can be processed.`);
|
|
97
116
|
}
|
|
@@ -99,7 +118,34 @@ export function findProblems(fields, createsDeal) {
|
|
|
99
118
|
list.push('A form that creates deals needs a company field for the deal to belong to.');
|
|
100
119
|
}
|
|
101
120
|
for (const field of fields) {
|
|
102
|
-
if (field.mapTo
|
|
121
|
+
if (field.mapTo === PERSON_CONSENT_TARGET) {
|
|
122
|
+
const purposes = field.consentPurposeIds ?? [];
|
|
123
|
+
if (field.type === 'notice' && (field.statement ?? '').trim().length === 0) {
|
|
124
|
+
byField.set(field.id, 'A notice field needs a statement.');
|
|
125
|
+
}
|
|
126
|
+
if (purposes.length === 0) {
|
|
127
|
+
byField.set(field.id, field.type === 'notice'
|
|
128
|
+
? 'Pick at least one purpose this notice grants implicitly.'
|
|
129
|
+
: 'Pick at least one consent purpose this field offers.');
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const localSeen = new Set();
|
|
133
|
+
for (const purposeId of purposes) {
|
|
134
|
+
if (localSeen.has(purposeId)) {
|
|
135
|
+
byField.set(field.id, 'This field lists a purpose twice.');
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
localSeen.add(purposeId);
|
|
139
|
+
if (usedConsentPurposes.has(purposeId)) {
|
|
140
|
+
byField.set(field.id, 'Another consent field already offers this purpose.');
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
usedConsentPurposes.add(purposeId);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (field.mapTo !== 'submission') {
|
|
103
149
|
if (seen.has(field.mapTo)) {
|
|
104
150
|
byField.set(field.id, `Another field already maps to ${field.mapTo}.`);
|
|
105
151
|
}
|
|
@@ -119,8 +165,22 @@ export function findProblems(fields, createsDeal) {
|
|
|
119
165
|
export function isUsable(problems) {
|
|
120
166
|
return problems.list.length === 0 && problems.byField.size === 0;
|
|
121
167
|
}
|
|
122
|
-
/** The types a mapping can sensibly render as.
|
|
168
|
+
/** The types a mapping can sensibly render as. */
|
|
123
169
|
export function typeForTarget(target, current) {
|
|
124
|
-
|
|
170
|
+
if (target === PERSON_EMAIL_TARGET)
|
|
171
|
+
return 'email';
|
|
172
|
+
if (target === PERSON_CONSENT_TARGET) {
|
|
173
|
+
return current === 'notice' ? 'notice' : 'consent';
|
|
174
|
+
}
|
|
175
|
+
return current === 'consent' || current === 'notice' ? 'text' : current;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The CRM presets whose mapping no current field carries: what "Add field" may
|
|
179
|
+
* still offer. A CRM target may appear once, so a preset leaves the menu the
|
|
180
|
+
* moment a field takes its target and returns when that field releases it.
|
|
181
|
+
*/
|
|
182
|
+
export function unusedCrmPresets(fields) {
|
|
183
|
+
const used = new Set(fields.map((field) => field.mapTo));
|
|
184
|
+
return CRM_FIELD_PRESETS.filter((preset) => !used.has(preset.mapTo));
|
|
125
185
|
}
|
|
126
186
|
//# sourceMappingURL=fieldList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldList.js","sourceRoot":"","sources":["../../../src/pages/forms/fieldList.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"fieldList.js","sourceRoot":"","sources":["../../../src/pages/forms/fieldList.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,4 +15,21 @@ export declare const NEW_SELECT_OPTIONS: {
|
|
|
15
15
|
value: string;
|
|
16
16
|
valueType: 'string';
|
|
17
17
|
}[];
|
|
18
|
+
/**
|
|
19
|
+
* One ready-made field per CRM mapping target, in the target enum's order.
|
|
20
|
+
*
|
|
21
|
+
* "Add field" offers these so adding the company field is one click, not
|
|
22
|
+
* add-then-configure. Only one field may carry a CRM target, so the menu shows
|
|
23
|
+
* each preset only while its target is free — `unusedCrmPresets` in
|
|
24
|
+
* `fieldList.ts` does that filtering.
|
|
25
|
+
*/
|
|
26
|
+
export declare const CRM_FIELD_PRESETS: readonly FormFieldInput[];
|
|
27
|
+
/** A submission-only entry in the "Add field" menu: shown by control, not by mapping. */
|
|
28
|
+
export interface SubmissionFieldPreset {
|
|
29
|
+
/** What the menu shows. The field itself starts with its own label. */
|
|
30
|
+
readonly menuLabel: string;
|
|
31
|
+
readonly field: FormFieldInput;
|
|
32
|
+
}
|
|
33
|
+
/** The submission-only fields "Add field" always offers; they may repeat freely. */
|
|
34
|
+
export declare const SUBMISSION_FIELD_PRESETS: readonly SubmissionFieldPreset[];
|
|
18
35
|
//# sourceMappingURL=template.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,cAAc,EAYxD,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,SAAS,EAAE,cAMvB,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;eACoB,QAAQ;GAE1D,CAAA"}
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,cAAc,EAYxD,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,SAAS,EAAE,cAMvB,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;eACoB,QAAQ;GAE1D,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAuCtD,CAAA;AAED,yFAAyF;AACzF,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAC/B;AAED,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,EAAE,SAAS,qBAAqB,EA4CpE,CAAA"}
|