@aglyn/plugins-crm 1.0.0-beta.220 → 1.0.0-beta.222

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 (514) 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-record-picker.d.ts +15 -0
  34. package/src/lib/components/crm-record-picker.js +16 -10
  35. package/src/lib/components/crm-record-picker.js.map +1 -1
  36. package/src/lib/components/crm-transfer-buttons.d.ts +54 -0
  37. package/src/lib/components/crm-transfer-buttons.js +167 -0
  38. package/src/lib/components/crm-transfer-buttons.js.map +1 -0
  39. package/src/lib/components/deal-contact-roles-card.d.ts +46 -0
  40. package/src/lib/components/deal-contact-roles-card.js +368 -0
  41. package/src/lib/components/deal-contact-roles-card.js.map +1 -0
  42. package/src/lib/components/deal-detail-page.d.ts +3 -2
  43. package/src/lib/components/deal-detail-page.js +25 -6
  44. package/src/lib/components/deal-detail-page.js.map +1 -1
  45. package/src/lib/components/deal-edit-drawer.d.ts +10 -0
  46. package/src/lib/components/deal-edit-drawer.js +219 -10
  47. package/src/lib/components/deal-edit-drawer.js.map +1 -1
  48. package/src/lib/components/deal-properties-card.d.ts +7 -0
  49. package/src/lib/components/deal-properties-card.js +34 -3
  50. package/src/lib/components/deal-properties-card.js.map +1 -1
  51. package/src/lib/components/deal-stage-card.d.ts +4 -0
  52. package/src/lib/components/deal-stage-card.js +10 -2
  53. package/src/lib/components/deal-stage-card.js.map +1 -1
  54. package/src/lib/components/deals-bulk-bar.d.ts +0 -3
  55. package/src/lib/components/deals-bulk-bar.js +7 -20
  56. package/src/lib/components/deals-bulk-bar.js.map +1 -1
  57. package/src/lib/components/deals-section.d.ts +3 -3
  58. package/src/lib/components/deals-section.js +123 -63
  59. package/src/lib/components/deals-section.js.map +1 -1
  60. package/src/lib/components/fields-section.js +31 -17
  61. package/src/lib/components/fields-section.js.map +1 -1
  62. package/src/lib/components/lead-convert-dialog.d.ts +4 -0
  63. package/src/lib/components/lead-convert-dialog.js +23 -1
  64. package/src/lib/components/lead-convert-dialog.js.map +1 -1
  65. package/src/lib/components/lead-detail-page.js +8 -2
  66. package/src/lib/components/lead-detail-page.js.map +1 -1
  67. package/src/lib/components/lead-profile-fields.d.ts +71 -0
  68. package/src/lib/components/lead-profile-fields.js +386 -0
  69. package/src/lib/components/lead-profile-fields.js.map +1 -0
  70. package/src/lib/components/lead-properties-card.d.ts +2 -1
  71. package/src/lib/components/lead-properties-card.js +85 -176
  72. package/src/lib/components/lead-properties-card.js.map +1 -1
  73. package/src/lib/components/lead-source-select.d.ts +4 -23
  74. package/src/lib/components/lead-source-select.js +9 -73
  75. package/src/lib/components/lead-source-select.js.map +1 -1
  76. package/src/lib/components/lead-status-chip.d.ts +9 -3
  77. package/src/lib/components/lead-status-chip.js +8 -4
  78. package/src/lib/components/lead-status-chip.js.map +1 -1
  79. package/src/lib/components/lead-status-options.d.ts +20 -0
  80. package/src/lib/components/lead-status-options.js +51 -0
  81. package/src/lib/components/lead-status-options.js.map +1 -0
  82. package/src/lib/components/lead-unqualify-dialog.d.ts +5 -0
  83. package/src/lib/components/lead-unqualify-dialog.js +50 -18
  84. package/src/lib/components/lead-unqualify-dialog.js.map +1 -1
  85. package/src/lib/components/leads-bulk-bar.d.ts +0 -3
  86. package/src/lib/components/leads-bulk-bar.js +29 -29
  87. package/src/lib/components/leads-bulk-bar.js.map +1 -1
  88. package/src/lib/components/leads-section.js +120 -68
  89. package/src/lib/components/leads-section.js.map +1 -1
  90. package/src/lib/components/linked-deals-card.d.ts +4 -0
  91. package/src/lib/components/linked-deals-card.js +47 -3
  92. package/src/lib/components/linked-deals-card.js.map +1 -1
  93. package/src/lib/components/log-activity-dialog.js +43 -3
  94. package/src/lib/components/log-activity-dialog.js.map +1 -1
  95. package/src/lib/components/new-contact-drawer.d.ts +8 -0
  96. package/src/lib/components/new-contact-drawer.js +108 -6
  97. package/src/lib/components/new-contact-drawer.js.map +1 -1
  98. package/src/lib/components/new-lead-drawer.d.ts +9 -2
  99. package/src/lib/components/new-lead-drawer.js +88 -121
  100. package/src/lib/components/new-lead-drawer.js.map +1 -1
  101. package/src/lib/components/picklist-select.d.ts +36 -0
  102. package/src/lib/components/picklist-select.js +114 -0
  103. package/src/lib/components/picklist-select.js.map +1 -0
  104. package/src/lib/components/picklist-values-card.d.ts +34 -0
  105. package/src/lib/components/{lead-source-values-card.js → picklist-values-card.js} +241 -58
  106. package/src/lib/components/picklist-values-card.js.map +1 -0
  107. package/src/lib/components/pipeline-stages-dialog.d.ts +7 -0
  108. package/src/lib/components/pipeline-stages-dialog.js +26 -4
  109. package/src/lib/components/pipeline-stages-dialog.js.map +1 -1
  110. package/src/lib/components/pipelines-dialog.js +15 -6
  111. package/src/lib/components/pipelines-dialog.js.map +1 -1
  112. package/src/lib/components/recent-activity-feed.js +20 -5
  113. package/src/lib/components/recent-activity-feed.js.map +1 -1
  114. package/src/lib/components/recipes-card.js +4 -2
  115. package/src/lib/components/recipes-card.js.map +1 -1
  116. package/src/lib/components/record-tasks-card.js +15 -8
  117. package/src/lib/components/record-tasks-card.js.map +1 -1
  118. package/src/lib/components/reports/forecast-card.d.ts +6 -0
  119. package/src/lib/components/reports/forecast-card.js +101 -3
  120. package/src/lib/components/reports/forecast-card.js.map +1 -1
  121. package/src/lib/components/reports/lead-funnel-card.d.ts +12 -0
  122. package/src/lib/components/reports/lead-funnel-card.js +9 -5
  123. package/src/lib/components/reports/lead-funnel-card.js.map +1 -1
  124. package/src/lib/components/reports/lead-source-card.d.ts +23 -0
  125. package/src/lib/components/reports/lead-source-card.js +318 -0
  126. package/src/lib/components/reports/lead-source-card.js.map +1 -0
  127. package/src/lib/components/reports/report-export.js +1 -1
  128. package/src/lib/components/reports/report-export.js.map +1 -1
  129. package/src/lib/components/reports-section.js +8 -0
  130. package/src/lib/components/reports-section.js.map +1 -1
  131. package/src/lib/components/sharing-rule-drawer.d.ts +5 -0
  132. package/src/lib/components/sharing-rule-drawer.js +108 -19
  133. package/src/lib/components/sharing-rule-drawer.js.map +1 -1
  134. package/src/lib/components/sharing-rules-card.js +11 -3
  135. package/src/lib/components/sharing-rules-card.js.map +1 -1
  136. package/src/lib/components/task-cells.d.ts +9 -1
  137. package/src/lib/components/task-cells.js +9 -4
  138. package/src/lib/components/task-cells.js.map +1 -1
  139. package/src/lib/components/task-edit-drawer.js +111 -43
  140. package/src/lib/components/task-edit-drawer.js.map +1 -1
  141. package/src/lib/components/tasks-bulk-bar.d.ts +0 -3
  142. package/src/lib/components/tasks-bulk-bar.js +7 -20
  143. package/src/lib/components/tasks-bulk-bar.js.map +1 -1
  144. package/src/lib/components/tasks-calendar.d.ts +3 -0
  145. package/src/lib/components/tasks-calendar.js +8 -1
  146. package/src/lib/components/tasks-calendar.js.map +1 -1
  147. package/src/lib/components/tasks-section.d.ts +3 -3
  148. package/src/lib/components/tasks-section.js +58 -43
  149. package/src/lib/components/tasks-section.js.map +1 -1
  150. package/src/lib/constants/api-routes.d.ts +2 -9
  151. package/src/lib/constants/api-routes.js +1 -7
  152. package/src/lib/constants/api-routes.js.map +1 -1
  153. package/src/lib/constants/bundle-common.d.ts +6 -0
  154. package/src/lib/constants/bundle-common.js +11 -0
  155. package/src/lib/constants/bundle-common.js.map +1 -1
  156. package/src/lib/constants/company-filters.d.ts +14 -0
  157. package/src/lib/constants/company-filters.js +51 -1
  158. package/src/lib/constants/company-filters.js.map +1 -1
  159. package/src/lib/constants/contact-filters.d.ts +2 -0
  160. package/src/lib/constants/contact-filters.js +18 -1
  161. package/src/lib/constants/contact-filters.js.map +1 -1
  162. package/src/lib/constants/deal-filters.d.ts +22 -1
  163. package/src/lib/constants/deal-filters.js +67 -4
  164. package/src/lib/constants/deal-filters.js.map +1 -1
  165. package/src/lib/declarations.console-server.d.ts +3 -0
  166. package/src/lib/declarations.console-server.js +35 -0
  167. package/src/lib/declarations.console-server.js.map +1 -1
  168. package/src/lib/declarations.d.ts +26 -0
  169. package/src/lib/declarations.js +35 -0
  170. package/src/lib/declarations.js.map +1 -0
  171. package/src/lib/declarations.server.d.ts +11 -0
  172. package/src/lib/declarations.server.js +92 -1
  173. package/src/lib/declarations.server.js.map +1 -1
  174. package/src/lib/hooks/use-company-picklists.d.ts +15 -0
  175. package/src/lib/hooks/use-company-picklists.js +55 -0
  176. package/src/lib/hooks/use-company-picklists.js.map +1 -0
  177. package/src/lib/hooks/use-crm-picklist.d.ts +25 -0
  178. package/src/lib/hooks/use-crm-picklist.js +53 -0
  179. package/src/lib/hooks/use-crm-picklist.js.map +1 -0
  180. package/src/lib/hooks/use-crm-record-names.d.ts +16 -0
  181. package/src/lib/hooks/use-crm-record-names.js +45 -19
  182. package/src/lib/hooks/use-crm-record-names.js.map +1 -1
  183. package/src/lib/hooks/use-crm-task-picklists.d.ts +11 -0
  184. package/src/lib/hooks/use-crm-task-picklists.js +45 -0
  185. package/src/lib/hooks/use-crm-task-picklists.js.map +1 -0
  186. package/src/lib/hooks/use-deals.d.ts +14 -0
  187. package/src/lib/hooks/use-deals.js +29 -0
  188. package/src/lib/hooks/use-deals.js.map +1 -1
  189. package/src/lib/hooks/use-lead-picklists.d.ts +14 -0
  190. package/src/lib/hooks/use-lead-picklists.js +46 -0
  191. package/src/lib/hooks/use-lead-picklists.js.map +1 -0
  192. package/src/lib/hooks/use-lead-source-picklist.d.ts +5 -19
  193. package/src/lib/hooks/use-lead-source-picklist.js +12 -22
  194. package/src/lib/hooks/use-lead-source-picklist.js.map +1 -1
  195. package/src/lib/hooks/use-lead-status-picklist.d.ts +9 -0
  196. package/src/lib/hooks/use-lead-status-picklist.js +40 -0
  197. package/src/lib/hooks/use-lead-status-picklist.js.map +1 -0
  198. package/src/lib/model/companies.d.ts +32 -3
  199. package/src/lib/model/companies.js +133 -16
  200. package/src/lib/model/companies.js.map +1 -1
  201. package/src/lib/model/contact-merge.d.ts +27 -3
  202. package/src/lib/model/contact-merge.js +81 -7
  203. package/src/lib/model/contact-merge.js.map +1 -1
  204. package/src/lib/model/contact-record.d.ts +17 -0
  205. package/src/lib/model/contact-record.js +15 -1
  206. package/src/lib/model/contact-record.js.map +1 -1
  207. package/src/lib/model/contact-update.d.ts +31 -2
  208. package/src/lib/model/contact-update.js +14 -0
  209. package/src/lib/model/contact-update.js.map +1 -1
  210. package/src/lib/model/crm-list-query.d.ts +5 -0
  211. package/src/lib/model/crm-list-query.js +8 -0
  212. package/src/lib/model/crm-list-query.js.map +1 -1
  213. package/src/lib/model/crm-recipes.d.ts +40 -0
  214. package/src/lib/model/crm-recipes.js +244 -0
  215. package/src/lib/model/crm-recipes.js.map +1 -0
  216. package/src/lib/model/crm-record-counts.d.ts +36 -0
  217. package/src/lib/model/crm-record-counts.js +54 -0
  218. package/src/lib/model/crm-record-counts.js.map +1 -0
  219. package/src/lib/model/crm-record-lists.d.ts +23 -0
  220. package/src/lib/model/crm-record-lists.js +161 -0
  221. package/src/lib/model/crm-record-lists.js.map +1 -0
  222. package/src/lib/model/crm-reports.d.ts +73 -3
  223. package/src/lib/model/crm-reports.js +120 -1
  224. package/src/lib/model/crm-reports.js.map +1 -1
  225. package/src/lib/model/crm-sharing.d.ts +21 -3
  226. package/src/lib/model/crm-sharing.js +27 -6
  227. package/src/lib/model/crm-sharing.js.map +1 -1
  228. package/src/lib/model/deal-board-model.d.ts +8 -2
  229. package/src/lib/model/deal-board-model.js +15 -2
  230. package/src/lib/model/deal-board-model.js.map +1 -1
  231. package/src/lib/model/deal-contact-roles.d.ts +45 -0
  232. package/src/lib/model/deal-contact-roles.js +73 -0
  233. package/src/lib/model/deal-contact-roles.js.map +1 -0
  234. package/src/lib/model/deal-form-model.d.ts +56 -0
  235. package/src/lib/model/deal-form-model.js +79 -7
  236. package/src/lib/model/deal-form-model.js.map +1 -1
  237. package/src/lib/model/download-text-file.d.ts +23 -0
  238. package/src/lib/model/download-text-file.js +34 -0
  239. package/src/lib/model/download-text-file.js.map +1 -0
  240. package/src/lib/model/lead-filters.d.ts +36 -2
  241. package/src/lib/model/lead-filters.js +123 -2
  242. package/src/lib/model/lead-filters.js.map +1 -1
  243. package/src/lib/model/lead-source-direction.d.ts +38 -0
  244. package/src/lib/model/lead-source-direction.js +52 -0
  245. package/src/lib/model/lead-source-direction.js.map +1 -0
  246. package/src/lib/model/picklist-values.d.ts +119 -0
  247. package/src/lib/model/picklist-values.js +256 -0
  248. package/src/lib/model/picklist-values.js.map +1 -0
  249. package/src/lib/model/record-facts-disclosed.d.ts +81 -0
  250. package/src/lib/model/record-facts-disclosed.js +281 -0
  251. package/src/lib/model/record-facts-disclosed.js.map +1 -0
  252. package/src/lib/model/record-facts.d.ts +215 -34
  253. package/src/lib/model/record-facts.js +307 -128
  254. package/src/lib/model/record-facts.js.map +1 -1
  255. package/src/lib/model/task-picklists.d.ts +52 -0
  256. package/src/lib/model/task-picklists.js +83 -0
  257. package/src/lib/model/task-picklists.js.map +1 -0
  258. package/src/lib/model/task-routes.d.ts +13 -0
  259. package/src/lib/model/task-routes.js +23 -4
  260. package/src/lib/model/task-routes.js.map +1 -1
  261. package/src/lib/plan-entitlements.js +6 -4
  262. package/src/lib/plan-entitlements.js.map +1 -1
  263. package/src/lib/plugin.js +17 -0
  264. package/src/lib/plugin.js.map +1 -1
  265. package/src/lib/server/api-v1/contacts.js +220 -14
  266. package/src/lib/server/api-v1/contacts.js.map +1 -1
  267. package/src/lib/server/api-v1/crm-activities.js +14 -1
  268. package/src/lib/server/api-v1/crm-activities.js.map +1 -1
  269. package/src/lib/server/api-v1/crm-companies.js +123 -14
  270. package/src/lib/server/api-v1/crm-companies.js.map +1 -1
  271. package/src/lib/server/api-v1/crm-deals.js +291 -26
  272. package/src/lib/server/api-v1/crm-deals.js.map +1 -1
  273. package/src/lib/server/api-v1/crm-leads.js +144 -38
  274. package/src/lib/server/api-v1/crm-leads.js.map +1 -1
  275. package/src/lib/server/api-v1/crm-pipelines.d.ts +6 -0
  276. package/src/lib/server/api-v1/crm-pipelines.js +8 -2
  277. package/src/lib/server/api-v1/crm-pipelines.js.map +1 -1
  278. package/src/lib/server/api-v1/crm-tasks.js +75 -33
  279. package/src/lib/server/api-v1/crm-tasks.js.map +1 -1
  280. package/src/lib/server/api-v1/openapi.d.ts +0 -11
  281. package/src/lib/server/api-v1/openapi.js +171 -16
  282. package/src/lib/server/api-v1/openapi.js.map +1 -1
  283. package/src/lib/server/assign-contact-owner.d.ts +162 -0
  284. package/src/lib/server/assign-contact-owner.js +340 -0
  285. package/src/lib/server/assign-contact-owner.js.map +1 -0
  286. package/src/lib/server/associate-company-by-domain.d.ts +70 -0
  287. package/src/lib/server/associate-company-by-domain.js +153 -0
  288. package/src/lib/server/associate-company-by-domain.js.map +1 -0
  289. package/src/lib/server/automation-steps.d.ts +139 -0
  290. package/src/lib/server/automation-steps.js +472 -0
  291. package/src/lib/server/automation-steps.js.map +1 -0
  292. package/src/lib/server/capture-contact.js +69 -22
  293. package/src/lib/server/capture-contact.js.map +1 -1
  294. package/src/lib/server/capture-host-contact.d.ts +104 -0
  295. package/src/lib/server/capture-host-contact.js +151 -0
  296. package/src/lib/server/capture-host-contact.js.map +1 -0
  297. package/src/lib/server/company-children.d.ts +25 -0
  298. package/src/lib/server/company-children.js +42 -0
  299. package/src/lib/server/company-children.js.map +1 -0
  300. package/src/lib/server/company-delete.d.ts +18 -0
  301. package/src/lib/server/company-delete.js +44 -21
  302. package/src/lib/server/company-delete.js.map +1 -1
  303. package/src/lib/server/contact-email-history.js +21 -19
  304. package/src/lib/server/contact-email-history.js.map +1 -1
  305. package/src/lib/server/contact-remove.js +27 -2
  306. package/src/lib/server/contact-remove.js.map +1 -1
  307. package/src/lib/server/contact-reports-to.d.ts +61 -0
  308. package/src/lib/server/contact-reports-to.js +114 -0
  309. package/src/lib/server/contact-reports-to.js.map +1 -0
  310. package/src/lib/server/contact-update.d.ts +42 -1
  311. package/src/lib/server/contact-update.js +204 -23
  312. package/src/lib/server/contact-update.js.map +1 -1
  313. package/src/lib/server/convert-host-lead.d.ts +46 -1
  314. package/src/lib/server/convert-host-lead.js +173 -15
  315. package/src/lib/server/convert-host-lead.js.map +1 -1
  316. package/src/lib/server/convert-open-lead.js +12 -5
  317. package/src/lib/server/convert-open-lead.js.map +1 -1
  318. package/src/lib/server/crm-record-indexes.d.ts +45 -0
  319. package/src/lib/server/crm-record-indexes.js +78 -0
  320. package/src/lib/server/crm-record-indexes.js.map +1 -0
  321. package/src/lib/server/crm-sharing.d.ts +9 -1
  322. package/src/lib/server/crm-sharing.js +23 -3
  323. package/src/lib/server/crm-sharing.js.map +1 -1
  324. package/src/lib/server/deal-contact-roles.d.ts +27 -0
  325. package/src/lib/server/deal-contact-roles.js +89 -0
  326. package/src/lib/server/deal-contact-roles.js.map +1 -0
  327. package/src/lib/server/lead-convert.d.ts +5 -0
  328. package/src/lib/server/lead-convert.js +19 -3
  329. package/src/lib/server/lead-convert.js.map +1 -1
  330. package/src/lib/server/lead-create.d.ts +17 -2
  331. package/src/lib/server/lead-create.js +46 -14
  332. package/src/lib/server/lead-create.js.map +1 -1
  333. package/src/lib/server/lead-nurturing.d.ts +6 -0
  334. package/src/lib/server/lead-nurturing.js +57 -20
  335. package/src/lib/server/lead-nurturing.js.map +1 -1
  336. package/src/lib/server/lead-picklists.d.ts +35 -0
  337. package/src/lib/server/lead-picklists.js +52 -0
  338. package/src/lib/server/lead-picklists.js.map +1 -0
  339. package/src/lib/server/lead-source-picklist.d.ts +1 -13
  340. package/src/lib/server/lead-source-picklist.js +6 -33
  341. package/src/lib/server/lead-source-picklist.js.map +1 -1
  342. package/src/lib/server/merge-contacts.js +22 -4
  343. package/src/lib/server/merge-contacts.js.map +1 -1
  344. package/src/lib/server/person-eraser.d.ts +53 -0
  345. package/src/lib/server/person-eraser.js +149 -0
  346. package/src/lib/server/person-eraser.js.map +1 -0
  347. package/src/lib/server/person-records.d.ts +69 -0
  348. package/src/lib/server/person-records.js +317 -0
  349. package/src/lib/server/person-records.js.map +1 -0
  350. package/src/lib/server/person-refund.d.ts +97 -0
  351. package/src/lib/server/person-refund.js +221 -0
  352. package/src/lib/server/person-refund.js.map +1 -0
  353. package/src/lib/server/picklist-values.d.ts +21 -0
  354. package/src/lib/server/picklist-values.js +308 -0
  355. package/src/lib/server/picklist-values.js.map +1 -0
  356. package/src/lib/server/read-picklist.d.ts +44 -0
  357. package/src/lib/server/read-picklist.js +65 -0
  358. package/src/lib/server/read-picklist.js.map +1 -0
  359. package/src/lib/server/recipe-routes.js +15 -7
  360. package/src/lib/server/recipe-routes.js.map +1 -1
  361. package/src/lib/server/record-email-state.js +7 -1
  362. package/src/lib/server/record-email-state.js.map +1 -1
  363. package/src/lib/server/record-facts.d.ts +3 -0
  364. package/src/lib/server/record-facts.js +233 -31
  365. package/src/lib/server/record-facts.js.map +1 -1
  366. package/src/lib/server/record-origin.d.ts +27 -0
  367. package/src/lib/server/record-origin.js +104 -0
  368. package/src/lib/server/record-origin.js.map +1 -0
  369. package/src/lib/server/record-timeline.js +15 -2
  370. package/src/lib/server/record-timeline.js.map +1 -1
  371. package/src/lib/server/suite-gate.js +4 -3
  372. package/src/lib/server/suite-gate.js.map +1 -1
  373. package/src/lib/server/task-routes.js +30 -16
  374. package/src/lib/server/task-routes.js.map +1 -1
  375. package/src/lib/server-deal-stage.d.ts +5 -1
  376. package/src/lib/server-deal-stage.js +10 -5
  377. package/src/lib/server-deal-stage.js.map +1 -1
  378. package/src/lib/server.d.ts +8 -3
  379. package/src/lib/server.js +47 -43
  380. package/src/lib/server.js.map +1 -1
  381. package/src/lib/testing/memory-firestore.d.ts +55 -0
  382. package/src/lib/testing/memory-firestore.js +335 -0
  383. package/src/lib/testing/memory-firestore.js.map +1 -0
  384. package/src/lib/testing/stand-in-email-send-index.d.ts +25 -0
  385. package/src/lib/testing/stand-in-email-send-index.js +49 -0
  386. package/src/lib/testing/stand-in-email-send-index.js.map +1 -0
  387. package/src/lib/transfer/activities.d.ts +30 -0
  388. package/src/lib/transfer/activities.js +132 -0
  389. package/src/lib/transfer/activities.js.map +1 -0
  390. package/src/lib/transfer/aliases.d.ts +22 -0
  391. package/src/lib/transfer/aliases.js +1342 -0
  392. package/src/lib/transfer/aliases.js.map +1 -0
  393. package/src/lib/transfer/common.d.ts +222 -0
  394. package/src/lib/transfer/common.js +832 -0
  395. package/src/lib/transfer/common.js.map +1 -0
  396. package/src/lib/transfer/companies.d.ts +43 -0
  397. package/src/lib/transfer/companies.js +549 -0
  398. package/src/lib/transfer/companies.js.map +1 -0
  399. package/src/lib/transfer/contacts.d.ts +31 -0
  400. package/src/lib/transfer/contacts.js +727 -0
  401. package/src/lib/transfer/contacts.js.map +1 -0
  402. package/src/lib/transfer/deals.d.ts +66 -0
  403. package/src/lib/transfer/deals.js +698 -0
  404. package/src/lib/transfer/deals.js.map +1 -0
  405. package/src/lib/transfer/email-templates-package.d.ts +40 -0
  406. package/src/lib/transfer/email-templates-package.js +76 -0
  407. package/src/lib/transfer/email-templates-package.js.map +1 -0
  408. package/src/lib/transfer/email-templates-package.server.d.ts +32 -0
  409. package/src/lib/transfer/email-templates-package.server.js +176 -0
  410. package/src/lib/transfer/email-templates-package.server.js.map +1 -0
  411. package/src/lib/transfer/fields.d.ts +102 -0
  412. package/src/lib/transfer/fields.js +1755 -0
  413. package/src/lib/transfer/fields.js.map +1 -0
  414. package/src/lib/transfer/leads.d.ts +30 -0
  415. package/src/lib/transfer/leads.js +582 -0
  416. package/src/lib/transfer/leads.js.map +1 -0
  417. package/src/lib/transfer/pipelines.d.ts +21 -0
  418. package/src/lib/transfer/pipelines.js +172 -0
  419. package/src/lib/transfer/pipelines.js.map +1 -0
  420. package/src/lib/transfer/register.d.ts +47 -0
  421. package/src/lib/transfer/register.js +277 -0
  422. package/src/lib/transfer/register.js.map +1 -0
  423. package/src/lib/transfer/tasks.d.ts +30 -0
  424. package/src/lib/transfer/tasks.js +418 -0
  425. package/src/lib/transfer/tasks.js.map +1 -0
  426. package/src/lib/transfer/ui.d.ts +20 -0
  427. package/src/lib/transfer/ui.js +42 -0
  428. package/src/lib/transfer/ui.js.map +1 -0
  429. package/src/lib/components/company-import-drawer.d.ts +0 -42
  430. package/src/lib/components/company-import-drawer.js +0 -99
  431. package/src/lib/components/company-import-drawer.js.map +0 -1
  432. package/src/lib/components/contact-import-drawer.d.ts +0 -46
  433. package/src/lib/components/contact-import-drawer.js +0 -149
  434. package/src/lib/components/contact-import-drawer.js.map +0 -1
  435. package/src/lib/components/crm-export-all-button.d.ts +0 -39
  436. package/src/lib/components/crm-export-all-button.js +0 -98
  437. package/src/lib/components/crm-export-all-button.js.map +0 -1
  438. package/src/lib/components/csv-import-drawer.d.ts +0 -139
  439. package/src/lib/components/csv-import-drawer.js +0 -757
  440. package/src/lib/components/csv-import-drawer.js.map +0 -1
  441. package/src/lib/components/deal-import-drawer.d.ts +0 -24
  442. package/src/lib/components/deal-import-drawer.js +0 -83
  443. package/src/lib/components/deal-import-drawer.js.map +0 -1
  444. package/src/lib/components/lead-import-drawer.d.ts +0 -27
  445. package/src/lib/components/lead-import-drawer.js +0 -118
  446. package/src/lib/components/lead-import-drawer.js.map +0 -1
  447. package/src/lib/components/lead-source-values-card.d.ts +0 -27
  448. package/src/lib/components/lead-source-values-card.js.map +0 -1
  449. package/src/lib/components/task-import-drawer.d.ts +0 -24
  450. package/src/lib/components/task-import-drawer.js +0 -82
  451. package/src/lib/components/task-import-drawer.js.map +0 -1
  452. package/src/lib/model/companies-csv.d.ts +0 -36
  453. package/src/lib/model/companies-csv.js +0 -38
  454. package/src/lib/model/companies-csv.js.map +0 -1
  455. package/src/lib/model/contacts-csv.d.ts +0 -54
  456. package/src/lib/model/contacts-csv.js +0 -67
  457. package/src/lib/model/contacts-csv.js.map +0 -1
  458. package/src/lib/model/crm-company-import.d.ts +0 -154
  459. package/src/lib/model/crm-company-import.js +0 -331
  460. package/src/lib/model/crm-company-import.js.map +0 -1
  461. package/src/lib/model/crm-csv.d.ts +0 -239
  462. package/src/lib/model/crm-csv.js +0 -467
  463. package/src/lib/model/crm-csv.js.map +0 -1
  464. package/src/lib/model/crm-deal-import.d.ts +0 -112
  465. package/src/lib/model/crm-deal-import.js +0 -263
  466. package/src/lib/model/crm-deal-import.js.map +0 -1
  467. package/src/lib/model/crm-import.d.ts +0 -250
  468. package/src/lib/model/crm-import.js +0 -467
  469. package/src/lib/model/crm-import.js.map +0 -1
  470. package/src/lib/model/crm-lead-import.d.ts +0 -138
  471. package/src/lib/model/crm-lead-import.js +0 -446
  472. package/src/lib/model/crm-lead-import.js.map +0 -1
  473. package/src/lib/model/crm-task-import.d.ts +0 -94
  474. package/src/lib/model/crm-task-import.js +0 -275
  475. package/src/lib/model/crm-task-import.js.map +0 -1
  476. package/src/lib/model/deals-csv.d.ts +0 -32
  477. package/src/lib/model/deals-csv.js +0 -36
  478. package/src/lib/model/deals-csv.js.map +0 -1
  479. package/src/lib/model/import-column-shapes.d.ts +0 -36
  480. package/src/lib/model/import-column-shapes.js +0 -76
  481. package/src/lib/model/import-column-shapes.js.map +0 -1
  482. package/src/lib/model/lead-source-values.d.ts +0 -82
  483. package/src/lib/model/lead-source-values.js +0 -149
  484. package/src/lib/model/lead-source-values.js.map +0 -1
  485. package/src/lib/model/leads-csv.d.ts +0 -40
  486. package/src/lib/model/leads-csv.js +0 -40
  487. package/src/lib/model/leads-csv.js.map +0 -1
  488. package/src/lib/model/tasks-csv.d.ts +0 -28
  489. package/src/lib/model/tasks-csv.js +0 -28
  490. package/src/lib/model/tasks-csv.js.map +0 -1
  491. package/src/lib/server/companies-import.d.ts +0 -57
  492. package/src/lib/server/companies-import.js +0 -242
  493. package/src/lib/server/companies-import.js.map +0 -1
  494. package/src/lib/server/contacts-import.d.ts +0 -109
  495. package/src/lib/server/contacts-import.js +0 -393
  496. package/src/lib/server/contacts-import.js.map +0 -1
  497. package/src/lib/server/deals-import.d.ts +0 -76
  498. package/src/lib/server/deals-import.js +0 -248
  499. package/src/lib/server/deals-import.js.map +0 -1
  500. package/src/lib/server/export-route.d.ts +0 -60
  501. package/src/lib/server/export-route.js +0 -447
  502. package/src/lib/server/export-route.js.map +0 -1
  503. package/src/lib/server/import-context.d.ts +0 -87
  504. package/src/lib/server/import-context.js +0 -182
  505. package/src/lib/server/import-context.js.map +0 -1
  506. package/src/lib/server/lead-source-values.d.ts +0 -50
  507. package/src/lib/server/lead-source-values.js +0 -191
  508. package/src/lib/server/lead-source-values.js.map +0 -1
  509. package/src/lib/server/leads-import.d.ts +0 -84
  510. package/src/lib/server/leads-import.js +0 -367
  511. package/src/lib/server/leads-import.js.map +0 -1
  512. package/src/lib/server/tasks-import.d.ts +0 -54
  513. package/src/lib/server/tasks-import.js +0 -160
  514. package/src/lib/server/tasks-import.js.map +0 -1
@@ -17,15 +17,19 @@
17
17
  import { _ as _extends } from "@swc/helpers/_/_extends";
18
18
  import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
19
19
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
20
- import { createResourceUid, CRM_COLLECTIONS, CRM_RECORDS_BAND_FULL_MESSAGE, crmNewRecordListFields, pluginDocsHelp, crmMemberPickerLabel } from "@aglyn/aglyn";
20
+ import { createResourceUid, CRM_COLLECTIONS, CRM_RECORDS_BAND_FULL_MESSAGE, CRM_COMPANY_PICKLIST_FIELDS, CRM_COMPANY_TEXT_MAX, crmCompanyParentId, crmCompanyParentRefusal, crmNewRecordListFields, crmPicklistDefaultLabel, pluginDocsHelp, crmMemberPickerLabel } from "@aglyn/aglyn";
21
21
  import { ICON_VARIANT_CLOSE } from "@aglyn/shared-data-enums";
22
22
  import { Container, HelpTip, MdiIcon, SrOnly } from "@aglyn/shared-ui-jsx";
23
23
  import { NavigationDrawerComponent } from "@aglyn/shared-ui-jsx/components/navigation-drawer.component";
24
24
  import { useSnackbar } from "@aglyn/shared-ui-snackstack";
25
25
  import { useFirestore, useUser, writeGuardedBySeed } from "@aglyn/tenant-feature-instance";
26
26
  import { Alert, Button, IconButton, MenuItem, Stack, TextField, Typography } from "@mui/material";
27
- import { deleteField, doc, serverTimestamp, setDoc, updateDoc } from "firebase/firestore";
28
- import { useCallback, useEffect, useMemo, useState } from "react";
27
+ import { deleteField, doc, getDoc, serverTimestamp, setDoc, updateDoc } from "firebase/firestore";
28
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
29
+ import { useCompanyPicklists } from "../hooks/use-company-picklists.js";
30
+ import { DEAL_CURRENCIES } from "../model/deal-board-model.js";
31
+ import { CompanyPicker, useCompanyOptions } from "./company-picker.js";
32
+ import { CrmPicklistSelect } from "./picklist-select.js";
29
33
  import { useContactFieldDefinitions } from "../hooks/use-contact-field-definitions.js";
30
34
  import { useCrmActivityLogger } from "../hooks/use-crm-activity-logger.js";
31
35
  import { useCrmRecordsQuota } from "../hooks/use-crm-records-quota.js";
@@ -35,7 +39,24 @@ import { crmCustomDraftDocument, crmCustomDraftMissingRequired, crmCustomDraftVa
35
39
  import { CrmCustomFieldControl } from "./crm-custom-field-control.js";
36
40
  import { CrmSitePicker } from "./crm-site-picker.js";
37
41
  import { CRM_CLIENT_SEARCH_FIELDS, crmClientListFields } from "../model/crm-list-query.js";
42
+ /**
43
+ * The list fields a client edit of a company rewrites: the search tokens,
44
+ * and the key beside each picklist field the Companies list filters by
45
+ * (AGL-3514).
46
+ */ const COMPANY_CLIENT_LIST_FIELDS = [
47
+ ...CRM_CLIENT_SEARCH_FIELDS,
48
+ ...CRM_COMPANY_PICKLIST_FIELDS.flatMap((entry)=>'keyField' in entry ? [
49
+ entry.keyField
50
+ ] : [])
51
+ ];
38
52
  import { useCrmSharingFollowUp } from "../hooks/use-crm-sharing.js";
53
+ /** How each picklist field is labeled on a company. */ const COMPANY_PICKLIST_LABELS = {
54
+ type: 'Type',
55
+ industry: 'Industry',
56
+ rating: 'Rating',
57
+ ownership: 'Ownership',
58
+ accountSource: 'Account source'
59
+ };
39
60
  const ADDRESS_FIELDS = [
40
61
  {
41
62
  key: 'line1',
@@ -75,7 +96,7 @@ const ADDRESS_FIELDS = [
75
96
  * `acme` or a phone number with no country code is refused — as a message
76
97
  * beside the button, with the typed values left where they are.
77
98
  */ export function CompanyEditDrawer(props) {
78
- var _ref, _ref1, _members_error;
99
+ var _ref, _ref1, _ref2, _members_error;
79
100
  const { open, onClose, hostId, org, company, seed, members, onSaved } = props;
80
101
  const firestore = useFirestore();
81
102
  const { data: user } = useUser();
@@ -118,6 +139,21 @@ const ADDRESS_FIELDS = [
118
139
  */ const records = useCrmRecordsQuota(open && !company ? scope : null, org);
119
140
  const bandFull = !company && records.ready && !records.quota.allowed;
120
141
  /*
142
+ * SALESFORCE'S ACCOUNT FIELDS (AGL-3514): the org's lists behind Type,
143
+ * Industry, Rating, Ownership and Account Source, and the companies a
144
+ * parent may be chosen from — every one the reader can see but this one.
145
+ */ const picklists = useCompanyPicklists((_ref2 = scope == null ? void 0 : scope[1]) != null ? _ref2 : null);
146
+ const seededDefaults = useRef(false);
147
+ const companyOptions = useCompanyOptions({
148
+ hostId,
149
+ org,
150
+ enabled: open
151
+ });
152
+ const parentOptions = useMemo(()=>companyOptions.options.filter((option)=>option.id !== (company == null ? void 0 : company.$id)), [
153
+ companyOptions.options,
154
+ company == null ? void 0 : company.$id
155
+ ]);
156
+ /*
121
157
  * Seeded when the drawer OPENS, and not on every render of the card
122
158
  * behind it: the company listen is live, so re-seeding on each snapshot
123
159
  * would take a field away from whoever is typing in it — including on the
@@ -133,6 +169,7 @@ const ADDRESS_FIELDS = [
133
169
  }));
134
170
  setCustom({});
135
171
  setError('');
172
+ seededDefaults.current = false;
136
173
  // The stored fields are read once per opening; `company` is a new object
137
174
  // on every snapshot and must not re-seed.
138
175
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -140,18 +177,63 @@ const ADDRESS_FIELDS = [
140
177
  open,
141
178
  companyId
142
179
  ]);
180
+ /*
181
+ * A NEW company starts each picklist on the org's default, once the
182
+ * lists have answered — Salesforce's form opens on it too — and only a
183
+ * field nobody has picked a value for yet.
184
+ */ useEffect(()=>{
185
+ if (!open || company || !picklists.ready || seededDefaults.current) return;
186
+ seededDefaults.current = true;
187
+ setDraft((current)=>{
188
+ const next = _extends({}, current);
189
+ for (const { field, picklistId } of CRM_COMPANY_PICKLIST_FIELDS){
190
+ const list = picklists.lists[picklistId];
191
+ const fallback = list ? crmPicklistDefaultLabel(list) : null;
192
+ if (!next[field] && fallback) next[field] = fallback;
193
+ }
194
+ return next;
195
+ });
196
+ }, [
197
+ open,
198
+ company,
199
+ picklists
200
+ ]);
143
201
  const patch = useCallback((field, value)=>setDraft((current)=>_extends({}, current, {
144
202
  [field]: value
145
203
  })), []);
146
- const patchAddress = useCallback((field, value)=>setDraft((current)=>_extends({}, current, {
147
- address: _extends({}, current.address, {
204
+ const patchAddress = useCallback((which, field, value)=>setDraft((current)=>_extends({}, current, {
205
+ [which]: _extends({}, current[which], {
148
206
  [field]: value
149
207
  })
150
208
  })), []);
209
+ /** The parent's own parent, as the cycle guard walks it; `null` for one this reader cannot see. */ const readParent = useCallback(async (id)=>{
210
+ if (!scope) return null;
211
+ try {
212
+ const snapshot = await getDoc(doc(firestore, scope[0], scope[1], CRM_COLLECTIONS.companies, id));
213
+ return snapshot.exists() ? {
214
+ parentCompanyId: crmCompanyParentId(snapshot.get('parentCompanyId'))
215
+ } : null;
216
+ } catch (unused) {
217
+ return null;
218
+ }
219
+ }, [
220
+ firestore,
221
+ scope
222
+ ]);
151
223
  const handleSave = useCallback(async ()=>{
152
224
  if (busy || !scope) return;
153
- const result = companyDraftFields(draft);
225
+ const result = companyDraftFields(draft, {
226
+ lists: picklists.lists,
227
+ current: company
228
+ });
154
229
  if (result.ok === false) return setError(result.error);
230
+ // A parent is never this company, nor one already under it (AGL-3514).
231
+ const parentId = crmCompanyParentId(result.set['parentCompanyId']);
232
+ if (parentId && parentId !== crmCompanyParentId(company == null ? void 0 : company.parentCompanyId)) {
233
+ var _ref;
234
+ const refusal = await crmCompanyParentRefusal((_ref = company == null ? void 0 : company.$id) != null ? _ref : null, parentId, readParent);
235
+ if (refusal) return setError(refusal);
236
+ }
155
237
  const missing = crmCustomDraftMissingRequired(fields.active, storedCustom, custom, company ? 'edit' : 'create');
156
238
  if (missing.length) return setError(`${missing.join(', ')} is required.`);
157
239
  const customDocument = crmCustomDraftDocument(custom);
@@ -159,14 +241,14 @@ const ADDRESS_FIELDS = [
159
241
  setBusy(true);
160
242
  try {
161
243
  if (company) {
162
- var _ref, _ref1;
244
+ var _ref1, _ref2;
163
245
  const ref = doc(firestore, scope[0], scope[1], CRM_COLLECTIONS.companies, company.$id);
164
246
  // The guard WRAPS the write — an early return is a shape you can
165
247
  // keep while losing the protection.
166
248
  const verdict = await writeGuardedBySeed({
167
249
  subject: 'company',
168
- unreadable: (_ref = seed == null ? void 0 : seed.unreadable) != null ? _ref : false,
169
- fromCache: (_ref1 = seed == null ? void 0 : seed.fromCache) != null ? _ref1 : false
250
+ unreadable: (_ref1 = seed == null ? void 0 : seed.unreadable) != null ? _ref1 : false,
251
+ fromCache: (_ref2 = seed == null ? void 0 : seed.fromCache) != null ? _ref2 : false
170
252
  }, async ()=>{
171
253
  const cleared = Object.fromEntries(result.cleared.map((field)=>[
172
254
  field,
@@ -177,7 +259,7 @@ const ADDRESS_FIELDS = [
177
259
  const { $id: _rowId } = company, stored = _object_without_properties_loose(company, [
178
260
  "$id"
179
261
  ]);
180
- const searchFields = crmClientListFields('companies', stored, _extends({}, result.set, cleared), CRM_CLIENT_SEARCH_FIELDS);
262
+ const searchFields = crmClientListFields('companies', stored, _extends({}, result.set, cleared), COMPANY_CLIENT_LIST_FIELDS);
181
263
  await updateDoc(ref, _extends({}, result.set, cleared, searchFields, crmCustomDraftWrites(storedCustom, custom), {
182
264
  updatedAt: serverTimestamp()
183
265
  }));
@@ -192,7 +274,7 @@ const ADDRESS_FIELDS = [
192
274
  });
193
275
  onSaved(company.$id);
194
276
  } else {
195
- var _ref2;
277
+ var _ref3;
196
278
  if (bandFull) return setError(CRM_RECORDS_BAND_FULL_MESSAGE);
197
279
  const id = createResourceUid();
198
280
  // Held by the button until the capturing site is known; checked
@@ -216,7 +298,7 @@ const ADDRESS_FIELDS = [
216
298
  ],
217
299
  // Provenance: the site whose console filed it, never rewritten.
218
300
  hostId: createHostId,
219
- createdByUid: (_ref2 = user == null ? void 0 : user.uid) != null ? _ref2 : '',
301
+ createdByUid: (_ref3 = user == null ? void 0 : user.uid) != null ? _ref3 : '',
220
302
  createdAt: serverTimestamp(),
221
303
  updatedAt: serverTimestamp()
222
304
  }));
@@ -262,7 +344,9 @@ const ADDRESS_FIELDS = [
262
344
  onClose,
263
345
  fields.active,
264
346
  storedCustom,
265
- custom
347
+ custom,
348
+ picklists.lists,
349
+ readParent
266
350
  ]);
267
351
  return /*#__PURE__*/ _jsx(NavigationDrawerComponent, {
268
352
  open: open,
@@ -319,6 +403,10 @@ const ADDRESS_FIELDS = [
319
403
  severity: "warning",
320
404
  children: CRM_RECORDS_BAND_FULL_MESSAGE
321
405
  }) : null,
406
+ /*#__PURE__*/ _jsx(Typography, {
407
+ variant: "subtitle2",
408
+ children: 'Account information'
409
+ }),
322
410
  /*#__PURE__*/ _jsx(TextField, {
323
411
  size: "small",
324
412
  label: "Name",
@@ -327,6 +415,16 @@ const ADDRESS_FIELDS = [
327
415
  onChange: (event)=>patch('name', event.target.value),
328
416
  autoFocus: true
329
417
  }),
418
+ /*#__PURE__*/ _jsx(CompanyPicker, {
419
+ label: "Parent company",
420
+ options: parentOptions,
421
+ value: draft.parentCompanyId || null,
422
+ onChange: (id)=>patch('parentCompanyId', id != null ? id : ''),
423
+ ready: companyOptions.ready,
424
+ truncated: companyOptions.truncated,
425
+ disabled: busy,
426
+ helperText: "The company this one belongs to, such as a subsidiary's group."
427
+ }),
330
428
  /*#__PURE__*/ _jsx(TextField, {
331
429
  size: "small",
332
430
  label: "Domain",
@@ -350,9 +448,132 @@ const ADDRESS_FIELDS = [
350
448
  }),
351
449
  /*#__PURE__*/ _jsx(TextField, {
352
450
  size: "small",
353
- label: "Industry",
354
- value: draft.industry,
355
- onChange: (event)=>patch('industry', event.target.value)
451
+ label: "Fax",
452
+ placeholder: "+1 512 555 0124",
453
+ value: draft.fax,
454
+ onChange: (event)=>patch('fax', event.target.value)
455
+ }),
456
+ CRM_COMPANY_PICKLIST_FIELDS.map(({ field, picklistId })=>{
457
+ var _company_field;
458
+ const list = picklists.lists[picklistId];
459
+ return list ? /*#__PURE__*/ _jsx(CrmPicklistSelect, {
460
+ picklistId: picklistId,
461
+ picklist: list,
462
+ label: COMPANY_PICKLIST_LABELS[field],
463
+ value: draft[field],
464
+ stored: company ? String((_company_field = company[field]) != null ? _company_field : '') : undefined,
465
+ onChange: (label)=>patch(field, label),
466
+ disabled: busy
467
+ }, field) : null;
468
+ }),
469
+ /*#__PURE__*/ _jsx(TextField, {
470
+ size: "small",
471
+ label: "Account number",
472
+ value: draft.accountNumber,
473
+ onChange: (event)=>patch('accountNumber', event.target.value),
474
+ slotProps: {
475
+ htmlInput: {
476
+ maxLength: CRM_COMPANY_TEXT_MAX.accountNumber
477
+ }
478
+ }
479
+ }),
480
+ /*#__PURE__*/ _jsx(TextField, {
481
+ size: "small",
482
+ label: "Account site",
483
+ placeholder: "Headquarters",
484
+ helperText: "Which of the company's locations this record is.",
485
+ value: draft.site,
486
+ onChange: (event)=>patch('site', event.target.value),
487
+ slotProps: {
488
+ htmlInput: {
489
+ maxLength: CRM_COMPANY_TEXT_MAX.site
490
+ }
491
+ }
492
+ }),
493
+ /*#__PURE__*/ _jsxs(Stack, {
494
+ direction: "row",
495
+ spacing: 1,
496
+ children: [
497
+ /*#__PURE__*/ _jsx(TextField, {
498
+ size: "small",
499
+ label: "Ticker symbol",
500
+ value: draft.tickerSymbol,
501
+ onChange: (event)=>patch('tickerSymbol', event.target.value),
502
+ slotProps: {
503
+ htmlInput: {
504
+ maxLength: CRM_COMPANY_TEXT_MAX.tickerSymbol
505
+ }
506
+ },
507
+ sx: {
508
+ flex: 1
509
+ }
510
+ }),
511
+ /*#__PURE__*/ _jsx(TextField, {
512
+ size: "small",
513
+ label: "SIC code",
514
+ value: draft.sicCode,
515
+ onChange: (event)=>patch('sicCode', event.target.value),
516
+ slotProps: {
517
+ htmlInput: {
518
+ maxLength: CRM_COMPANY_TEXT_MAX.sicCode
519
+ }
520
+ },
521
+ sx: {
522
+ flex: 1
523
+ }
524
+ })
525
+ ]
526
+ }),
527
+ /*#__PURE__*/ _jsx(TextField, {
528
+ size: "small",
529
+ label: "Employees",
530
+ value: draft.numberOfEmployees,
531
+ onChange: (event)=>patch('numberOfEmployees', event.target.value),
532
+ slotProps: {
533
+ htmlInput: {
534
+ inputMode: 'numeric'
535
+ }
536
+ }
537
+ }),
538
+ /*#__PURE__*/ _jsxs(Stack, {
539
+ direction: "row",
540
+ spacing: 1,
541
+ children: [
542
+ /*#__PURE__*/ _jsx(TextField, {
543
+ size: "small",
544
+ label: "Annual revenue",
545
+ placeholder: "0.00",
546
+ value: draft.annualRevenue,
547
+ onChange: (event)=>patch('annualRevenue', event.target.value),
548
+ slotProps: {
549
+ htmlInput: {
550
+ inputMode: 'decimal'
551
+ }
552
+ },
553
+ sx: {
554
+ flex: 1
555
+ }
556
+ }),
557
+ /*#__PURE__*/ _jsx(TextField, {
558
+ select: true,
559
+ size: "small",
560
+ label: "Currency",
561
+ value: draft.currency,
562
+ onChange: (event)=>patch('currency', event.target.value),
563
+ sx: {
564
+ width: 120
565
+ },
566
+ children: [
567
+ ...new Set([
568
+ ...DEAL_CURRENCIES,
569
+ draft.currency
570
+ ])
571
+ ].map((code)=>/*#__PURE__*/ _jsx(MenuItem, {
572
+ value: code,
573
+ children: code.toUpperCase()
574
+ }, code))
575
+ })
576
+ ]
356
577
  }),
357
578
  /*#__PURE__*/ _jsxs(TextField, {
358
579
  select: true,
@@ -387,7 +608,12 @@ const ADDRESS_FIELDS = [
387
608
  }),
388
609
  /*#__PURE__*/ _jsx(Typography, {
389
610
  variant: "subtitle2",
390
- children: 'Address'
611
+ children: 'Address information'
612
+ }),
613
+ /*#__PURE__*/ _jsx(Typography, {
614
+ variant: "body2",
615
+ color: "text.secondary",
616
+ children: 'Billing address'
391
617
  }),
392
618
  ADDRESS_FIELDS.map((field)=>{
393
619
  var _draft_address_field_key;
@@ -395,8 +621,43 @@ const ADDRESS_FIELDS = [
395
621
  size: "small",
396
622
  label: field.label,
397
623
  value: (_draft_address_field_key = draft.address[field.key]) != null ? _draft_address_field_key : '',
398
- onChange: (event)=>patchAddress(field.key, event.target.value)
399
- }, field.key);
624
+ onChange: (event)=>patchAddress('address', field.key, event.target.value)
625
+ }, `address.${field.key}`);
626
+ }),
627
+ /*#__PURE__*/ _jsxs(Stack, {
628
+ direction: "row",
629
+ sx: {
630
+ alignItems: 'center',
631
+ justifyContent: 'space-between'
632
+ },
633
+ children: [
634
+ /*#__PURE__*/ _jsx(Typography, {
635
+ variant: "body2",
636
+ color: "text.secondary",
637
+ children: 'Shipping address'
638
+ }),
639
+ /*#__PURE__*/ _jsx(Button, {
640
+ size: "small",
641
+ disabled: busy,
642
+ onClick: ()=>setDraft((current)=>_extends({}, current, {
643
+ shippingAddress: _extends({}, current.address)
644
+ })),
645
+ children: 'Copy billing address'
646
+ })
647
+ ]
648
+ }),
649
+ ADDRESS_FIELDS.map((field)=>{
650
+ var _draft_shippingAddress_field_key;
651
+ return /*#__PURE__*/ _jsx(TextField, {
652
+ size: "small",
653
+ label: field.label,
654
+ value: (_draft_shippingAddress_field_key = draft.shippingAddress[field.key]) != null ? _draft_shippingAddress_field_key : '',
655
+ onChange: (event)=>patchAddress('shippingAddress', field.key, event.target.value)
656
+ }, `shippingAddress.${field.key}`);
657
+ }),
658
+ /*#__PURE__*/ _jsx(Typography, {
659
+ variant: "subtitle2",
660
+ children: 'Description information'
400
661
  }),
401
662
  /*#__PURE__*/ _jsx(TextField, {
402
663
  size: "small",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/components/company-edit-drawer.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport {\n type AglynOrgBilling,\n type AglynPostalAddress,\n createResourceUid,\n CRM_COLLECTIONS,\n CRM_RECORDS_BAND_FULL_MESSAGE,\n type CrmCompany,\n crmNewRecordListFields,\n pluginDocsHelp,\n crmMemberPickerLabel,\n} from '@aglyn/aglyn'\nimport { ICON_VARIANT_CLOSE } from '@aglyn/shared-data-enums'\nimport { Container, HelpTip, MdiIcon, SrOnly } from '@aglyn/shared-ui-jsx'\nimport { NavigationDrawerComponent } from '@aglyn/shared-ui-jsx/components/navigation-drawer.component'\nimport { useSnackbar } from '@aglyn/shared-ui-snackstack'\nimport {\n useFirestore,\n useUser,\n writeGuardedBySeed,\n} from '@aglyn/tenant-feature-instance'\nimport {\n Alert,\n Button,\n IconButton,\n MenuItem,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n deleteField,\n doc,\n serverTimestamp,\n setDoc,\n updateDoc,\n} from 'firebase/firestore'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useContactFieldDefinitions } from '../hooks/use-contact-field-definitions'\nimport { useCrmActivityLogger } from '../hooks/use-crm-activity-logger'\nimport { useCrmRecordsQuota } from '../hooks/use-crm-records-quota'\nimport { useCrmScope } from '../hooks/use-crm-scope'\nimport type { OrgMemberOptions } from '../hooks/use-org-member-options'\nimport {\n type CompanyDraft,\n companyDraftFields,\n companyDraftFrom,\n EMPTY_COMPANY_DRAFT,\n} from '../model/companies'\nimport {\n type CrmCustomDraft,\n crmCustomDraftDocument,\n crmCustomDraftMissingRequired,\n crmCustomDraftValue,\n crmCustomDraftWrites,\n} from '../model/crm-custom-draft'\nimport { CrmCustomFieldControl } from './crm-custom-field-control'\nimport { CrmSitePicker } from './crm-site-picker'\nimport { CRM_CLIENT_SEARCH_FIELDS, crmClientListFields } from '../model/crm-list-query'\nimport { useCrmSharingFollowUp } from '../hooks/use-crm-sharing'\n\nexport interface CompanyEditDrawerProps {\n open: boolean\n onClose: () => void\n /**\n * The site the drawer is opened under, or `null` at the organization\n * level (AGL-2630), where a NEW company asks which site captures it and\n * an edit keeps the company's own.\n */\n hostId: string | null\n org?: Partial<AglynOrgBilling> | null\n /**\n * The company being EDITED, or nothing to create one.\n *\n * The two modes differ in what the fields start as and in which write\n * runs: an edit opens on the stored values and updates the document, a\n * create opens empty and stamps the scope, provenance and timestamps a new\n * record must carry.\n */\n company?: (Partial<CrmCompany> & { $id: string }) | null\n /**\n * Whether the stored values the edit opened on can be trusted.\n *\n * Every optional field is written on every save — a blank one is a\n * DELETE — so a form seeded from a cached read would write the cache's\n * blanks over the server's values. The card that holds the listen reports\n * its own `fromCache` and `status`; the drawer refuses to save on a seed\n * the server never confirmed, and says so.\n */\n seed?: { fromCache: boolean; unreadable: boolean }\n /**\n * The team, for the owner picker.\n *\n * Handed in rather than fetched here, because the surface opening this\n * drawer already holds the roster to name owners in its rows, and one\n * fetch per surface is the bargain.\n */\n members: OrgMemberOptions\n /** Called with the record's id after a successful write. */\n onSaved: (companyId: string) => void\n}\n\nconst ADDRESS_FIELDS: ReadonlyArray<{\n key: keyof AglynPostalAddress\n label: string\n}> = [\n { key: 'line1', label: 'Address line 1' },\n { key: 'line2', label: 'Address line 2' },\n { key: 'city', label: 'City' },\n { key: 'state', label: 'State or region' },\n { key: 'postalCode', label: 'Postal code' },\n { key: 'country', label: 'Country (two-letter code)' },\n]\n\n/**\n * ONE COMPANY, created or edited (AGL-2597).\n *\n * A drawer rather than a form above the list, and the same drawer for both\n * jobs: a company is eight fields and an address, which is too much to wedge\n * over a table and exactly the same set whether the record exists yet. The\n * list opens it empty; the company's page opens it on the record.\n *\n * Nothing is written per keystroke. The draft is held here and turned into a\n * document by `companyDraftFields` on Save, which is where a domain typed as\n * `acme` or a phone number with no country code is refused — as a message\n * beside the button, with the typed values left where they are.\n */\nexport function CompanyEditDrawer(props: CompanyEditDrawerProps) {\n const { open, onClose, hostId, org, company, seed, members, onSaved } = props\n const firestore = useFirestore()\n const { data: user } = useUser()\n const { enqueueSnackbar } = useSnackbar()\n const { scope, createTokens, createHostId } = useCrmScope({ hostId, org })\n // A client-direct write owes the org's sharing rules a re-evaluation (AGL-3336).\n const followUpSharing = useCrmSharingFollowUp(hostId, scope?.[1] ?? null)\n // The feed the act is logged in is the level it was PERFORMED at\n // (AGL-2738): this site's under a site, the organization's at the org\n // hub. `createHostId` is where the record is STAMPED, which at the hub is\n // a site the reader picked and may hold no role on — a different question\n // from where the line belongs, and a gate the record write never faced.\n const logActivity = useCrmActivityLogger(hostId)\n\n const [draft, setDraft] = useState<CompanyDraft>(EMPTY_COMPANY_DRAFT)\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState('')\n /*\n * THE CUSTOM FIELDS (AGL-2661): the org's company definitions, and the\n * keys the reader has touched over what the company stores. Saved as the\n * difference — see `crm-custom-draft` — beside the fixed fields, in the\n * same write, so a company is never half-saved.\n */\n const fields = useContactFieldDefinitions(scope?.[1] ?? null, 'company')\n const storedCustom = useMemo(() => company?.custom ?? {}, [company?.custom])\n const [custom, setCustom] = useState<CrmCustomDraft>({})\n /*\n * THE RECORDS BAND (AGL-2611), read only for a CREATE: a company is a\n * record of the band the contacts list is banded by, and on an org at a\n * full hard band this drawer refuses the way `upsertHostContact` refuses a\n * capture — same number, same sentence. An edit is not a record and pays\n * for no aggregate. Only a SETTLED refusal refuses: three reads that have\n * not answered are not a full band.\n */\n const records = useCrmRecordsQuota(open && !company ? scope : null, org)\n const bandFull = !company && records.ready && !records.quota.allowed\n\n /*\n * Seeded when the drawer OPENS, and not on every render of the card\n * behind it: the company listen is live, so re-seeding on each snapshot\n * would take a field away from whoever is typing in it — including on the\n * snapshot their own save produces. The create case seeds the owner to the\n * person filing the record, which is the answer nine times in ten and one\n * click to change.\n */\n const companyId = company?.$id\n useEffect(() => {\n if (!open) return\n setDraft(\n company\n ? companyDraftFrom(company)\n : { ...EMPTY_COMPANY_DRAFT, ownerUid: user?.uid ?? '' },\n )\n setCustom({})\n setError('')\n // The stored fields are read once per opening; `company` is a new object\n // on every snapshot and must not re-seed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, companyId])\n\n const patch = useCallback(\n (field: keyof Omit<CompanyDraft, 'address'>, value: string) =>\n setDraft((current) => ({ ...current, [field]: value })),\n [],\n )\n const patchAddress = useCallback(\n (field: keyof AglynPostalAddress, value: string) =>\n setDraft((current) => ({\n ...current,\n address: { ...current.address, [field]: value },\n })),\n [],\n )\n\n const handleSave = useCallback(async () => {\n if (busy || !scope) return\n const result = companyDraftFields(draft)\n if (result.ok === false) return setError(result.error)\n const missing = crmCustomDraftMissingRequired(\n fields.active,\n storedCustom,\n custom,\n company ? 'edit' : 'create',\n )\n if (missing.length) return setError(`${missing.join(', ')} is required.`)\n const customDocument = crmCustomDraftDocument(custom)\n setError('')\n setBusy(true)\n try {\n if (company) {\n const ref = doc(\n firestore,\n scope[0],\n scope[1],\n CRM_COLLECTIONS.companies,\n company.$id,\n )\n // The guard WRAPS the write — an early return is a shape you can\n // keep while losing the protection.\n const verdict = await writeGuardedBySeed(\n {\n subject: 'company',\n unreadable: seed?.unreadable ?? false,\n fromCache: seed?.fromCache ?? false,\n },\n async () => {\n const cleared = Object.fromEntries(\n result.cleared.map((field) => [field, deleteField()]),\n )\n // The stored record the list fields are computed from: the row\n // without the id the listener stamped on it.\n const { $id: _rowId, ...stored } = company\n const searchFields = crmClientListFields(\n 'companies',\n stored,\n { ...result.set, ...cleared },\n CRM_CLIENT_SEARCH_FIELDS,\n )\n await updateDoc(ref, {\n ...result.set,\n // A blank optional field is a DELETE on an edit, or the old\n // domain would stay stored and keep matching people by email.\n ...cleared,\n // The name and domain are what the Companies list searches\n // (AGL-3321), from the listener's row with the edit over it.\n ...searchFields,\n // The custom keys that changed, merged into the stored map.\n ...crmCustomDraftWrites(storedCustom, custom),\n updatedAt: serverTimestamp(),\n })\n },\n )\n if (!verdict.ok) return setError(verdict.message)\n followUpSharing('companies', [company.$id])\n enqueueSnackbar('Company saved', { variant: 'success', persist: false })\n onSaved(company.$id)\n } else {\n if (bandFull) return setError(CRM_RECORDS_BAND_FULL_MESSAGE)\n const id = createResourceUid()\n // Held by the button until the capturing site is known; checked\n // again here because a callback can outlive the render that held it.\n if (!createHostId) return\n await setDoc(\n doc(firestore, scope[0], scope[1], CRM_COLLECTIONS.companies, id),\n {\n ...result.set,\n ...(customDocument ? { custom: customDocument } : {}),\n // What the Companies list searches and filters by (AGL-3321).\n ...crmNewRecordListFields('companies', {\n ...result.set,\n visibleTo: [...createTokens],\n }),\n /*\n * The scope every CRM creator stamps: the whole org when the org\n * shares by default, and otherwise the sites that present as one\n * sender. Without it the record is seen by NOBODY — an absent\n * `visibleTo` matches no reader's predicate — and the rules\n * refuse a scoped member creating outside their own tokens.\n */\n visibleTo: [...createTokens],\n // Provenance: the site whose console filed it, never rewritten.\n hostId: createHostId,\n createdByUid: user?.uid ?? '',\n createdAt: serverTimestamp(),\n updatedAt: serverTimestamp(),\n },\n )\n // Setup → Activity shows CRM work (AGL-2622): the company is org\n // data, but the act happened in this site's console and belongs in\n // its feed. Creation only — an edit is a save the card reports.\n followUpSharing('companies', [id])\n logActivity('Added company', { type: 'company', id, name: draft.name.trim() })\n enqueueSnackbar(`Company \"${draft.name.trim()}\" created`, {\n variant: 'success',\n persist: false,\n })\n onSaved(id)\n }\n onClose()\n } catch (caught) {\n console.error(caught)\n setError('The company could not be saved.')\n } finally {\n setBusy(false)\n }\n }, [\n busy,\n scope,\n followUpSharing,\n draft,\n company,\n bandFull,\n firestore,\n seed,\n createTokens,\n createHostId,\n user,\n logActivity,\n enqueueSnackbar,\n onSaved,\n onClose,\n fields.active,\n storedCustom,\n custom,\n ])\n\n return (\n <NavigationDrawerComponent\n open={open}\n anchor=\"right\"\n variant=\"temporary\"\n onClose={onClose}\n AppBarProps={{ color: 'surface' }}\n appBarLeft={\n <>\n <IconButton\n color=\"inherit\"\n edge=\"start\"\n onClick={onClose}\n sx={{ mr: 2 }}\n >\n <MdiIcon path={ICON_VARIANT_CLOSE.path} />\n <SrOnly>{'close drawer'}</SrOnly>\n </IconButton>\n <Typography variant=\"h6\" component=\"div\">\n {company ? 'Edit company' : 'New company'}\n </Typography>\n <HelpTip\n {...pluginDocsHelp('companies', { anchor: '#create-a-company' })}\n />\n </>\n }\n >\n <Container gutterY>\n <Stack spacing={2}>\n {/*\n First, because the scope of everything below follows from it: at\n the organization level a new company names the site that\n captures it. Nothing under a site, and nothing on an edit — a\n company keeps the site it was made on (AGL-2630).\n */}\n {company ? null : (\n <CrmSitePicker\n hostId={hostId}\n disabled={busy}\n helperText=\"The site this company belongs to — it decides which of your sites may see it.\"\n />\n )}\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'The organization behind one or more of your contacts. The ' +\n 'domain is what suggests this company for a person from their ' +\n 'email address, so enter the bare hostname.'}\n </Typography>\n {bandFull ? (\n <Alert severity=\"warning\">{CRM_RECORDS_BAND_FULL_MESSAGE}</Alert>\n ) : null}\n <TextField\n size=\"small\"\n label=\"Name\"\n required\n value={draft.name}\n onChange={(event) => patch('name', event.target.value)}\n autoFocus\n />\n <TextField\n size=\"small\"\n label=\"Domain\"\n placeholder=\"example.com\"\n value={draft.domain}\n onChange={(event) => patch('domain', event.target.value)}\n />\n <TextField\n size=\"small\"\n label=\"Website\"\n placeholder=\"https://www.example.com\"\n value={draft.website}\n onChange={(event) => patch('website', event.target.value)}\n />\n <TextField\n size=\"small\"\n label=\"Phone\"\n placeholder=\"+1 512 555 0123\"\n value={draft.phone}\n onChange={(event) => patch('phone', event.target.value)}\n />\n <TextField\n size=\"small\"\n label=\"Industry\"\n value={draft.industry}\n onChange={(event) => patch('industry', event.target.value)}\n />\n {/*\n The owner is chosen from the team, never typed: the value is a\n uid, and a picker that is still loading says so rather than\n offering an empty list that reads as \"nobody can own this\".\n */}\n <TextField\n select\n size=\"small\"\n label=\"Owner\"\n value={draft.ownerUid}\n disabled={!members.ready}\n helperText={\n !members.ready\n ? 'Loading your team…'\n : (members.error ?? 'The team member responsible for this account.')\n }\n onChange={(event) => patch('ownerUid', event.target.value)}\n >\n <MenuItem value=\"\">{'Nobody yet'}</MenuItem>\n {draft.ownerUid &&\n !members.options.some((option) => option.uid === draft.ownerUid) ? (\n <MenuItem value={draft.ownerUid}>\n {members.labelFor(draft.ownerUid)}\n </MenuItem>\n ) : null}\n {members.options.map((option) => (\n <MenuItem key={option.uid} value={option.uid}>\n {crmMemberPickerLabel(option)}\n </MenuItem>\n ))}\n </TextField>\n <TextField\n size=\"small\"\n label=\"Tags\"\n placeholder=\"enterprise, west\"\n helperText=\"Comma-separated, lowercased — the same tags the bulk bar adds\"\n value={draft.tags}\n onChange={(event) => patch('tags', event.target.value)}\n />\n <Typography variant=\"subtitle2\">{'Address'}</Typography>\n {ADDRESS_FIELDS.map((field) => (\n <TextField\n key={field.key}\n size=\"small\"\n label={field.label}\n value={draft.address[field.key] ?? ''}\n onChange={(event) => patchAddress(field.key, event.target.value)}\n />\n ))}\n <TextField\n size=\"small\"\n label=\"Notes\"\n value={draft.notes}\n onChange={(event) => patch('notes', event.target.value)}\n multiline\n minRows={3}\n />\n {fields.active.length ? (\n <>\n <Typography variant=\"subtitle2\">{'Custom fields'}</Typography>\n {fields.active.map((definition) => (\n <CrmCustomFieldControl\n key={definition.$id}\n definition={definition}\n value={crmCustomDraftValue(storedCustom, custom, definition.key)}\n onChange={(value) =>\n setCustom((current) => ({ ...current, [definition.key]: value }))\n }\n disabled={busy}\n />\n ))}\n </>\n ) : null}\n {error ? <Alert severity=\"warning\">{error}</Alert> : null}\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n // A new company waits for its capturing site.\n disabled={busy || !scope || !draft.name.trim() || (!company && !createHostId)}\n onClick={() => void handleSave()}\n >\n {busy\n ? 'Saving…'\n : company\n ? 'Save company'\n : 'Create company'}\n </Button>\n <Button onClick={onClose} disabled={busy}>\n {'Cancel'}\n </Button>\n </Stack>\n </Stack>\n </Container>\n </NavigationDrawerComponent>\n )\n}\nCompanyEditDrawer.displayName = 'CompanyEditDrawer'\n\nexport default CompanyEditDrawer\n"],"names":["createResourceUid","CRM_COLLECTIONS","CRM_RECORDS_BAND_FULL_MESSAGE","crmNewRecordListFields","pluginDocsHelp","crmMemberPickerLabel","ICON_VARIANT_CLOSE","Container","HelpTip","MdiIcon","SrOnly","NavigationDrawerComponent","useSnackbar","useFirestore","useUser","writeGuardedBySeed","Alert","Button","IconButton","MenuItem","Stack","TextField","Typography","deleteField","doc","serverTimestamp","setDoc","updateDoc","useCallback","useEffect","useMemo","useState","useContactFieldDefinitions","useCrmActivityLogger","useCrmRecordsQuota","useCrmScope","companyDraftFields","companyDraftFrom","EMPTY_COMPANY_DRAFT","crmCustomDraftDocument","crmCustomDraftMissingRequired","crmCustomDraftValue","crmCustomDraftWrites","CrmCustomFieldControl","CrmSitePicker","CRM_CLIENT_SEARCH_FIELDS","crmClientListFields","useCrmSharingFollowUp","ADDRESS_FIELDS","key","label","CompanyEditDrawer","props","members","open","onClose","hostId","org","company","seed","onSaved","firestore","data","user","enqueueSnackbar","scope","createTokens","createHostId","followUpSharing","logActivity","draft","setDraft","busy","setBusy","error","setError","fields","storedCustom","custom","setCustom","records","bandFull","ready","quota","allowed","companyId","$id","ownerUid","uid","patch","field","value","current","patchAddress","address","handleSave","result","ok","missing","active","length","join","customDocument","ref","companies","verdict","subject","unreadable","fromCache","cleared","Object","fromEntries","map","_rowId","stored","searchFields","set","updatedAt","message","variant","persist","id","visibleTo","createdByUid","createdAt","type","name","trim","caught","console","anchor","AppBarProps","color","appBarLeft","edge","onClick","sx","mr","path","component","gutterY","spacing","disabled","helperText","severity","size","required","onChange","event","target","autoFocus","placeholder","domain","website","phone","industry","select","options","some","option","labelFor","tags","notes","multiline","minRows","definition","direction","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/components/company-edit-drawer.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport {\n type AglynOrgBilling,\n type AglynPostalAddress,\n createResourceUid,\n CRM_COLLECTIONS,\n CRM_RECORDS_BAND_FULL_MESSAGE,\n CRM_COMPANY_PICKLIST_FIELDS,\n CRM_COMPANY_TEXT_MAX,\n type CrmCompany,\n type CrmCompanyPicklistField,\n crmCompanyParentId,\n crmCompanyParentRefusal,\n crmNewRecordListFields,\n crmPicklistDefaultLabel,\n pluginDocsHelp,\n crmMemberPickerLabel,\n} from '@aglyn/aglyn'\nimport { ICON_VARIANT_CLOSE } from '@aglyn/shared-data-enums'\nimport { Container, HelpTip, MdiIcon, SrOnly } from '@aglyn/shared-ui-jsx'\nimport { NavigationDrawerComponent } from '@aglyn/shared-ui-jsx/components/navigation-drawer.component'\nimport { useSnackbar } from '@aglyn/shared-ui-snackstack'\nimport {\n useFirestore,\n useUser,\n writeGuardedBySeed,\n} from '@aglyn/tenant-feature-instance'\nimport {\n Alert,\n Button,\n IconButton,\n MenuItem,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n deleteField,\n doc,\n getDoc,\n serverTimestamp,\n setDoc,\n updateDoc,\n} from 'firebase/firestore'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCompanyPicklists } from '../hooks/use-company-picklists'\nimport { DEAL_CURRENCIES } from '../model/deal-board-model'\nimport { CompanyPicker, useCompanyOptions } from './company-picker'\nimport { CrmPicklistSelect } from './picklist-select'\nimport { useContactFieldDefinitions } from '../hooks/use-contact-field-definitions'\nimport { useCrmActivityLogger } from '../hooks/use-crm-activity-logger'\nimport { useCrmRecordsQuota } from '../hooks/use-crm-records-quota'\nimport { useCrmScope } from '../hooks/use-crm-scope'\nimport type { OrgMemberOptions } from '../hooks/use-org-member-options'\nimport {\n type CompanyDraft,\n companyDraftFields,\n companyDraftFrom,\n EMPTY_COMPANY_DRAFT,\n} from '../model/companies'\nimport {\n type CrmCustomDraft,\n crmCustomDraftDocument,\n crmCustomDraftMissingRequired,\n crmCustomDraftValue,\n crmCustomDraftWrites,\n} from '../model/crm-custom-draft'\nimport { CrmCustomFieldControl } from './crm-custom-field-control'\nimport { CrmSitePicker } from './crm-site-picker'\nimport { CRM_CLIENT_SEARCH_FIELDS, crmClientListFields } from '../model/crm-list-query'\n\n/**\n * The list fields a client edit of a company rewrites: the search tokens,\n * and the key beside each picklist field the Companies list filters by\n * (AGL-3514).\n */\nconst COMPANY_CLIENT_LIST_FIELDS = [\n ...CRM_CLIENT_SEARCH_FIELDS,\n ...CRM_COMPANY_PICKLIST_FIELDS.flatMap((entry) => ('keyField' in entry ? [entry.keyField] : [])),\n]\nimport { useCrmSharingFollowUp } from '../hooks/use-crm-sharing'\n\nexport interface CompanyEditDrawerProps {\n open: boolean\n onClose: () => void\n /**\n * The site the drawer is opened under, or `null` at the organization\n * level (AGL-2630), where a NEW company asks which site captures it and\n * an edit keeps the company's own.\n */\n hostId: string | null\n org?: Partial<AglynOrgBilling> | null\n /**\n * The company being EDITED, or nothing to create one.\n *\n * The two modes differ in what the fields start as and in which write\n * runs: an edit opens on the stored values and updates the document, a\n * create opens empty and stamps the scope, provenance and timestamps a new\n * record must carry.\n */\n company?: (Partial<CrmCompany> & { $id: string }) | null\n /**\n * Whether the stored values the edit opened on can be trusted.\n *\n * Every optional field is written on every save — a blank one is a\n * DELETE — so a form seeded from a cached read would write the cache's\n * blanks over the server's values. The card that holds the listen reports\n * its own `fromCache` and `status`; the drawer refuses to save on a seed\n * the server never confirmed, and says so.\n */\n seed?: { fromCache: boolean; unreadable: boolean }\n /**\n * The team, for the owner picker.\n *\n * Handed in rather than fetched here, because the surface opening this\n * drawer already holds the roster to name owners in its rows, and one\n * fetch per surface is the bargain.\n */\n members: OrgMemberOptions\n /** Called with the record's id after a successful write. */\n onSaved: (companyId: string) => void\n}\n\ntype AddressDraftField = 'address' | 'shippingAddress'\n\n/** How each picklist field is labeled on a company. */\nconst COMPANY_PICKLIST_LABELS: Record<CrmCompanyPicklistField, string> = {\n type: 'Type',\n industry: 'Industry',\n rating: 'Rating',\n ownership: 'Ownership',\n accountSource: 'Account source',\n}\n\nconst ADDRESS_FIELDS: ReadonlyArray<{\n key: keyof AglynPostalAddress\n label: string\n}> = [\n { key: 'line1', label: 'Address line 1' },\n { key: 'line2', label: 'Address line 2' },\n { key: 'city', label: 'City' },\n { key: 'state', label: 'State or region' },\n { key: 'postalCode', label: 'Postal code' },\n { key: 'country', label: 'Country (two-letter code)' },\n]\n\n/**\n * ONE COMPANY, created or edited (AGL-2597).\n *\n * A drawer rather than a form above the list, and the same drawer for both\n * jobs: a company is eight fields and an address, which is too much to wedge\n * over a table and exactly the same set whether the record exists yet. The\n * list opens it empty; the company's page opens it on the record.\n *\n * Nothing is written per keystroke. The draft is held here and turned into a\n * document by `companyDraftFields` on Save, which is where a domain typed as\n * `acme` or a phone number with no country code is refused — as a message\n * beside the button, with the typed values left where they are.\n */\nexport function CompanyEditDrawer(props: CompanyEditDrawerProps) {\n const { open, onClose, hostId, org, company, seed, members, onSaved } = props\n const firestore = useFirestore()\n const { data: user } = useUser()\n const { enqueueSnackbar } = useSnackbar()\n const { scope, createTokens, createHostId } = useCrmScope({ hostId, org })\n // A client-direct write owes the org's sharing rules a re-evaluation (AGL-3336).\n const followUpSharing = useCrmSharingFollowUp(hostId, scope?.[1] ?? null)\n // The feed the act is logged in is the level it was PERFORMED at\n // (AGL-2738): this site's under a site, the organization's at the org\n // hub. `createHostId` is where the record is STAMPED, which at the hub is\n // a site the reader picked and may hold no role on — a different question\n // from where the line belongs, and a gate the record write never faced.\n const logActivity = useCrmActivityLogger(hostId)\n\n const [draft, setDraft] = useState<CompanyDraft>(EMPTY_COMPANY_DRAFT)\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState('')\n /*\n * THE CUSTOM FIELDS (AGL-2661): the org's company definitions, and the\n * keys the reader has touched over what the company stores. Saved as the\n * difference — see `crm-custom-draft` — beside the fixed fields, in the\n * same write, so a company is never half-saved.\n */\n const fields = useContactFieldDefinitions(scope?.[1] ?? null, 'company')\n const storedCustom = useMemo(() => company?.custom ?? {}, [company?.custom])\n const [custom, setCustom] = useState<CrmCustomDraft>({})\n /*\n * THE RECORDS BAND (AGL-2611), read only for a CREATE: a company is a\n * record of the band the contacts list is banded by, and on an org at a\n * full hard band this drawer refuses the way `upsertHostContact` refuses a\n * capture — same number, same sentence. An edit is not a record and pays\n * for no aggregate. Only a SETTLED refusal refuses: three reads that have\n * not answered are not a full band.\n */\n const records = useCrmRecordsQuota(open && !company ? scope : null, org)\n const bandFull = !company && records.ready && !records.quota.allowed\n /*\n * SALESFORCE'S ACCOUNT FIELDS (AGL-3514): the org's lists behind Type,\n * Industry, Rating, Ownership and Account Source, and the companies a\n * parent may be chosen from — every one the reader can see but this one.\n */\n const picklists = useCompanyPicklists(scope?.[1] ?? null)\n const seededDefaults = useRef(false)\n const companyOptions = useCompanyOptions({ hostId, org, enabled: open })\n const parentOptions = useMemo(\n () => companyOptions.options.filter((option) => option.id !== company?.$id),\n [companyOptions.options, company?.$id],\n )\n\n /*\n * Seeded when the drawer OPENS, and not on every render of the card\n * behind it: the company listen is live, so re-seeding on each snapshot\n * would take a field away from whoever is typing in it — including on the\n * snapshot their own save produces. The create case seeds the owner to the\n * person filing the record, which is the answer nine times in ten and one\n * click to change.\n */\n const companyId = company?.$id\n useEffect(() => {\n if (!open) return\n setDraft(\n company\n ? companyDraftFrom(company)\n : { ...EMPTY_COMPANY_DRAFT, ownerUid: user?.uid ?? '' },\n )\n setCustom({})\n setError('')\n seededDefaults.current = false\n // The stored fields are read once per opening; `company` is a new object\n // on every snapshot and must not re-seed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, companyId])\n /*\n * A NEW company starts each picklist on the org's default, once the\n * lists have answered — Salesforce's form opens on it too — and only a\n * field nobody has picked a value for yet.\n */\n useEffect(() => {\n if (!open || company || !picklists.ready || seededDefaults.current) return\n seededDefaults.current = true\n setDraft((current) => {\n const next = { ...current }\n for (const { field, picklistId } of CRM_COMPANY_PICKLIST_FIELDS) {\n const list = picklists.lists[picklistId]\n const fallback = list ? crmPicklistDefaultLabel(list) : null\n if (!next[field] && fallback) next[field] = fallback\n }\n return next\n })\n }, [open, company, picklists])\n\n const patch = useCallback(\n (field: keyof Omit<CompanyDraft, AddressDraftField>, value: string) =>\n setDraft((current) => ({ ...current, [field]: value })),\n [],\n )\n const patchAddress = useCallback(\n (which: AddressDraftField, field: keyof AglynPostalAddress, value: string) =>\n setDraft((current) => ({\n ...current,\n [which]: { ...current[which], [field]: value },\n })),\n [],\n )\n /** The parent's own parent, as the cycle guard walks it; `null` for one this reader cannot see. */\n const readParent = useCallback(\n async (id: string) => {\n if (!scope) return null\n try {\n const snapshot = await getDoc(\n doc(firestore, scope[0], scope[1], CRM_COLLECTIONS.companies, id),\n )\n return snapshot.exists()\n ? { parentCompanyId: crmCompanyParentId(snapshot.get('parentCompanyId')) }\n : null\n } catch {\n return null\n }\n },\n [firestore, scope],\n )\n\n const handleSave = useCallback(async () => {\n if (busy || !scope) return\n const result = companyDraftFields(draft, { lists: picklists.lists, current: company })\n if (result.ok === false) return setError(result.error)\n // A parent is never this company, nor one already under it (AGL-3514).\n const parentId = crmCompanyParentId(result.set['parentCompanyId'])\n if (parentId && parentId !== crmCompanyParentId(company?.parentCompanyId)) {\n const refusal = await crmCompanyParentRefusal(company?.$id ?? null, parentId, readParent)\n if (refusal) return setError(refusal)\n }\n const missing = crmCustomDraftMissingRequired(\n fields.active,\n storedCustom,\n custom,\n company ? 'edit' : 'create',\n )\n if (missing.length) return setError(`${missing.join(', ')} is required.`)\n const customDocument = crmCustomDraftDocument(custom)\n setError('')\n setBusy(true)\n try {\n if (company) {\n const ref = doc(\n firestore,\n scope[0],\n scope[1],\n CRM_COLLECTIONS.companies,\n company.$id,\n )\n // The guard WRAPS the write — an early return is a shape you can\n // keep while losing the protection.\n const verdict = await writeGuardedBySeed(\n {\n subject: 'company',\n unreadable: seed?.unreadable ?? false,\n fromCache: seed?.fromCache ?? false,\n },\n async () => {\n const cleared = Object.fromEntries(\n result.cleared.map((field) => [field, deleteField()]),\n )\n // The stored record the list fields are computed from: the row\n // without the id the listener stamped on it.\n const { $id: _rowId, ...stored } = company\n const searchFields = crmClientListFields(\n 'companies',\n stored,\n { ...result.set, ...cleared },\n COMPANY_CLIENT_LIST_FIELDS,\n )\n await updateDoc(ref, {\n ...result.set,\n // A blank optional field is a DELETE on an edit, or the old\n // domain would stay stored and keep matching people by email.\n ...cleared,\n // The name and domain are what the Companies list searches\n // (AGL-3321), and the picklist keys what it filters by\n // (AGL-3514), from the listener's row with the edit over it.\n ...searchFields,\n // The custom keys that changed, merged into the stored map.\n ...crmCustomDraftWrites(storedCustom, custom),\n updatedAt: serverTimestamp(),\n })\n },\n )\n if (!verdict.ok) return setError(verdict.message)\n followUpSharing('companies', [company.$id])\n enqueueSnackbar('Company saved', { variant: 'success', persist: false })\n onSaved(company.$id)\n } else {\n if (bandFull) return setError(CRM_RECORDS_BAND_FULL_MESSAGE)\n const id = createResourceUid()\n // Held by the button until the capturing site is known; checked\n // again here because a callback can outlive the render that held it.\n if (!createHostId) return\n await setDoc(\n doc(firestore, scope[0], scope[1], CRM_COLLECTIONS.companies, id),\n {\n ...result.set,\n ...(customDocument ? { custom: customDocument } : {}),\n // What the Companies list searches and filters by (AGL-3321).\n ...crmNewRecordListFields('companies', {\n ...result.set,\n visibleTo: [...createTokens],\n }),\n /*\n * The scope every CRM creator stamps: the whole org when the org\n * shares by default, and otherwise the sites that present as one\n * sender. Without it the record is seen by NOBODY — an absent\n * `visibleTo` matches no reader's predicate — and the rules\n * refuse a scoped member creating outside their own tokens.\n */\n visibleTo: [...createTokens],\n // Provenance: the site whose console filed it, never rewritten.\n hostId: createHostId,\n createdByUid: user?.uid ?? '',\n createdAt: serverTimestamp(),\n updatedAt: serverTimestamp(),\n },\n )\n // Setup → Activity shows CRM work (AGL-2622): the company is org\n // data, but the act happened in this site's console and belongs in\n // its feed. Creation only — an edit is a save the card reports.\n followUpSharing('companies', [id])\n logActivity('Added company', { type: 'company', id, name: draft.name.trim() })\n enqueueSnackbar(`Company \"${draft.name.trim()}\" created`, {\n variant: 'success',\n persist: false,\n })\n onSaved(id)\n }\n onClose()\n } catch (caught) {\n console.error(caught)\n setError('The company could not be saved.')\n } finally {\n setBusy(false)\n }\n }, [\n busy,\n scope,\n followUpSharing,\n draft,\n company,\n bandFull,\n firestore,\n seed,\n createTokens,\n createHostId,\n user,\n logActivity,\n enqueueSnackbar,\n onSaved,\n onClose,\n fields.active,\n storedCustom,\n custom,\n picklists.lists,\n readParent,\n ])\n\n return (\n <NavigationDrawerComponent\n open={open}\n anchor=\"right\"\n variant=\"temporary\"\n onClose={onClose}\n AppBarProps={{ color: 'surface' }}\n appBarLeft={\n <>\n <IconButton\n color=\"inherit\"\n edge=\"start\"\n onClick={onClose}\n sx={{ mr: 2 }}\n >\n <MdiIcon path={ICON_VARIANT_CLOSE.path} />\n <SrOnly>{'close drawer'}</SrOnly>\n </IconButton>\n <Typography variant=\"h6\" component=\"div\">\n {company ? 'Edit company' : 'New company'}\n </Typography>\n <HelpTip\n {...pluginDocsHelp('companies', { anchor: '#create-a-company' })}\n />\n </>\n }\n >\n <Container gutterY>\n <Stack spacing={2}>\n {/*\n First, because the scope of everything below follows from it: at\n the organization level a new company names the site that\n captures it. Nothing under a site, and nothing on an edit — a\n company keeps the site it was made on (AGL-2630).\n */}\n {company ? null : (\n <CrmSitePicker\n hostId={hostId}\n disabled={busy}\n helperText=\"The site this company belongs to — it decides which of your sites may see it.\"\n />\n )}\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'The organization behind one or more of your contacts. The ' +\n 'domain is what suggests this company for a person from their ' +\n 'email address, so enter the bare hostname.'}\n </Typography>\n {bandFull ? (\n <Alert severity=\"warning\">{CRM_RECORDS_BAND_FULL_MESSAGE}</Alert>\n ) : null}\n {/*\n Grouped as Salesforce's Account page groups them (AGL-3514):\n what the company is, where it is, and what the team knows.\n */}\n <Typography variant=\"subtitle2\">{'Account information'}</Typography>\n <TextField\n size=\"small\"\n label=\"Name\"\n required\n value={draft.name}\n onChange={(event) => patch('name', event.target.value)}\n autoFocus\n />\n <CompanyPicker\n label=\"Parent company\"\n options={parentOptions}\n value={draft.parentCompanyId || null}\n onChange={(id) => patch('parentCompanyId', id ?? '')}\n ready={companyOptions.ready}\n truncated={companyOptions.truncated}\n disabled={busy}\n helperText=\"The company this one belongs to, such as a subsidiary's group.\"\n />\n <TextField\n size=\"small\"\n label=\"Domain\"\n placeholder=\"example.com\"\n value={draft.domain}\n onChange={(event) => patch('domain', event.target.value)}\n />\n <TextField\n size=\"small\"\n label=\"Website\"\n placeholder=\"https://www.example.com\"\n value={draft.website}\n onChange={(event) => patch('website', event.target.value)}\n />\n <TextField\n size=\"small\"\n label=\"Phone\"\n placeholder=\"+1 512 555 0123\"\n value={draft.phone}\n onChange={(event) => patch('phone', event.target.value)}\n />\n <TextField\n size=\"small\"\n label=\"Fax\"\n placeholder=\"+1 512 555 0124\"\n value={draft.fax}\n onChange={(event) => patch('fax', event.target.value)}\n />\n {CRM_COMPANY_PICKLIST_FIELDS.map(({ field, picklistId }) => {\n const list = picklists.lists[picklistId]\n return list ? (\n <CrmPicklistSelect\n key={field}\n picklistId={picklistId}\n picklist={list}\n label={COMPANY_PICKLIST_LABELS[field]}\n value={draft[field]}\n stored={company ? String(company[field] ?? '') : undefined}\n onChange={(label) => patch(field, label)}\n disabled={busy}\n />\n ) : null\n })}\n <TextField\n size=\"small\"\n label=\"Account number\"\n value={draft.accountNumber}\n onChange={(event) => patch('accountNumber', event.target.value)}\n slotProps={{ htmlInput: { maxLength: CRM_COMPANY_TEXT_MAX.accountNumber } }}\n />\n <TextField\n size=\"small\"\n label=\"Account site\"\n placeholder=\"Headquarters\"\n helperText=\"Which of the company's locations this record is.\"\n value={draft.site}\n onChange={(event) => patch('site', event.target.value)}\n slotProps={{ htmlInput: { maxLength: CRM_COMPANY_TEXT_MAX.site } }}\n />\n <Stack direction=\"row\" spacing={1}>\n <TextField\n size=\"small\"\n label=\"Ticker symbol\"\n value={draft.tickerSymbol}\n onChange={(event) => patch('tickerSymbol', event.target.value)}\n slotProps={{ htmlInput: { maxLength: CRM_COMPANY_TEXT_MAX.tickerSymbol } }}\n sx={{ flex: 1 }}\n />\n <TextField\n size=\"small\"\n label=\"SIC code\"\n value={draft.sicCode}\n onChange={(event) => patch('sicCode', event.target.value)}\n slotProps={{ htmlInput: { maxLength: CRM_COMPANY_TEXT_MAX.sicCode } }}\n sx={{ flex: 1 }}\n />\n </Stack>\n <TextField\n size=\"small\"\n label=\"Employees\"\n value={draft.numberOfEmployees}\n onChange={(event) => patch('numberOfEmployees', event.target.value)}\n slotProps={{ htmlInput: { inputMode: 'numeric' } }}\n />\n <Stack direction=\"row\" spacing={1}>\n <TextField\n size=\"small\"\n label=\"Annual revenue\"\n placeholder=\"0.00\"\n value={draft.annualRevenue}\n onChange={(event) => patch('annualRevenue', event.target.value)}\n slotProps={{ htmlInput: { inputMode: 'decimal' } }}\n sx={{ flex: 1 }}\n />\n <TextField\n select\n size=\"small\"\n label=\"Currency\"\n value={draft.currency}\n onChange={(event) => patch('currency', event.target.value)}\n sx={{ width: 120 }}\n >\n {/* A stored code outside the short list stays selectable as itself. */}\n {[...new Set<string>([...DEAL_CURRENCIES, draft.currency])].map((code) => (\n <MenuItem key={code} value={code}>\n {code.toUpperCase()}\n </MenuItem>\n ))}\n </TextField>\n </Stack>\n {/*\n The owner is chosen from the team, never typed: the value is a\n uid, and a picker that is still loading says so rather than\n offering an empty list that reads as \"nobody can own this\".\n */}\n <TextField\n select\n size=\"small\"\n label=\"Owner\"\n value={draft.ownerUid}\n disabled={!members.ready}\n helperText={\n !members.ready\n ? 'Loading your team…'\n : (members.error ?? 'The team member responsible for this account.')\n }\n onChange={(event) => patch('ownerUid', event.target.value)}\n >\n <MenuItem value=\"\">{'Nobody yet'}</MenuItem>\n {draft.ownerUid &&\n !members.options.some((option) => option.uid === draft.ownerUid) ? (\n <MenuItem value={draft.ownerUid}>\n {members.labelFor(draft.ownerUid)}\n </MenuItem>\n ) : null}\n {members.options.map((option) => (\n <MenuItem key={option.uid} value={option.uid}>\n {crmMemberPickerLabel(option)}\n </MenuItem>\n ))}\n </TextField>\n <TextField\n size=\"small\"\n label=\"Tags\"\n placeholder=\"enterprise, west\"\n helperText=\"Comma-separated, lowercased — the same tags the bulk bar adds\"\n value={draft.tags}\n onChange={(event) => patch('tags', event.target.value)}\n />\n <Typography variant=\"subtitle2\">{'Address information'}</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Billing address'}\n </Typography>\n {ADDRESS_FIELDS.map((field) => (\n <TextField\n key={`address.${field.key}`}\n size=\"small\"\n label={field.label}\n value={draft.address[field.key] ?? ''}\n onChange={(event) => patchAddress('address', field.key, event.target.value)}\n />\n ))}\n <Stack direction=\"row\" sx={{ alignItems: 'center', justifyContent: 'space-between' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Shipping address'}\n </Typography>\n <Button\n size=\"small\"\n disabled={busy}\n onClick={() =>\n setDraft((current) => ({ ...current, shippingAddress: { ...current.address } }))\n }\n >\n {'Copy billing address'}\n </Button>\n </Stack>\n {ADDRESS_FIELDS.map((field) => (\n <TextField\n key={`shippingAddress.${field.key}`}\n size=\"small\"\n label={field.label}\n value={draft.shippingAddress[field.key] ?? ''}\n onChange={(event) => patchAddress('shippingAddress', field.key, event.target.value)}\n />\n ))}\n <Typography variant=\"subtitle2\">{'Description information'}</Typography>\n <TextField\n size=\"small\"\n label=\"Notes\"\n value={draft.notes}\n onChange={(event) => patch('notes', event.target.value)}\n multiline\n minRows={3}\n />\n {fields.active.length ? (\n <>\n <Typography variant=\"subtitle2\">{'Custom fields'}</Typography>\n {fields.active.map((definition) => (\n <CrmCustomFieldControl\n key={definition.$id}\n definition={definition}\n value={crmCustomDraftValue(storedCustom, custom, definition.key)}\n onChange={(value) =>\n setCustom((current) => ({ ...current, [definition.key]: value }))\n }\n disabled={busy}\n />\n ))}\n </>\n ) : null}\n {error ? <Alert severity=\"warning\">{error}</Alert> : null}\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n // A new company waits for its capturing site.\n disabled={busy || !scope || !draft.name.trim() || (!company && !createHostId)}\n onClick={() => void handleSave()}\n >\n {busy\n ? 'Saving…'\n : company\n ? 'Save company'\n : 'Create company'}\n </Button>\n <Button onClick={onClose} disabled={busy}>\n {'Cancel'}\n </Button>\n </Stack>\n </Stack>\n </Container>\n </NavigationDrawerComponent>\n )\n}\nCompanyEditDrawer.displayName = 'CompanyEditDrawer'\n\nexport default CompanyEditDrawer\n"],"names":["createResourceUid","CRM_COLLECTIONS","CRM_RECORDS_BAND_FULL_MESSAGE","CRM_COMPANY_PICKLIST_FIELDS","CRM_COMPANY_TEXT_MAX","crmCompanyParentId","crmCompanyParentRefusal","crmNewRecordListFields","crmPicklistDefaultLabel","pluginDocsHelp","crmMemberPickerLabel","ICON_VARIANT_CLOSE","Container","HelpTip","MdiIcon","SrOnly","NavigationDrawerComponent","useSnackbar","useFirestore","useUser","writeGuardedBySeed","Alert","Button","IconButton","MenuItem","Stack","TextField","Typography","deleteField","doc","getDoc","serverTimestamp","setDoc","updateDoc","useCallback","useEffect","useMemo","useRef","useState","useCompanyPicklists","DEAL_CURRENCIES","CompanyPicker","useCompanyOptions","CrmPicklistSelect","useContactFieldDefinitions","useCrmActivityLogger","useCrmRecordsQuota","useCrmScope","companyDraftFields","companyDraftFrom","EMPTY_COMPANY_DRAFT","crmCustomDraftDocument","crmCustomDraftMissingRequired","crmCustomDraftValue","crmCustomDraftWrites","CrmCustomFieldControl","CrmSitePicker","CRM_CLIENT_SEARCH_FIELDS","crmClientListFields","COMPANY_CLIENT_LIST_FIELDS","flatMap","entry","keyField","useCrmSharingFollowUp","COMPANY_PICKLIST_LABELS","type","industry","rating","ownership","accountSource","ADDRESS_FIELDS","key","label","CompanyEditDrawer","props","members","open","onClose","hostId","org","company","seed","onSaved","firestore","data","user","enqueueSnackbar","scope","createTokens","createHostId","followUpSharing","logActivity","draft","setDraft","busy","setBusy","error","setError","fields","storedCustom","custom","setCustom","records","bandFull","ready","quota","allowed","picklists","seededDefaults","companyOptions","enabled","parentOptions","options","filter","option","id","$id","companyId","ownerUid","uid","current","next","field","picklistId","list","lists","fallback","patch","value","patchAddress","which","readParent","snapshot","companies","exists","parentCompanyId","get","handleSave","result","ok","parentId","set","refusal","missing","active","length","join","customDocument","ref","verdict","subject","unreadable","fromCache","cleared","Object","fromEntries","map","_rowId","stored","searchFields","updatedAt","message","variant","persist","visibleTo","createdByUid","createdAt","name","trim","caught","console","anchor","AppBarProps","color","appBarLeft","edge","onClick","sx","mr","path","component","gutterY","spacing","disabled","helperText","severity","size","required","onChange","event","target","autoFocus","truncated","placeholder","domain","website","phone","fax","picklist","String","undefined","accountNumber","slotProps","htmlInput","maxLength","site","direction","tickerSymbol","flex","sicCode","numberOfEmployees","inputMode","annualRevenue","select","currency","width","Set","code","toUpperCase","some","labelFor","tags","address","alignItems","justifyContent","shippingAddress","notes","multiline","minRows","definition","displayName"],"mappings":"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"}