@aglyn/plugins-crm 1.0.0-beta.221 → 1.0.0-beta.223

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 (541) hide show
  1. package/README.md +2 -1
  2. package/package.json +13 -13
  3. package/src/lib/components/activity-list.js +12 -5
  4. package/src/lib/components/activity-list.js.map +1 -1
  5. package/src/lib/components/companies-bulk-bar.d.ts +1 -4
  6. package/src/lib/components/companies-bulk-bar.js +7 -20
  7. package/src/lib/components/companies-bulk-bar.js.map +1 -1
  8. package/src/lib/components/companies-section.d.ts +3 -3
  9. package/src/lib/components/companies-section.js +149 -46
  10. package/src/lib/components/companies-section.js.map +1 -1
  11. package/src/lib/components/company-edit-drawer.js +281 -20
  12. package/src/lib/components/company-edit-drawer.js.map +1 -1
  13. package/src/lib/components/company-properties-card.js +99 -8
  14. package/src/lib/components/company-properties-card.js.map +1 -1
  15. package/src/lib/components/contact-detail-page.js +3 -1
  16. package/src/lib/components/contact-detail-page.js.map +1 -1
  17. package/src/lib/components/contact-merge-dialog.js +33 -10
  18. package/src/lib/components/contact-merge-dialog.js.map +1 -1
  19. package/src/lib/components/contact-properties-card.d.ts +0 -69
  20. package/src/lib/components/contact-properties-card.js +350 -60
  21. package/src/lib/components/contact-properties-card.js.map +1 -1
  22. package/src/lib/components/contact-reports-to-field.d.ts +46 -0
  23. package/src/lib/components/contact-reports-to-field.js +67 -0
  24. package/src/lib/components/contact-reports-to-field.js.map +1 -0
  25. package/src/lib/components/contacts-bulk-bar.d.ts +1 -8
  26. package/src/lib/components/contacts-bulk-bar.js +7 -19
  27. package/src/lib/components/contacts-bulk-bar.js.map +1 -1
  28. package/src/lib/components/contacts-section.js +46 -33
  29. package/src/lib/components/contacts-section.js.map +1 -1
  30. package/src/lib/components/crm-call-actions.d.ts +10 -0
  31. package/src/lib/components/crm-call-actions.js +26 -9
  32. package/src/lib/components/crm-call-actions.js.map +1 -1
  33. package/src/lib/components/crm-next-activity-column.js +1 -1
  34. package/src/lib/components/crm-next-activity-column.js.map +1 -1
  35. package/src/lib/components/crm-record-picker.d.ts +15 -0
  36. package/src/lib/components/crm-record-picker.js +16 -10
  37. package/src/lib/components/crm-record-picker.js.map +1 -1
  38. package/src/lib/components/crm-transfer-buttons.d.ts +54 -0
  39. package/src/lib/components/crm-transfer-buttons.js +167 -0
  40. package/src/lib/components/crm-transfer-buttons.js.map +1 -0
  41. package/src/lib/components/deal-contact-roles-card.d.ts +46 -0
  42. package/src/lib/components/deal-contact-roles-card.js +368 -0
  43. package/src/lib/components/deal-contact-roles-card.js.map +1 -0
  44. package/src/lib/components/deal-detail-page.d.ts +3 -2
  45. package/src/lib/components/deal-detail-page.js +25 -6
  46. package/src/lib/components/deal-detail-page.js.map +1 -1
  47. package/src/lib/components/deal-edit-drawer.d.ts +10 -0
  48. package/src/lib/components/deal-edit-drawer.js +219 -10
  49. package/src/lib/components/deal-edit-drawer.js.map +1 -1
  50. package/src/lib/components/deal-properties-card.d.ts +7 -0
  51. package/src/lib/components/deal-properties-card.js +34 -3
  52. package/src/lib/components/deal-properties-card.js.map +1 -1
  53. package/src/lib/components/deal-stage-card.d.ts +4 -0
  54. package/src/lib/components/deal-stage-card.js +10 -2
  55. package/src/lib/components/deal-stage-card.js.map +1 -1
  56. package/src/lib/components/deals-bulk-bar.d.ts +0 -3
  57. package/src/lib/components/deals-bulk-bar.js +7 -20
  58. package/src/lib/components/deals-bulk-bar.js.map +1 -1
  59. package/src/lib/components/deals-section.d.ts +3 -3
  60. package/src/lib/components/deals-section.js +123 -63
  61. package/src/lib/components/deals-section.js.map +1 -1
  62. package/src/lib/components/fields-section.js +31 -17
  63. package/src/lib/components/fields-section.js.map +1 -1
  64. package/src/lib/components/lead-convert-dialog.d.ts +4 -0
  65. package/src/lib/components/lead-convert-dialog.js +23 -1
  66. package/src/lib/components/lead-convert-dialog.js.map +1 -1
  67. package/src/lib/components/lead-detail-page.js +8 -2
  68. package/src/lib/components/lead-detail-page.js.map +1 -1
  69. package/src/lib/components/lead-profile-fields.d.ts +71 -0
  70. package/src/lib/components/lead-profile-fields.js +386 -0
  71. package/src/lib/components/lead-profile-fields.js.map +1 -0
  72. package/src/lib/components/lead-properties-card.d.ts +2 -1
  73. package/src/lib/components/lead-properties-card.js +85 -176
  74. package/src/lib/components/lead-properties-card.js.map +1 -1
  75. package/src/lib/components/lead-source-select.d.ts +4 -23
  76. package/src/lib/components/lead-source-select.js +9 -73
  77. package/src/lib/components/lead-source-select.js.map +1 -1
  78. package/src/lib/components/lead-status-chip.d.ts +9 -3
  79. package/src/lib/components/lead-status-chip.js +8 -4
  80. package/src/lib/components/lead-status-chip.js.map +1 -1
  81. package/src/lib/components/lead-status-options.d.ts +20 -0
  82. package/src/lib/components/lead-status-options.js +51 -0
  83. package/src/lib/components/lead-status-options.js.map +1 -0
  84. package/src/lib/components/lead-unqualify-dialog.d.ts +5 -0
  85. package/src/lib/components/lead-unqualify-dialog.js +50 -18
  86. package/src/lib/components/lead-unqualify-dialog.js.map +1 -1
  87. package/src/lib/components/leads-bulk-bar.d.ts +0 -3
  88. package/src/lib/components/leads-bulk-bar.js +29 -29
  89. package/src/lib/components/leads-bulk-bar.js.map +1 -1
  90. package/src/lib/components/leads-section.js +120 -68
  91. package/src/lib/components/leads-section.js.map +1 -1
  92. package/src/lib/components/linked-deals-card.d.ts +4 -0
  93. package/src/lib/components/linked-deals-card.js +47 -3
  94. package/src/lib/components/linked-deals-card.js.map +1 -1
  95. package/src/lib/components/log-activity-dialog.js +43 -3
  96. package/src/lib/components/log-activity-dialog.js.map +1 -1
  97. package/src/lib/components/new-contact-drawer.d.ts +8 -0
  98. package/src/lib/components/new-contact-drawer.js +108 -6
  99. package/src/lib/components/new-contact-drawer.js.map +1 -1
  100. package/src/lib/components/new-lead-drawer.d.ts +9 -2
  101. package/src/lib/components/new-lead-drawer.js +88 -121
  102. package/src/lib/components/new-lead-drawer.js.map +1 -1
  103. package/src/lib/components/picklist-select.d.ts +36 -0
  104. package/src/lib/components/picklist-select.js +114 -0
  105. package/src/lib/components/picklist-select.js.map +1 -0
  106. package/src/lib/components/picklist-values-card.d.ts +34 -0
  107. package/src/lib/components/{lead-source-values-card.js → picklist-values-card.js} +241 -58
  108. package/src/lib/components/picklist-values-card.js.map +1 -0
  109. package/src/lib/components/pipeline-stages-dialog.d.ts +7 -0
  110. package/src/lib/components/pipeline-stages-dialog.js +26 -4
  111. package/src/lib/components/pipeline-stages-dialog.js.map +1 -1
  112. package/src/lib/components/pipelines-dialog.js +15 -6
  113. package/src/lib/components/pipelines-dialog.js.map +1 -1
  114. package/src/lib/components/recent-activity-feed.js +20 -5
  115. package/src/lib/components/recent-activity-feed.js.map +1 -1
  116. package/src/lib/components/recipes-card.js +4 -2
  117. package/src/lib/components/recipes-card.js.map +1 -1
  118. package/src/lib/components/record-tasks-card.js +15 -8
  119. package/src/lib/components/record-tasks-card.js.map +1 -1
  120. package/src/lib/components/reports/forecast-card.d.ts +6 -0
  121. package/src/lib/components/reports/forecast-card.js +101 -3
  122. package/src/lib/components/reports/forecast-card.js.map +1 -1
  123. package/src/lib/components/reports/lead-funnel-card.d.ts +12 -0
  124. package/src/lib/components/reports/lead-funnel-card.js +9 -5
  125. package/src/lib/components/reports/lead-funnel-card.js.map +1 -1
  126. package/src/lib/components/reports/lead-source-card.d.ts +23 -0
  127. package/src/lib/components/reports/lead-source-card.js +318 -0
  128. package/src/lib/components/reports/lead-source-card.js.map +1 -0
  129. package/src/lib/components/reports/pipeline-card.js +2 -1
  130. package/src/lib/components/reports/pipeline-card.js.map +1 -1
  131. package/src/lib/components/reports/report-export.js +1 -1
  132. package/src/lib/components/reports/report-export.js.map +1 -1
  133. package/src/lib/components/reports-section.js +8 -0
  134. package/src/lib/components/reports-section.js.map +1 -1
  135. package/src/lib/components/sharing-rule-drawer.d.ts +5 -0
  136. package/src/lib/components/sharing-rule-drawer.js +108 -19
  137. package/src/lib/components/sharing-rule-drawer.js.map +1 -1
  138. package/src/lib/components/sharing-rules-card.js +11 -3
  139. package/src/lib/components/sharing-rules-card.js.map +1 -1
  140. package/src/lib/components/task-cells.d.ts +9 -1
  141. package/src/lib/components/task-cells.js +9 -4
  142. package/src/lib/components/task-cells.js.map +1 -1
  143. package/src/lib/components/task-edit-drawer.js +111 -43
  144. package/src/lib/components/task-edit-drawer.js.map +1 -1
  145. package/src/lib/components/tasks-bulk-bar.d.ts +0 -3
  146. package/src/lib/components/tasks-bulk-bar.js +7 -20
  147. package/src/lib/components/tasks-bulk-bar.js.map +1 -1
  148. package/src/lib/components/tasks-calendar.d.ts +3 -0
  149. package/src/lib/components/tasks-calendar.js +8 -1
  150. package/src/lib/components/tasks-calendar.js.map +1 -1
  151. package/src/lib/components/tasks-section.d.ts +3 -3
  152. package/src/lib/components/tasks-section.js +58 -43
  153. package/src/lib/components/tasks-section.js.map +1 -1
  154. package/src/lib/constants/api-routes.d.ts +2 -9
  155. package/src/lib/constants/api-routes.js +1 -7
  156. package/src/lib/constants/api-routes.js.map +1 -1
  157. package/src/lib/constants/bundle-common.d.ts +6 -0
  158. package/src/lib/constants/bundle-common.js +11 -0
  159. package/src/lib/constants/bundle-common.js.map +1 -1
  160. package/src/lib/constants/company-filters.d.ts +14 -0
  161. package/src/lib/constants/company-filters.js +51 -1
  162. package/src/lib/constants/company-filters.js.map +1 -1
  163. package/src/lib/constants/contact-filters.d.ts +2 -0
  164. package/src/lib/constants/contact-filters.js +18 -1
  165. package/src/lib/constants/contact-filters.js.map +1 -1
  166. package/src/lib/constants/deal-filters.d.ts +22 -1
  167. package/src/lib/constants/deal-filters.js +67 -4
  168. package/src/lib/constants/deal-filters.js.map +1 -1
  169. package/src/lib/declarations.console-server.d.ts +3 -0
  170. package/src/lib/declarations.console-server.js +35 -0
  171. package/src/lib/declarations.console-server.js.map +1 -1
  172. package/src/lib/declarations.d.ts +26 -0
  173. package/src/lib/declarations.js +35 -0
  174. package/src/lib/declarations.js.map +1 -0
  175. package/src/lib/declarations.server.d.ts +11 -0
  176. package/src/lib/declarations.server.js +97 -1
  177. package/src/lib/declarations.server.js.map +1 -1
  178. package/src/lib/hooks/use-company-picklists.d.ts +15 -0
  179. package/src/lib/hooks/use-company-picklists.js +55 -0
  180. package/src/lib/hooks/use-company-picklists.js.map +1 -0
  181. package/src/lib/hooks/use-crm-picklist.d.ts +25 -0
  182. package/src/lib/hooks/use-crm-picklist.js +53 -0
  183. package/src/lib/hooks/use-crm-picklist.js.map +1 -0
  184. package/src/lib/hooks/use-crm-record-names.d.ts +16 -0
  185. package/src/lib/hooks/use-crm-record-names.js +45 -19
  186. package/src/lib/hooks/use-crm-record-names.js.map +1 -1
  187. package/src/lib/hooks/use-crm-task-picklists.d.ts +11 -0
  188. package/src/lib/hooks/use-crm-task-picklists.js +45 -0
  189. package/src/lib/hooks/use-crm-task-picklists.js.map +1 -0
  190. package/src/lib/hooks/use-deals.d.ts +14 -0
  191. package/src/lib/hooks/use-deals.js +29 -0
  192. package/src/lib/hooks/use-deals.js.map +1 -1
  193. package/src/lib/hooks/use-lead-picklists.d.ts +14 -0
  194. package/src/lib/hooks/use-lead-picklists.js +46 -0
  195. package/src/lib/hooks/use-lead-picklists.js.map +1 -0
  196. package/src/lib/hooks/use-lead-source-picklist.d.ts +5 -19
  197. package/src/lib/hooks/use-lead-source-picklist.js +12 -22
  198. package/src/lib/hooks/use-lead-source-picklist.js.map +1 -1
  199. package/src/lib/hooks/use-lead-status-picklist.d.ts +9 -0
  200. package/src/lib/hooks/use-lead-status-picklist.js +40 -0
  201. package/src/lib/hooks/use-lead-status-picklist.js.map +1 -0
  202. package/src/lib/model/companies.d.ts +32 -3
  203. package/src/lib/model/companies.js +133 -16
  204. package/src/lib/model/companies.js.map +1 -1
  205. package/src/lib/model/contact-merge.d.ts +27 -3
  206. package/src/lib/model/contact-merge.js +81 -7
  207. package/src/lib/model/contact-merge.js.map +1 -1
  208. package/src/lib/model/contact-record.d.ts +17 -0
  209. package/src/lib/model/contact-record.js +17 -2
  210. package/src/lib/model/contact-record.js.map +1 -1
  211. package/src/lib/model/contact-update.d.ts +31 -2
  212. package/src/lib/model/contact-update.js +14 -0
  213. package/src/lib/model/contact-update.js.map +1 -1
  214. package/src/lib/model/crm-list-query.d.ts +5 -0
  215. package/src/lib/model/crm-list-query.js +8 -0
  216. package/src/lib/model/crm-list-query.js.map +1 -1
  217. package/src/lib/model/crm-next-activity.d.ts +107 -0
  218. package/src/lib/model/crm-next-activity.js +140 -0
  219. package/src/lib/model/crm-next-activity.js.map +1 -0
  220. package/src/lib/model/crm-recipes.d.ts +40 -0
  221. package/src/lib/model/crm-recipes.js +259 -0
  222. package/src/lib/model/crm-recipes.js.map +1 -0
  223. package/src/lib/model/crm-record-counts.d.ts +36 -0
  224. package/src/lib/model/crm-record-counts.js +54 -0
  225. package/src/lib/model/crm-record-counts.js.map +1 -0
  226. package/src/lib/model/crm-record-lists.d.ts +23 -0
  227. package/src/lib/model/crm-record-lists.js +161 -0
  228. package/src/lib/model/crm-record-lists.js.map +1 -0
  229. package/src/lib/model/crm-reports.d.ts +73 -3
  230. package/src/lib/model/crm-reports.js +120 -1
  231. package/src/lib/model/crm-reports.js.map +1 -1
  232. package/src/lib/model/crm-sharing.d.ts +21 -3
  233. package/src/lib/model/crm-sharing.js +27 -6
  234. package/src/lib/model/crm-sharing.js.map +1 -1
  235. package/src/lib/model/crm-task-reminders.d.ts +152 -0
  236. package/src/lib/model/crm-task-reminders.js +161 -0
  237. package/src/lib/model/crm-task-reminders.js.map +1 -0
  238. package/src/lib/model/deal-board-model.d.ts +8 -2
  239. package/src/lib/model/deal-board-model.js +15 -2
  240. package/src/lib/model/deal-board-model.js.map +1 -1
  241. package/src/lib/model/deal-contact-roles.d.ts +45 -0
  242. package/src/lib/model/deal-contact-roles.js +73 -0
  243. package/src/lib/model/deal-contact-roles.js.map +1 -0
  244. package/src/lib/model/deal-form-model.d.ts +56 -0
  245. package/src/lib/model/deal-form-model.js +79 -7
  246. package/src/lib/model/deal-form-model.js.map +1 -1
  247. package/src/lib/model/download-text-file.d.ts +23 -0
  248. package/src/lib/model/download-text-file.js +34 -0
  249. package/src/lib/model/download-text-file.js.map +1 -0
  250. package/src/lib/model/lead-filters.d.ts +36 -2
  251. package/src/lib/model/lead-filters.js +123 -2
  252. package/src/lib/model/lead-filters.js.map +1 -1
  253. package/src/lib/model/lead-source-direction.d.ts +38 -0
  254. package/src/lib/model/lead-source-direction.js +52 -0
  255. package/src/lib/model/lead-source-direction.js.map +1 -0
  256. package/src/lib/model/next-activity.d.ts +1 -1
  257. package/src/lib/model/next-activity.js.map +1 -1
  258. package/src/lib/model/picklist-values.d.ts +119 -0
  259. package/src/lib/model/picklist-values.js +256 -0
  260. package/src/lib/model/picklist-values.js.map +1 -0
  261. package/src/lib/model/record-facts-disclosed.d.ts +81 -0
  262. package/src/lib/model/record-facts-disclosed.js +281 -0
  263. package/src/lib/model/record-facts-disclosed.js.map +1 -0
  264. package/src/lib/model/record-facts.d.ts +215 -34
  265. package/src/lib/model/record-facts.js +307 -128
  266. package/src/lib/model/record-facts.js.map +1 -1
  267. package/src/lib/model/task-picklists.d.ts +52 -0
  268. package/src/lib/model/task-picklists.js +83 -0
  269. package/src/lib/model/task-picklists.js.map +1 -0
  270. package/src/lib/model/task-routes.d.ts +13 -0
  271. package/src/lib/model/task-routes.js +23 -4
  272. package/src/lib/model/task-routes.js.map +1 -1
  273. package/src/lib/plan-entitlements.js +6 -4
  274. package/src/lib/plan-entitlements.js.map +1 -1
  275. package/src/lib/plugin.js +17 -0
  276. package/src/lib/plugin.js.map +1 -1
  277. package/src/lib/server/api-v1/contacts.js +220 -14
  278. package/src/lib/server/api-v1/contacts.js.map +1 -1
  279. package/src/lib/server/api-v1/crm-activities.js +14 -1
  280. package/src/lib/server/api-v1/crm-activities.js.map +1 -1
  281. package/src/lib/server/api-v1/crm-companies.js +123 -14
  282. package/src/lib/server/api-v1/crm-companies.js.map +1 -1
  283. package/src/lib/server/api-v1/crm-deals.js +291 -26
  284. package/src/lib/server/api-v1/crm-deals.js.map +1 -1
  285. package/src/lib/server/api-v1/crm-leads.js +144 -38
  286. package/src/lib/server/api-v1/crm-leads.js.map +1 -1
  287. package/src/lib/server/api-v1/crm-pipelines.d.ts +6 -0
  288. package/src/lib/server/api-v1/crm-pipelines.js +8 -2
  289. package/src/lib/server/api-v1/crm-pipelines.js.map +1 -1
  290. package/src/lib/server/api-v1/crm-tasks.js +78 -34
  291. package/src/lib/server/api-v1/crm-tasks.js.map +1 -1
  292. package/src/lib/server/api-v1/openapi.d.ts +0 -11
  293. package/src/lib/server/api-v1/openapi.js +171 -16
  294. package/src/lib/server/api-v1/openapi.js.map +1 -1
  295. package/src/lib/server/assign-contact-owner.d.ts +188 -0
  296. package/src/lib/server/assign-contact-owner.js +446 -0
  297. package/src/lib/server/assign-contact-owner.js.map +1 -0
  298. package/src/lib/server/associate-company-by-domain.d.ts +70 -0
  299. package/src/lib/server/associate-company-by-domain.js +153 -0
  300. package/src/lib/server/associate-company-by-domain.js.map +1 -0
  301. package/src/lib/server/automation-steps.d.ts +140 -0
  302. package/src/lib/server/automation-steps.js +669 -0
  303. package/src/lib/server/automation-steps.js.map +1 -0
  304. package/src/lib/server/capture-contact.d.ts +17 -0
  305. package/src/lib/server/capture-contact.js +95 -26
  306. package/src/lib/server/capture-contact.js.map +1 -1
  307. package/src/lib/server/capture-host-contact.d.ts +104 -0
  308. package/src/lib/server/capture-host-contact.js +151 -0
  309. package/src/lib/server/capture-host-contact.js.map +1 -0
  310. package/src/lib/server/company-children.d.ts +25 -0
  311. package/src/lib/server/company-children.js +42 -0
  312. package/src/lib/server/company-children.js.map +1 -0
  313. package/src/lib/server/company-delete.d.ts +18 -0
  314. package/src/lib/server/company-delete.js +44 -21
  315. package/src/lib/server/company-delete.js.map +1 -1
  316. package/src/lib/server/contact-email-history.js +21 -19
  317. package/src/lib/server/contact-email-history.js.map +1 -1
  318. package/src/lib/server/contact-remove.js +27 -2
  319. package/src/lib/server/contact-remove.js.map +1 -1
  320. package/src/lib/server/contact-reports-to.d.ts +61 -0
  321. package/src/lib/server/contact-reports-to.js +114 -0
  322. package/src/lib/server/contact-reports-to.js.map +1 -0
  323. package/src/lib/server/contact-update.d.ts +42 -1
  324. package/src/lib/server/contact-update.js +204 -23
  325. package/src/lib/server/contact-update.js.map +1 -1
  326. package/src/lib/server/convert-host-lead.d.ts +46 -1
  327. package/src/lib/server/convert-host-lead.js +173 -15
  328. package/src/lib/server/convert-host-lead.js.map +1 -1
  329. package/src/lib/server/convert-open-lead.js +12 -5
  330. package/src/lib/server/convert-open-lead.js.map +1 -1
  331. package/src/lib/server/crm-email-activity.d.ts +118 -0
  332. package/src/lib/server/crm-email-activity.js +148 -0
  333. package/src/lib/server/crm-email-activity.js.map +1 -0
  334. package/src/lib/server/crm-inbound-email.js +1 -1
  335. package/src/lib/server/crm-inbound-email.js.map +1 -1
  336. package/src/lib/server/crm-next-activity.d.ts +74 -0
  337. package/src/lib/server/crm-next-activity.js +194 -0
  338. package/src/lib/server/crm-next-activity.js.map +1 -0
  339. package/src/lib/server/crm-record-indexes.d.ts +45 -0
  340. package/src/lib/server/crm-record-indexes.js +78 -0
  341. package/src/lib/server/crm-record-indexes.js.map +1 -0
  342. package/src/lib/server/crm-sharing.d.ts +9 -1
  343. package/src/lib/server/crm-sharing.js +23 -3
  344. package/src/lib/server/crm-sharing.js.map +1 -1
  345. package/src/lib/server/deal-contact-roles.d.ts +27 -0
  346. package/src/lib/server/deal-contact-roles.js +89 -0
  347. package/src/lib/server/deal-contact-roles.js.map +1 -0
  348. package/src/lib/server/email-send.js +2 -1
  349. package/src/lib/server/email-send.js.map +1 -1
  350. package/src/lib/server/lead-convert.d.ts +5 -0
  351. package/src/lib/server/lead-convert.js +19 -3
  352. package/src/lib/server/lead-convert.js.map +1 -1
  353. package/src/lib/server/lead-create.d.ts +17 -2
  354. package/src/lib/server/lead-create.js +46 -14
  355. package/src/lib/server/lead-create.js.map +1 -1
  356. package/src/lib/server/lead-nurturing.d.ts +6 -0
  357. package/src/lib/server/lead-nurturing.js +57 -20
  358. package/src/lib/server/lead-nurturing.js.map +1 -1
  359. package/src/lib/server/lead-picklists.d.ts +35 -0
  360. package/src/lib/server/lead-picklists.js +52 -0
  361. package/src/lib/server/lead-picklists.js.map +1 -0
  362. package/src/lib/server/lead-source-picklist.d.ts +1 -13
  363. package/src/lib/server/lead-source-picklist.js +6 -33
  364. package/src/lib/server/lead-source-picklist.js.map +1 -1
  365. package/src/lib/server/merge-contacts.js +23 -5
  366. package/src/lib/server/merge-contacts.js.map +1 -1
  367. package/src/lib/server/next-activity-routes.js +2 -1
  368. package/src/lib/server/next-activity-routes.js.map +1 -1
  369. package/src/lib/server/person-eraser.d.ts +53 -0
  370. package/src/lib/server/person-eraser.js +149 -0
  371. package/src/lib/server/person-eraser.js.map +1 -0
  372. package/src/lib/server/person-records.d.ts +69 -0
  373. package/src/lib/server/person-records.js +317 -0
  374. package/src/lib/server/person-records.js.map +1 -0
  375. package/src/lib/server/person-refund.d.ts +97 -0
  376. package/src/lib/server/person-refund.js +221 -0
  377. package/src/lib/server/person-refund.js.map +1 -0
  378. package/src/lib/server/picklist-values.d.ts +21 -0
  379. package/src/lib/server/picklist-values.js +308 -0
  380. package/src/lib/server/picklist-values.js.map +1 -0
  381. package/src/lib/server/read-picklist.d.ts +44 -0
  382. package/src/lib/server/read-picklist.js +65 -0
  383. package/src/lib/server/read-picklist.js.map +1 -0
  384. package/src/lib/server/recipe-routes.js +22 -8
  385. package/src/lib/server/recipe-routes.js.map +1 -1
  386. package/src/lib/server/record-email-state.js +7 -1
  387. package/src/lib/server/record-email-state.js.map +1 -1
  388. package/src/lib/server/record-facts.d.ts +3 -0
  389. package/src/lib/server/record-facts.js +233 -31
  390. package/src/lib/server/record-facts.js.map +1 -1
  391. package/src/lib/server/record-origin.d.ts +27 -0
  392. package/src/lib/server/record-origin.js +104 -0
  393. package/src/lib/server/record-origin.js.map +1 -0
  394. package/src/lib/server/record-timeline.js +40 -3
  395. package/src/lib/server/record-timeline.js.map +1 -1
  396. package/src/lib/server/suite-gate.js +4 -3
  397. package/src/lib/server/suite-gate.js.map +1 -1
  398. package/src/lib/server/task-reminders-route.js +2 -1
  399. package/src/lib/server/task-reminders-route.js.map +1 -1
  400. package/src/lib/server/task-routes.js +33 -17
  401. package/src/lib/server/task-routes.js.map +1 -1
  402. package/src/lib/server-deal-stage.d.ts +5 -1
  403. package/src/lib/server-deal-stage.js +10 -5
  404. package/src/lib/server-deal-stage.js.map +1 -1
  405. package/src/lib/server.d.ts +8 -3
  406. package/src/lib/server.js +47 -43
  407. package/src/lib/server.js.map +1 -1
  408. package/src/lib/testing/memory-firestore.d.ts +55 -0
  409. package/src/lib/testing/memory-firestore.js +335 -0
  410. package/src/lib/testing/memory-firestore.js.map +1 -0
  411. package/src/lib/testing/stand-in-email-send-index.d.ts +25 -0
  412. package/src/lib/testing/stand-in-email-send-index.js +49 -0
  413. package/src/lib/testing/stand-in-email-send-index.js.map +1 -0
  414. package/src/lib/transfer/activities.d.ts +30 -0
  415. package/src/lib/transfer/activities.js +132 -0
  416. package/src/lib/transfer/activities.js.map +1 -0
  417. package/src/lib/transfer/aliases.d.ts +22 -0
  418. package/src/lib/transfer/aliases.js +1342 -0
  419. package/src/lib/transfer/aliases.js.map +1 -0
  420. package/src/lib/transfer/common.d.ts +222 -0
  421. package/src/lib/transfer/common.js +832 -0
  422. package/src/lib/transfer/common.js.map +1 -0
  423. package/src/lib/transfer/companies.d.ts +43 -0
  424. package/src/lib/transfer/companies.js +549 -0
  425. package/src/lib/transfer/companies.js.map +1 -0
  426. package/src/lib/transfer/contacts.d.ts +31 -0
  427. package/src/lib/transfer/contacts.js +727 -0
  428. package/src/lib/transfer/contacts.js.map +1 -0
  429. package/src/lib/transfer/deals.d.ts +66 -0
  430. package/src/lib/transfer/deals.js +698 -0
  431. package/src/lib/transfer/deals.js.map +1 -0
  432. package/src/lib/transfer/email-templates-package.d.ts +40 -0
  433. package/src/lib/transfer/email-templates-package.js +76 -0
  434. package/src/lib/transfer/email-templates-package.js.map +1 -0
  435. package/src/lib/transfer/email-templates-package.server.d.ts +32 -0
  436. package/src/lib/transfer/email-templates-package.server.js +176 -0
  437. package/src/lib/transfer/email-templates-package.server.js.map +1 -0
  438. package/src/lib/transfer/fields.d.ts +102 -0
  439. package/src/lib/transfer/fields.js +1755 -0
  440. package/src/lib/transfer/fields.js.map +1 -0
  441. package/src/lib/transfer/leads.d.ts +30 -0
  442. package/src/lib/transfer/leads.js +582 -0
  443. package/src/lib/transfer/leads.js.map +1 -0
  444. package/src/lib/transfer/pipelines.d.ts +21 -0
  445. package/src/lib/transfer/pipelines.js +172 -0
  446. package/src/lib/transfer/pipelines.js.map +1 -0
  447. package/src/lib/transfer/register.d.ts +47 -0
  448. package/src/lib/transfer/register.js +277 -0
  449. package/src/lib/transfer/register.js.map +1 -0
  450. package/src/lib/transfer/tasks.d.ts +30 -0
  451. package/src/lib/transfer/tasks.js +418 -0
  452. package/src/lib/transfer/tasks.js.map +1 -0
  453. package/src/lib/transfer/ui.d.ts +20 -0
  454. package/src/lib/transfer/ui.js +42 -0
  455. package/src/lib/transfer/ui.js.map +1 -0
  456. package/src/lib/components/company-import-drawer.d.ts +0 -42
  457. package/src/lib/components/company-import-drawer.js +0 -99
  458. package/src/lib/components/company-import-drawer.js.map +0 -1
  459. package/src/lib/components/contact-import-drawer.d.ts +0 -46
  460. package/src/lib/components/contact-import-drawer.js +0 -149
  461. package/src/lib/components/contact-import-drawer.js.map +0 -1
  462. package/src/lib/components/crm-export-all-button.d.ts +0 -39
  463. package/src/lib/components/crm-export-all-button.js +0 -98
  464. package/src/lib/components/crm-export-all-button.js.map +0 -1
  465. package/src/lib/components/csv-import-drawer.d.ts +0 -139
  466. package/src/lib/components/csv-import-drawer.js +0 -757
  467. package/src/lib/components/csv-import-drawer.js.map +0 -1
  468. package/src/lib/components/deal-import-drawer.d.ts +0 -24
  469. package/src/lib/components/deal-import-drawer.js +0 -83
  470. package/src/lib/components/deal-import-drawer.js.map +0 -1
  471. package/src/lib/components/lead-import-drawer.d.ts +0 -27
  472. package/src/lib/components/lead-import-drawer.js +0 -118
  473. package/src/lib/components/lead-import-drawer.js.map +0 -1
  474. package/src/lib/components/lead-source-values-card.d.ts +0 -27
  475. package/src/lib/components/lead-source-values-card.js.map +0 -1
  476. package/src/lib/components/task-import-drawer.d.ts +0 -24
  477. package/src/lib/components/task-import-drawer.js +0 -82
  478. package/src/lib/components/task-import-drawer.js.map +0 -1
  479. package/src/lib/model/companies-csv.d.ts +0 -36
  480. package/src/lib/model/companies-csv.js +0 -38
  481. package/src/lib/model/companies-csv.js.map +0 -1
  482. package/src/lib/model/contacts-csv.d.ts +0 -54
  483. package/src/lib/model/contacts-csv.js +0 -67
  484. package/src/lib/model/contacts-csv.js.map +0 -1
  485. package/src/lib/model/crm-company-import.d.ts +0 -154
  486. package/src/lib/model/crm-company-import.js +0 -331
  487. package/src/lib/model/crm-company-import.js.map +0 -1
  488. package/src/lib/model/crm-csv.d.ts +0 -239
  489. package/src/lib/model/crm-csv.js +0 -467
  490. package/src/lib/model/crm-csv.js.map +0 -1
  491. package/src/lib/model/crm-deal-import.d.ts +0 -112
  492. package/src/lib/model/crm-deal-import.js +0 -263
  493. package/src/lib/model/crm-deal-import.js.map +0 -1
  494. package/src/lib/model/crm-import.d.ts +0 -250
  495. package/src/lib/model/crm-import.js +0 -467
  496. package/src/lib/model/crm-import.js.map +0 -1
  497. package/src/lib/model/crm-lead-import.d.ts +0 -138
  498. package/src/lib/model/crm-lead-import.js +0 -446
  499. package/src/lib/model/crm-lead-import.js.map +0 -1
  500. package/src/lib/model/crm-task-import.d.ts +0 -94
  501. package/src/lib/model/crm-task-import.js +0 -275
  502. package/src/lib/model/crm-task-import.js.map +0 -1
  503. package/src/lib/model/deals-csv.d.ts +0 -32
  504. package/src/lib/model/deals-csv.js +0 -36
  505. package/src/lib/model/deals-csv.js.map +0 -1
  506. package/src/lib/model/import-column-shapes.d.ts +0 -36
  507. package/src/lib/model/import-column-shapes.js +0 -76
  508. package/src/lib/model/import-column-shapes.js.map +0 -1
  509. package/src/lib/model/lead-source-values.d.ts +0 -82
  510. package/src/lib/model/lead-source-values.js +0 -149
  511. package/src/lib/model/lead-source-values.js.map +0 -1
  512. package/src/lib/model/leads-csv.d.ts +0 -40
  513. package/src/lib/model/leads-csv.js +0 -40
  514. package/src/lib/model/leads-csv.js.map +0 -1
  515. package/src/lib/model/tasks-csv.d.ts +0 -28
  516. package/src/lib/model/tasks-csv.js +0 -28
  517. package/src/lib/model/tasks-csv.js.map +0 -1
  518. package/src/lib/server/companies-import.d.ts +0 -57
  519. package/src/lib/server/companies-import.js +0 -242
  520. package/src/lib/server/companies-import.js.map +0 -1
  521. package/src/lib/server/contacts-import.d.ts +0 -109
  522. package/src/lib/server/contacts-import.js +0 -393
  523. package/src/lib/server/contacts-import.js.map +0 -1
  524. package/src/lib/server/deals-import.d.ts +0 -76
  525. package/src/lib/server/deals-import.js +0 -248
  526. package/src/lib/server/deals-import.js.map +0 -1
  527. package/src/lib/server/export-route.d.ts +0 -60
  528. package/src/lib/server/export-route.js +0 -447
  529. package/src/lib/server/export-route.js.map +0 -1
  530. package/src/lib/server/import-context.d.ts +0 -87
  531. package/src/lib/server/import-context.js +0 -182
  532. package/src/lib/server/import-context.js.map +0 -1
  533. package/src/lib/server/lead-source-values.d.ts +0 -50
  534. package/src/lib/server/lead-source-values.js +0 -191
  535. package/src/lib/server/lead-source-values.js.map +0 -1
  536. package/src/lib/server/leads-import.d.ts +0 -84
  537. package/src/lib/server/leads-import.js +0 -367
  538. package/src/lib/server/leads-import.js.map +0 -1
  539. package/src/lib/server/tasks-import.d.ts +0 -54
  540. package/src/lib/server/tasks-import.js +0 -160
  541. package/src/lib/server/tasks-import.js.map +0 -1
@@ -17,23 +17,26 @@
17
17
  import { _ as _extends } from "@swc/helpers/_/_extends";
18
18
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
19
19
  import * as Aglyn from "@aglyn/aglyn";
20
- import { CONTACT_LIFECYCLE_STAGE_LABELS, CONTACT_LIFECYCLE_STAGES, crmTelHref, normalizePhone } from "@aglyn/aglyn";
20
+ import { composeContactName, CONTACT_BIRTHDATE_REFUSAL, CONTACT_EXTRA_PHONE_FIELDS, CONTACT_LIFECYCLE_STAGE_LABELS, CONTACT_LIFECYCLE_STAGES, CONTACT_NAME_PART_MAX, CONTACT_PHONE_FIELD_LABELS, CRM_SALUTATION_PICKLIST, crmTelHref, normalizeContactBirthdate, normalizePhone } from "@aglyn/aglyn";
21
21
  import { mdiPhoneOutline } from "@aglyn/shared-data-mdi";
22
22
  import { CardDisplay, MdiIcon } from "@aglyn/shared-ui-jsx";
23
23
  import { useSnackbar } from "@aglyn/shared-ui-snackstack";
24
24
  import { useUser, writeGuardedBySeed } from "@aglyn/tenant-feature-instance";
25
- import { Button, Grid, IconButton, InputAdornment, MenuItem, Stack, TextField, Tooltip, Typography } from "@mui/material";
25
+ import { Button, Checkbox, FormControlLabel, FormHelperText, Grid, IconButton, InputAdornment, MenuItem, Stack, TextField, Tooltip, Typography } from "@mui/material";
26
26
  import { useCallback, useEffect, useMemo, useState } from "react";
27
27
  import { useContactFieldDefinitions } from "../hooks/use-contact-field-definitions.js";
28
28
  import { useContactUpdate } from "../hooks/use-contact-update.js";
29
29
  import { useCrmActivityLogger } from "../hooks/use-crm-activity-logger.js";
30
+ import { useCrmPicklist } from "../hooks/use-crm-picklist.js";
30
31
  import { useLeadSourcePicklist } from "../hooks/use-lead-source-picklist.js";
31
32
  import { parseContactTags } from "../model/contact-record.js";
32
33
  import { setContactStage } from "../model/crm-api.js";
33
34
  import { crmCustomDraftChanges, crmCustomDraftMissingRequired, crmCustomDraftValue } from "../model/crm-custom-draft.js";
34
35
  import { CompanyPicker, useCompanyOptions, useCreateCompany } from "./company-picker.js";
35
36
  import { addressDraftFrom, ContactAddressFields } from "./contact-address-fields.js";
37
+ import { ContactReportsToField } from "./contact-reports-to-field.js";
36
38
  import { CrmCustomFieldControl } from "./crm-custom-field-control.js";
39
+ import { CrmPicklistSelect } from "./picklist-select.js";
37
40
  import { crmSuiteLockedReason } from "./crm-suite-lock.js";
38
41
  import { LeadSourceSelect } from "./lead-source-select.js";
39
42
  /**
@@ -93,6 +96,17 @@ import { LeadSourceSelect } from "./lead-source-select.js";
93
96
  * and the helper says what a blank falls back to, so nobody clears the
94
97
  * field expecting the record to go nameless.
95
98
  *
99
+ * ## Salesforce's sections (AGL-3515)
100
+ *
101
+ * The fields are grouped the way Salesforce's contact Details groups them —
102
+ * Contact information, Phones, Addresses, Additional information — and every
103
+ * one is still one draft and one Save. While the holder keeps a first or
104
+ * last name the Name field shows their composition and is read-only; the
105
+ * save sends the parts, and the route composes the name from them. The
106
+ * salutation and the reports-to are sent only when they change, for the
107
+ * lead source's reason: the route judges a sent one. Do not call is a hint
108
+ * on every phone's call link, never a block.
109
+ *
96
110
  * ## Company is a record, with its name kept beside it
97
111
  *
98
112
  * The Company field is the picker (AGL-2613): the link is `companyId` in
@@ -104,7 +118,50 @@ import { LeadSourceSelect } from "./lead-source-select.js";
104
118
  * not the id; a record that carries a name with no link — an import, a save
105
119
  * from before the picker — keeps it as the label, and the picker offers it
106
120
  * as the company to link or create.
107
- */ export function ContactPropertiesCard(props) {
121
+ */ /** The phone fields the card edits, in the order the Phones section lists them. */ const PHONE_FIELDS = [
122
+ 'phone',
123
+ ...CONTACT_EXTRA_PHONE_FIELDS
124
+ ];
125
+ const phoneDraftsFrom = (record)=>Object.fromEntries(PHONE_FIELDS.map((field)=>{
126
+ var _record_field;
127
+ return [
128
+ field,
129
+ String((_record_field = record[field]) != null ? _record_field : '')
130
+ ];
131
+ }));
132
+ /** The phones as the route stores them, or the fields that cannot be read as numbers. */ function readPhones(drafts) {
133
+ const phones = {};
134
+ const errors = {};
135
+ for (const field of PHONE_FIELDS){
136
+ const typed = drafts[field].trim();
137
+ const normalized = typed ? normalizePhone(typed) : '';
138
+ if (normalized === null) errors[field] = PHONE_HELP_ERROR;
139
+ else phones[field] = normalized;
140
+ }
141
+ return Object.keys(errors).length ? {
142
+ ok: false,
143
+ errors
144
+ } : {
145
+ ok: true,
146
+ phones
147
+ };
148
+ }
149
+ const PHONE_HELP = 'With the country code, like +1 512 555 0107';
150
+ const PHONE_HELP_ERROR = 'Enter it with its country code, like +1 512 555 0107.';
151
+ /** A section heading inside the card — Salesforce's Details groups its fields the same way. */ function SectionHeading(props) {
152
+ return /*#__PURE__*/ _jsx(Grid, {
153
+ size: {
154
+ xs: 12
155
+ },
156
+ children: /*#__PURE__*/ _jsx(Typography, {
157
+ variant: "subtitle2",
158
+ color: "text.secondary",
159
+ children: props.children
160
+ })
161
+ });
162
+ }
163
+ export function ContactPropertiesCard(props) {
164
+ var _record_salutation, _record_firstName, _record_lastName, _record_department, _record_birthdate, _record_assistantName, _record_reportsToContactId, _record_salutation1;
108
165
  const { hostId, org, record, orgId = null, consentGroup, seed, members, suiteLocked = false } = props;
109
166
  const { data: user } = useUser();
110
167
  const { enqueueSnackbar } = useSnackbar();
@@ -127,8 +184,17 @@ import { LeadSourceSelect } from "./lead-source-select.js";
127
184
  org
128
185
  });
129
186
  const [nameOverride, setNameOverride] = useState(record.nameOverride);
130
- const [phone, setPhone] = useState(record.phone);
187
+ const [salutation, setSalutation] = useState((_record_salutation = record.salutation) != null ? _record_salutation : '');
188
+ const salutations = useCrmPicklist(CRM_SALUTATION_PICKLIST, orgId);
189
+ const [firstName, setFirstName] = useState((_record_firstName = record.firstName) != null ? _record_firstName : '');
190
+ const [lastName, setLastName] = useState((_record_lastName = record.lastName) != null ? _record_lastName : '');
191
+ const [phones, setPhones] = useState(()=>phoneDraftsFrom(record));
192
+ const [doNotCall, setDoNotCall] = useState(record.doNotCall === true);
131
193
  const [jobTitle, setJobTitle] = useState(record.jobTitle);
194
+ const [department, setDepartment] = useState((_record_department = record.department) != null ? _record_department : '');
195
+ const [birthdate, setBirthdate] = useState((_record_birthdate = record.birthdate) != null ? _record_birthdate : '');
196
+ const [assistantName, setAssistantName] = useState((_record_assistantName = record.assistantName) != null ? _record_assistantName : '');
197
+ const [reportsTo, setReportsTo] = useState((_record_reportsToContactId = record.reportsToContactId) != null ? _record_reportsToContactId : '');
132
198
  // Salesforce's Lead Source (AGL-3298), carried from the lead on conversion.
133
199
  const [leadSource, setLeadSource] = useState(record.leadSource);
134
200
  const leadSources = useLeadSourcePicklist(orgId);
@@ -139,7 +205,9 @@ import { LeadSourceSelect } from "./lead-source-select.js";
139
205
  const [tags, setTags] = useState(record.tags.join(', '));
140
206
  const [notes, setNotes] = useState(record.notes);
141
207
  const [address, setAddress] = useState(addressDraftFrom(record.address));
142
- const [phoneError, setPhoneError] = useState('');
208
+ const [otherAddress, setOtherAddress] = useState(addressDraftFrom(record.otherAddress));
209
+ const [phoneErrors, setPhoneErrors] = useState({});
210
+ const [birthdateError, setBirthdateError] = useState('');
143
211
  const [saving, setSaving] = useState(false);
144
212
  /** The custom values the reader touched; every other key reads from the record. */ const [custom, setCustom] = useState({});
145
213
  /** Something was edited since the card was seeded or last saved. */ const [edited, setEdited] = useState(false);
@@ -157,14 +225,28 @@ import { LeadSourceSelect } from "./lead-source-select.js";
157
225
  custom
158
226
  ]);
159
227
  const clearingRequired = crmCustomDraftMissingRequired(customFields, storedCustom, custom, 'edit').length > 0;
228
+ /*
229
+ * The name the first and last names make (AGL-3515). While there is one,
230
+ * it IS the name — the Name field shows it, read-only, and the save sends
231
+ * the parts rather than a name the route would have to reconcile.
232
+ */ const composedName = composeContactName(firstName, lastName);
160
233
  /** One field's edit: the value, and the card now has something to save. */ const change = useCallback((set, value)=>{
161
234
  set(value);
162
235
  setEdited(true);
163
236
  }, []);
164
237
  /** Every draft back to what the record holds — the seed, and Discard. */ const reseed = ()=>{
238
+ var _record_salutation, _record_firstName, _record_lastName, _record_department, _record_birthdate, _record_assistantName, _record_reportsToContactId;
165
239
  setNameOverride(record.nameOverride);
166
- setPhone(record.phone);
240
+ setSalutation((_record_salutation = record.salutation) != null ? _record_salutation : '');
241
+ setFirstName((_record_firstName = record.firstName) != null ? _record_firstName : '');
242
+ setLastName((_record_lastName = record.lastName) != null ? _record_lastName : '');
243
+ setPhones(phoneDraftsFrom(record));
244
+ setDoNotCall(record.doNotCall === true);
167
245
  setJobTitle(record.jobTitle);
246
+ setDepartment((_record_department = record.department) != null ? _record_department : '');
247
+ setBirthdate((_record_birthdate = record.birthdate) != null ? _record_birthdate : '');
248
+ setAssistantName((_record_assistantName = record.assistantName) != null ? _record_assistantName : '');
249
+ setReportsTo((_record_reportsToContactId = record.reportsToContactId) != null ? _record_reportsToContactId : '');
168
250
  setLeadSource(record.leadSource);
169
251
  setCompanyName(record.companyName);
170
252
  setCompanyId(record.companyId || null);
@@ -173,7 +255,9 @@ import { LeadSourceSelect } from "./lead-source-select.js";
173
255
  setTags(record.tags.join(', '));
174
256
  setNotes(record.notes);
175
257
  setAddress(addressDraftFrom(record.address));
176
- setPhoneError('');
258
+ setOtherAddress(addressDraftFrom(record.otherAddress));
259
+ setPhoneErrors({});
260
+ setBirthdateError('');
177
261
  setCustom({});
178
262
  setEdited(false);
179
263
  };
@@ -190,25 +274,37 @@ import { LeadSourceSelect } from "./lead-source-select.js";
190
274
  recordId
191
275
  ]);
192
276
  const handleSave = useCallback(async ()=>{
277
+ var _record_salutation, _record_reportsToContactId;
193
278
  if (clearingRequired) return;
194
- const trimmedPhone = phone.trim();
195
- const normalizedPhone = trimmedPhone ? normalizePhone(trimmedPhone) : '';
196
- if (trimmedPhone && !normalizedPhone) {
197
- setPhoneError('Enter it with its country code, like +1 512 555 0107.');
198
- return;
199
- }
200
- setPhoneError('');
279
+ const readPhonesResult = readPhones(phones);
280
+ const storedBirthdate = normalizeContactBirthdate(birthdate);
281
+ setPhoneErrors('errors' in readPhonesResult ? readPhonesResult.errors : {});
282
+ setBirthdateError(storedBirthdate === null ? CONTACT_BIRTHDATE_REFUSAL : '');
283
+ if ('errors' in readPhonesResult || storedBirthdate === null) return;
201
284
  // A stage that differs from the record's is the stage route's to write —
202
285
  // see the note above.
203
286
  const stageChanged = !suiteLocked && lifecycleStage !== record.lifecycleStage;
204
- const set = _extends({
205
- name: nameOverride.trim().slice(0, 120),
206
- phone: normalizedPhone != null ? normalizedPhone : '',
207
- jobTitle: jobTitle.trim().slice(0, 120)
287
+ const set = _extends({}, composedName ? {} : {
288
+ name: nameOverride.trim().slice(0, 120)
289
+ }, {
290
+ firstName: firstName.trim(),
291
+ lastName: lastName.trim()
292
+ }, readPhonesResult.phones, doNotCall !== (record.doNotCall === true) ? {
293
+ doNotCall
294
+ } : {}, {
295
+ jobTitle: jobTitle.trim().slice(0, 120),
296
+ department: department.trim().slice(0, 120),
297
+ birthdate: storedBirthdate,
298
+ assistantName: assistantName.trim().slice(0, 120)
208
299
  }, leadSource !== record.leadSource ? {
209
300
  leadSource
301
+ } : {}, salutation !== ((_record_salutation = record.salutation) != null ? _record_salutation : '') ? {
302
+ salutation
303
+ } : {}, reportsTo !== ((_record_reportsToContactId = record.reportsToContactId) != null ? _record_reportsToContactId : '') ? {
304
+ reportsToContactId: reportsTo || null
210
305
  } : {}, {
211
306
  address,
307
+ otherAddress,
212
308
  tags: parseContactTags(tags),
213
309
  notes: notes.slice(0, 2000)
214
310
  }, suiteLocked ? {} : {
@@ -266,26 +362,39 @@ import { LeadSourceSelect } from "./lead-source-select.js";
266
362
  }
267
363
  }, [
268
364
  address,
365
+ assistantName,
366
+ birthdate,
269
367
  clearingRequired,
270
368
  companyId,
271
369
  companyName,
370
+ composedName,
272
371
  contactUpdate,
273
372
  customChanges,
373
+ department,
374
+ doNotCall,
274
375
  enqueueSnackbar,
376
+ firstName,
275
377
  siteHostId,
276
378
  jobTitle,
379
+ lastName,
277
380
  leadSource,
278
381
  lifecycleStage,
279
382
  logActivity,
280
383
  nameOverride,
281
384
  notes,
385
+ otherAddress,
282
386
  ownerUid,
283
- phone,
387
+ phones,
284
388
  record.$id,
389
+ record.doNotCall,
285
390
  record.email,
286
391
  record.leadSource,
287
392
  record.lifecycleStage,
288
393
  record.name,
394
+ record.reportsToContactId,
395
+ record.salutation,
396
+ reportsTo,
397
+ salutation,
289
398
  seed.fromCache,
290
399
  seed.status,
291
400
  suiteLocked,
@@ -298,7 +407,55 @@ import { LeadSourceSelect } from "./lead-source-select.js";
298
407
  * never handed a value it has no option for and the reader can see who it
299
408
  * was before reassigning.
300
409
  */ const ownerKnown = members.options.some((option)=>option.uid === ownerUid);
301
- /** The number in the box as something a dialer takes, or nothing (AGL-2661). */ const telHref = crmTelHref(phone);
410
+ /** One phone field, with click-to-call off what is IN the box (AGL-2661). */ const phoneField = (field)=>{
411
+ const value = phones[field];
412
+ const telHref = crmTelHref(value);
413
+ const callLabel = doNotCall ? `Call ${value.trim()} — marked do not call` : `Call ${value.trim()}`;
414
+ return /*#__PURE__*/ _jsx(Grid, {
415
+ size: {
416
+ xs: 12,
417
+ sm: 6
418
+ },
419
+ children: /*#__PURE__*/ _jsx(TextField, {
420
+ size: "small",
421
+ label: CONTACT_PHONE_FIELD_LABELS[field],
422
+ value: value,
423
+ onChange: (event)=>change(setPhones, _extends({}, phones, {
424
+ [field]: event.target.value
425
+ })),
426
+ error: Boolean(phoneErrors[field]),
427
+ helperText: phoneErrors[field] || (field === 'phone' ? PHONE_HELP : undefined),
428
+ fullWidth: true,
429
+ slotProps: {
430
+ input: {
431
+ /*
432
+ * The number on screen is the one a reader means to ring, and
433
+ * `crmTelHref` withholds the link from anything half-typed. A
434
+ * do-not-call person keeps the link — the rep decides — with
435
+ * the request said in the tooltip and the icon's color.
436
+ */ endAdornment: telHref && field !== 'fax' ? /*#__PURE__*/ _jsx(InputAdornment, {
437
+ position: "end",
438
+ children: /*#__PURE__*/ _jsx(Tooltip, {
439
+ title: callLabel,
440
+ children: /*#__PURE__*/ _jsx(IconButton, {
441
+ component: "a",
442
+ href: telHref,
443
+ size: "small",
444
+ edge: "end",
445
+ color: doNotCall ? 'warning' : 'default',
446
+ "aria-label": callLabel,
447
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
448
+ path: mdiPhoneOutline.path,
449
+ size: 0.8
450
+ })
451
+ })
452
+ })
453
+ }) : null
454
+ }
455
+ }
456
+ })
457
+ }, field);
458
+ };
302
459
  return /*#__PURE__*/ _jsx(CardDisplay, {
303
460
  header: 'Properties',
304
461
  help: Aglyn.pluginDocsHelp('contactRecord', {
@@ -332,6 +489,9 @@ import { LeadSourceSelect } from "./lead-source-select.js";
332
489
  container: true,
333
490
  spacing: 2,
334
491
  children: [
492
+ /*#__PURE__*/ _jsx(SectionHeading, {
493
+ children: 'Contact information'
494
+ }),
335
495
  /*#__PURE__*/ _jsx(Grid, {
336
496
  size: {
337
497
  xs: 12,
@@ -350,6 +510,19 @@ import { LeadSourceSelect } from "./lead-source-select.js";
350
510
  fullWidth: true
351
511
  })
352
512
  }),
513
+ /*#__PURE__*/ _jsx(Grid, {
514
+ size: {
515
+ xs: 12,
516
+ sm: 6
517
+ },
518
+ children: /*#__PURE__*/ _jsx(CrmPicklistSelect, {
519
+ picklistId: CRM_SALUTATION_PICKLIST,
520
+ picklist: salutations.picklist,
521
+ value: salutation,
522
+ stored: (_record_salutation1 = record.salutation) != null ? _record_salutation1 : '',
523
+ onChange: (value)=>change(setSalutation, value)
524
+ })
525
+ }),
353
526
  /*#__PURE__*/ _jsx(Grid, {
354
527
  size: {
355
528
  xs: 12,
@@ -357,15 +530,14 @@ import { LeadSourceSelect } from "./lead-source-select.js";
357
530
  },
358
531
  children: /*#__PURE__*/ _jsx(TextField, {
359
532
  size: "small",
360
- label: "Name",
361
- value: nameOverride,
362
- onChange: (event)=>change(setNameOverride, event.target.value),
533
+ label: "First name",
534
+ value: firstName,
535
+ onChange: (event)=>change(setFirstName, event.target.value),
363
536
  slotProps: {
364
537
  htmlInput: {
365
- maxLength: 120
538
+ maxLength: CONTACT_NAME_PART_MAX
366
539
  }
367
540
  },
368
- helperText: record.canonicalName ? `Your own name for this person. Blank shows the name they gave: ${record.canonicalName}.` : 'Your own name for this person.',
369
541
  fullWidth: true
370
542
  })
371
543
  }),
@@ -376,38 +548,37 @@ import { LeadSourceSelect } from "./lead-source-select.js";
376
548
  },
377
549
  children: /*#__PURE__*/ _jsx(TextField, {
378
550
  size: "small",
379
- label: "Phone",
380
- value: phone,
381
- onChange: (event)=>change(setPhone, event.target.value),
382
- error: Boolean(phoneError),
383
- helperText: phoneError || 'With the country code, like +1 512 555 0107',
384
- fullWidth: true,
551
+ label: "Last name",
552
+ value: lastName,
553
+ onChange: (event)=>change(setLastName, event.target.value),
554
+ slotProps: {
555
+ htmlInput: {
556
+ maxLength: CONTACT_NAME_PART_MAX
557
+ }
558
+ },
559
+ fullWidth: true
560
+ })
561
+ }),
562
+ /*#__PURE__*/ _jsx(Grid, {
563
+ size: {
564
+ xs: 12,
565
+ sm: 6
566
+ },
567
+ children: /*#__PURE__*/ _jsx(TextField, {
568
+ size: "small",
569
+ label: "Name",
570
+ value: composedName || nameOverride,
571
+ onChange: (event)=>change(setNameOverride, event.target.value),
385
572
  slotProps: {
573
+ htmlInput: {
574
+ maxLength: 120
575
+ },
386
576
  input: {
387
- /*
388
- * Click-to-call (AGL-2661), off what is IN the box rather
389
- * than off the saved value: the number on screen is the one
390
- * a reader means to ring, and `crmTelHref` withholds the
391
- * link from anything half-typed.
392
- */ endAdornment: telHref ? /*#__PURE__*/ _jsx(InputAdornment, {
393
- position: "end",
394
- children: /*#__PURE__*/ _jsx(Tooltip, {
395
- title: `Call ${phone.trim()}`,
396
- children: /*#__PURE__*/ _jsx(IconButton, {
397
- component: "a",
398
- href: telHref,
399
- size: "small",
400
- edge: "end",
401
- "aria-label": `Call ${phone.trim()}`,
402
- children: /*#__PURE__*/ _jsx(MdiIcon, {
403
- path: mdiPhoneOutline.path,
404
- size: 0.8
405
- })
406
- })
407
- })
408
- }) : null
577
+ readOnly: Boolean(composedName)
409
578
  }
410
- }
579
+ },
580
+ helperText: composedName ? 'Made of the first and last name.' : record.canonicalName ? `Your own name for this person. Blank shows the name they gave: ${record.canonicalName}.` : 'Your own name for this person.',
581
+ fullWidth: true
411
582
  })
412
583
  }),
413
584
  /*#__PURE__*/ _jsx(Grid, {
@@ -433,11 +604,17 @@ import { LeadSourceSelect } from "./lead-source-select.js";
433
604
  xs: 12,
434
605
  sm: 6
435
606
  },
436
- children: /*#__PURE__*/ _jsx(LeadSourceSelect, {
437
- picklist: leadSources.picklist,
438
- value: leadSource,
439
- stored: record.leadSource,
440
- onChange: (value)=>change(setLeadSource, value)
607
+ children: /*#__PURE__*/ _jsx(TextField, {
608
+ size: "small",
609
+ label: "Department",
610
+ value: department,
611
+ onChange: (event)=>change(setDepartment, event.target.value),
612
+ slotProps: {
613
+ htmlInput: {
614
+ maxLength: 120
615
+ }
616
+ },
617
+ fullWidth: true
441
618
  })
442
619
  }),
443
620
  /*#__PURE__*/ _jsx(Grid, {
@@ -464,6 +641,18 @@ import { LeadSourceSelect } from "./lead-source-select.js";
464
641
  helperText: suiteLocked ? crmSuiteLockedReason() : undefined
465
642
  })
466
643
  }),
644
+ /*#__PURE__*/ _jsx(Grid, {
645
+ size: {
646
+ xs: 12,
647
+ sm: 6
648
+ },
649
+ children: /*#__PURE__*/ _jsx(LeadSourceSelect, {
650
+ picklist: leadSources.picklist,
651
+ value: leadSource,
652
+ stored: record.leadSource,
653
+ onChange: (value)=>change(setLeadSource, value)
654
+ })
655
+ }),
467
656
  /*#__PURE__*/ _jsx(Grid, {
468
657
  size: {
469
658
  xs: 12,
@@ -535,6 +724,31 @@ import { LeadSourceSelect } from "./lead-source-select.js";
535
724
  fullWidth: true
536
725
  })
537
726
  }),
727
+ /*#__PURE__*/ _jsx(SectionHeading, {
728
+ children: 'Phones'
729
+ }),
730
+ PHONE_FIELDS.filter((field)=>field !== 'assistantPhone').map(phoneField),
731
+ /*#__PURE__*/ _jsxs(Grid, {
732
+ size: {
733
+ xs: 12,
734
+ sm: 6
735
+ },
736
+ children: [
737
+ /*#__PURE__*/ _jsx(FormControlLabel, {
738
+ control: /*#__PURE__*/ _jsx(Checkbox, {
739
+ checked: doNotCall,
740
+ onChange: (event)=>change(setDoNotCall, event.target.checked)
741
+ }),
742
+ label: "Do not call"
743
+ }),
744
+ /*#__PURE__*/ _jsx(FormHelperText, {
745
+ children: 'They asked not to be phoned. Every number still dials; the Call button says so.'
746
+ })
747
+ ]
748
+ }),
749
+ /*#__PURE__*/ _jsx(SectionHeading, {
750
+ children: 'Addresses'
751
+ }),
538
752
  /*#__PURE__*/ _jsx(Grid, {
539
753
  size: {
540
754
  xs: 12
@@ -544,7 +758,7 @@ import { LeadSourceSelect } from "./lead-source-select.js";
544
758
  children: [
545
759
  /*#__PURE__*/ _jsx(Typography, {
546
760
  variant: "subtitle2",
547
- children: 'Address'
761
+ children: 'Mailing address'
548
762
  }),
549
763
  /*#__PURE__*/ _jsx(ContactAddressFields, {
550
764
  value: address,
@@ -553,6 +767,82 @@ import { LeadSourceSelect } from "./lead-source-select.js";
553
767
  ]
554
768
  })
555
769
  }),
770
+ /*#__PURE__*/ _jsx(Grid, {
771
+ size: {
772
+ xs: 12
773
+ },
774
+ children: /*#__PURE__*/ _jsxs(Stack, {
775
+ spacing: 1,
776
+ children: [
777
+ /*#__PURE__*/ _jsx(Typography, {
778
+ variant: "subtitle2",
779
+ children: 'Other address'
780
+ }),
781
+ /*#__PURE__*/ _jsx(ContactAddressFields, {
782
+ value: otherAddress,
783
+ onChange: (value)=>change(setOtherAddress, value)
784
+ })
785
+ ]
786
+ })
787
+ }),
788
+ /*#__PURE__*/ _jsx(SectionHeading, {
789
+ children: 'Additional information'
790
+ }),
791
+ /*#__PURE__*/ _jsx(Grid, {
792
+ size: {
793
+ xs: 12,
794
+ sm: 6
795
+ },
796
+ children: /*#__PURE__*/ _jsx(TextField, {
797
+ size: "small",
798
+ type: "date",
799
+ label: "Birthdate",
800
+ value: birthdate,
801
+ onChange: (event)=>change(setBirthdate, event.target.value),
802
+ error: Boolean(birthdateError),
803
+ helperText: birthdateError || undefined,
804
+ slotProps: {
805
+ inputLabel: {
806
+ shrink: true
807
+ }
808
+ },
809
+ fullWidth: true
810
+ })
811
+ }),
812
+ /*#__PURE__*/ _jsx(Grid, {
813
+ size: {
814
+ xs: 12,
815
+ sm: 6
816
+ },
817
+ children: /*#__PURE__*/ _jsx(ContactReportsToField, {
818
+ hostId: hostId,
819
+ org: org,
820
+ contactId: record.$id,
821
+ groupId: consentGroup.groupId,
822
+ value: reportsTo,
823
+ onChange: (value)=>change(setReportsTo, value),
824
+ disabled: saving
825
+ })
826
+ }),
827
+ /*#__PURE__*/ _jsx(Grid, {
828
+ size: {
829
+ xs: 12,
830
+ sm: 6
831
+ },
832
+ children: /*#__PURE__*/ _jsx(TextField, {
833
+ size: "small",
834
+ label: "Assistant",
835
+ value: assistantName,
836
+ onChange: (event)=>change(setAssistantName, event.target.value),
837
+ slotProps: {
838
+ htmlInput: {
839
+ maxLength: 120
840
+ }
841
+ },
842
+ fullWidth: true
843
+ })
844
+ }),
845
+ phoneField('assistantPhone'),
556
846
  /*#__PURE__*/ _jsx(Grid, {
557
847
  size: {
558
848
  xs: 12