@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.
Files changed (349) hide show
  1. package/dist/api/resource.d.ts +59 -6
  2. package/dist/api/resource.d.ts.map +1 -1
  3. package/dist/api/resource.js +106 -24
  4. package/dist/api/resource.js.map +1 -1
  5. package/dist/api/resources/companies.d.ts +2 -0
  6. package/dist/api/resources/companies.d.ts.map +1 -1
  7. package/dist/api/resources/companies.js +5 -1
  8. package/dist/api/resources/companies.js.map +1 -1
  9. package/dist/api/resources/consentPurposes.d.ts +13 -0
  10. package/dist/api/resources/consentPurposes.d.ts.map +1 -0
  11. package/dist/api/resources/consentPurposes.js +39 -0
  12. package/dist/api/resources/consentPurposes.js.map +1 -0
  13. package/dist/api/resources/customFields.d.ts +15 -0
  14. package/dist/api/resources/customFields.d.ts.map +1 -0
  15. package/dist/api/resources/customFields.js +41 -0
  16. package/dist/api/resources/customFields.js.map +1 -0
  17. package/dist/api/resources/decisions.d.ts +2 -0
  18. package/dist/api/resources/decisions.d.ts.map +1 -1
  19. package/dist/api/resources/decisions.js +1 -0
  20. package/dist/api/resources/decisions.js.map +1 -1
  21. package/dist/api/resources/emailDomainLinker.d.ts +16 -0
  22. package/dist/api/resources/emailDomainLinker.d.ts.map +1 -0
  23. package/dist/api/resources/emailDomainLinker.js +16 -0
  24. package/dist/api/resources/emailDomainLinker.js.map +1 -0
  25. package/dist/api/resources/enquiries.d.ts +39 -0
  26. package/dist/api/resources/enquiries.d.ts.map +1 -0
  27. package/dist/api/resources/enquiries.js +68 -0
  28. package/dist/api/resources/enquiries.js.map +1 -0
  29. package/dist/api/resources/forms.d.ts +21 -1
  30. package/dist/api/resources/forms.d.ts.map +1 -1
  31. package/dist/api/resources/forms.js +44 -17
  32. package/dist/api/resources/forms.js.map +1 -1
  33. package/dist/api/resources/handbookPages.d.ts +1 -1
  34. package/dist/api/resources/handbookPages.js +1 -1
  35. package/dist/api/resources/importJobs.d.ts +5 -0
  36. package/dist/api/resources/importJobs.d.ts.map +1 -1
  37. package/dist/api/resources/importJobs.js +3 -0
  38. package/dist/api/resources/importJobs.js.map +1 -1
  39. package/dist/api/resources/listMembers.d.ts +27 -0
  40. package/dist/api/resources/listMembers.d.ts.map +1 -0
  41. package/dist/api/resources/listMembers.js +108 -0
  42. package/dist/api/resources/listMembers.js.map +1 -0
  43. package/dist/api/resources/lists.d.ts +14 -0
  44. package/dist/api/resources/lists.d.ts.map +1 -0
  45. package/dist/api/resources/lists.js +34 -0
  46. package/dist/api/resources/lists.js.map +1 -0
  47. package/dist/api/resources/opportunities.d.ts +2 -0
  48. package/dist/api/resources/opportunities.d.ts.map +1 -1
  49. package/dist/api/resources/opportunities.js +1 -0
  50. package/dist/api/resources/opportunities.js.map +1 -1
  51. package/dist/api/resources/people.d.ts.map +1 -1
  52. package/dist/api/resources/people.js +4 -1
  53. package/dist/api/resources/people.js.map +1 -1
  54. package/dist/api/resources/roles.d.ts +2 -0
  55. package/dist/api/resources/roles.d.ts.map +1 -1
  56. package/dist/api/resources/roles.js +1 -1
  57. package/dist/api/resources/roles.js.map +1 -1
  58. package/dist/api/resources/sampleData.d.ts +17 -0
  59. package/dist/api/resources/sampleData.d.ts.map +1 -0
  60. package/dist/api/resources/sampleData.js +31 -0
  61. package/dist/api/resources/sampleData.js.map +1 -0
  62. package/dist/api/resources/webhooks.d.ts.map +1 -1
  63. package/dist/api/resources/webhooks.js +7 -22
  64. package/dist/api/resources/webhooks.js.map +1 -1
  65. package/dist/app/KelpieApp.d.ts.map +1 -1
  66. package/dist/app/KelpieApp.js +9 -1
  67. package/dist/app/KelpieApp.js.map +1 -1
  68. package/dist/components/ActivitiesPanel.d.ts.map +1 -1
  69. package/dist/components/ActivitiesPanel.js +3 -1
  70. package/dist/components/ActivitiesPanel.js.map +1 -1
  71. package/dist/components/ColumnPicker.d.ts +24 -0
  72. package/dist/components/ColumnPicker.d.ts.map +1 -0
  73. package/dist/components/ColumnPicker.js +56 -0
  74. package/dist/components/ColumnPicker.js.map +1 -0
  75. package/dist/components/CustomFieldsPanel.d.ts +23 -0
  76. package/dist/components/CustomFieldsPanel.d.ts.map +1 -0
  77. package/dist/components/CustomFieldsPanel.js +116 -0
  78. package/dist/components/CustomFieldsPanel.js.map +1 -0
  79. package/dist/components/DataTable.d.ts +16 -1
  80. package/dist/components/DataTable.d.ts.map +1 -1
  81. package/dist/components/DataTable.js +51 -10
  82. package/dist/components/DataTable.js.map +1 -1
  83. package/dist/components/DecisionsPanel.d.ts.map +1 -1
  84. package/dist/components/DecisionsPanel.js +4 -3
  85. package/dist/components/DecisionsPanel.js.map +1 -1
  86. package/dist/components/EntitySearch.d.ts.map +1 -1
  87. package/dist/components/EntitySearch.js +11 -5
  88. package/dist/components/EntitySearch.js.map +1 -1
  89. package/dist/components/FormsPanel.d.ts +18 -0
  90. package/dist/components/FormsPanel.d.ts.map +1 -0
  91. package/dist/components/FormsPanel.js +37 -0
  92. package/dist/components/FormsPanel.js.map +1 -0
  93. package/dist/components/ListsPanel.d.ts +14 -0
  94. package/dist/components/ListsPanel.d.ts.map +1 -0
  95. package/dist/components/ListsPanel.js +56 -0
  96. package/dist/components/ListsPanel.js.map +1 -0
  97. package/dist/components/NotesPanel.d.ts.map +1 -1
  98. package/dist/components/NotesPanel.js +6 -5
  99. package/dist/components/NotesPanel.js.map +1 -1
  100. package/dist/components/Paginator.d.ts +26 -0
  101. package/dist/components/Paginator.d.ts.map +1 -0
  102. package/dist/components/Paginator.js +16 -0
  103. package/dist/components/Paginator.js.map +1 -0
  104. package/dist/components/PlanAttention.d.ts +3 -2
  105. package/dist/components/PlanAttention.d.ts.map +1 -1
  106. package/dist/components/PlanAttention.js +7 -3
  107. package/dist/components/PlanAttention.js.map +1 -1
  108. package/dist/components/PlanPanel.d.ts.map +1 -1
  109. package/dist/components/PlanPanel.js +2 -1
  110. package/dist/components/PlanPanel.js.map +1 -1
  111. package/dist/components/Shell.d.ts.map +1 -1
  112. package/dist/components/Shell.js +4 -0
  113. package/dist/components/Shell.js.map +1 -1
  114. package/dist/components/useHasCustomFields.d.ts +13 -0
  115. package/dist/components/useHasCustomFields.d.ts.map +1 -0
  116. package/dist/components/useHasCustomFields.js +16 -0
  117. package/dist/components/useHasCustomFields.js.map +1 -0
  118. package/dist/index.d.ts +8 -2
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +4 -1
  121. package/dist/index.js.map +1 -1
  122. package/dist/lib/listView.d.ts +15 -0
  123. package/dist/lib/listView.d.ts.map +1 -0
  124. package/dist/lib/listView.js +66 -0
  125. package/dist/lib/listView.js.map +1 -0
  126. package/dist/lib/sort.d.ts +43 -0
  127. package/dist/lib/sort.d.ts.map +1 -0
  128. package/dist/lib/sort.js +102 -0
  129. package/dist/lib/sort.js.map +1 -0
  130. package/dist/pages/CompaniesPage.d.ts.map +1 -1
  131. package/dist/pages/CompaniesPage.js +88 -3
  132. package/dist/pages/CompaniesPage.js.map +1 -1
  133. package/dist/pages/CompanyDetail.d.ts.map +1 -1
  134. package/dist/pages/CompanyDetail.js +40 -15
  135. package/dist/pages/CompanyDetail.js.map +1 -1
  136. package/dist/pages/DealDetail.d.ts.map +1 -1
  137. package/dist/pages/DealDetail.js +20 -1
  138. package/dist/pages/DealDetail.js.map +1 -1
  139. package/dist/pages/DealsPage.d.ts.map +1 -1
  140. package/dist/pages/DealsPage.js +134 -14
  141. package/dist/pages/DealsPage.js.map +1 -1
  142. package/dist/pages/DecisionsPage.d.ts.map +1 -1
  143. package/dist/pages/DecisionsPage.js +52 -8
  144. package/dist/pages/DecisionsPage.js.map +1 -1
  145. package/dist/pages/EnquiriesPage.d.ts +2 -0
  146. package/dist/pages/EnquiriesPage.d.ts.map +1 -0
  147. package/dist/pages/EnquiriesPage.js +251 -0
  148. package/dist/pages/EnquiriesPage.js.map +1 -0
  149. package/dist/pages/EnquiryDetail.d.ts +2 -0
  150. package/dist/pages/EnquiryDetail.d.ts.map +1 -0
  151. package/dist/pages/EnquiryDetail.js +207 -0
  152. package/dist/pages/EnquiryDetail.js.map +1 -0
  153. package/dist/pages/EnquiryStageSettingsPage.d.ts +3 -0
  154. package/dist/pages/EnquiryStageSettingsPage.d.ts.map +1 -0
  155. package/dist/pages/EnquiryStageSettingsPage.js +34 -0
  156. package/dist/pages/EnquiryStageSettingsPage.js.map +1 -0
  157. package/dist/pages/FormDetail.d.ts.map +1 -1
  158. package/dist/pages/FormDetail.js +19 -1
  159. package/dist/pages/FormDetail.js.map +1 -1
  160. package/dist/pages/FormsPage.d.ts.map +1 -1
  161. package/dist/pages/FormsPage.js +53 -2
  162. package/dist/pages/FormsPage.js.map +1 -1
  163. package/dist/pages/FundraisingPage.d.ts.map +1 -1
  164. package/dist/pages/FundraisingPage.js +116 -14
  165. package/dist/pages/FundraisingPage.js.map +1 -1
  166. package/dist/pages/HiringPage.d.ts.map +1 -1
  167. package/dist/pages/HiringPage.js +27 -4
  168. package/dist/pages/HiringPage.js.map +1 -1
  169. package/dist/pages/ListDetail.d.ts +11 -0
  170. package/dist/pages/ListDetail.d.ts.map +1 -0
  171. package/dist/pages/ListDetail.js +214 -0
  172. package/dist/pages/ListDetail.js.map +1 -0
  173. package/dist/pages/ListsPage.d.ts +9 -0
  174. package/dist/pages/ListsPage.d.ts.map +1 -0
  175. package/dist/pages/ListsPage.js +125 -0
  176. package/dist/pages/ListsPage.js.map +1 -0
  177. package/dist/pages/OpportunitiesPage.d.ts.map +1 -1
  178. package/dist/pages/OpportunitiesPage.js +97 -14
  179. package/dist/pages/OpportunitiesPage.js.map +1 -1
  180. package/dist/pages/OpportunityDetail.d.ts.map +1 -1
  181. package/dist/pages/OpportunityDetail.js +64 -3
  182. package/dist/pages/OpportunityDetail.js.map +1 -1
  183. package/dist/pages/PartnershipDetail.d.ts.map +1 -1
  184. package/dist/pages/PartnershipDetail.js +19 -1
  185. package/dist/pages/PartnershipDetail.js.map +1 -1
  186. package/dist/pages/PartnershipsPage.d.ts.map +1 -1
  187. package/dist/pages/PartnershipsPage.js +111 -14
  188. package/dist/pages/PartnershipsPage.js.map +1 -1
  189. package/dist/pages/PeoplePage.d.ts.map +1 -1
  190. package/dist/pages/PeoplePage.js +119 -3
  191. package/dist/pages/PeoplePage.js.map +1 -1
  192. package/dist/pages/PersonDetail.d.ts.map +1 -1
  193. package/dist/pages/PersonDetail.js +67 -5
  194. package/dist/pages/PersonDetail.js.map +1 -1
  195. package/dist/pages/PlanningPage.d.ts.map +1 -1
  196. package/dist/pages/PlanningPage.js +88 -17
  197. package/dist/pages/PlanningPage.js.map +1 -1
  198. package/dist/pages/RaiseDetail.d.ts.map +1 -1
  199. package/dist/pages/RaiseDetail.js +13 -1
  200. package/dist/pages/RaiseDetail.js.map +1 -1
  201. package/dist/pages/RoleDetail.d.ts.map +1 -1
  202. package/dist/pages/RoleDetail.js +5 -4
  203. package/dist/pages/RoleDetail.js.map +1 -1
  204. package/dist/pages/SearchPage.d.ts.map +1 -1
  205. package/dist/pages/SearchPage.js +1 -0
  206. package/dist/pages/SearchPage.js.map +1 -1
  207. package/dist/pages/admin/DataPage.d.ts.map +1 -1
  208. package/dist/pages/admin/DataPage.js +126 -13
  209. package/dist/pages/admin/DataPage.js.map +1 -1
  210. package/dist/pages/admin/FieldsPage.d.ts +2 -0
  211. package/dist/pages/admin/FieldsPage.d.ts.map +1 -0
  212. package/dist/pages/admin/FieldsPage.js +164 -0
  213. package/dist/pages/admin/FieldsPage.js.map +1 -0
  214. package/dist/pages/admin/PrivacyPage.d.ts +9 -0
  215. package/dist/pages/admin/PrivacyPage.d.ts.map +1 -0
  216. package/dist/pages/admin/PrivacyPage.js +170 -0
  217. package/dist/pages/admin/PrivacyPage.js.map +1 -0
  218. package/dist/pages/admin/WebhookDeliveries.d.ts.map +1 -1
  219. package/dist/pages/admin/WebhookDeliveries.js +3 -2
  220. package/dist/pages/admin/WebhookDeliveries.js.map +1 -1
  221. package/dist/pages/admin/WebhooksPage.d.ts.map +1 -1
  222. package/dist/pages/admin/WebhooksPage.js +3 -2
  223. package/dist/pages/admin/WebhooksPage.js.map +1 -1
  224. package/dist/pages/admin/WorkspaceSettingsPage.d.ts.map +1 -1
  225. package/dist/pages/admin/WorkspaceSettingsPage.js +45 -2
  226. package/dist/pages/admin/WorkspaceSettingsPage.js.map +1 -1
  227. package/dist/pages/dashboard/attention.d.ts.map +1 -1
  228. package/dist/pages/dashboard/attention.js +3 -0
  229. package/dist/pages/dashboard/attention.js.map +1 -1
  230. package/dist/pages/forms/AddFieldMenu.d.ts +17 -0
  231. package/dist/pages/forms/AddFieldMenu.d.ts.map +1 -0
  232. package/dist/pages/forms/AddFieldMenu.js +43 -0
  233. package/dist/pages/forms/AddFieldMenu.js.map +1 -0
  234. package/dist/pages/forms/EmbedPanel.d.ts +4 -0
  235. package/dist/pages/forms/EmbedPanel.d.ts.map +1 -1
  236. package/dist/pages/forms/EmbedPanel.js +62 -3
  237. package/dist/pages/forms/EmbedPanel.js.map +1 -1
  238. package/dist/pages/forms/FieldsEditor.d.ts.map +1 -1
  239. package/dist/pages/forms/FieldsEditor.js +179 -36
  240. package/dist/pages/forms/FieldsEditor.js.map +1 -1
  241. package/dist/pages/forms/FormActions.d.ts +6 -0
  242. package/dist/pages/forms/FormActions.d.ts.map +1 -0
  243. package/dist/pages/forms/FormActions.js +149 -0
  244. package/dist/pages/forms/FormActions.js.map +1 -0
  245. package/dist/pages/forms/FormSettings.d.ts.map +1 -1
  246. package/dist/pages/forms/FormSettings.js +15 -19
  247. package/dist/pages/forms/FormSettings.js.map +1 -1
  248. package/dist/pages/forms/SubmissionDetail.d.ts +2 -0
  249. package/dist/pages/forms/SubmissionDetail.d.ts.map +1 -0
  250. package/dist/pages/forms/SubmissionDetail.js +76 -0
  251. package/dist/pages/forms/SubmissionDetail.js.map +1 -0
  252. package/dist/pages/forms/SubmissionsTable.d.ts.map +1 -1
  253. package/dist/pages/forms/SubmissionsTable.js +57 -8
  254. package/dist/pages/forms/SubmissionsTable.js.map +1 -1
  255. package/dist/pages/forms/fieldList.d.ts +11 -5
  256. package/dist/pages/forms/fieldList.d.ts.map +1 -1
  257. package/dist/pages/forms/fieldList.js +66 -6
  258. package/dist/pages/forms/fieldList.js.map +1 -1
  259. package/dist/pages/forms/template.d.ts +17 -0
  260. package/dist/pages/forms/template.d.ts.map +1 -1
  261. package/dist/pages/forms/template.js +93 -0
  262. package/dist/pages/forms/template.js.map +1 -1
  263. package/dist/pages/handbook/HandbookPage.js +1 -1
  264. package/dist/pages/hiringDirectory.js +2 -2
  265. package/dist/pages/onboarding/WorkspaceStepPage.d.ts.map +1 -1
  266. package/dist/pages/onboarding/WorkspaceStepPage.js +15 -2
  267. package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -1
  268. package/dist/pages/positionDirectory.js +2 -2
  269. package/package.json +2 -2
  270. package/src/api/resource.ts +155 -32
  271. package/src/api/resources/companies.ts +7 -1
  272. package/src/api/resources/consentPurposes.ts +83 -0
  273. package/src/api/resources/customFields.ts +88 -0
  274. package/src/api/resources/decisions.ts +3 -0
  275. package/src/api/resources/emailDomainLinker.ts +43 -0
  276. package/src/api/resources/enquiries.ts +118 -0
  277. package/src/api/resources/forms.ts +59 -19
  278. package/src/api/resources/handbookPages.ts +1 -1
  279. package/src/api/resources/importJobs.ts +9 -0
  280. package/src/api/resources/listMembers.ts +173 -0
  281. package/src/api/resources/lists.ts +61 -0
  282. package/src/api/resources/opportunities.ts +3 -0
  283. package/src/api/resources/people.ts +4 -1
  284. package/src/api/resources/roles.ts +3 -1
  285. package/src/api/resources/sampleData.ts +57 -0
  286. package/src/api/resources/webhooks.ts +8 -24
  287. package/src/app/KelpieApp.tsx +16 -0
  288. package/src/components/ActivitiesPanel.tsx +3 -10
  289. package/src/components/ColumnPicker.tsx +124 -0
  290. package/src/components/CustomFieldsPanel.tsx +330 -0
  291. package/src/components/DataTable.tsx +89 -10
  292. package/src/components/DecisionsPanel.tsx +4 -12
  293. package/src/components/EntitySearch.tsx +12 -5
  294. package/src/components/FormsPanel.tsx +86 -0
  295. package/src/components/ListsPanel.tsx +176 -0
  296. package/src/components/NotesPanel.tsx +6 -14
  297. package/src/components/Paginator.tsx +78 -0
  298. package/src/components/PlanAttention.tsx +20 -3
  299. package/src/components/PlanPanel.tsx +2 -10
  300. package/src/components/Shell.tsx +4 -0
  301. package/src/components/useHasCustomFields.ts +18 -0
  302. package/src/index.ts +10 -1
  303. package/src/lib/listView.ts +149 -0
  304. package/src/lib/sort.ts +143 -0
  305. package/src/pages/CompaniesPage.tsx +125 -11
  306. package/src/pages/CompanyDetail.tsx +98 -63
  307. package/src/pages/DealDetail.tsx +34 -0
  308. package/src/pages/DealsPage.tsx +178 -24
  309. package/src/pages/DecisionsPage.tsx +75 -18
  310. package/src/pages/EnquiriesPage.tsx +434 -0
  311. package/src/pages/EnquiryDetail.tsx +554 -0
  312. package/src/pages/EnquiryStageSettingsPage.tsx +63 -0
  313. package/src/pages/FormDetail.tsx +23 -1
  314. package/src/pages/FormsPage.tsx +81 -17
  315. package/src/pages/FundraisingPage.tsx +152 -24
  316. package/src/pages/HiringPage.tsx +39 -11
  317. package/src/pages/ListDetail.tsx +470 -0
  318. package/src/pages/ListsPage.tsx +281 -0
  319. package/src/pages/OpportunitiesPage.tsx +130 -24
  320. package/src/pages/OpportunityDetail.tsx +168 -2
  321. package/src/pages/PartnershipDetail.tsx +35 -0
  322. package/src/pages/PartnershipsPage.tsx +149 -24
  323. package/src/pages/PeoplePage.tsx +157 -11
  324. package/src/pages/PersonDetail.tsx +157 -6
  325. package/src/pages/PlanningPage.tsx +259 -29
  326. package/src/pages/RaiseDetail.tsx +24 -0
  327. package/src/pages/RoleDetail.tsx +21 -26
  328. package/src/pages/SearchPage.tsx +1 -0
  329. package/src/pages/admin/DataPage.tsx +324 -13
  330. package/src/pages/admin/FieldsPage.tsx +455 -0
  331. package/src/pages/admin/PrivacyPage.tsx +461 -0
  332. package/src/pages/admin/WebhookDeliveries.tsx +10 -15
  333. package/src/pages/admin/WebhooksPage.tsx +14 -19
  334. package/src/pages/admin/WorkspaceSettingsPage.tsx +134 -2
  335. package/src/pages/dashboard/attention.ts +3 -0
  336. package/src/pages/forms/AddFieldMenu.tsx +121 -0
  337. package/src/pages/forms/EmbedPanel.tsx +163 -2
  338. package/src/pages/forms/FieldsEditor.tsx +539 -165
  339. package/src/pages/forms/FormActions.tsx +552 -0
  340. package/src/pages/forms/FormSettings.tsx +29 -70
  341. package/src/pages/forms/SubmissionDetail.tsx +249 -0
  342. package/src/pages/forms/SubmissionsTable.tsx +112 -26
  343. package/src/pages/forms/fieldList.ts +68 -5
  344. package/src/pages/forms/template.ts +103 -0
  345. package/src/pages/handbook/HandbookPage.tsx +1 -1
  346. package/src/pages/hiringDirectory.ts +2 -2
  347. package/src/pages/onboarding/WorkspaceStepPage.tsx +31 -3
  348. package/src/pages/positionDirectory.ts +2 -2
  349. package/src/styles.css +3 -3
@@ -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;AAsB7D,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,CAyFhG"}
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: 'deal',
45
- header: 'Deal',
46
- className: 'w-24',
47
- 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 }),
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(DataTable, { columns: columns, rows: submissions.records, getRowId: (submission) => submission.id, emptyMessage: "No submissions yet" }), submissions.hasMore && (_jsx("button", { type: "button", onClick: submissions.loadMore, disabled: submissions.isLoadingMore, className: "mt-3 rounded-md border border-border px-3 py-1.5 text-[12px] font-medium text-ink transition hover:border-border-strong hover:bg-surface-sunken disabled:opacity-50", children: submissions.isLoadingMore ? 'Loading…' : 'Load more' }))] }));
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", 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 }));
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) => field.mapTo !== 'person.name' && field.mapTo !== 'person.email')
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":"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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"}
@@ -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` is the target that may repeat.
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 !== 'submission') {
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. Choosing `person.email` implies an email input. */
168
+ /** The types a mapping can sensibly render as. */
123
169
  export function typeForTarget(target, current) {
124
- return target === PERSON_EMAIL_TARGET ? 'email' : current;
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":"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"}
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"}