@kelpie/ui 0.8.0 → 0.10.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.
Files changed (200) hide show
  1. package/dist/api/resource.d.ts +1 -1
  2. package/dist/api/resource.d.ts.map +1 -1
  3. package/dist/api/resource.js.map +1 -1
  4. package/dist/api/resources/consentPurposes.d.ts +13 -0
  5. package/dist/api/resources/consentPurposes.d.ts.map +1 -0
  6. package/dist/api/resources/consentPurposes.js +39 -0
  7. package/dist/api/resources/consentPurposes.js.map +1 -0
  8. package/dist/api/resources/customFields.d.ts +15 -0
  9. package/dist/api/resources/customFields.d.ts.map +1 -0
  10. package/dist/api/resources/customFields.js +41 -0
  11. package/dist/api/resources/customFields.js.map +1 -0
  12. package/dist/api/resources/enquiries.d.ts +39 -0
  13. package/dist/api/resources/enquiries.d.ts.map +1 -0
  14. package/dist/api/resources/enquiries.js +68 -0
  15. package/dist/api/resources/enquiries.js.map +1 -0
  16. package/dist/api/resources/forms.d.ts +21 -1
  17. package/dist/api/resources/forms.d.ts.map +1 -1
  18. package/dist/api/resources/forms.js +41 -0
  19. package/dist/api/resources/forms.js.map +1 -1
  20. package/dist/api/resources/importJobs.d.ts +5 -0
  21. package/dist/api/resources/importJobs.d.ts.map +1 -1
  22. package/dist/api/resources/importJobs.js +3 -0
  23. package/dist/api/resources/importJobs.js.map +1 -1
  24. package/dist/api/resources/opportunities.d.ts +2 -0
  25. package/dist/api/resources/opportunities.d.ts.map +1 -1
  26. package/dist/api/resources/opportunities.js +1 -0
  27. package/dist/api/resources/opportunities.js.map +1 -1
  28. package/dist/api/resources/sampleData.d.ts.map +1 -1
  29. package/dist/api/resources/sampleData.js +1 -0
  30. package/dist/api/resources/sampleData.js.map +1 -1
  31. package/dist/app/KelpieApp.d.ts.map +1 -1
  32. package/dist/app/KelpieApp.js +7 -1
  33. package/dist/app/KelpieApp.js.map +1 -1
  34. package/dist/components/ActivitiesPanel.d.ts.map +1 -1
  35. package/dist/components/ActivitiesPanel.js +1 -0
  36. package/dist/components/ActivitiesPanel.js.map +1 -1
  37. package/dist/components/CustomFieldsPanel.d.ts +23 -0
  38. package/dist/components/CustomFieldsPanel.d.ts.map +1 -0
  39. package/dist/components/CustomFieldsPanel.js +116 -0
  40. package/dist/components/CustomFieldsPanel.js.map +1 -0
  41. package/dist/components/FormsPanel.d.ts +18 -0
  42. package/dist/components/FormsPanel.d.ts.map +1 -0
  43. package/dist/components/FormsPanel.js +37 -0
  44. package/dist/components/FormsPanel.js.map +1 -0
  45. package/dist/components/PlanAttention.d.ts +3 -2
  46. package/dist/components/PlanAttention.d.ts.map +1 -1
  47. package/dist/components/PlanAttention.js +7 -3
  48. package/dist/components/PlanAttention.js.map +1 -1
  49. package/dist/components/Shell.d.ts.map +1 -1
  50. package/dist/components/Shell.js +3 -0
  51. package/dist/components/Shell.js.map +1 -1
  52. package/dist/components/useHasCustomFields.d.ts +13 -0
  53. package/dist/components/useHasCustomFields.d.ts.map +1 -0
  54. package/dist/components/useHasCustomFields.js +16 -0
  55. package/dist/components/useHasCustomFields.js.map +1 -0
  56. package/dist/pages/CompanyDetail.d.ts.map +1 -1
  57. package/dist/pages/CompanyDetail.js +24 -2
  58. package/dist/pages/CompanyDetail.js.map +1 -1
  59. package/dist/pages/DealDetail.d.ts.map +1 -1
  60. package/dist/pages/DealDetail.js +18 -1
  61. package/dist/pages/DealDetail.js.map +1 -1
  62. package/dist/pages/DecisionsPage.d.ts.map +1 -1
  63. package/dist/pages/DecisionsPage.js +2 -0
  64. package/dist/pages/DecisionsPage.js.map +1 -1
  65. package/dist/pages/EnquiriesPage.d.ts +2 -0
  66. package/dist/pages/EnquiriesPage.d.ts.map +1 -0
  67. package/dist/pages/EnquiriesPage.js +251 -0
  68. package/dist/pages/EnquiriesPage.js.map +1 -0
  69. package/dist/pages/EnquiryDetail.d.ts +2 -0
  70. package/dist/pages/EnquiryDetail.d.ts.map +1 -0
  71. package/dist/pages/EnquiryDetail.js +207 -0
  72. package/dist/pages/EnquiryDetail.js.map +1 -0
  73. package/dist/pages/EnquiryStageSettingsPage.d.ts +3 -0
  74. package/dist/pages/EnquiryStageSettingsPage.d.ts.map +1 -0
  75. package/dist/pages/EnquiryStageSettingsPage.js +34 -0
  76. package/dist/pages/EnquiryStageSettingsPage.js.map +1 -0
  77. package/dist/pages/FormDetail.d.ts.map +1 -1
  78. package/dist/pages/FormDetail.js +19 -1
  79. package/dist/pages/FormDetail.js.map +1 -1
  80. package/dist/pages/ListDetail.d.ts.map +1 -1
  81. package/dist/pages/ListDetail.js +27 -1
  82. package/dist/pages/ListDetail.js.map +1 -1
  83. package/dist/pages/OpportunityDetail.d.ts.map +1 -1
  84. package/dist/pages/OpportunityDetail.js +62 -3
  85. package/dist/pages/OpportunityDetail.js.map +1 -1
  86. package/dist/pages/PartnershipDetail.d.ts.map +1 -1
  87. package/dist/pages/PartnershipDetail.js +17 -1
  88. package/dist/pages/PartnershipDetail.js.map +1 -1
  89. package/dist/pages/PeoplePage.d.ts.map +1 -1
  90. package/dist/pages/PeoplePage.js +17 -0
  91. package/dist/pages/PeoplePage.js.map +1 -1
  92. package/dist/pages/PersonDetail.d.ts.map +1 -1
  93. package/dist/pages/PersonDetail.js +63 -3
  94. package/dist/pages/PersonDetail.js.map +1 -1
  95. package/dist/pages/PlanningPage.d.ts.map +1 -1
  96. package/dist/pages/PlanningPage.js +3 -0
  97. package/dist/pages/PlanningPage.js.map +1 -1
  98. package/dist/pages/RaiseDetail.d.ts.map +1 -1
  99. package/dist/pages/RaiseDetail.js +11 -1
  100. package/dist/pages/RaiseDetail.js.map +1 -1
  101. package/dist/pages/RoleDetail.js +1 -1
  102. package/dist/pages/RoleDetail.js.map +1 -1
  103. package/dist/pages/SearchPage.d.ts.map +1 -1
  104. package/dist/pages/SearchPage.js +1 -0
  105. package/dist/pages/SearchPage.js.map +1 -1
  106. package/dist/pages/admin/DataPage.d.ts.map +1 -1
  107. package/dist/pages/admin/DataPage.js +18 -3
  108. package/dist/pages/admin/DataPage.js.map +1 -1
  109. package/dist/pages/admin/FieldsPage.d.ts +2 -0
  110. package/dist/pages/admin/FieldsPage.d.ts.map +1 -0
  111. package/dist/pages/admin/FieldsPage.js +164 -0
  112. package/dist/pages/admin/FieldsPage.js.map +1 -0
  113. package/dist/pages/admin/PrivacyPage.d.ts +9 -0
  114. package/dist/pages/admin/PrivacyPage.d.ts.map +1 -0
  115. package/dist/pages/admin/PrivacyPage.js +170 -0
  116. package/dist/pages/admin/PrivacyPage.js.map +1 -0
  117. package/dist/pages/dashboard/attention.d.ts.map +1 -1
  118. package/dist/pages/dashboard/attention.js +3 -0
  119. package/dist/pages/dashboard/attention.js.map +1 -1
  120. package/dist/pages/forms/AddFieldMenu.d.ts +17 -0
  121. package/dist/pages/forms/AddFieldMenu.d.ts.map +1 -0
  122. package/dist/pages/forms/AddFieldMenu.js +43 -0
  123. package/dist/pages/forms/AddFieldMenu.js.map +1 -0
  124. package/dist/pages/forms/EmbedPanel.d.ts +4 -0
  125. package/dist/pages/forms/EmbedPanel.d.ts.map +1 -1
  126. package/dist/pages/forms/EmbedPanel.js +62 -3
  127. package/dist/pages/forms/EmbedPanel.js.map +1 -1
  128. package/dist/pages/forms/FieldsEditor.d.ts.map +1 -1
  129. package/dist/pages/forms/FieldsEditor.js +179 -36
  130. package/dist/pages/forms/FieldsEditor.js.map +1 -1
  131. package/dist/pages/forms/FormActions.d.ts +6 -0
  132. package/dist/pages/forms/FormActions.d.ts.map +1 -0
  133. package/dist/pages/forms/FormActions.js +149 -0
  134. package/dist/pages/forms/FormActions.js.map +1 -0
  135. package/dist/pages/forms/FormSettings.d.ts.map +1 -1
  136. package/dist/pages/forms/FormSettings.js +15 -19
  137. package/dist/pages/forms/FormSettings.js.map +1 -1
  138. package/dist/pages/forms/SubmissionDetail.d.ts +2 -0
  139. package/dist/pages/forms/SubmissionDetail.d.ts.map +1 -0
  140. package/dist/pages/forms/SubmissionDetail.js +76 -0
  141. package/dist/pages/forms/SubmissionDetail.js.map +1 -0
  142. package/dist/pages/forms/SubmissionsTable.d.ts.map +1 -1
  143. package/dist/pages/forms/SubmissionsTable.js +56 -8
  144. package/dist/pages/forms/SubmissionsTable.js.map +1 -1
  145. package/dist/pages/forms/fieldList.d.ts +11 -5
  146. package/dist/pages/forms/fieldList.d.ts.map +1 -1
  147. package/dist/pages/forms/fieldList.js +66 -6
  148. package/dist/pages/forms/fieldList.js.map +1 -1
  149. package/dist/pages/forms/template.d.ts +17 -0
  150. package/dist/pages/forms/template.d.ts.map +1 -1
  151. package/dist/pages/forms/template.js +93 -0
  152. package/dist/pages/forms/template.js.map +1 -1
  153. package/dist/pages/onboarding/WorkspaceStepPage.js +1 -1
  154. package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -1
  155. package/package.json +2 -2
  156. package/src/api/resource.ts +6 -1
  157. package/src/api/resources/consentPurposes.ts +83 -0
  158. package/src/api/resources/customFields.ts +88 -0
  159. package/src/api/resources/enquiries.ts +118 -0
  160. package/src/api/resources/forms.ts +58 -0
  161. package/src/api/resources/importJobs.ts +9 -0
  162. package/src/api/resources/opportunities.ts +3 -0
  163. package/src/api/resources/sampleData.ts +1 -0
  164. package/src/app/KelpieApp.tsx +12 -0
  165. package/src/components/ActivitiesPanel.tsx +1 -0
  166. package/src/components/CustomFieldsPanel.tsx +330 -0
  167. package/src/components/FormsPanel.tsx +86 -0
  168. package/src/components/PlanAttention.tsx +20 -3
  169. package/src/components/Shell.tsx +3 -0
  170. package/src/components/useHasCustomFields.ts +18 -0
  171. package/src/pages/CompanyDetail.tsx +36 -1
  172. package/src/pages/DealDetail.tsx +31 -0
  173. package/src/pages/DecisionsPage.tsx +2 -0
  174. package/src/pages/EnquiriesPage.tsx +434 -0
  175. package/src/pages/EnquiryDetail.tsx +554 -0
  176. package/src/pages/EnquiryStageSettingsPage.tsx +63 -0
  177. package/src/pages/FormDetail.tsx +23 -1
  178. package/src/pages/ListDetail.tsx +62 -0
  179. package/src/pages/OpportunityDetail.tsx +165 -2
  180. package/src/pages/PartnershipDetail.tsx +32 -0
  181. package/src/pages/PeoplePage.tsx +20 -0
  182. package/src/pages/PersonDetail.tsx +152 -3
  183. package/src/pages/PlanningPage.tsx +3 -0
  184. package/src/pages/RaiseDetail.tsx +21 -0
  185. package/src/pages/RoleDetail.tsx +1 -1
  186. package/src/pages/SearchPage.tsx +1 -0
  187. package/src/pages/admin/DataPage.tsx +51 -3
  188. package/src/pages/admin/FieldsPage.tsx +455 -0
  189. package/src/pages/admin/PrivacyPage.tsx +461 -0
  190. package/src/pages/dashboard/attention.ts +3 -0
  191. package/src/pages/forms/AddFieldMenu.tsx +121 -0
  192. package/src/pages/forms/EmbedPanel.tsx +163 -2
  193. package/src/pages/forms/FieldsEditor.tsx +539 -165
  194. package/src/pages/forms/FormActions.tsx +552 -0
  195. package/src/pages/forms/FormSettings.tsx +29 -70
  196. package/src/pages/forms/SubmissionDetail.tsx +249 -0
  197. package/src/pages/forms/SubmissionsTable.tsx +109 -16
  198. package/src/pages/forms/fieldList.ts +68 -5
  199. package/src/pages/forms/template.ts +103 -0
  200. package/src/pages/onboarding/WorkspaceStepPage.tsx +1 -1
@@ -0,0 +1,149 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { PIPELINE_KINDS } from '@kelpie/schemas';
3
+ import { useMemo, useState } from 'react';
4
+ import { useDeals } from '../../api/resources/deals.js';
5
+ import { useEnquiries } from '../../api/resources/enquiries.js';
6
+ import { useUpdateForm } from '../../api/resources/forms.js';
7
+ import { useLists } from '../../api/resources/lists.js';
8
+ import { useMembers } from '../../api/resources/members.js';
9
+ import { useOpportunities } from '../../api/resources/opportunities.js';
10
+ import { usePartnerships } from '../../api/resources/partnerships.js';
11
+ import { usePipelineStages } from '../../api/resources/pipelineStages.js';
12
+ import { useRaises } from '../../api/resources/raises.js';
13
+ import { Chip } from '../../components/Chip.js';
14
+ import { ErrorPanel } from '../../components/QueryState.js';
15
+ import { SectionHeader } from '../../components/SectionHeader.js';
16
+ import { toTags } from '../fields.js';
17
+ /**
18
+ * What the form does with a submission, once the answers are captured.
19
+ *
20
+ * The three create-triggers sit side by side here. Deal moved off the
21
+ * Settings tab in the forms post-submit actions release: the form's identity
22
+ * (name, status, thank-you copy) is one thing, and what the form *produces*
23
+ * — a deal, an opportunity, a partnership, tagged records, list memberships,
24
+ * pipeline attachments — is another. Actions is where a builder answers
25
+ * "what happens next?".
26
+ *
27
+ * Every control commits on change; the optimistic update in
28
+ * `createResourceHooks` puts the old value back if the PATCH is refused.
29
+ */
30
+ 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';
31
+ export function FormActions({ form }) {
32
+ const updateForm = useUpdateForm();
33
+ const patch = (changes) => {
34
+ updateForm.run({ id: form.id, changes });
35
+ };
36
+ const hasCompanyField = form.fields.some((field) => field.mapTo.startsWith('company.'));
37
+ return (_jsxs("div", { className: "max-w-2xl space-y-6", children: [_jsx(SectionHeader, { title: "Actions", description: "What the form creates, tags, lists, and links every submitter to." }), updateForm.error !== null && _jsx(ErrorPanel, { error: updateForm.error }), _jsx(TriggerBlock, { form: form, kind: "deal", toggle: form.createDeal, kindValue: null, stageId: form.dealStageId, nameTemplate: form.dealNameTemplate, ownerId: null, requiresCompany: true, hasCompanyField: hasCompanyField, onToggle: (next) => patch({ createDeal: next }), onStage: (next) => patch({ dealStageId: next }), onTemplate: (next) => patch({ dealNameTemplate: next }) }), _jsx(TriggerBlock, { form: form, kind: "opportunity", toggle: form.createOpportunity, kindValue: form.opportunityKind, stageId: form.opportunityStageId, nameTemplate: form.opportunityNameTemplate, ownerId: form.opportunityOwnerId, onToggle: (next) => patch({ createOpportunity: next }), onKind: (next) => patch({ opportunityKind: next }), onStage: (next) => patch({ opportunityStageId: next }), onTemplate: (next) => patch({ opportunityNameTemplate: next }), onOwner: (next) => patch({ opportunityOwnerId: next }) }), _jsx(TriggerBlock, { form: form, kind: "partnership", toggle: form.createPartnership, kindValue: form.partnershipKind, stageId: form.partnershipStageId, nameTemplate: form.partnershipNameTemplate, ownerId: form.partnershipOwnerId, requiresCompany: true, hasCompanyField: hasCompanyField, onToggle: (next) => patch({ createPartnership: next }), onKind: (next) => patch({ partnershipKind: next }), onStage: (next) => patch({ partnershipStageId: next }), onTemplate: (next) => patch({ partnershipNameTemplate: next }), onOwner: (next) => patch({ partnershipOwnerId: next }) }), _jsx(TriggerBlock, { form: form, kind: "enquiry", toggle: form.createEnquiry, kindValue: null, stageId: form.enquiryStageId, nameTemplate: form.enquiryNameTemplate, ownerId: form.enquiryOwnerId, onToggle: (next) => patch({ createEnquiry: next }), onStage: (next) => patch({ enquiryStageId: next }), onTemplate: (next) => patch({ enquiryNameTemplate: next }), onOwner: (next) => patch({ enquiryOwnerId: next }) }), _jsx(TagsBlock, { title: "Tag the person", hint: "Merged into the submitter's tags. Never removes a tag someone set by hand.", value: form.personTags, onChange: (next) => patch({ personTags: next }) }), _jsx(TagsBlock, { title: "Tag the company", hint: "Merged into the resolved company's tags. Skipped when no company is resolved.", value: form.companyTags, onChange: (next) => patch({ companyTags: next }) }), _jsx(ListsBlock, { form: form, onChange: (next) => patch({ listIds: next }) }), _jsx(AttachTargetsBlock, { form: form, onChange: (next) => patch({ attachTargets: next }) })] }));
38
+ }
39
+ const TRIGGER_LABEL = {
40
+ enquiry: 'Create an Enquiry',
41
+ deal: 'Create a Deal',
42
+ opportunity: 'Create an Opportunity',
43
+ raise: 'Create a Raise',
44
+ partnership: 'Create a Partnership',
45
+ };
46
+ function TriggerBlock(props) {
47
+ const stages = usePipelineStages(props.kind);
48
+ const members = useMembers();
49
+ const disabled = props.requiresCompany === true && props.hasCompanyField !== true && !props.toggle;
50
+ const showsKind = props.onKind !== undefined;
51
+ const showsOwner = props.onOwner !== undefined;
52
+ return (_jsxs("div", { className: "space-y-3 rounded-md border border-border p-4", children: [_jsxs("label", { className: "flex items-center gap-2 text-[13px] font-medium text-ink", children: [_jsx("input", { type: "checkbox", checked: props.toggle, disabled: disabled, onChange: (event) => props.onToggle(event.target.checked) }), TRIGGER_LABEL[props.kind]] }), props.requiresCompany === true && props.hasCompanyField !== true && (_jsxs("p", { className: "text-[12px] text-danger", children: ["Add a field mapped to Company \u00B7 name or Company \u00B7 domain first. A ", props.kind, " belongs to a company, and this form collects neither."] })), props.toggle && (_jsxs(_Fragment, { children: [showsKind && (_jsx(Labelled, { label: "Kind", hint: `Optional. Free text: "Grant", "Accelerator", …`, children: _jsx("input", { className: inputClass, defaultValue: props.kindValue ?? '', onBlur: (event) => {
53
+ const next = event.target.value.length === 0 ? null : event.target.value;
54
+ if (next !== props.kindValue) {
55
+ props.onKind?.(next);
56
+ }
57
+ } }) })), _jsx(Labelled, { label: "Stage", hint: "Leaving this on the first open stage follows the board, so reordering it does not strand old forms on a column that moved.", children: _jsxs("select", { className: inputClass, value: props.stageId ?? '', onChange: (event) => {
58
+ props.onStage(event.target.value.length === 0 ? null : event.target.value);
59
+ }, children: [_jsx("option", { value: "", children: "First open stage" }), stages.records.map((stage) => (_jsx("option", { value: stage.id, children: stage.label }, stage.id)))] }) }), _jsx(Labelled, { label: "Name template", hint: "Tokens: {{company.name}} and {{person.name}}. A field mapped to the record's name wins over this.", children: _jsx("input", { className: inputClass, defaultValue: props.nameTemplate ?? '', onBlur: (event) => {
60
+ const next = event.target.value.length === 0 ? null : event.target.value;
61
+ if (next !== props.nameTemplate) {
62
+ props.onTemplate(next);
63
+ }
64
+ } }) }), showsOwner && (_jsx(Labelled, { label: "Owner", hint: "Empty falls back to the workspace default member.", children: _jsxs("select", { className: inputClass, value: props.ownerId ?? '', onChange: (event) => {
65
+ props.onOwner?.(event.target.value.length === 0 ? null : event.target.value);
66
+ }, children: [_jsx("option", { value: "", children: "Workspace default" }), members.members.map((member) => (_jsx("option", { value: member.id, children: member.name }, member.id)))] }) }))] }))] }));
67
+ }
68
+ // -------- Tags --------
69
+ function TagsBlock({ title, hint, value, onChange, }) {
70
+ return (_jsxs("div", { className: "space-y-2 rounded-md border border-border p-4", children: [_jsx("div", { className: "text-[13px] font-medium text-ink", children: title }), _jsx("input", { className: inputClass, defaultValue: value.join(', '), onBlur: (event) => {
71
+ const next = toTags(event.target.value);
72
+ const changed = next.length !== value.length || next.some((tag, index) => tag !== value[index]);
73
+ if (changed) {
74
+ onChange(next);
75
+ }
76
+ } }), _jsx("div", { className: "flex flex-wrap gap-1", children: value.map((tag) => (_jsx(Chip, { children: tag }, tag))) }), _jsx("p", { className: "text-[11px] text-ink-faint", children: hint })] }));
77
+ }
78
+ // -------- Lists --------
79
+ function ListsBlock({ form, onChange, }) {
80
+ const personLists = useLists({ targetType: 'person' });
81
+ const companyLists = useLists({ targetType: 'company' });
82
+ const eligible = useMemo(() => [...personLists.records, ...companyLists.records], [personLists.records, companyLists.records]);
83
+ const eligibleById = new Map(eligible.map((list) => [list.id, list]));
84
+ const [pick, setPick] = useState('');
85
+ const chosen = form.listIds;
86
+ const remaining = eligible.filter((list) => !chosen.includes(list.id));
87
+ function add() {
88
+ if (pick.length === 0 || chosen.includes(pick)) {
89
+ return;
90
+ }
91
+ onChange([...chosen, pick]);
92
+ setPick('');
93
+ }
94
+ return (_jsxs("div", { className: "space-y-2 rounded-md border border-border p-4", children: [_jsx("div", { className: "text-[13px] font-medium text-ink", children: "Add to a list" }), _jsx("p", { className: "text-[11px] text-ink-faint", children: "Person lists get the submitter. Company lists get the resolved company, or are skipped when no company is resolved." }), _jsxs("ul", { className: "divide-y divide-border", children: [chosen.length === 0 && (_jsx("li", { className: "py-2 text-[12px] text-ink-faint", children: "No lists yet." })), chosen.map((listId) => {
95
+ const list = eligibleById.get(listId);
96
+ return (_jsxs("li", { className: "flex items-center justify-between gap-2 py-2", children: [_jsx("span", { className: "text-[13px] text-ink", children: list === undefined ? listId : `${list.name} (${list.targetType})` }), _jsx("button", { type: "button", onClick: () => onChange(chosen.filter((id) => id !== listId)), className: "text-[11px] font-medium text-danger hover:underline", children: "Remove" })] }, listId));
97
+ })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("select", { className: `${inputClass} min-w-0 flex-1`, value: pick, onChange: (event) => setPick(event.target.value), children: [_jsx("option", { value: "", children: "Pick a list\u2026" }), remaining.map((list) => (_jsxs("option", { value: list.id, children: [list.name, " (", list.targetType, ")"] }, list.id)))] }), _jsx("button", { type: "button", onClick: add, className: "shrink-0 rounded-md bg-accent px-3 py-2 text-[12px] font-semibold text-accent-fg hover:bg-accent-hover disabled:opacity-50", disabled: pick.length === 0, children: "Add" })] })] }));
98
+ }
99
+ function useAttachOptions(kind) {
100
+ const deals = useDeals({}, { enabled: kind === 'deal' });
101
+ const opportunities = useOpportunities({}, { enabled: kind === 'opportunity' });
102
+ const raises = useRaises({}, { enabled: kind === 'raise' });
103
+ const partnerships = usePartnerships({}, { enabled: kind === 'partnership' });
104
+ const enquiries = useEnquiries({}, { enabled: kind === 'enquiry' });
105
+ switch (kind) {
106
+ case 'deal':
107
+ return deals.records.map((deal) => ({ id: deal.id, name: deal.name }));
108
+ case 'opportunity':
109
+ return opportunities.records.map((opp) => ({ id: opp.id, name: opp.name }));
110
+ case 'raise':
111
+ return raises.records.map((raise) => ({ id: raise.id, name: raise.name }));
112
+ case 'partnership':
113
+ return partnerships.records.map((partnership) => ({
114
+ id: partnership.id,
115
+ name: partnership.name,
116
+ }));
117
+ case 'enquiry':
118
+ return enquiries.records.map((enquiry) => ({ id: enquiry.id, name: enquiry.name }));
119
+ }
120
+ }
121
+ function AttachTargetsBlock({ form, onChange, }) {
122
+ const [kind, setKind] = useState('deal');
123
+ const [pick, setPick] = useState('');
124
+ const options = useAttachOptions(kind);
125
+ const chosen = form.attachTargets;
126
+ const chosenKey = new Set(chosen.map((target) => `${target.targetType}:${target.targetId}`));
127
+ const remaining = options.filter((record) => !chosenKey.has(`${kind}:${record.id}`));
128
+ function add() {
129
+ if (pick.length === 0) {
130
+ return;
131
+ }
132
+ const key = `${kind}:${pick}`;
133
+ if (chosenKey.has(key)) {
134
+ return;
135
+ }
136
+ onChange([...chosen, { targetType: kind, targetId: pick }]);
137
+ setPick('');
138
+ }
139
+ return (_jsxs("div", { className: "space-y-2 rounded-md border border-border p-4", children: [_jsx("div", { className: "text-[13px] font-medium text-ink", children: "Attach the submitter to a record" }), _jsxs("p", { className: "text-[11px] text-ink-faint", children: ["Every submitter is linked into these records through ", _jsx("code", { children: "person_links" }), "."] }), _jsxs("ul", { className: "divide-y divide-border", children: [chosen.length === 0 && (_jsx("li", { className: "py-2 text-[12px] text-ink-faint", children: "No records yet." })), chosen.map((target) => (_jsxs("li", { className: "flex items-center justify-between gap-2 py-2", children: [_jsxs("span", { className: "text-[13px] text-ink", children: [target.targetType, " \u00B7 ", target.targetId] }), _jsx("button", { type: "button", onClick: () => onChange(chosen.filter((candidate) => candidate.targetType !== target.targetType ||
140
+ candidate.targetId !== target.targetId)), className: "text-[11px] font-medium text-danger hover:underline", children: "Remove" })] }, `${target.targetType}:${target.targetId}`)))] }), _jsxs("div", { className: "grid grid-cols-[auto_1fr_auto] items-center gap-2", children: [_jsx("select", { className: inputClass, value: kind, onChange: (event) => {
141
+ setKind(event.target.value);
142
+ setPick('');
143
+ }, children: PIPELINE_KINDS.map((option) => (_jsx("option", { value: option, children: option }, option))) }), _jsxs("select", { className: inputClass, value: pick, onChange: (event) => setPick(event.target.value), children: [_jsx("option", { value: "", children: "Pick a record\u2026" }), remaining.map((record) => (_jsx("option", { value: record.id, children: record.name }, record.id)))] }), _jsx("button", { type: "button", onClick: add, className: "rounded-md bg-accent px-3 py-2 text-[12px] font-semibold text-accent-fg hover:bg-accent-hover disabled:opacity-50", disabled: pick.length === 0, children: "Add" })] })] }));
144
+ }
145
+ // -------- Shared bits --------
146
+ function Labelled({ label, hint, children, }) {
147
+ return (_jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1.5 block text-[12px] font-medium text-ink", children: label }), children, hint !== undefined && _jsx("p", { className: "mt-1 text-[11px] text-ink-faint", children: hint })] }));
148
+ }
149
+ //# sourceMappingURL=FormActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormActions.js","sourceRoot":"","sources":["../../../src/pages/forms/FormActions.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormSettings.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/FormSettings.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,iBAAiB,CAAA;AAmBvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAmH3E"}
1
+ {"version":3,"file":"FormSettings.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/FormSettings.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,iBAAiB,CAAA;AAmBvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA0E3E"}
@@ -1,42 +1,38 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
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
- * What the form does with a submission.
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
- /** The server refuses `create_deal` without a company mapping, so say so before it does. */
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: "Thank-you message", children: [_jsx("textarea", { className: `${inputClass} min-h-[72px]`, defaultValue: form.thankYouMessage, onBlur: (event) => {
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("div", { className: "space-y-3 rounded-md border border-border p-4", children: [_jsxs("label", { className: "flex items-center gap-2 text-[13px] font-medium text-ink", children: [_jsx("input", { type: "checkbox", checked: form.createDeal, disabled: !hasCompanyField && !form.createDeal, onChange: (event) => {
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":"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"}
1
+ {"version":3,"file":"FormSettings.js","sourceRoot":"","sources":["../../../src/pages/forms/FormSettings.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function SubmissionDetail(): React.JSX.Element;
2
+ //# sourceMappingURL=SubmissionDetail.d.ts.map
@@ -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,EAAE,MAAM,iBAAiB,CAAA;AAI3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAuB7D,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,CAiFhG"}
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,6 +1,6 @@
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';
@@ -16,10 +16,15 @@ import { formatDateTime } from '../../lib/dates.js';
16
16
  * same way the Decisions page does it: `api.md` has no include-expansion, and
17
17
  * neither list takes a set of bare ids. A record past those pages is still
18
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.
19
23
  */
20
24
  /** `api.md`: `?limit=` maxes out at 200. */
21
25
  const MAX_PAGE = 200;
22
26
  export function SubmissionsTable({ form, submissions }) {
27
+ const navigate = useNavigate();
23
28
  const people = usePeople({ limit: MAX_PAGE });
24
29
  const companies = useCompanies({ limit: MAX_PAGE });
25
30
  const timezone = useTimezone();
@@ -42,10 +47,18 @@ export function SubmissionsTable({ form, submissions }) {
42
47
  render: (submission) => (_jsx(RecordLink, { to: "/companies", id: submission.companyId, name: nameById, fallback: "Company" })),
43
48
  },
44
49
  {
45
- key: 'deal',
46
- header: 'Deal',
47
- className: 'w-24',
48
- render: (submission) => submission.dealId === null ? (_jsx("span", { className: "text-ink-faint", children: "\u2014" })) : (_jsx(Link, { to: `/deals/${submission.dealId}`, className: "text-accent hover:underline", children: "View" })),
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 }),
49
62
  },
50
63
  {
51
64
  key: 'answers',
@@ -59,14 +72,49 @@ export function SubmissionsTable({ form, submissions }) {
59
72
  if (submissions.isLoading) {
60
73
  return _jsx(LoadingPanel, { label: "Loading submissions\u2026" });
61
74
  }
62
- return (_jsxs("div", { children: [_jsx(SectionHeader, { title: "Submissions", description: "Inbound answers, and the records each one created or matched." }), _jsx(Paginator, { list: submissions, placement: "top" }), _jsx(DataTable, { columns: columns, rows: submissions.records, getRowId: (submission) => submission.id, emptyMessage: "No submissions yet" }), _jsx(Paginator, { list: submissions })] }));
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] })] }));
63
98
  }
64
99
  function RecordLink({ to, id, name, fallback, }) {
65
100
  if (id === null) {
66
101
  return _jsx("span", { className: "text-ink-faint", children: "\u2014" });
67
102
  }
68
- return (_jsx(Link, { to: `${to}/${id}`, className: "text-accent hover:underline", children: name.get(id) ?? fallback }));
103
+ return (_jsx(Link, { to: `${to}/${id}`, className: "text-accent hover:underline", onClick: (event) => {
104
+ event.stopPropagation();
105
+ }, children: name.get(id) ?? fallback }));
69
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
+ ]);
70
118
  /**
71
119
  * The first two answers that are not already a column.
72
120
  *
@@ -76,7 +124,7 @@ function RecordLink({ to, id, name, fallback, }) {
76
124
  */
77
125
  function summarise(form, submission) {
78
126
  const parts = form.fields
79
- .filter((field) => field.mapTo !== 'person.name' && field.mapTo !== 'person.email')
127
+ .filter((field) => !PERSON_COLUMN_TARGETS.has(field.mapTo))
80
128
  .map((field) => {
81
129
  const answer = submission.answers[field.id];
82
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":"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"}
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. Choosing `person.email` implies an email input. */
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":"AAKA,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,CAU5D;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,CAoBjB;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,CAkCnB;AAED,qDAAqD;AACrD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAE7D;AAED,kGAAkG;AAClG,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,CAE/F"}
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"}