@planningcenter/chat-react-native 3.30.0-rc.1 → 3.30.0-rc.2

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 (895) hide show
  1. package/build/components/conversation/attachments/attachment_card.js +3 -3
  2. package/build/components/conversation/attachments/attachment_card.js.map +1 -1
  3. package/build/components/conversation/attachments/attachment_deleting_overlay.js +2 -2
  4. package/build/components/conversation/attachments/attachment_deleting_overlay.js.map +1 -1
  5. package/build/components/conversation/attachments/audio_attachment.d.ts +1 -1
  6. package/build/components/conversation/attachments/audio_attachment.d.ts.map +1 -1
  7. package/build/components/conversation/attachments/audio_attachment.js +3 -3
  8. package/build/components/conversation/attachments/audio_attachment.js.map +1 -1
  9. package/build/components/conversation/attachments/expanded_link.d.ts +1 -1
  10. package/build/components/conversation/attachments/expanded_link.d.ts.map +1 -1
  11. package/build/components/conversation/attachments/expanded_link.js +3 -3
  12. package/build/components/conversation/attachments/expanded_link.js.map +1 -1
  13. package/build/components/conversation/attachments/generic_file_attachment.d.ts +1 -1
  14. package/build/components/conversation/attachments/generic_file_attachment.d.ts.map +1 -1
  15. package/build/components/conversation/attachments/generic_file_attachment.js +4 -4
  16. package/build/components/conversation/attachments/generic_file_attachment.js.map +1 -1
  17. package/build/components/conversation/attachments/giphy_attachment.d.ts +1 -1
  18. package/build/components/conversation/attachments/giphy_attachment.d.ts.map +1 -1
  19. package/build/components/conversation/attachments/giphy_attachment.js +4 -4
  20. package/build/components/conversation/attachments/giphy_attachment.js.map +1 -1
  21. package/build/components/conversation/attachments/image_attachment.d.ts +1 -1
  22. package/build/components/conversation/attachments/image_attachment.d.ts.map +1 -1
  23. package/build/components/conversation/attachments/image_attachment.js +5 -5
  24. package/build/components/conversation/attachments/image_attachment.js.map +1 -1
  25. package/build/components/conversation/attachments/video_attachment.d.ts +1 -1
  26. package/build/components/conversation/attachments/video_attachment.d.ts.map +1 -1
  27. package/build/components/conversation/attachments/video_attachment.js +4 -4
  28. package/build/components/conversation/attachments/video_attachment.js.map +1 -1
  29. package/build/components/conversation/empty_conversation_blank_state.js +1 -1
  30. package/build/components/conversation/empty_conversation_blank_state.js.map +1 -1
  31. package/build/components/conversation/jump_to_bottom_button.js +3 -3
  32. package/build/components/conversation/jump_to_bottom_button.js.map +1 -1
  33. package/build/components/conversation/message.d.ts +1 -1
  34. package/build/components/conversation/message.d.ts.map +1 -1
  35. package/build/components/conversation/message.js +12 -12
  36. package/build/components/conversation/message.js.map +1 -1
  37. package/build/components/conversation/message_attachments.d.ts +1 -1
  38. package/build/components/conversation/message_attachments.d.ts.map +1 -1
  39. package/build/components/conversation/message_attachments.js +1 -1
  40. package/build/components/conversation/message_attachments.js.map +1 -1
  41. package/build/components/conversation/message_form/message_form_attachment_image.d.ts +1 -1
  42. package/build/components/conversation/message_form/message_form_attachment_image.d.ts.map +1 -1
  43. package/build/components/conversation/message_form/message_form_attachment_image.js +1 -1
  44. package/build/components/conversation/message_form/message_form_attachment_image.js.map +1 -1
  45. package/build/components/conversation/message_form/message_form_attachment_video.d.ts +1 -1
  46. package/build/components/conversation/message_form/message_form_attachment_video.d.ts.map +1 -1
  47. package/build/components/conversation/message_form/message_form_attachment_video.js +1 -1
  48. package/build/components/conversation/message_form/message_form_attachment_video.js.map +1 -1
  49. package/build/components/conversation/message_form.d.ts +1 -1
  50. package/build/components/conversation/message_form.d.ts.map +1 -1
  51. package/build/components/conversation/message_form.js +12 -12
  52. package/build/components/conversation/message_form.js.map +1 -1
  53. package/build/components/conversation/message_markdown.js +3 -3
  54. package/build/components/conversation/message_markdown.js.map +1 -1
  55. package/build/components/conversation/message_reaction.d.ts +2 -2
  56. package/build/components/conversation/message_reaction.d.ts.map +1 -1
  57. package/build/components/conversation/message_reaction.js +6 -6
  58. package/build/components/conversation/message_reaction.js.map +1 -1
  59. package/build/components/conversation/message_read_receipts.d.ts +1 -1
  60. package/build/components/conversation/message_read_receipts.d.ts.map +1 -1
  61. package/build/components/conversation/message_read_receipts.js +2 -2
  62. package/build/components/conversation/message_read_receipts.js.map +1 -1
  63. package/build/components/conversation/messages_disabled_banners.js +2 -2
  64. package/build/components/conversation/messages_disabled_banners.js.map +1 -1
  65. package/build/components/conversation/reply_connectors.d.ts +1 -1
  66. package/build/components/conversation/reply_connectors.d.ts.map +1 -1
  67. package/build/components/conversation/reply_connectors.js +2 -2
  68. package/build/components/conversation/reply_connectors.js.map +1 -1
  69. package/build/components/conversation/reply_shadow_message.d.ts +1 -1
  70. package/build/components/conversation/reply_shadow_message.d.ts.map +1 -1
  71. package/build/components/conversation/reply_shadow_message.js +6 -6
  72. package/build/components/conversation/reply_shadow_message.js.map +1 -1
  73. package/build/components/conversation/typing_indicator.js +3 -3
  74. package/build/components/conversation/typing_indicator.js.map +1 -1
  75. package/build/components/conversations/conversation_actions.d.ts +1 -1
  76. package/build/components/conversations/conversation_actions.d.ts.map +1 -1
  77. package/build/components/conversations/conversation_actions.js +5 -5
  78. package/build/components/conversations/conversation_actions.js.map +1 -1
  79. package/build/components/conversations/conversation_preview.d.ts +1 -1
  80. package/build/components/conversations/conversation_preview.d.ts.map +1 -1
  81. package/build/components/conversations/conversation_preview.js +3 -3
  82. package/build/components/conversations/conversation_preview.js.map +1 -1
  83. package/build/components/conversations/conversations.js +5 -5
  84. package/build/components/conversations/conversations.js.map +1 -1
  85. package/build/components/conversations/mute_indicator.js +3 -3
  86. package/build/components/conversations/mute_indicator.js.map +1 -1
  87. package/build/components/conversations/swipeable_toggle_button.d.ts +1 -1
  88. package/build/components/conversations/swipeable_toggle_button.d.ts.map +1 -1
  89. package/build/components/conversations/swipeable_toggle_button.js +5 -5
  90. package/build/components/conversations/swipeable_toggle_button.js.map +1 -1
  91. package/build/components/conversations/unread_count_badge.js +3 -3
  92. package/build/components/conversations/unread_count_badge.js.map +1 -1
  93. package/build/components/display/action_button.d.ts.map +1 -1
  94. package/build/components/display/action_button.js +2 -2
  95. package/build/components/display/action_button.js.map +1 -1
  96. package/build/components/display/avatar.d.ts +1 -1
  97. package/build/components/display/avatar.d.ts.map +1 -1
  98. package/build/components/display/avatar.js +1 -1
  99. package/build/components/display/avatar.js.map +1 -1
  100. package/build/components/display/avatar_group.d.ts +1 -1
  101. package/build/components/display/avatar_group.d.ts.map +1 -1
  102. package/build/components/display/avatar_group.js +1 -1
  103. package/build/components/display/avatar_group.js.map +1 -1
  104. package/build/components/display/badge.d.ts.map +1 -1
  105. package/build/components/display/badge.js +3 -3
  106. package/build/components/display/badge.js.map +1 -1
  107. package/build/components/display/banner.d.ts +1 -1
  108. package/build/components/display/banner.d.ts.map +1 -1
  109. package/build/components/display/banner.js +1 -1
  110. package/build/components/display/banner.js.map +1 -1
  111. package/build/components/display/banner_collapsible.d.ts.map +1 -1
  112. package/build/components/display/banner_collapsible.js +1 -1
  113. package/build/components/display/banner_collapsible.js.map +1 -1
  114. package/build/components/display/button.d.ts.map +1 -1
  115. package/build/components/display/button.js +3 -3
  116. package/build/components/display/button.js.map +1 -1
  117. package/build/components/display/child_notice.d.ts +1 -1
  118. package/build/components/display/child_notice.d.ts.map +1 -1
  119. package/build/components/display/child_notice.js +2 -2
  120. package/build/components/display/child_notice.js.map +1 -1
  121. package/build/components/display/heading.js +3 -3
  122. package/build/components/display/heading.js.map +1 -1
  123. package/build/components/display/icon.js +1 -1
  124. package/build/components/display/icon.js.map +1 -1
  125. package/build/components/display/icon_button.d.ts.map +1 -1
  126. package/build/components/display/icon_button.js +2 -2
  127. package/build/components/display/icon_button.js.map +1 -1
  128. package/build/components/display/image.js +1 -1
  129. package/build/components/display/image.js.map +1 -1
  130. package/build/components/display/image_attachment_preview.js +2 -2
  131. package/build/components/display/image_attachment_preview.js.map +1 -1
  132. package/build/components/display/keyboard_view.js +1 -1
  133. package/build/components/display/keyboard_view.js.map +1 -1
  134. package/build/components/display/person.d.ts +1 -1
  135. package/build/components/display/person.d.ts.map +1 -1
  136. package/build/components/display/person.js +1 -1
  137. package/build/components/display/person.js.map +1 -1
  138. package/build/components/display/platform_modal_header_buttons.js +1 -1
  139. package/build/components/display/platform_modal_header_buttons.js.map +1 -1
  140. package/build/components/display/pressable_row.d.ts.map +1 -1
  141. package/build/components/display/pressable_row.js +1 -1
  142. package/build/components/display/pressable_row.js.map +1 -1
  143. package/build/components/display/spinner.js +1 -1
  144. package/build/components/display/spinner.js.map +1 -1
  145. package/build/components/display/switch.js +1 -1
  146. package/build/components/display/switch.js.map +1 -1
  147. package/build/components/display/tabs.js +1 -1
  148. package/build/components/display/tabs.js.map +1 -1
  149. package/build/components/display/text.js +2 -2
  150. package/build/components/display/text.js.map +1 -1
  151. package/build/components/display/text_button.d.ts.map +1 -1
  152. package/build/components/display/text_button.js +2 -2
  153. package/build/components/display/text_button.js.map +1 -1
  154. package/build/components/display/text_inline_button.d.ts.map +1 -1
  155. package/build/components/display/text_inline_button.js +2 -2
  156. package/build/components/display/text_inline_button.js.map +1 -1
  157. package/build/components/display/toggle_button.d.ts.map +1 -1
  158. package/build/components/display/toggle_button.js +4 -4
  159. package/build/components/display/toggle_button.js.map +1 -1
  160. package/build/components/display/utils/button_colors.js +1 -1
  161. package/build/components/display/utils/button_colors.js.map +1 -1
  162. package/build/components/display/utils/status_colors.js +1 -1
  163. package/build/components/display/utils/status_colors.js.map +1 -1
  164. package/build/components/display/video_attachment_preview.js +3 -3
  165. package/build/components/display/video_attachment_preview.js.map +1 -1
  166. package/build/components/group_conversation_list.d.ts +1 -1
  167. package/build/components/group_conversation_list.d.ts.map +1 -1
  168. package/build/components/group_conversation_list.js +2 -2
  169. package/build/components/group_conversation_list.js.map +1 -1
  170. package/build/components/page/error_boundary.d.ts +1 -1
  171. package/build/components/page/error_boundary.d.ts.map +1 -1
  172. package/build/components/page/error_boundary.js +2 -2
  173. package/build/components/page/error_boundary.js.map +1 -1
  174. package/build/components/page/loading.js +1 -1
  175. package/build/components/page/loading.js.map +1 -1
  176. package/build/components/primitive/avatar_primitive.d.ts +2 -2
  177. package/build/components/primitive/avatar_primitive.d.ts.map +1 -1
  178. package/build/components/primitive/avatar_primitive.js +5 -5
  179. package/build/components/primitive/avatar_primitive.js.map +1 -1
  180. package/build/components/primitive/banner_primitive.d.ts +2 -2
  181. package/build/components/primitive/banner_primitive.d.ts.map +1 -1
  182. package/build/components/primitive/banner_primitive.js +8 -8
  183. package/build/components/primitive/banner_primitive.js.map +1 -1
  184. package/build/components/primitive/blank_state_primitive.d.ts +1 -1
  185. package/build/components/primitive/blank_state_primitive.d.ts.map +1 -1
  186. package/build/components/primitive/blank_state_primitive.js +2 -2
  187. package/build/components/primitive/blank_state_primitive.js.map +1 -1
  188. package/build/components/primitive/form_sheet.d.ts +2 -2
  189. package/build/components/primitive/form_sheet.d.ts.map +1 -1
  190. package/build/components/primitive/form_sheet.js +3 -3
  191. package/build/components/primitive/form_sheet.js.map +1 -1
  192. package/build/components/safe_area_modal.js +1 -1
  193. package/build/components/safe_area_modal.js.map +1 -1
  194. package/build/contexts/api_provider.js +4 -4
  195. package/build/contexts/api_provider.js.map +1 -1
  196. package/build/contexts/chat_context.d.ts +6 -6
  197. package/build/contexts/chat_context.d.ts.map +1 -1
  198. package/build/contexts/chat_context.js +2 -2
  199. package/build/contexts/chat_context.js.map +1 -1
  200. package/build/contexts/conversations_context.d.ts +2 -2
  201. package/build/contexts/conversations_context.d.ts.map +1 -1
  202. package/build/contexts/conversations_context.js +1 -1
  203. package/build/contexts/conversations_context.js.map +1 -1
  204. package/build/contexts/session_context.d.ts +3 -3
  205. package/build/contexts/session_context.d.ts.map +1 -1
  206. package/build/contexts/session_context.js +6 -6
  207. package/build/contexts/session_context.js.map +1 -1
  208. package/build/hooks/groups/use_group_members_for_new_conversation.d.ts +7 -7
  209. package/build/hooks/groups/use_group_members_for_new_conversation.d.ts.map +1 -1
  210. package/build/hooks/groups/use_group_members_for_new_conversation.js +2 -2
  211. package/build/hooks/groups/use_group_members_for_new_conversation.js.map +1 -1
  212. package/build/hooks/groups/use_groups_conversation_create.d.ts +1 -1
  213. package/build/hooks/groups/use_groups_conversation_create.d.ts.map +1 -1
  214. package/build/hooks/groups/use_groups_conversation_create.js +2 -2
  215. package/build/hooks/groups/use_groups_conversation_create.js.map +1 -1
  216. package/build/hooks/services/use_find_or_create_services_conversation.d.ts +2 -2
  217. package/build/hooks/services/use_find_or_create_services_conversation.d.ts.map +1 -1
  218. package/build/hooks/services/use_find_or_create_services_conversation.js +2 -2
  219. package/build/hooks/services/use_find_or_create_services_conversation.js.map +1 -1
  220. package/build/hooks/services/use_services_team.d.ts +1 -1
  221. package/build/hooks/services/use_services_team.d.ts.map +1 -1
  222. package/build/hooks/services/use_services_team.js +1 -1
  223. package/build/hooks/services/use_services_team.js.map +1 -1
  224. package/build/hooks/services/use_team_members_for_new_conversation.d.ts +21 -21
  225. package/build/hooks/services/use_team_members_for_new_conversation.d.ts.map +1 -1
  226. package/build/hooks/services/use_team_members_for_new_conversation.js +1 -1
  227. package/build/hooks/services/use_team_members_for_new_conversation.js.map +1 -1
  228. package/build/hooks/services/use_team_plans.d.ts +1 -1
  229. package/build/hooks/services/use_team_plans.js +1 -1
  230. package/build/hooks/services/use_team_plans.js.map +1 -1
  231. package/build/hooks/use_api.d.ts +2 -2
  232. package/build/hooks/use_api.d.ts.map +1 -1
  233. package/build/hooks/use_api.js.map +1 -1
  234. package/build/hooks/use_api_client.d.ts +1 -1
  235. package/build/hooks/use_api_client.d.ts.map +1 -1
  236. package/build/hooks/use_api_client.js +3 -3
  237. package/build/hooks/use_api_client.js.map +1 -1
  238. package/build/hooks/use_async_storage.js +1 -1
  239. package/build/hooks/use_async_storage.js.map +1 -1
  240. package/build/hooks/use_attachment_uploader.d.ts +1 -1
  241. package/build/hooks/use_attachment_uploader.d.ts.map +1 -1
  242. package/build/hooks/use_attachment_uploader.js.map +1 -1
  243. package/build/hooks/use_broadcast_typing_status.js +1 -1
  244. package/build/hooks/use_broadcast_typing_status.js.map +1 -1
  245. package/build/hooks/use_chat_permissions.d.ts +21 -21
  246. package/build/hooks/use_chat_permissions.d.ts.map +1 -1
  247. package/build/hooks/use_chat_permissions.js.map +1 -1
  248. package/build/hooks/use_conversation.d.ts +5 -5
  249. package/build/hooks/use_conversation.d.ts.map +1 -1
  250. package/build/hooks/use_conversation.js +4 -3
  251. package/build/hooks/use_conversation.js.map +1 -1
  252. package/build/hooks/use_conversation_jolt_events.js +1 -1
  253. package/build/hooks/use_conversation_jolt_events.js.map +1 -1
  254. package/build/hooks/use_conversation_membership.d.ts +1 -1
  255. package/build/hooks/use_conversation_membership.d.ts.map +1 -1
  256. package/build/hooks/use_conversation_membership.js +2 -2
  257. package/build/hooks/use_conversation_membership.js.map +1 -1
  258. package/build/hooks/use_conversation_message.d.ts +1 -1
  259. package/build/hooks/use_conversation_message.d.ts.map +1 -1
  260. package/build/hooks/use_conversation_message.js +1 -1
  261. package/build/hooks/use_conversation_message.js.map +1 -1
  262. package/build/hooks/use_conversation_messages.d.ts +3 -3
  263. package/build/hooks/use_conversation_messages.d.ts.map +1 -1
  264. package/build/hooks/use_conversation_messages.js +1 -1
  265. package/build/hooks/use_conversation_messages.js.map +1 -1
  266. package/build/hooks/use_conversation_messages_jolt_events.js +6 -6
  267. package/build/hooks/use_conversation_messages_jolt_events.js.map +1 -1
  268. package/build/hooks/use_conversations.d.ts +2 -2
  269. package/build/hooks/use_conversations.d.ts.map +1 -1
  270. package/build/hooks/use_conversations.js +1 -1
  271. package/build/hooks/use_conversations.js.map +1 -1
  272. package/build/hooks/use_conversations_actions.d.ts +19 -19
  273. package/build/hooks/use_conversations_actions.d.ts.map +1 -1
  274. package/build/hooks/use_conversations_actions.js +1 -1
  275. package/build/hooks/use_conversations_actions.js.map +1 -1
  276. package/build/hooks/use_conversations_cache.d.ts +2 -2
  277. package/build/hooks/use_conversations_cache.d.ts.map +1 -1
  278. package/build/hooks/use_conversations_cache.js +2 -2
  279. package/build/hooks/use_conversations_cache.js.map +1 -1
  280. package/build/hooks/use_conversations_jolt_events.js +2 -2
  281. package/build/hooks/use_conversations_jolt_events.js.map +1 -1
  282. package/build/hooks/use_current_person.d.ts +1 -1
  283. package/build/hooks/use_current_person.d.ts.map +1 -1
  284. package/build/hooks/use_current_person.js.map +1 -1
  285. package/build/hooks/use_features.d.ts +2 -2
  286. package/build/hooks/use_features.d.ts.map +1 -1
  287. package/build/hooks/use_features.js +2 -2
  288. package/build/hooks/use_features.js.map +1 -1
  289. package/build/hooks/use_giphy.d.ts +1 -1
  290. package/build/hooks/use_giphy.d.ts.map +1 -1
  291. package/build/hooks/use_giphy.js +1 -1
  292. package/build/hooks/use_giphy.js.map +1 -1
  293. package/build/hooks/use_groups.d.ts +2 -2
  294. package/build/hooks/use_groups.d.ts.map +1 -1
  295. package/build/hooks/use_groups.js.map +1 -1
  296. package/build/hooks/use_groups_groups.d.ts +33 -33
  297. package/build/hooks/use_groups_groups.d.ts.map +1 -1
  298. package/build/hooks/use_groups_groups.js.map +1 -1
  299. package/build/hooks/use_jolt.js +2 -2
  300. package/build/hooks/use_jolt.js.map +1 -1
  301. package/build/hooks/use_live_relative_time.d.ts +1 -1
  302. package/build/hooks/use_live_relative_time.d.ts.map +1 -1
  303. package/build/hooks/use_live_relative_time.js +2 -2
  304. package/build/hooks/use_live_relative_time.js.map +1 -1
  305. package/build/hooks/use_mark_latest_message_read.d.ts +1 -1
  306. package/build/hooks/use_mark_latest_message_read.d.ts.map +1 -1
  307. package/build/hooks/use_mark_latest_message_read.js.map +1 -1
  308. package/build/hooks/use_message_create_or_update.d.ts +2 -2
  309. package/build/hooks/use_message_create_or_update.d.ts.map +1 -1
  310. package/build/hooks/use_message_create_or_update.js +7 -7
  311. package/build/hooks/use_message_create_or_update.js.map +1 -1
  312. package/build/hooks/use_message_draft.d.ts +1 -1
  313. package/build/hooks/use_message_draft.d.ts.map +1 -1
  314. package/build/hooks/use_message_draft.js +1 -1
  315. package/build/hooks/use_message_draft.js.map +1 -1
  316. package/build/hooks/use_message_reaction_toggle.d.ts +2 -2
  317. package/build/hooks/use_message_reaction_toggle.d.ts.map +1 -1
  318. package/build/hooks/use_message_reaction_toggle.js +2 -2
  319. package/build/hooks/use_message_reaction_toggle.js.map +1 -1
  320. package/build/hooks/use_my_gender.js.map +1 -1
  321. package/build/hooks/use_organization.d.ts +5 -5
  322. package/build/hooks/use_organization.d.ts.map +1 -1
  323. package/build/hooks/use_organization.js.map +1 -1
  324. package/build/hooks/use_people_person.d.ts +1 -1
  325. package/build/hooks/use_people_person.d.ts.map +1 -1
  326. package/build/hooks/use_people_person.js.map +1 -1
  327. package/build/hooks/use_product_analytics.d.ts +1 -1
  328. package/build/hooks/use_product_analytics.d.ts.map +1 -1
  329. package/build/hooks/use_product_analytics.js +3 -3
  330. package/build/hooks/use_product_analytics.js.map +1 -1
  331. package/build/hooks/use_qualified_by_age.js +1 -1
  332. package/build/hooks/use_qualified_by_age.js.map +1 -1
  333. package/build/hooks/use_read_receipts.d.ts +2 -2
  334. package/build/hooks/use_read_receipts.d.ts.map +1 -1
  335. package/build/hooks/use_read_receipts.js.map +1 -1
  336. package/build/hooks/use_report_message.d.ts +1 -1
  337. package/build/hooks/use_report_message.d.ts.map +1 -1
  338. package/build/hooks/use_report_message.js +1 -1
  339. package/build/hooks/use_report_message.js.map +1 -1
  340. package/build/hooks/use_storage.d.ts +1 -1
  341. package/build/hooks/use_storage.d.ts.map +1 -1
  342. package/build/hooks/use_storage.js.map +1 -1
  343. package/build/hooks/use_submit_age_check.d.ts +1 -1
  344. package/build/hooks/use_submit_age_check.d.ts.map +1 -1
  345. package/build/hooks/use_submit_age_check.js +1 -1
  346. package/build/hooks/use_submit_age_check.js.map +1 -1
  347. package/build/hooks/use_suspense_api.d.ts +5 -5
  348. package/build/hooks/use_suspense_api.d.ts.map +1 -1
  349. package/build/hooks/use_suspense_api.js +2 -2
  350. package/build/hooks/use_suspense_api.js.map +1 -1
  351. package/build/hooks/use_teams.d.ts +1 -1
  352. package/build/hooks/use_teams.d.ts.map +1 -1
  353. package/build/hooks/use_teams.js.map +1 -1
  354. package/build/hooks/use_theme.d.ts +1 -1
  355. package/build/hooks/use_theme.d.ts.map +1 -1
  356. package/build/hooks/use_theme.js +1 -1
  357. package/build/hooks/use_theme.js.map +1 -1
  358. package/build/hooks/use_typing_indicators.d.ts.map +1 -1
  359. package/build/hooks/use_typing_indicators.js +1 -1
  360. package/build/hooks/use_typing_indicators.js.map +1 -1
  361. package/build/hooks/use_typing_status_cache.d.ts +1 -1
  362. package/build/hooks/use_typing_status_cache.d.ts.map +1 -1
  363. package/build/hooks/use_typing_status_cache.js.map +1 -1
  364. package/build/hooks/use_upload_client.d.ts +1 -1
  365. package/build/hooks/use_upload_client.d.ts.map +1 -1
  366. package/build/hooks/use_upload_client.js +3 -3
  367. package/build/hooks/use_upload_client.js.map +1 -1
  368. package/build/navigation/chat_access_gate.js +7 -7
  369. package/build/navigation/chat_access_gate.js.map +1 -1
  370. package/build/navigation/index.d.ts +25 -25
  371. package/build/navigation/index.d.ts.map +1 -1
  372. package/build/navigation/index.js +28 -28
  373. package/build/navigation/index.js.map +1 -1
  374. package/build/navigation/screenLayout.js +2 -2
  375. package/build/navigation/screenLayout.js.map +1 -1
  376. package/build/polyfills/events/Event.d.ts +4 -0
  377. package/build/polyfills/events/Event.d.ts.map +1 -1
  378. package/build/polyfills/events/Event.js +1 -5
  379. package/build/polyfills/events/Event.js.map +1 -1
  380. package/build/polyfills/events/EventTarget.d.ts +3 -0
  381. package/build/polyfills/events/EventTarget.d.ts.map +1 -1
  382. package/build/polyfills/events/EventTarget.js +1 -1
  383. package/build/polyfills/events/EventTarget.js.map +1 -1
  384. package/build/polyfills/events/internals/EventInternals.d.ts +2 -2
  385. package/build/polyfills/events/internals/EventInternals.d.ts.map +1 -1
  386. package/build/polyfills/events/internals/EventInternals.js.map +1 -1
  387. package/build/polyfills/events/internals/EventTargetInternals.d.ts +2 -2
  388. package/build/polyfills/events/internals/EventTargetInternals.d.ts.map +1 -1
  389. package/build/polyfills/events/internals/EventTargetInternals.js.map +1 -1
  390. package/build/screens/age_check/age_check_required_screen.js +8 -8
  391. package/build/screens/age_check/age_check_required_screen.js.map +1 -1
  392. package/build/screens/age_check/age_check_underage_screen.js +3 -3
  393. package/build/screens/age_check/age_check_underage_screen.js.map +1 -1
  394. package/build/screens/age_check/components/age_check_select_birthdate_modal.js +3 -3
  395. package/build/screens/age_check/components/age_check_select_birthdate_modal.js.map +1 -1
  396. package/build/screens/attachment_actions/attachment_actions_screen.js +1 -1
  397. package/build/screens/attachment_actions/attachment_actions_screen.js.map +1 -1
  398. package/build/screens/attachment_actions/hooks/useDeleteAttachment.js +3 -3
  399. package/build/screens/attachment_actions/hooks/useDeleteAttachment.js.map +1 -1
  400. package/build/screens/bug_report_screen.js +11 -11
  401. package/build/screens/bug_report_screen.js.map +1 -1
  402. package/build/screens/conversation/message_read_receipts_screen.js +4 -4
  403. package/build/screens/conversation/message_read_receipts_screen.js.map +1 -1
  404. package/build/screens/conversation_details_screen.d.ts.map +1 -1
  405. package/build/screens/conversation_details_screen.js +37 -9
  406. package/build/screens/conversation_details_screen.js.map +1 -1
  407. package/build/screens/conversation_filter_recipients/components/checkbox_row.d.ts +1 -1
  408. package/build/screens/conversation_filter_recipients/components/checkbox_row.d.ts.map +1 -1
  409. package/build/screens/conversation_filter_recipients/components/checkbox_row.js +3 -3
  410. package/build/screens/conversation_filter_recipients/components/checkbox_row.js.map +1 -1
  411. package/build/screens/conversation_filter_recipients/components/header_row.d.ts +1 -1
  412. package/build/screens/conversation_filter_recipients/components/header_row.d.ts.map +1 -1
  413. package/build/screens/conversation_filter_recipients/components/header_row.js +4 -4
  414. package/build/screens/conversation_filter_recipients/components/header_row.js.map +1 -1
  415. package/build/screens/conversation_filter_recipients/conversation_filter_recipients_screen.d.ts.map +1 -1
  416. package/build/screens/conversation_filter_recipients/conversation_filter_recipients_screen.js +6 -6
  417. package/build/screens/conversation_filter_recipients/conversation_filter_recipients_screen.js.map +1 -1
  418. package/build/screens/conversation_filter_recipients/hooks/use_flattened_array_of_service_types_with_teams.d.ts +1 -1
  419. package/build/screens/conversation_filter_recipients/hooks/use_flattened_array_of_service_types_with_teams.d.ts.map +1 -1
  420. package/build/screens/conversation_filter_recipients/hooks/use_flattened_array_of_service_types_with_teams.js +1 -1
  421. package/build/screens/conversation_filter_recipients/hooks/use_flattened_array_of_service_types_with_teams.js.map +1 -1
  422. package/build/screens/conversation_filter_recipients/hooks/use_service_types_with_teams.d.ts +22 -22
  423. package/build/screens/conversation_filter_recipients/hooks/use_service_types_with_teams.d.ts.map +1 -1
  424. package/build/screens/conversation_filter_recipients/hooks/use_service_types_with_teams.js +2 -2
  425. package/build/screens/conversation_filter_recipients/hooks/use_service_types_with_teams.js.map +1 -1
  426. package/build/screens/conversation_filter_recipients/types.d.ts +1 -1
  427. package/build/screens/conversation_filter_recipients/types.d.ts.map +1 -1
  428. package/build/screens/conversation_filter_recipients/types.js.map +1 -1
  429. package/build/screens/conversation_filters/components/conversation_filters.d.ts.map +1 -1
  430. package/build/screens/conversation_filters/components/conversation_filters.js +5 -5
  431. package/build/screens/conversation_filters/components/conversation_filters.js.map +1 -1
  432. package/build/screens/conversation_filters/components/rows.d.ts +4 -4
  433. package/build/screens/conversation_filters/components/rows.d.ts.map +1 -1
  434. package/build/screens/conversation_filters/components/rows.js +5 -5
  435. package/build/screens/conversation_filters/components/rows.js.map +1 -1
  436. package/build/screens/conversation_filters/context/conversation_filter_context.d.ts +1 -1
  437. package/build/screens/conversation_filters/context/conversation_filter_context.d.ts.map +1 -1
  438. package/build/screens/conversation_filters/context/conversation_filter_context.js.map +1 -1
  439. package/build/screens/conversation_filters/group_filters.d.ts.map +1 -1
  440. package/build/screens/conversation_filters/group_filters.js +1 -1
  441. package/build/screens/conversation_filters/group_filters.js.map +1 -1
  442. package/build/screens/conversation_filters/hooks/filters.d.ts +54 -54
  443. package/build/screens/conversation_filters/hooks/filters.d.ts.map +1 -1
  444. package/build/screens/conversation_filters/hooks/filters.js +3 -3
  445. package/build/screens/conversation_filters/hooks/filters.js.map +1 -1
  446. package/build/screens/conversation_filters/screen_props.d.ts +1 -1
  447. package/build/screens/conversation_filters/screen_props.d.ts.map +1 -1
  448. package/build/screens/conversation_filters/screen_props.js.map +1 -1
  449. package/build/screens/conversation_filters/team_filters.d.ts.map +1 -1
  450. package/build/screens/conversation_filters/team_filters.js +1 -1
  451. package/build/screens/conversation_filters/team_filters.js.map +1 -1
  452. package/build/screens/conversation_filters_screen.d.ts.map +1 -1
  453. package/build/screens/conversation_filters_screen.js +1 -1
  454. package/build/screens/conversation_filters_screen.js.map +1 -1
  455. package/build/screens/conversation_new/components/filter_by_plan.js +7 -7
  456. package/build/screens/conversation_new/components/filter_by_plan.js.map +1 -1
  457. package/build/screens/conversation_new/components/form_list.d.ts +1 -1
  458. package/build/screens/conversation_new/components/form_list.d.ts.map +1 -1
  459. package/build/screens/conversation_new/components/form_list.js +2 -2
  460. package/build/screens/conversation_new/components/form_list.js.map +1 -1
  461. package/build/screens/conversation_new/components/gender_filter_toggle.js +3 -3
  462. package/build/screens/conversation_new/components/gender_filter_toggle.js.map +1 -1
  463. package/build/screens/conversation_new/components/groups_form.d.ts +1 -1
  464. package/build/screens/conversation_new/components/groups_form.d.ts.map +1 -1
  465. package/build/screens/conversation_new/components/groups_form.js +10 -10
  466. package/build/screens/conversation_new/components/groups_form.js.map +1 -1
  467. package/build/screens/conversation_new/components/services_form.d.ts +1 -1
  468. package/build/screens/conversation_new/components/services_form.d.ts.map +1 -1
  469. package/build/screens/conversation_new/components/services_form.js +8 -8
  470. package/build/screens/conversation_new/components/services_form.js.map +1 -1
  471. package/build/screens/conversation_new/components/source_app_error_card.js +1 -1
  472. package/build/screens/conversation_new/components/source_app_error_card.js.map +1 -1
  473. package/build/screens/conversation_new/conversation_new_screen.d.ts +3 -3
  474. package/build/screens/conversation_new/conversation_new_screen.d.ts.map +1 -1
  475. package/build/screens/conversation_new/conversation_new_screen.js.map +1 -1
  476. package/build/screens/conversation_notification_level_select_screen.js +5 -5
  477. package/build/screens/conversation_notification_level_select_screen.js.map +1 -1
  478. package/build/screens/conversation_screen.d.ts +3 -3
  479. package/build/screens/conversation_screen.d.ts.map +1 -1
  480. package/build/screens/conversation_screen.js +21 -21
  481. package/build/screens/conversation_screen.js.map +1 -1
  482. package/build/screens/conversation_select_recipients/components/groups_recipient_row.d.ts +1 -1
  483. package/build/screens/conversation_select_recipients/components/groups_recipient_row.d.ts.map +1 -1
  484. package/build/screens/conversation_select_recipients/components/groups_recipient_row.js +1 -1
  485. package/build/screens/conversation_select_recipients/components/groups_recipient_row.js.map +1 -1
  486. package/build/screens/conversation_select_recipients/components/recipient_link_row.js +3 -3
  487. package/build/screens/conversation_select_recipients/components/recipient_link_row.js.map +1 -1
  488. package/build/screens/conversation_select_recipients/components/restricted_group_row.d.ts +1 -1
  489. package/build/screens/conversation_select_recipients/components/restricted_group_row.d.ts.map +1 -1
  490. package/build/screens/conversation_select_recipients/components/restricted_group_row.js +3 -3
  491. package/build/screens/conversation_select_recipients/components/restricted_group_row.js.map +1 -1
  492. package/build/screens/conversation_select_recipients/components/team_recipient_row.d.ts +1 -1
  493. package/build/screens/conversation_select_recipients/components/team_recipient_row.d.ts.map +1 -1
  494. package/build/screens/conversation_select_recipients/components/team_recipient_row.js +1 -1
  495. package/build/screens/conversation_select_recipients/components/team_recipient_row.js.map +1 -1
  496. package/build/screens/conversation_select_recipients/components/view_more_link_row.js +1 -1
  497. package/build/screens/conversation_select_recipients/components/view_more_link_row.js.map +1 -1
  498. package/build/screens/conversation_select_recipients/conversation_new_entry_screen.d.ts.map +1 -1
  499. package/build/screens/conversation_select_recipients/conversation_new_entry_screen.js +4 -4
  500. package/build/screens/conversation_select_recipients/conversation_new_entry_screen.js.map +1 -1
  501. package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.d.ts.map +1 -1
  502. package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js +2 -2
  503. package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js.map +1 -1
  504. package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.d.ts.map +1 -1
  505. package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.js +4 -4
  506. package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.js.map +1 -1
  507. package/build/screens/conversation_select_recipients/types/screen_props.d.ts +2 -2
  508. package/build/screens/conversation_select_recipients/types/screen_props.d.ts.map +1 -1
  509. package/build/screens/conversation_select_recipients/types/screen_props.js.map +1 -1
  510. package/build/screens/conversation_select_type_screen.d.ts +2 -2
  511. package/build/screens/conversation_select_type_screen.d.ts.map +1 -1
  512. package/build/screens/conversation_select_type_screen.js +2 -2
  513. package/build/screens/conversation_select_type_screen.js.map +1 -1
  514. package/build/screens/conversations/components/chat_group_badge.js +2 -2
  515. package/build/screens/conversations/components/chat_group_badge.js.map +1 -1
  516. package/build/screens/conversations/components/list_header_action_button.d.ts +1 -1
  517. package/build/screens/conversations/components/list_header_action_button.d.ts.map +1 -1
  518. package/build/screens/conversations/components/list_header_action_button.js +4 -4
  519. package/build/screens/conversations/components/list_header_action_button.js.map +1 -1
  520. package/build/screens/conversations/components/list_header_component.js +9 -9
  521. package/build/screens/conversations/components/list_header_component.js.map +1 -1
  522. package/build/screens/conversations/conversations_screen.d.ts +2 -2
  523. package/build/screens/conversations/conversations_screen.d.ts.map +1 -1
  524. package/build/screens/conversations/conversations_screen.js +3 -3
  525. package/build/screens/conversations/conversations_screen.js.map +1 -1
  526. package/build/screens/design_system_screen.js +6 -6
  527. package/build/screens/design_system_screen.js.map +1 -1
  528. package/build/screens/get_help_screen.js +4 -4
  529. package/build/screens/get_help_screen.js.map +1 -1
  530. package/build/screens/group_notification_level_select_screen.js +3 -3
  531. package/build/screens/group_notification_level_select_screen.js.map +1 -1
  532. package/build/screens/group_notification_settings_screen.js +3 -3
  533. package/build/screens/group_notification_settings_screen.js.map +1 -1
  534. package/build/screens/message_actions_screen.js +10 -10
  535. package/build/screens/message_actions_screen.js.map +1 -1
  536. package/build/screens/message_report/components/message_preview.d.ts +1 -1
  537. package/build/screens/message_report/components/message_preview.d.ts.map +1 -1
  538. package/build/screens/message_report/components/message_preview.js +2 -2
  539. package/build/screens/message_report/components/message_preview.js.map +1 -1
  540. package/build/screens/message_report/components/report_reason_list.d.ts +1 -1
  541. package/build/screens/message_report/components/report_reason_list.d.ts.map +1 -1
  542. package/build/screens/message_report/components/report_reason_list.js +4 -4
  543. package/build/screens/message_report/components/report_reason_list.js.map +1 -1
  544. package/build/screens/message_report_screen.js +7 -7
  545. package/build/screens/message_report_screen.js.map +1 -1
  546. package/build/screens/notification_settings/hooks/groups.d.ts +7 -7
  547. package/build/screens/notification_settings/hooks/groups.d.ts.map +1 -1
  548. package/build/screens/notification_settings/hooks/groups.js +4 -4
  549. package/build/screens/notification_settings/hooks/groups.js.map +1 -1
  550. package/build/screens/notification_settings_screen.js +4 -4
  551. package/build/screens/notification_settings_screen.js.map +1 -1
  552. package/build/screens/preferred_app/hooks/use_chat_types.d.ts +5 -5
  553. package/build/screens/preferred_app/hooks/use_chat_types.d.ts.map +1 -1
  554. package/build/screens/preferred_app/hooks/use_chat_types.js +1 -1
  555. package/build/screens/preferred_app/hooks/use_chat_types.js.map +1 -1
  556. package/build/screens/preferred_app_selection_screen.d.ts.map +1 -1
  557. package/build/screens/preferred_app_selection_screen.js +7 -7
  558. package/build/screens/preferred_app_selection_screen.js.map +1 -1
  559. package/build/screens/reactions_screen.js +7 -7
  560. package/build/screens/reactions_screen.js.map +1 -1
  561. package/build/screens/send_giphy_screen.js +8 -8
  562. package/build/screens/send_giphy_screen.js.map +1 -1
  563. package/build/screens/team_conversation_screen.js +3 -3
  564. package/build/screens/team_conversation_screen.js.map +1 -1
  565. package/build/types/jolt_events/message_events.d.ts +1 -1
  566. package/build/types/jolt_events/message_events.d.ts.map +1 -1
  567. package/build/types/jolt_events/message_events.js.map +1 -1
  568. package/build/types/jolt_events/reaction_events.d.ts +1 -1
  569. package/build/types/jolt_events/reaction_events.d.ts.map +1 -1
  570. package/build/types/jolt_events/reaction_events.js.map +1 -1
  571. package/build/types/resources/app_grant.d.ts +1 -1
  572. package/build/types/resources/app_grant.d.ts.map +1 -1
  573. package/build/types/resources/app_grant.js.map +1 -1
  574. package/build/types/resources/conversation.d.ts +1 -0
  575. package/build/types/resources/conversation.d.ts.map +1 -1
  576. package/build/types/resources/conversation.js.map +1 -1
  577. package/build/types/resources/conversation_membership.d.ts +1 -1
  578. package/build/types/resources/conversation_membership.d.ts.map +1 -1
  579. package/build/types/resources/conversation_membership.js.map +1 -1
  580. package/build/types/resources/group_membership.d.ts +1 -1
  581. package/build/types/resources/group_membership.d.ts.map +1 -1
  582. package/build/types/resources/group_membership.js.map +1 -1
  583. package/build/types/resources/groups/groups_group_resource.d.ts +1 -1
  584. package/build/types/resources/groups/groups_group_resource.d.ts.map +1 -1
  585. package/build/types/resources/groups/groups_group_resource.js.map +1 -1
  586. package/build/types/resources/organization.d.ts +1 -1
  587. package/build/types/resources/organization.d.ts.map +1 -1
  588. package/build/types/resources/organization.js.map +1 -1
  589. package/build/types/resources/person.d.ts +1 -1
  590. package/build/types/resources/person.d.ts.map +1 -1
  591. package/build/types/resources/person.js.map +1 -1
  592. package/build/types/resources/services/chat_resource.d.ts +1 -1
  593. package/build/types/resources/services/chat_resource.d.ts.map +1 -1
  594. package/build/types/resources/services/chat_resource.js.map +1 -1
  595. package/build/types/resources/services/team_resource.d.ts +1 -1
  596. package/build/types/resources/services/team_resource.d.ts.map +1 -1
  597. package/build/types/resources/services/team_resource.js.map +1 -1
  598. package/build/utils/cache/messages_cache.d.ts +3 -3
  599. package/build/utils/cache/messages_cache.d.ts.map +1 -1
  600. package/build/utils/cache/messages_cache.js +3 -3
  601. package/build/utils/cache/messages_cache.js.map +1 -1
  602. package/build/utils/cache/optimistically_create_message.d.ts +2 -2
  603. package/build/utils/cache/optimistically_create_message.d.ts.map +1 -1
  604. package/build/utils/cache/optimistically_create_message.js +4 -4
  605. package/build/utils/cache/optimistically_create_message.js.map +1 -1
  606. package/build/utils/cache/optimistically_update_message.d.ts +1 -1
  607. package/build/utils/cache/optimistically_update_message.d.ts.map +1 -1
  608. package/build/utils/cache/optimistically_update_message.js +2 -2
  609. package/build/utils/cache/optimistically_update_message.js.map +1 -1
  610. package/build/utils/cache/page_mutations.d.ts +5 -5
  611. package/build/utils/cache/page_mutations.d.ts.map +1 -1
  612. package/build/utils/cache/page_mutations.js.map +1 -1
  613. package/build/utils/client/client.d.ts +1 -1
  614. package/build/utils/client/client.d.ts.map +1 -1
  615. package/build/utils/client/client.js.map +1 -1
  616. package/build/utils/convert_attachments_for_create.d.ts +2 -2
  617. package/build/utils/convert_attachments_for_create.d.ts.map +1 -1
  618. package/build/utils/convert_attachments_for_create.js.map +1 -1
  619. package/build/utils/destructure_chat_group_graph_id.d.ts +2 -2
  620. package/build/utils/destructure_chat_group_graph_id.d.ts.map +1 -1
  621. package/build/utils/destructure_chat_group_graph_id.js.map +1 -1
  622. package/build/utils/jolt/transform_message_event_data_to_message_resource.d.ts +2 -2
  623. package/build/utils/jolt/transform_message_event_data_to_message_resource.d.ts.map +1 -1
  624. package/build/utils/jolt/transform_message_event_data_to_message_resource.js +1 -1
  625. package/build/utils/jolt/transform_message_event_data_to_message_resource.js.map +1 -1
  626. package/build/utils/jolt/transform_reaction_event_data_to_reaction_count_resource.d.ts +3 -3
  627. package/build/utils/jolt/transform_reaction_event_data_to_reaction_count_resource.d.ts.map +1 -1
  628. package/build/utils/jolt/transform_reaction_event_data_to_reaction_count_resource.js.map +1 -1
  629. package/build/utils/performance_tracking.d.ts +1 -1
  630. package/build/utils/performance_tracking.d.ts.map +1 -1
  631. package/build/utils/performance_tracking.js.map +1 -1
  632. package/build/utils/reaction_constants.d.ts +1 -1
  633. package/build/utils/reaction_constants.d.ts.map +1 -1
  634. package/build/utils/reaction_constants.js.map +1 -1
  635. package/build/utils/request/conversation.d.ts +2 -2
  636. package/build/utils/request/conversation.d.ts.map +1 -1
  637. package/build/utils/request/conversation.js.map +1 -1
  638. package/build/utils/request/get_features.d.ts +1 -1
  639. package/build/utils/request/get_features.d.ts.map +1 -1
  640. package/build/utils/request/get_features.js +1 -1
  641. package/build/utils/request/get_features.js.map +1 -1
  642. package/build/utils/request/get_message.d.ts +1 -1
  643. package/build/utils/request/get_message.d.ts.map +1 -1
  644. package/build/utils/request/get_message.js +1 -1
  645. package/build/utils/request/get_message.js.map +1 -1
  646. package/build/utils/request/get_messages.d.ts +1 -1
  647. package/build/utils/request/get_messages.d.ts.map +1 -1
  648. package/build/utils/request/get_messages.js +1 -1
  649. package/build/utils/request/get_messages.js.map +1 -1
  650. package/build/utils/response_error.d.ts +1 -1
  651. package/build/utils/response_error.d.ts.map +1 -1
  652. package/build/utils/response_error.js.map +1 -1
  653. package/build/utils/session.d.ts +1 -1
  654. package/build/utils/session.d.ts.map +1 -1
  655. package/build/utils/session.js.map +1 -1
  656. package/build/utils/session_manager.d.ts +1 -1
  657. package/build/utils/session_manager.d.ts.map +1 -1
  658. package/build/utils/session_manager.js.map +1 -1
  659. package/build/utils/styles.js +1 -1
  660. package/build/utils/styles.js.map +1 -1
  661. package/build/utils/theme.d.ts +1 -1
  662. package/build/utils/theme.d.ts.map +1 -1
  663. package/build/utils/theme.js +2 -2
  664. package/build/utils/theme.js.map +1 -1
  665. package/package.json +3 -2
  666. package/src/__tests__/contexts/session_context.tsx +5 -5
  667. package/src/__tests__/event-polyfill.test.ts +3 -3
  668. package/src/__tests__/hooks/useTheme.tsx +2 -2
  669. package/src/__tests__/hooks/use_async_storage.test.tsx +1 -1
  670. package/src/__tests__/hooks/use_conversation_messages.ts +2 -2
  671. package/src/__tests__/hooks/use_font_scale.test.ts +1 -1
  672. package/src/__tests__/utils/cache/page_mutations.ts +1 -1
  673. package/src/__tests__/utils/client.ts +5 -5
  674. package/src/__tests__/utils/native_adapters/configuration.ts +4 -4
  675. package/src/__tests__/utils/parse_simple_markdown.ts +1 -1
  676. package/src/__tests__/utils/pluralize.tsx +1 -1
  677. package/src/__tests__/utils/session.ts +2 -2
  678. package/src/__tests__/utils/uri.ts +1 -1
  679. package/src/__utils__/handlers.ts +1 -1
  680. package/src/components/conversation/attachments/attachment_card.tsx +3 -3
  681. package/src/components/conversation/attachments/attachment_deleting_overlay.tsx +2 -2
  682. package/src/components/conversation/attachments/audio_attachment.tsx +4 -4
  683. package/src/components/conversation/attachments/expanded_link.tsx +4 -4
  684. package/src/components/conversation/attachments/generic_file_attachment.tsx +5 -5
  685. package/src/components/conversation/attachments/giphy_attachment.tsx +5 -5
  686. package/src/components/conversation/attachments/image_attachment.tsx +6 -6
  687. package/src/components/conversation/attachments/video_attachment.tsx +5 -5
  688. package/src/components/conversation/empty_conversation_blank_state.tsx +1 -1
  689. package/src/components/conversation/jump_to_bottom_button.tsx +3 -3
  690. package/src/components/conversation/message.tsx +19 -19
  691. package/src/components/conversation/message_attachments.tsx +5 -5
  692. package/src/components/conversation/message_form/message_form_attachment_image.tsx +2 -2
  693. package/src/components/conversation/message_form/message_form_attachment_video.tsx +2 -2
  694. package/src/components/conversation/message_form.tsx +17 -17
  695. package/src/components/conversation/message_markdown.tsx +3 -3
  696. package/src/components/conversation/message_reaction.tsx +8 -8
  697. package/src/components/conversation/message_read_receipts.tsx +3 -3
  698. package/src/components/conversation/messages_disabled_banners.tsx +2 -2
  699. package/src/components/conversation/reply_connectors.tsx +3 -3
  700. package/src/components/conversation/reply_shadow_message.tsx +9 -9
  701. package/src/components/conversation/typing_indicator.tsx +3 -3
  702. package/src/components/conversations/conversation_actions.tsx +6 -9
  703. package/src/components/conversations/conversation_preview.tsx +4 -9
  704. package/src/components/conversations/conversations.tsx +6 -6
  705. package/src/components/conversations/mute_indicator.tsx +3 -3
  706. package/src/components/conversations/swipeable_toggle_button.tsx +5 -5
  707. package/src/components/conversations/unread_count_badge.tsx +3 -3
  708. package/src/components/display/action_button.tsx +2 -2
  709. package/src/components/display/avatar.tsx +2 -2
  710. package/src/components/display/avatar_group.tsx +2 -2
  711. package/src/components/display/badge.tsx +3 -3
  712. package/src/components/display/banner.tsx +1 -1
  713. package/src/components/display/banner_collapsible.tsx +1 -1
  714. package/src/components/display/button.tsx +3 -3
  715. package/src/components/display/child_notice.tsx +3 -3
  716. package/src/components/display/heading.tsx +3 -3
  717. package/src/components/display/icon.tsx +1 -1
  718. package/src/components/display/icon_button.tsx +2 -2
  719. package/src/components/display/image.tsx +1 -1
  720. package/src/components/display/image_attachment_preview.tsx +2 -2
  721. package/src/components/display/keyboard_view.tsx +1 -1
  722. package/src/components/display/person.tsx +2 -2
  723. package/src/components/display/platform_modal_header_buttons.tsx +1 -1
  724. package/src/components/display/pressable_row.tsx +1 -1
  725. package/src/components/display/spinner.tsx +1 -1
  726. package/src/components/display/switch.tsx +1 -1
  727. package/src/components/display/tabs.tsx +1 -1
  728. package/src/components/display/text.tsx +2 -2
  729. package/src/components/display/text_button.tsx +2 -2
  730. package/src/components/display/text_inline_button.tsx +2 -2
  731. package/src/components/display/toggle_button.tsx +6 -6
  732. package/src/components/display/utils/button_colors.ts +1 -1
  733. package/src/components/display/utils/status_colors.ts +1 -1
  734. package/src/components/display/video_attachment_preview.tsx +3 -3
  735. package/src/components/group_conversation_list.tsx +5 -5
  736. package/src/components/page/error_boundary.tsx +2 -2
  737. package/src/components/page/loading.tsx +1 -1
  738. package/src/components/primitive/avatar_primitive.tsx +5 -5
  739. package/src/components/primitive/banner_primitive.tsx +11 -11
  740. package/src/components/primitive/blank_state_primitive.tsx +2 -2
  741. package/src/components/primitive/form_sheet.tsx +4 -4
  742. package/src/components/safe_area_modal.tsx +1 -1
  743. package/src/contexts/api_provider.tsx +4 -4
  744. package/src/contexts/chat_context.tsx +6 -6
  745. package/src/contexts/conversations_context.tsx +3 -3
  746. package/src/contexts/session_context.tsx +9 -9
  747. package/src/hooks/groups/use_group_members_for_new_conversation.ts +4 -4
  748. package/src/hooks/groups/use_groups_conversation_create.ts +3 -3
  749. package/src/hooks/services/use_find_or_create_services_conversation.ts +3 -3
  750. package/src/hooks/services/use_services_team.ts +2 -2
  751. package/src/hooks/services/use_team_members_for_new_conversation.ts +2 -2
  752. package/src/hooks/services/use_team_plans.ts +2 -2
  753. package/src/hooks/use_api.ts +2 -2
  754. package/src/hooks/use_api_client.ts +3 -3
  755. package/src/hooks/use_async_storage.ts +1 -1
  756. package/src/hooks/use_attachment_uploader.ts +5 -5
  757. package/src/hooks/use_broadcast_typing_status.ts +1 -1
  758. package/src/hooks/use_chat_permissions.ts +1 -1
  759. package/src/hooks/use_conversation.ts +5 -4
  760. package/src/hooks/use_conversation_jolt_events.ts +3 -3
  761. package/src/hooks/use_conversation_membership.ts +3 -3
  762. package/src/hooks/use_conversation_message.ts +2 -2
  763. package/src/hooks/use_conversation_messages.ts +2 -2
  764. package/src/hooks/use_conversation_messages_jolt_events.ts +14 -14
  765. package/src/hooks/use_conversations.ts +2 -2
  766. package/src/hooks/use_conversations_actions.ts +2 -2
  767. package/src/hooks/use_conversations_cache.ts +5 -5
  768. package/src/hooks/use_conversations_jolt_events.ts +4 -4
  769. package/src/hooks/use_current_person.ts +2 -2
  770. package/src/hooks/use_features.ts +4 -4
  771. package/src/hooks/use_giphy.ts +2 -2
  772. package/src/hooks/use_groups.ts +2 -2
  773. package/src/hooks/use_groups_groups.ts +1 -1
  774. package/src/hooks/use_jolt.ts +3 -3
  775. package/src/hooks/use_live_relative_time.ts +2 -2
  776. package/src/hooks/use_mark_latest_message_read.ts +1 -1
  777. package/src/hooks/use_message_create_or_update.ts +11 -11
  778. package/src/hooks/use_message_draft.ts +2 -2
  779. package/src/hooks/use_message_reaction_toggle.ts +4 -4
  780. package/src/hooks/use_my_gender.ts +1 -1
  781. package/src/hooks/use_organization.ts +1 -1
  782. package/src/hooks/use_people_person.ts +1 -1
  783. package/src/hooks/use_product_analytics.ts +5 -5
  784. package/src/hooks/use_qualified_by_age.ts +1 -1
  785. package/src/hooks/use_read_receipts.ts +1 -1
  786. package/src/hooks/use_report_message.ts +2 -2
  787. package/src/hooks/use_storage.ts +1 -1
  788. package/src/hooks/use_submit_age_check.ts +2 -2
  789. package/src/hooks/use_suspense_api.ts +5 -5
  790. package/src/hooks/use_teams.ts +1 -1
  791. package/src/hooks/use_theme.tsx +2 -2
  792. package/src/hooks/use_typing_indicators.ts +1 -1
  793. package/src/hooks/use_typing_status_cache.ts +1 -1
  794. package/src/hooks/use_upload_client.ts +3 -3
  795. package/src/navigation/chat_access_gate.tsx +7 -7
  796. package/src/navigation/index.tsx +31 -34
  797. package/src/navigation/screenLayout.tsx +2 -2
  798. package/src/polyfills/events/Event.ts +1 -1
  799. package/src/polyfills/events/EventTarget.ts +1 -1
  800. package/src/polyfills/events/internals/EventInternals.ts +2 -2
  801. package/src/polyfills/events/internals/EventTargetInternals.ts +2 -2
  802. package/src/screens/age_check/age_check_required_screen.tsx +8 -8
  803. package/src/screens/age_check/age_check_underage_screen.tsx +3 -3
  804. package/src/screens/age_check/components/age_check_select_birthdate_modal.tsx +3 -3
  805. package/src/screens/attachment_actions/attachment_actions_screen.tsx +1 -1
  806. package/src/screens/attachment_actions/hooks/useDeleteAttachment.tsx +3 -3
  807. package/src/screens/bug_report_screen.tsx +11 -11
  808. package/src/screens/conversation/message_read_receipts_screen.tsx +5 -5
  809. package/src/screens/conversation_details_screen.tsx +47 -12
  810. package/src/screens/conversation_filter_recipients/components/checkbox_row.tsx +8 -4
  811. package/src/screens/conversation_filter_recipients/components/header_row.tsx +5 -5
  812. package/src/screens/conversation_filter_recipients/conversation_filter_recipients_screen.tsx +6 -6
  813. package/src/screens/conversation_filter_recipients/hooks/use_flattened_array_of_service_types_with_teams.tsx +5 -1
  814. package/src/screens/conversation_filter_recipients/hooks/use_service_types_with_teams.ts +6 -3
  815. package/src/screens/conversation_filter_recipients/types.tsx +1 -1
  816. package/src/screens/conversation_filters/components/conversation_filters.tsx +8 -5
  817. package/src/screens/conversation_filters/components/rows.tsx +9 -14
  818. package/src/screens/conversation_filters/context/conversation_filter_context.tsx +4 -1
  819. package/src/screens/conversation_filters/group_filters.tsx +1 -1
  820. package/src/screens/conversation_filters/hooks/filters.ts +5 -5
  821. package/src/screens/conversation_filters/screen_props.ts +1 -1
  822. package/src/screens/conversation_filters/team_filters.tsx +1 -1
  823. package/src/screens/conversation_filters_screen.tsx +1 -1
  824. package/src/screens/conversation_new/components/filter_by_plan.tsx +7 -7
  825. package/src/screens/conversation_new/components/form_list.tsx +3 -3
  826. package/src/screens/conversation_new/components/gender_filter_toggle.tsx +3 -3
  827. package/src/screens/conversation_new/components/groups_form.tsx +14 -14
  828. package/src/screens/conversation_new/components/services_form.tsx +10 -10
  829. package/src/screens/conversation_new/components/source_app_error_card.tsx +1 -1
  830. package/src/screens/conversation_new/conversation_new_screen.tsx +3 -3
  831. package/src/screens/conversation_notification_level_select_screen.tsx +6 -6
  832. package/src/screens/conversation_screen.tsx +23 -23
  833. package/src/screens/conversation_select_recipients/components/groups_recipient_row.tsx +2 -2
  834. package/src/screens/conversation_select_recipients/components/recipient_link_row.tsx +3 -3
  835. package/src/screens/conversation_select_recipients/components/restricted_group_row.tsx +4 -4
  836. package/src/screens/conversation_select_recipients/components/team_recipient_row.tsx +2 -2
  837. package/src/screens/conversation_select_recipients/components/view_more_link_row.tsx +1 -1
  838. package/src/screens/conversation_select_recipients/conversation_new_entry_screen.tsx +4 -4
  839. package/src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx +3 -3
  840. package/src/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.tsx +7 -4
  841. package/src/screens/conversation_select_recipients/types/screen_props.tsx +2 -2
  842. package/src/screens/conversation_select_type_screen.tsx +4 -4
  843. package/src/screens/conversations/components/chat_group_badge.tsx +4 -4
  844. package/src/screens/conversations/components/list_header_action_button.tsx +4 -4
  845. package/src/screens/conversations/components/list_header_component.tsx +10 -10
  846. package/src/screens/conversations/conversations_screen.tsx +5 -5
  847. package/src/screens/design_system_screen.tsx +6 -6
  848. package/src/screens/get_help_screen.tsx +5 -5
  849. package/src/screens/group_notification_level_select_screen.tsx +3 -3
  850. package/src/screens/group_notification_settings_screen.tsx +3 -3
  851. package/src/screens/message_actions_screen.tsx +12 -12
  852. package/src/screens/message_report/components/message_preview.tsx +3 -3
  853. package/src/screens/message_report/components/report_reason_list.tsx +4 -7
  854. package/src/screens/message_report_screen.tsx +11 -11
  855. package/src/screens/notification_settings/hooks/groups.ts +6 -6
  856. package/src/screens/notification_settings_screen.tsx +4 -4
  857. package/src/screens/preferred_app/hooks/use_chat_types.ts +2 -2
  858. package/src/screens/preferred_app_selection_screen.tsx +7 -7
  859. package/src/screens/reactions_screen.tsx +9 -9
  860. package/src/screens/send_giphy_screen.tsx +8 -8
  861. package/src/screens/team_conversation_screen.tsx +3 -3
  862. package/src/types/jolt_events/message_events.ts +1 -1
  863. package/src/types/jolt_events/reaction_events.ts +1 -1
  864. package/src/types/resources/app_grant.ts +1 -1
  865. package/src/types/resources/conversation.ts +1 -0
  866. package/src/types/resources/conversation_membership.ts +1 -1
  867. package/src/types/resources/group_membership.ts +1 -1
  868. package/src/types/resources/groups/groups_group_resource.ts +1 -1
  869. package/src/types/resources/organization.ts +1 -1
  870. package/src/types/resources/person.ts +1 -1
  871. package/src/types/resources/services/chat_resource.ts +1 -1
  872. package/src/types/resources/services/team_resource.ts +1 -1
  873. package/src/utils/__tests__/convert_attachments_for_create.test.ts +3 -3
  874. package/src/utils/__tests__/session_manager.test.ts +3 -3
  875. package/src/utils/__tests__/sha_256.test.ts +1 -1
  876. package/src/utils/cache/messages_cache.ts +5 -5
  877. package/src/utils/cache/optimistically_create_message.ts +7 -7
  878. package/src/utils/cache/optimistically_update_message.ts +3 -3
  879. package/src/utils/cache/page_mutations.ts +1 -1
  880. package/src/utils/client/client.ts +1 -1
  881. package/src/utils/convert_attachments_for_create.ts +2 -2
  882. package/src/utils/destructure_chat_group_graph_id.ts +2 -2
  883. package/src/utils/jolt/transform_message_event_data_to_message_resource.ts +4 -4
  884. package/src/utils/jolt/transform_reaction_event_data_to_reaction_count_resource.ts +3 -3
  885. package/src/utils/performance_tracking.ts +1 -1
  886. package/src/utils/reaction_constants.ts +1 -1
  887. package/src/utils/request/conversation.ts +2 -2
  888. package/src/utils/request/get_features.ts +1 -1
  889. package/src/utils/request/get_message.ts +1 -1
  890. package/src/utils/request/get_messages.ts +1 -1
  891. package/src/utils/response_error.ts +1 -1
  892. package/src/utils/session.ts +1 -1
  893. package/src/utils/session_manager.ts +1 -1
  894. package/src/utils/styles.ts +1 -1
  895. package/src/utils/theme.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"use_jolt.js","sourceRoot":"","sources":["../../src/hooks/use_jolt.ts"],"names":[],"mappings":"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","sourcesContent":["import JoltClient from '@planningcenter/jolt-client'\nimport {\n CustomMessage,\n FetchAuthToken,\n} from '@planningcenter/jolt-client/dist/types/JoltConnection'\nimport {\n FetchSubscribeToken,\n JoltSubscription,\n} from '@planningcenter/jolt-client/dist/types/JoltSubscription'\nimport { useQuery, useQueryClient, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useChatContext } from '../contexts/chat_context'\nimport { ApiResource } from '../types'\nimport { Client, Uri } from '../utils'\n\ninterface JoltResponse {\n type: 'JoltToken'\n id: string\n wssUrl: string\n}\n\nexport const useJoltClient = (): JoltClient | undefined => {\n const { session } = useChatContext()\n const sessionAccessToken = session.token?.access_token\n const queryClient = useQueryClient()\n const uri = useMemo(() => new Uri({ session }), [session])\n const apiClient = useMemo(\n () =>\n new Client({\n root: uri.api(`/chat/v2`),\n defaultHeaders: uri.headers,\n version: '2018-11-01',\n }),\n [uri]\n )\n\n const fetchJoltToken = async () => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-token'],\n queryFn: () => {\n return apiClient.post<ApiResource<JoltResponse>>({\n url: '/me/jolt_authorize',\n data: {\n data: {\n type: 'JoltToken',\n attributes: {},\n },\n },\n })\n },\n staleTime: 5000, // 5 seconds\n })\n }\n\n /** The wssUrl is static and doesn't change so we can cache it to infinity and beyond */\n const { data: wssUrl } = useSuspenseQuery<string>({\n queryKey: ['wss-url'],\n queryFn: () => fetchJoltToken().then(res => res.data.wssUrl),\n staleTime: Infinity,\n gcTime: Infinity,\n refetchOnWindowFocus: false,\n })\n\n const fetchAuthTokenFn: FetchAuthToken = () => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-auth-token'],\n queryFn: () => fetchJoltToken().then(res => res.data.id),\n })\n }\n\n const fetchSubscribeToken: FetchSubscribeToken = (channel: string, connectionId: string) => {\n return apiClient\n .post<ApiResource<JoltResponse>>({\n url: '/me/jolt_subscribe',\n data: {\n data: {\n type: 'JoltSubscribeToken',\n attributes: { channel, cid: connectionId },\n },\n },\n })\n .then(res => res.data.id)\n .catch((res: unknown) => {\n console.error('failed to subscribe to Jolt channel', res)\n return ''\n })\n }\n\n const fetchSubscribeTokenFn: FetchSubscribeToken = (\n channel: string,\n connectionId: string,\n options\n ) => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-subscribe-token', channel, connectionId],\n queryFn: () => fetchSubscribeToken(channel, connectionId, options),\n })\n }\n\n const { data: joltClient } = useQuery({\n enabled: Boolean(wssUrl),\n queryKey: ['jolt-client', wssUrl, sessionAccessToken],\n queryFn: async () => {\n if (!wssUrl) return undefined\n\n return new JoltClient(\n wssUrl,\n {\n fetchAuthTokenFn,\n fetchSubscribeTokenFn,\n },\n { logToConsole: false }\n )\n },\n refetchOnWindowFocus: false,\n staleTime: Infinity,\n gcTime: Infinity,\n })\n\n return joltClient\n}\n\nexport function useJoltChannel(\n channelName: string,\n enabled: boolean = true\n): JoltSubscription | undefined | null {\n const jolt = useJoltClient()\n const queryClient = useQueryClient()\n const ready = Boolean(jolt) && enabled\n\n const handleSubscribe = useCallback(async () => {\n if (!jolt) return null\n\n // If the subscription already exists, we don't need to subscribe again\n const alreadySubscribed = jolt.subscriptions.find(c => c.channel === channelName)\n if (alreadySubscribed) return alreadySubscribed\n\n return jolt.subscribe(channelName)\n }, [channelName, jolt])\n\n const { data: subscription } = useQuery<JoltSubscription | null>({\n queryKey: ['jolt-subscription', channelName],\n queryFn: handleSubscribe,\n refetchOnWindowFocus: false,\n enabled: ready,\n })\n\n const handleUnsubscribe = useCallback(() => {\n queryClient.removeQueries({\n queryKey: ['jolt-subscription', channelName],\n exact: true,\n })\n\n jolt?.unsubscribe(channelName)\n }, [queryClient, channelName, jolt])\n\n useEffect(() => {\n return handleUnsubscribe\n }, [handleUnsubscribe])\n\n return subscription\n}\n\ntype UserCallbackFn<T> = (_event: T) => void\n\nexport function useJoltEvent<T extends CustomMessage>(\n channel: JoltSubscription | undefined | null,\n eventName: string,\n callback: UserCallbackFn<T>\n) {\n useEffect(() => {\n if (!channel) return () => {}\n\n return channel.bind(eventName, e => callback(e as T))\n }, [channel, eventName, callback])\n}\n"]}
1
+ {"version":3,"file":"use_jolt.js","sourceRoot":"","sources":["../../src/hooks/use_jolt.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,6BAA6B,CAAA;AASpD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAQrC,MAAM,CAAC,MAAM,aAAa,GAAG,GAA2B,EAAE;IACxD,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,kBAAkB,GAAG,OAAO,CAAC,KAAK,EAAE,YAAY,CAAA;IACtD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1D,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CACH,IAAI,MAAM,CAAC;QACT,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;QACzB,cAAc,EAAE,GAAG,CAAC,OAAO;QAC3B,OAAO,EAAE,YAAY;KACtB,CAAC,EACJ,CAAC,GAAG,CAAC,CACN,CAAA;IAED,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,OAAO,WAAW,CAAC,UAAU,CAAC;YAC5B,QAAQ,EAAE,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,SAAS,CAAC,IAAI,CAA4B;oBAC/C,GAAG,EAAE,oBAAoB;oBACzB,IAAI,EAAE;wBACJ,IAAI,EAAE;4BACJ,IAAI,EAAE,WAAW;4BACjB,UAAU,EAAE,EAAE;yBACf;qBACF;iBACF,CAAC,CAAA;YACJ,CAAC;YACD,SAAS,EAAE,IAAI,EAAE,YAAY;SAC9B,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,wFAAwF;IACxF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAS;QAChD,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5D,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,QAAQ;QAChB,oBAAoB,EAAE,KAAK;KAC5B,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAmB,GAAG,EAAE;QAC5C,OAAO,WAAW,CAAC,UAAU,CAAC;YAC5B,QAAQ,EAAE,CAAC,iBAAiB,CAAC;YAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SACzD,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,mBAAmB,GAAwB,CAAC,OAAe,EAAE,YAAoB,EAAE,EAAE;QACzF,OAAO,SAAS;aACb,IAAI,CAA4B;YAC/B,GAAG,EAAE,oBAAoB;YACzB,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,oBAAoB;oBAC1B,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE;iBAC3C;aACF;SACF,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aACxB,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAA;YACzD,OAAO,EAAE,CAAA;QACX,CAAC,CAAC,CAAA;IACN,CAAC,CAAA;IAED,MAAM,qBAAqB,GAAwB,CACjD,OAAe,EACf,YAAoB,EACpB,OAAO,EACP,EAAE;QACF,OAAO,WAAW,CAAC,UAAU,CAAC;YAC5B,QAAQ,EAAE,CAAC,sBAAsB,EAAE,OAAO,EAAE,YAAY,CAAC;YACzD,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC;SACnE,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,CAAC;QACrD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,MAAM;gBAAE,OAAO,SAAS,CAAA;YAE7B,OAAO,IAAI,UAAU,CACnB,MAAM,EACN;gBACE,gBAAgB;gBAChB,qBAAqB;aACtB,EACD,EAAE,YAAY,EAAE,KAAK,EAAE,CACxB,CAAA;QACH,CAAC;QACD,oBAAoB,EAAE,KAAK;QAC3B,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,UAAU,cAAc,CAC5B,WAAmB,EACnB,UAAmB,IAAI;IAEvB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAA;IAC5B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAA;IAEtC,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC7C,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QAEtB,uEAAuE;QACvE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAA;QACjF,IAAI,iBAAiB;YAAE,OAAO,iBAAiB,CAAA;QAE/C,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IACpC,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAA;IAEvB,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,QAAQ,CAA0B;QAC/D,QAAQ,EAAE,CAAC,mBAAmB,EAAE,WAAW,CAAC;QAC5C,OAAO,EAAE,eAAe;QACxB,oBAAoB,EAAE,KAAK;QAC3B,OAAO,EAAE,KAAK;KACf,CAAC,CAAA;IAEF,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,WAAW,CAAC,aAAa,CAAC;YACxB,QAAQ,EAAE,CAAC,mBAAmB,EAAE,WAAW,CAAC;YAC5C,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QAEF,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;IAChC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAA;IAEpC,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,iBAAiB,CAAA;IAC1B,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEvB,OAAO,YAAY,CAAA;AACrB,CAAC;AAID,MAAM,UAAU,YAAY,CAC1B,OAA4C,EAC5C,SAAiB,EACjB,QAA2B;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;QAE7B,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAM,CAAC,CAAC,CAAA;IACvD,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;AACpC,CAAC","sourcesContent":["import JoltClient from '@planningcenter/jolt-client'\nimport {\n CustomMessage,\n FetchAuthToken,\n} from '@planningcenter/jolt-client/dist/types/JoltConnection'\nimport {\n FetchSubscribeToken,\n JoltSubscription,\n} from '@planningcenter/jolt-client/dist/types/JoltSubscription'\nimport { useQuery, useQueryClient, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useChatContext } from '@/contexts/chat_context'\nimport { ApiResource } from '@/types'\nimport { Client, Uri } from '@/utils'\n\ninterface JoltResponse {\n type: 'JoltToken'\n id: string\n wssUrl: string\n}\n\nexport const useJoltClient = (): JoltClient | undefined => {\n const { session } = useChatContext()\n const sessionAccessToken = session.token?.access_token\n const queryClient = useQueryClient()\n const uri = useMemo(() => new Uri({ session }), [session])\n const apiClient = useMemo(\n () =>\n new Client({\n root: uri.api(`/chat/v2`),\n defaultHeaders: uri.headers,\n version: '2018-11-01',\n }),\n [uri]\n )\n\n const fetchJoltToken = async () => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-token'],\n queryFn: () => {\n return apiClient.post<ApiResource<JoltResponse>>({\n url: '/me/jolt_authorize',\n data: {\n data: {\n type: 'JoltToken',\n attributes: {},\n },\n },\n })\n },\n staleTime: 5000, // 5 seconds\n })\n }\n\n /** The wssUrl is static and doesn't change so we can cache it to infinity and beyond */\n const { data: wssUrl } = useSuspenseQuery<string>({\n queryKey: ['wss-url'],\n queryFn: () => fetchJoltToken().then(res => res.data.wssUrl),\n staleTime: Infinity,\n gcTime: Infinity,\n refetchOnWindowFocus: false,\n })\n\n const fetchAuthTokenFn: FetchAuthToken = () => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-auth-token'],\n queryFn: () => fetchJoltToken().then(res => res.data.id),\n })\n }\n\n const fetchSubscribeToken: FetchSubscribeToken = (channel: string, connectionId: string) => {\n return apiClient\n .post<ApiResource<JoltResponse>>({\n url: '/me/jolt_subscribe',\n data: {\n data: {\n type: 'JoltSubscribeToken',\n attributes: { channel, cid: connectionId },\n },\n },\n })\n .then(res => res.data.id)\n .catch((res: unknown) => {\n console.error('failed to subscribe to Jolt channel', res)\n return ''\n })\n }\n\n const fetchSubscribeTokenFn: FetchSubscribeToken = (\n channel: string,\n connectionId: string,\n options\n ) => {\n return queryClient.fetchQuery({\n queryKey: ['jolt-subscribe-token', channel, connectionId],\n queryFn: () => fetchSubscribeToken(channel, connectionId, options),\n })\n }\n\n const { data: joltClient } = useQuery({\n enabled: Boolean(wssUrl),\n queryKey: ['jolt-client', wssUrl, sessionAccessToken],\n queryFn: async () => {\n if (!wssUrl) return undefined\n\n return new JoltClient(\n wssUrl,\n {\n fetchAuthTokenFn,\n fetchSubscribeTokenFn,\n },\n { logToConsole: false }\n )\n },\n refetchOnWindowFocus: false,\n staleTime: Infinity,\n gcTime: Infinity,\n })\n\n return joltClient\n}\n\nexport function useJoltChannel(\n channelName: string,\n enabled: boolean = true\n): JoltSubscription | undefined | null {\n const jolt = useJoltClient()\n const queryClient = useQueryClient()\n const ready = Boolean(jolt) && enabled\n\n const handleSubscribe = useCallback(async () => {\n if (!jolt) return null\n\n // If the subscription already exists, we don't need to subscribe again\n const alreadySubscribed = jolt.subscriptions.find(c => c.channel === channelName)\n if (alreadySubscribed) return alreadySubscribed\n\n return jolt.subscribe(channelName)\n }, [channelName, jolt])\n\n const { data: subscription } = useQuery<JoltSubscription | null>({\n queryKey: ['jolt-subscription', channelName],\n queryFn: handleSubscribe,\n refetchOnWindowFocus: false,\n enabled: ready,\n })\n\n const handleUnsubscribe = useCallback(() => {\n queryClient.removeQueries({\n queryKey: ['jolt-subscription', channelName],\n exact: true,\n })\n\n jolt?.unsubscribe(channelName)\n }, [queryClient, channelName, jolt])\n\n useEffect(() => {\n return handleUnsubscribe\n }, [handleUnsubscribe])\n\n return subscription\n}\n\ntype UserCallbackFn<T> = (_event: T) => void\n\nexport function useJoltEvent<T extends CustomMessage>(\n channel: JoltSubscription | undefined | null,\n eventName: string,\n callback: UserCallbackFn<T>\n) {\n useEffect(() => {\n if (!channel) return () => {}\n\n return channel.bind(eventName, e => callback(e as T))\n }, [channel, eventName, callback])\n}\n"]}
@@ -1,3 +1,3 @@
1
- import { type DateProps } from '../utils/date';
1
+ import { type DateProps } from '@/utils/date';
2
2
  export declare function useLiveRelativeTime(date: DateProps): string;
3
3
  //# sourceMappingURL=use_live_relative_time.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_live_relative_time.d.ts","sourceRoot":"","sources":["../../src/hooks/use_live_relative_time.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAO5D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,UA6BlD"}
1
+ {"version":3,"file":"use_live_relative_time.d.ts","sourceRoot":"","sources":["../../src/hooks/use_live_relative_time.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAO3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,UA6BlD"}
@@ -1,6 +1,6 @@
1
1
  import { useEffect, useState } from 'react';
2
- import { relativeTime } from '../utils/date';
3
- import dayjs from '../utils/dayjs';
2
+ import { relativeTime } from '@/utils/date';
3
+ import dayjs from '@/utils/dayjs';
4
4
  const MINUTE = 60;
5
5
  const HOUR = MINUTE * 60;
6
6
  const DAY = HOUR * 24;
@@ -1 +1 @@
1
- {"version":3,"file":"use_live_relative_time.js","sourceRoot":"","sources":["../../src/hooks/use_live_relative_time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAkB,MAAM,eAAe,CAAA;AAC5D,OAAO,KAAK,MAAM,gBAAgB,CAAA;AAElC,MAAM,MAAM,GAAG,EAAE,CAAA;AACjB,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,CAAA;AACxB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;AAErB,MAAM,UAAU,mBAAmB,CAAC,IAAe;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;YAE3D,MAAM,eAAe,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAEnE,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC,CAAA;YAC1E,CAAC;YAED,OAAO,CAAC,CAAA;QACV,CAAC,CAAA;QACD,MAAM,SAAS,GAAG,IAAI,EAAE,CAAA;QACxB,OAAO,GAAG,EAAE;YACV,IAAI,SAAS,EAAE,CAAC;gBACd,YAAY,CAAC,SAAS,CAAC,CAAA;YACzB,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAEnB,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACxB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,OAAO,YAAY,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC","sourcesContent":["import { useEffect, useState } from 'react'\nimport { relativeTime, type DateProps } from '../utils/date'\nimport dayjs from '../utils/dayjs'\n\nconst MINUTE = 60\nconst HOUR = MINUTE * 60\nconst DAY = HOUR * 24\n\nexport function useLiveRelativeTime(date: DateProps) {\n const [timeNow, setTimeNow] = useState(Date.now())\n\n useEffect(() => {\n const tick = () => {\n const then = dayjs(date).valueOf()\n const seconds = Math.round(Math.abs(timeNow - then) / 1000)\n\n const periodInMinutes = seconds < HOUR ? 1 : seconds < DAY ? 60 : 0\n\n if (periodInMinutes) {\n return setTimeout(() => setTimeNow(Date.now()), periodInMinutes * 60000)\n }\n\n return 0\n }\n const timeoutId = tick()\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n }\n }, [date, timeNow])\n\n useEffect(() => {\n setTimeNow(Date.now())\n }, [date])\n\n return relativeTime(date)\n}\n"]}
1
+ {"version":3,"file":"use_live_relative_time.js","sourceRoot":"","sources":["../../src/hooks/use_live_relative_time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAkB,MAAM,cAAc,CAAA;AAC3D,OAAO,KAAK,MAAM,eAAe,CAAA;AAEjC,MAAM,MAAM,GAAG,EAAE,CAAA;AACjB,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,CAAA;AACxB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;AAErB,MAAM,UAAU,mBAAmB,CAAC,IAAe;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;YAE3D,MAAM,eAAe,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAEnE,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC,CAAA;YAC1E,CAAC;YAED,OAAO,CAAC,CAAA;QACV,CAAC,CAAA;QACD,MAAM,SAAS,GAAG,IAAI,EAAE,CAAA;QACxB,OAAO,GAAG,EAAE;YACV,IAAI,SAAS,EAAE,CAAC;gBACd,YAAY,CAAC,SAAS,CAAC,CAAA;YACzB,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAEnB,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACxB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,OAAO,YAAY,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC","sourcesContent":["import { useEffect, useState } from 'react'\nimport { relativeTime, type DateProps } from '@/utils/date'\nimport dayjs from '@/utils/dayjs'\n\nconst MINUTE = 60\nconst HOUR = MINUTE * 60\nconst DAY = HOUR * 24\n\nexport function useLiveRelativeTime(date: DateProps) {\n const [timeNow, setTimeNow] = useState(Date.now())\n\n useEffect(() => {\n const tick = () => {\n const then = dayjs(date).valueOf()\n const seconds = Math.round(Math.abs(timeNow - then) / 1000)\n\n const periodInMinutes = seconds < HOUR ? 1 : seconds < DAY ? 60 : 0\n\n if (periodInMinutes) {\n return setTimeout(() => setTimeNow(Date.now()), periodInMinutes * 60000)\n }\n\n return 0\n }\n const timeoutId = tick()\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n }\n }, [date, timeNow])\n\n useEffect(() => {\n setTimeNow(Date.now())\n }, [date])\n\n return relativeTime(date)\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { ConversationResource, MessageResource } from '../types';
1
+ import { ConversationResource, MessageResource } from '@/types';
2
2
  interface Props {
3
3
  conversation: ConversationResource;
4
4
  messages: MessageResource[];
@@ -1 +1 @@
1
- {"version":3,"file":"use_mark_latest_message_read.d.ts","sourceRoot":"","sources":["../../src/hooks/use_mark_latest_message_read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAIhE,UAAU,KAAK;IACb,YAAY,EAAE,oBAAoB,CAAA;IAClC,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,QAsB/D"}
1
+ {"version":3,"file":"use_mark_latest_message_read.d.ts","sourceRoot":"","sources":["../../src/hooks/use_mark_latest_message_read.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE/D,UAAU,KAAK;IACb,YAAY,EAAE,oBAAoB,CAAA;IAClC,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,QAsB/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"use_mark_latest_message_read.js","sourceRoot":"","sources":["../../src/hooks/use_mark_latest_message_read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AAOtE,MAAM,UAAU,wBAAwB,CAAC,EAAE,YAAY,EAAS;IAC9D,MAAM,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC,CAAA;IACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAA;IAC/D,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACjE,CAAC,QAAQ,CAAC,CACX,CAAA;IACD,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAA;IAC5C,MAAM,mBAAmB,GAAG,YAAY,CAAC,mBAAmB,IAAI,CAAC,CAAA;IAEjE,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,mBAAmB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACjG,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAA;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,IAAI,CAAC,cAAc;YAAE,OAAM;QAExC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAA;QAExB,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvB,2EAA2E;IAC7E,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAA;AACxE,CAAC","sourcesContent":["import { debounce } from 'lodash'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { ConversationResource, MessageResource } from '../types'\nimport { useAppState } from './use_app_state'\nimport { useConversationsMarkRead } from './use_conversations_actions'\n\ninterface Props {\n conversation: ConversationResource\n messages: MessageResource[]\n}\n\nexport function useMarkLatestMessageRead({ conversation }: Props) {\n const firedOnce = useRef<boolean>(false)\n const { markRead } = useConversationsMarkRead({ conversation })\n const debouncedMarkRead = useMemo(\n () => debounce(markRead, 1000, { leading: true, trailing: true }),\n [markRead]\n )\n const unreadCount = conversation.unreadCount\n const unreadReactionCount = conversation.unreadReactionCount || 0\n\n const shouldMarkRead = Boolean(unreadCount >= 1 || unreadReactionCount > 0 || !firedOnce.current)\n const appState = useAppState()\n const isActive = appState === 'active'\n\n useEffect(() => {\n if (!isActive || !shouldMarkRead) return\n\n firedOnce.current = true\n\n debouncedMarkRead(true)\n // keeping unreadReactionCount in the dependency array to watch for changes\n }, [debouncedMarkRead, isActive, shouldMarkRead, unreadReactionCount])\n}\n"]}
1
+ {"version":3,"file":"use_mark_latest_message_read.js","sourceRoot":"","sources":["../../src/hooks/use_mark_latest_message_read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AAQtE,MAAM,UAAU,wBAAwB,CAAC,EAAE,YAAY,EAAS;IAC9D,MAAM,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC,CAAA;IACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAA;IAC/D,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACjE,CAAC,QAAQ,CAAC,CACX,CAAA;IACD,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAA;IAC5C,MAAM,mBAAmB,GAAG,YAAY,CAAC,mBAAmB,IAAI,CAAC,CAAA;IAEjE,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,mBAAmB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACjG,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAA;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,IAAI,CAAC,cAAc;YAAE,OAAM;QAExC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAA;QAExB,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvB,2EAA2E;IAC7E,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAA;AACxE,CAAC","sourcesContent":["import { debounce } from 'lodash'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { useAppState } from './use_app_state'\nimport { useConversationsMarkRead } from './use_conversations_actions'\nimport { ConversationResource, MessageResource } from '@/types'\n\ninterface Props {\n conversation: ConversationResource\n messages: MessageResource[]\n}\n\nexport function useMarkLatestMessageRead({ conversation }: Props) {\n const firedOnce = useRef<boolean>(false)\n const { markRead } = useConversationsMarkRead({ conversation })\n const debouncedMarkRead = useMemo(\n () => debounce(markRead, 1000, { leading: true, trailing: true }),\n [markRead]\n )\n const unreadCount = conversation.unreadCount\n const unreadReactionCount = conversation.unreadReactionCount || 0\n\n const shouldMarkRead = Boolean(unreadCount >= 1 || unreadReactionCount > 0 || !firedOnce.current)\n const appState = useAppState()\n const isActive = appState === 'active'\n\n useEffect(() => {\n if (!isActive || !shouldMarkRead) return\n\n firedOnce.current = true\n\n debouncedMarkRead(true)\n // keeping unreadReactionCount in the dependency array to watch for changes\n }, [debouncedMarkRead, isActive, shouldMarkRead, unreadReactionCount])\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { ApiResource, MessageResource } from '../types';
2
- import { DenormalizedAttachmentResourceForCreate } from '../types/resources/denormalized_attachment_resource_for_create';
1
+ import { ApiResource, MessageResource } from '@/types';
2
+ import { DenormalizedAttachmentResourceForCreate } from '@/types/resources/denormalized_attachment_resource_for_create';
3
3
  interface Props {
4
4
  conversationId: number;
5
5
  message?: MessageResource;
@@ -1 +1 @@
1
- {"version":3,"file":"use_message_create_or_update.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_create_or_update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAE,uCAAuC,EAAE,MAAM,gEAAgE,CAAA;AAexH,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK;UAqD5E,MAAM;kBACE,uCAAuC,EAAE;;;GAgF5D"}
1
+ {"version":3,"file":"use_message_create_or_update.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_create_or_update.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACrE,OAAO,EAAE,uCAAuC,EAAE,MAAM,+DAA+D,CAAA;AAavH,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK;UAqD5E,MAAM;kBACE,uCAAuC,EAAE;;;GAgF5D"}
@@ -1,13 +1,13 @@
1
1
  import { useMutation } from '@tanstack/react-query';
2
- import { chatQueryClient } from '../contexts/api_provider';
3
- import { deleteRecordInPagesData, Haptic, updateOrCreateRecordInPagesData, updateRecordInPagesData, } from '../utils';
4
- import { isNewMessage, mergeMessageUpdate } from '../utils/cache/messages_cache';
5
- import { optimisticallyCreateMessage } from '../utils/cache/optimistically_create_message';
6
- import { optimisticallyUpdateMessage } from '../utils/cache/optimistically_update_message';
7
- import { startMessageCreationTracking } from '../utils/performance_tracking';
8
- import { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/get_messages';
9
2
  import { useApiClient } from './use_api_client';
10
3
  import { useCurrentPerson } from './use_current_person';
4
+ import { chatQueryClient } from '@/contexts/api_provider';
5
+ import { deleteRecordInPagesData, Haptic, updateOrCreateRecordInPagesData, updateRecordInPagesData, } from '@/utils';
6
+ import { isNewMessage, mergeMessageUpdate } from '@/utils/cache/messages_cache';
7
+ import { optimisticallyCreateMessage } from '@/utils/cache/optimistically_create_message';
8
+ import { optimisticallyUpdateMessage } from '@/utils/cache/optimistically_update_message';
9
+ import { startMessageCreationTracking } from '@/utils/performance_tracking';
10
+ import { getMessagesQueryKey, getMessagesRequestArgs } from '@/utils/request/get_messages';
11
11
  export function useMessageCreateOrUpdate({ conversationId, message, replyRootId }) {
12
12
  const messageId = message?.id || null;
13
13
  const isEditing = !isNewMessage(message);
@@ -1 +1 @@
1
- {"version":3,"file":"use_message_create_or_update.js","sourceRoot":"","sources":["../../src/hooks/use_message_create_or_update.ts"],"names":[],"mappings":"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","sourcesContent":["import { InfiniteData, useMutation } from '@tanstack/react-query'\nimport { chatQueryClient } from '../contexts/api_provider'\nimport { ApiCollection, ApiResource, MessageResource } from '../types'\nimport { DenormalizedAttachmentResourceForCreate } from '../types/resources/denormalized_attachment_resource_for_create'\nimport {\n deleteRecordInPagesData,\n Haptic,\n updateOrCreateRecordInPagesData,\n updateRecordInPagesData,\n} from '../utils'\nimport { isNewMessage, mergeMessageUpdate } from '../utils/cache/messages_cache'\nimport { optimisticallyCreateMessage } from '../utils/cache/optimistically_create_message'\nimport { optimisticallyUpdateMessage } from '../utils/cache/optimistically_update_message'\nimport { startMessageCreationTracking } from '../utils/performance_tracking'\nimport { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\nimport { useCurrentPerson } from './use_current_person'\n\ninterface Props {\n conversationId: number\n message?: MessageResource\n replyRootId?: string | null\n}\n\nexport function useMessageCreateOrUpdate({ conversationId, message, replyRootId }: Props) {\n const messageId = message?.id || null\n const isEditing = !isNewMessage(message)\n const apiClient = useApiClient()\n const currentPerson = useCurrentPerson()\n\n const mutation = useMutation({\n mutationFn: ({\n text,\n attachments,\n }: {\n text: string\n attachments?: DenormalizedAttachmentResourceForCreate[]\n }) => {\n const requestParams = getMessagesRequestArgs({ conversation_id: conversationId })\n const fieldsWithValueJoined = Object.fromEntries(\n Object.entries(requestParams.data.fields).map(([k, v]) => [k, v.join(',')])\n )\n let attributes: any = {\n text,\n ...(attachments ? { attachments } : {}),\n ...(!isEditing && replyRootId ? { reply_root: { id: replyRootId } } : {}),\n }\n if (!isEditing) {\n const idempotentKey = insecureUUID()\n attributes.idempotent_key = idempotentKey\n startMessageCreationTracking(idempotentKey)\n }\n const data = {\n ...requestParams.data,\n data: {\n type: 'Message',\n attributes,\n },\n fields: fieldsWithValueJoined,\n }\n\n if (isEditing) {\n return apiClient.chat.patch<ApiResource<MessageResource>>({\n url: `/me/conversations/${conversationId}/messages/${messageId}`,\n data,\n })\n } else {\n return apiClient.chat.post<ApiResource<MessageResource>>({\n url: `/me/conversations/${conversationId}/messages`,\n data,\n })\n }\n },\n onMutate: async ({\n text,\n attachments,\n }: {\n text: string\n attachments?: DenormalizedAttachmentResourceForCreate[]\n }) => {\n if (message && isEditing) {\n const optimisticMessage = optimisticallyUpdateMessage({\n conversationId,\n message,\n text,\n replyRootId,\n })\n\n return { message: optimisticMessage }\n }\n\n const optimisticMessage = optimisticallyCreateMessage({\n conversationId,\n message,\n text,\n attachments,\n currentPerson,\n replyRootId,\n })\n\n return { message: optimisticMessage }\n },\n onError: (error, variables, context) => {\n const { message: optimisticMessage } = context || {}\n Haptic.notificationError()\n\n // Add error to the optimistic message from the cache on error\n if (optimisticMessage) {\n const queryKey = getMessagesQueryKey({\n conversation_id: conversationId,\n reply_root_id: replyRootId,\n })\n chatQueryClient.setQueryData(\n queryKey,\n (data: InfiniteData<ApiCollection<MessageResource>> | undefined) =>\n updateRecordInPagesData({\n data,\n record: optimisticMessage,\n processRecord: (_next, prev) => ({\n ...prev,\n error: error.message || 'Failed to send message',\n pending: false, // Mark as no longer pending\n }),\n })\n )\n }\n },\n onSuccess: (result: ApiResource<MessageResource>, variables, context) => {\n const { message: optimisticMessage } = context || {}\n const updatedMessage = result.data\n type QueryData = InfiniteData<ApiCollection<MessageResource>>\n const queryKey = getMessagesQueryKey({\n conversation_id: conversationId,\n reply_root_id: replyRootId,\n })\n\n // First remove the optimistic message if it exists\n if (optimisticMessage) {\n chatQueryClient.setQueryData<QueryData>(queryKey, data =>\n deleteRecordInPagesData({\n data,\n record: optimisticMessage,\n })\n )\n }\n\n // Then add the real message\n chatQueryClient.setQueryData<QueryData>(queryKey, data =>\n updateOrCreateRecordInPagesData({\n data,\n record: updatedMessage,\n processRecord: (record, current) => mergeMessageUpdate(record, current),\n })\n )\n },\n })\n\n return mutation\n}\n\n/**\n * Generate a random UUID (v4) for idempotent keys.\n * Uses Math.random, which is not cryptographically secure.\n * An actual crypto library requires native dependencies.\n * This is OK for now since idempotent keys are not security-sensitive\n * or need to be guaranteed unique.\n * They are short lived and we use it in combination with the message's creator_id so\n * their impact is scoped only the current user.\n */\nfunction insecureUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx'\n .replace(/x/g, () => Math.floor(Math.random() * 16).toString(16))\n .replace(/N/g, () => (Math.floor(Math.random() * 4) + 8).toString(16))\n}\n"]}
1
+ {"version":3,"file":"use_message_create_or_update.js","sourceRoot":"","sources":["../../src/hooks/use_message_create_or_update.ts"],"names":[],"mappings":"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","sourcesContent":["import { InfiniteData, useMutation } from '@tanstack/react-query'\nimport { useApiClient } from './use_api_client'\nimport { useCurrentPerson } from './use_current_person'\nimport { chatQueryClient } from '@/contexts/api_provider'\nimport { ApiCollection, ApiResource, MessageResource } from '@/types'\nimport { DenormalizedAttachmentResourceForCreate } from '@/types/resources/denormalized_attachment_resource_for_create'\nimport {\n deleteRecordInPagesData,\n Haptic,\n updateOrCreateRecordInPagesData,\n updateRecordInPagesData,\n} from '@/utils'\nimport { isNewMessage, mergeMessageUpdate } from '@/utils/cache/messages_cache'\nimport { optimisticallyCreateMessage } from '@/utils/cache/optimistically_create_message'\nimport { optimisticallyUpdateMessage } from '@/utils/cache/optimistically_update_message'\nimport { startMessageCreationTracking } from '@/utils/performance_tracking'\nimport { getMessagesQueryKey, getMessagesRequestArgs } from '@/utils/request/get_messages'\n\ninterface Props {\n conversationId: number\n message?: MessageResource\n replyRootId?: string | null\n}\n\nexport function useMessageCreateOrUpdate({ conversationId, message, replyRootId }: Props) {\n const messageId = message?.id || null\n const isEditing = !isNewMessage(message)\n const apiClient = useApiClient()\n const currentPerson = useCurrentPerson()\n\n const mutation = useMutation({\n mutationFn: ({\n text,\n attachments,\n }: {\n text: string\n attachments?: DenormalizedAttachmentResourceForCreate[]\n }) => {\n const requestParams = getMessagesRequestArgs({ conversation_id: conversationId })\n const fieldsWithValueJoined = Object.fromEntries(\n Object.entries(requestParams.data.fields).map(([k, v]) => [k, v.join(',')])\n )\n let attributes: any = {\n text,\n ...(attachments ? { attachments } : {}),\n ...(!isEditing && replyRootId ? { reply_root: { id: replyRootId } } : {}),\n }\n if (!isEditing) {\n const idempotentKey = insecureUUID()\n attributes.idempotent_key = idempotentKey\n startMessageCreationTracking(idempotentKey)\n }\n const data = {\n ...requestParams.data,\n data: {\n type: 'Message',\n attributes,\n },\n fields: fieldsWithValueJoined,\n }\n\n if (isEditing) {\n return apiClient.chat.patch<ApiResource<MessageResource>>({\n url: `/me/conversations/${conversationId}/messages/${messageId}`,\n data,\n })\n } else {\n return apiClient.chat.post<ApiResource<MessageResource>>({\n url: `/me/conversations/${conversationId}/messages`,\n data,\n })\n }\n },\n onMutate: async ({\n text,\n attachments,\n }: {\n text: string\n attachments?: DenormalizedAttachmentResourceForCreate[]\n }) => {\n if (message && isEditing) {\n const optimisticMessage = optimisticallyUpdateMessage({\n conversationId,\n message,\n text,\n replyRootId,\n })\n\n return { message: optimisticMessage }\n }\n\n const optimisticMessage = optimisticallyCreateMessage({\n conversationId,\n message,\n text,\n attachments,\n currentPerson,\n replyRootId,\n })\n\n return { message: optimisticMessage }\n },\n onError: (error, variables, context) => {\n const { message: optimisticMessage } = context || {}\n Haptic.notificationError()\n\n // Add error to the optimistic message from the cache on error\n if (optimisticMessage) {\n const queryKey = getMessagesQueryKey({\n conversation_id: conversationId,\n reply_root_id: replyRootId,\n })\n chatQueryClient.setQueryData(\n queryKey,\n (data: InfiniteData<ApiCollection<MessageResource>> | undefined) =>\n updateRecordInPagesData({\n data,\n record: optimisticMessage,\n processRecord: (_next, prev) => ({\n ...prev,\n error: error.message || 'Failed to send message',\n pending: false, // Mark as no longer pending\n }),\n })\n )\n }\n },\n onSuccess: (result: ApiResource<MessageResource>, variables, context) => {\n const { message: optimisticMessage } = context || {}\n const updatedMessage = result.data\n type QueryData = InfiniteData<ApiCollection<MessageResource>>\n const queryKey = getMessagesQueryKey({\n conversation_id: conversationId,\n reply_root_id: replyRootId,\n })\n\n // First remove the optimistic message if it exists\n if (optimisticMessage) {\n chatQueryClient.setQueryData<QueryData>(queryKey, data =>\n deleteRecordInPagesData({\n data,\n record: optimisticMessage,\n })\n )\n }\n\n // Then add the real message\n chatQueryClient.setQueryData<QueryData>(queryKey, data =>\n updateOrCreateRecordInPagesData({\n data,\n record: updatedMessage,\n processRecord: (record, current) => mergeMessageUpdate(record, current),\n })\n )\n },\n })\n\n return mutation\n}\n\n/**\n * Generate a random UUID (v4) for idempotent keys.\n * Uses Math.random, which is not cryptographically secure.\n * An actual crypto library requires native dependencies.\n * This is OK for now since idempotent keys are not security-sensitive\n * or need to be guaranteed unique.\n * They are short lived and we use it in combination with the message's creator_id so\n * their impact is scoped only the current user.\n */\nfunction insecureUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx'\n .replace(/x/g, () => Math.floor(Math.random() * 16).toString(16))\n .replace(/N/g, () => (Math.floor(Math.random() * 4) + 8).toString(16))\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { FileAttachment } from '../types/resources/denormalized_attachment_resource_for_create';
1
+ import type { FileAttachment } from '@/types/resources/denormalized_attachment_resource_for_create';
2
2
  interface MessageDraft {
3
3
  text: string;
4
4
  attachments: FileAttachment[];
@@ -1 +1 @@
1
- {"version":3,"file":"use_message_draft.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_draft.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gEAAgE,CAAA;AAGpG,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;CACpB;AAQD,wBAAgB,eAAe;;sBAsDpB,MAAM,eAAe,cAAc,EAAE;;EAkD/C"}
1
+ {"version":3,"file":"use_message_draft.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_draft.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAA;AAEnG,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;CACpB;AAQD,wBAAgB,eAAe;;sBAsDpB,MAAM,eAAe,cAAc,EAAE;;EAkD/C"}
@@ -1,6 +1,6 @@
1
1
  import { useCallback, useEffect, useRef, useState } from 'react';
2
- import { useConversationContext } from '../contexts/conversation_context';
3
2
  import { useAsyncStorage } from './use_async_storage';
3
+ import { useConversationContext } from '@/contexts/conversation_context';
4
4
  const DRAFT_STORAGE_KEY = 'chat_message_drafts';
5
5
  const DRAFT_EXPIRY_HOURS = 720; // 30 days
6
6
  const DRAFT_EXPIRY_MS = DRAFT_EXPIRY_HOURS * 60 * 60 * 1000;
@@ -1 +1 @@
1
- {"version":3,"file":"use_message_draft.js","sourceRoot":"","sources":["../../src/hooks/use_message_draft.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAQrD,MAAM,iBAAiB,GAAG,qBAAqB,CAAA;AAC/C,MAAM,kBAAkB,GAAG,GAAG,CAAA,CAAC,UAAU;AACzC,MAAM,eAAe,GAAG,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAC3D,MAAM,uBAAuB,GAAG,EAAE,CAAA,CAAC,SAAS;AAC5C,MAAM,oBAAoB,GAAG,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAErE,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,cAAc,EAAE,sBAAsB,EAAE,GAAG,sBAAsB,EAAE,CAAA;IAC3E,MAAM,eAAe,GAAG,sBAAsB;QAC5C,CAAC,CAAC,GAAG,cAAc,YAAY,sBAAsB,EAAE;QACvD,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,eAAe,CAC/C,iBAAiB,EACjB,EAAE,CACH,CAAA;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAsB,GAAG,EAAE;QAC3D,MAAM,WAAW,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,IAAI,CAAA;QAEtD,6BAA6B;QAC7B,IAAI,WAAW,EAAE,WAAW,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;gBACnE,IAAI,CAAC,UAAU,CAAC,UAAU;oBAAE,OAAO,KAAK,CAAA;gBACxC,OAAO,GAAG,GAAG,UAAU,CAAC,UAAU,GAAG,oBAAoB,CAAA;YAC3D,CAAC,CAAC,CAAA;YAEF,OAAO;gBACL,GAAG,WAAW;gBACd,WAAW,EAAE,gBAAgB;aAC9B,CAAA;QACH,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,OAAO;YAAE,OAAM;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,WAAW,GAAiC,EAAE,CAAA;QAEpD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE;YACpD,IAAI,SAAS,EAAE,WAAW,IAAI,GAAG,GAAG,SAAS,CAAC,WAAW,GAAG,eAAe,EAAE,CAAC;gBAC5E,WAAW,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;YAC7B,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,gDAAgD;QAChD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;YACtE,YAAY,CAAC,WAAW,CAAC,CAAA;QAC3B,CAAC;QAED,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;IAC7B,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IAE7B,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,IAAY,EAAE,WAA6B,EAAE,EAAE;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;QACnE,MAAM,aAAa,GAAG,EAAE,GAAG,SAAS,EAAE,CAAA;QAEtC,IAAI,UAAU,EAAE,CAAC;YACf,6EAA6E;YAC7E,MAAM,qBAAqB,GAAG,WAAW;iBACtC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;iBACjD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACX,GAAG,GAAG;gBACN,IAAI,EAAE;oBACJ,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG;oBACjB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;oBACnB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;oBACnB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;oBACnB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;oBACrB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM;iBACxB;aACF,CAAC,CAAC,CAAA;YAEL,MAAM,QAAQ,GAAiB;gBAC7B,IAAI;gBACJ,WAAW,EAAE,qBAAqB;gBAClC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;aACxB,CAAA;YAED,aAAa,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAA;YACzC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACpB,CAAC;aAAM,CAAC;YACN,OAAO,aAAa,CAAC,eAAe,CAAC,CAAA;YACrC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChB,CAAC;QAED,YAAY,CAAC,aAAa,CAAC,CAAA;IAC7B,CAAC,EACD,CAAC,eAAe,EAAE,SAAS,EAAE,YAAY,CAAC,CAC3C,CAAA;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,MAAM,aAAa,GAAG,EAAE,GAAG,SAAS,EAAE,CAAA;QACtC,OAAO,aAAa,CAAC,eAAe,CAAC,CAAA;QACrC,YAAY,CAAC,aAAa,CAAC,CAAA;QAC3B,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IAE9C,OAAO;QACL,KAAK;QACL,SAAS;QACT,UAAU;KACX,CAAA;AACH,CAAC","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\nimport { useConversationContext } from '../contexts/conversation_context'\nimport type { FileAttachment } from '../types/resources/denormalized_attachment_resource_for_create'\nimport { useAsyncStorage } from './use_async_storage'\n\ninterface MessageDraft {\n text: string\n attachments: FileAttachment[]\n lastUpdated: number\n}\n\nconst DRAFT_STORAGE_KEY = 'chat_message_drafts'\nconst DRAFT_EXPIRY_HOURS = 720 // 30 days\nconst DRAFT_EXPIRY_MS = DRAFT_EXPIRY_HOURS * 60 * 60 * 1000\nconst ATTACHMENT_EXPIRY_HOURS = 48 // 2 days\nconst ATTACHMENT_EXPIRY_MS = ATTACHMENT_EXPIRY_HOURS * 60 * 60 * 1000\n\nexport function useMessageDraft() {\n const { conversationId, currentPageReplyRootId } = useConversationContext()\n const conversationKey = currentPageReplyRootId\n ? `${conversationId}/threads/${currentPageReplyRootId}`\n : String(conversationId)\n const [allDrafts, setAllDrafts] = useAsyncStorage<Record<string, MessageDraft>>(\n DRAFT_STORAGE_KEY,\n {}\n )\n\n const [draft, setDraft] = useState<MessageDraft | null>(() => {\n const storedDraft = allDrafts[conversationKey] || null\n\n // Filter expired attachments\n if (storedDraft?.attachments) {\n const now = Date.now()\n const validAttachments = storedDraft.attachments.filter(attachment => {\n if (!attachment.uploadedAt) return false\n return now - attachment.uploadedAt < ATTACHMENT_EXPIRY_MS\n })\n\n return {\n ...storedDraft,\n attachments: validAttachments,\n }\n }\n\n return storedDraft\n })\n\n // Clean up expired drafts only once on mount - React 18 recommended pattern\n const hasCleanedUp = useRef(false)\n\n useEffect(() => {\n if (hasCleanedUp.current) return\n\n const now = Date.now()\n const validDrafts: Record<string, MessageDraft> = {}\n\n Object.entries(allDrafts).forEach(([id, draftData]) => {\n if (draftData?.lastUpdated && now - draftData.lastUpdated < DRAFT_EXPIRY_MS) {\n validDrafts[id] = draftData\n }\n })\n\n // If we filtered out any drafts, update storage\n if (Object.keys(validDrafts).length !== Object.keys(allDrafts).length) {\n setAllDrafts(validDrafts)\n }\n\n hasCleanedUp.current = true\n }, [allDrafts, setAllDrafts])\n\n const saveDraft = useCallback(\n (text: string, attachments: FileAttachment[]) => {\n const hasContent = text.trim().length > 0 || attachments.length > 0\n const updatedDrafts = { ...allDrafts }\n\n if (hasContent) {\n // Convert attachments to serializable format (similar to web implementation)\n const normalizedAttachments = attachments\n .filter(att => att.id && att.status === 'success')\n .map(att => ({\n ...att,\n file: {\n uri: att.file.uri,\n name: att.file.name,\n type: att.file.type,\n size: att.file.size,\n width: att.file.width,\n height: att.file.height,\n },\n }))\n\n const newDraft: MessageDraft = {\n text,\n attachments: normalizedAttachments,\n lastUpdated: Date.now(),\n }\n\n updatedDrafts[conversationKey] = newDraft\n setDraft(newDraft)\n } else {\n delete updatedDrafts[conversationKey]\n setDraft(null)\n }\n\n setAllDrafts(updatedDrafts)\n },\n [conversationKey, allDrafts, setAllDrafts]\n )\n\n const clearDraft = useCallback(() => {\n const updatedDrafts = { ...allDrafts }\n delete updatedDrafts[conversationKey]\n setAllDrafts(updatedDrafts)\n setDraft(null)\n }, [conversationKey, allDrafts, setAllDrafts])\n\n return {\n draft,\n saveDraft,\n clearDraft,\n }\n}\n"]}
1
+ {"version":3,"file":"use_message_draft.js","sourceRoot":"","sources":["../../src/hooks/use_message_draft.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\nimport { useAsyncStorage } from './use_async_storage'\nimport { useConversationContext } from '@/contexts/conversation_context'\nimport type { FileAttachment } from '@/types/resources/denormalized_attachment_resource_for_create'\n\ninterface MessageDraft {\n text: string\n attachments: FileAttachment[]\n lastUpdated: number\n}\n\nconst DRAFT_STORAGE_KEY = 'chat_message_drafts'\nconst DRAFT_EXPIRY_HOURS = 720 // 30 days\nconst DRAFT_EXPIRY_MS = DRAFT_EXPIRY_HOURS * 60 * 60 * 1000\nconst ATTACHMENT_EXPIRY_HOURS = 48 // 2 days\nconst ATTACHMENT_EXPIRY_MS = ATTACHMENT_EXPIRY_HOURS * 60 * 60 * 1000\n\nexport function useMessageDraft() {\n const { conversationId, currentPageReplyRootId } = useConversationContext()\n const conversationKey = currentPageReplyRootId\n ? `${conversationId}/threads/${currentPageReplyRootId}`\n : String(conversationId)\n const [allDrafts, setAllDrafts] = useAsyncStorage<Record<string, MessageDraft>>(\n DRAFT_STORAGE_KEY,\n {}\n )\n\n const [draft, setDraft] = useState<MessageDraft | null>(() => {\n const storedDraft = allDrafts[conversationKey] || null\n\n // Filter expired attachments\n if (storedDraft?.attachments) {\n const now = Date.now()\n const validAttachments = storedDraft.attachments.filter(attachment => {\n if (!attachment.uploadedAt) return false\n return now - attachment.uploadedAt < ATTACHMENT_EXPIRY_MS\n })\n\n return {\n ...storedDraft,\n attachments: validAttachments,\n }\n }\n\n return storedDraft\n })\n\n // Clean up expired drafts only once on mount - React 18 recommended pattern\n const hasCleanedUp = useRef(false)\n\n useEffect(() => {\n if (hasCleanedUp.current) return\n\n const now = Date.now()\n const validDrafts: Record<string, MessageDraft> = {}\n\n Object.entries(allDrafts).forEach(([id, draftData]) => {\n if (draftData?.lastUpdated && now - draftData.lastUpdated < DRAFT_EXPIRY_MS) {\n validDrafts[id] = draftData\n }\n })\n\n // If we filtered out any drafts, update storage\n if (Object.keys(validDrafts).length !== Object.keys(allDrafts).length) {\n setAllDrafts(validDrafts)\n }\n\n hasCleanedUp.current = true\n }, [allDrafts, setAllDrafts])\n\n const saveDraft = useCallback(\n (text: string, attachments: FileAttachment[]) => {\n const hasContent = text.trim().length > 0 || attachments.length > 0\n const updatedDrafts = { ...allDrafts }\n\n if (hasContent) {\n // Convert attachments to serializable format (similar to web implementation)\n const normalizedAttachments = attachments\n .filter(att => att.id && att.status === 'success')\n .map(att => ({\n ...att,\n file: {\n uri: att.file.uri,\n name: att.file.name,\n type: att.file.type,\n size: att.file.size,\n width: att.file.width,\n height: att.file.height,\n },\n }))\n\n const newDraft: MessageDraft = {\n text,\n attachments: normalizedAttachments,\n lastUpdated: Date.now(),\n }\n\n updatedDrafts[conversationKey] = newDraft\n setDraft(newDraft)\n } else {\n delete updatedDrafts[conversationKey]\n setDraft(null)\n }\n\n setAllDrafts(updatedDrafts)\n },\n [conversationKey, allDrafts, setAllDrafts]\n )\n\n const clearDraft = useCallback(() => {\n const updatedDrafts = { ...allDrafts }\n delete updatedDrafts[conversationKey]\n setAllDrafts(updatedDrafts)\n setDraft(null)\n }, [conversationKey, allDrafts, setAllDrafts])\n\n return {\n draft,\n saveDraft,\n clearDraft,\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { InfiniteData } from '@tanstack/react-query';
2
- import { ApiCollection, ApiResource, MessageResource } from '../types';
3
- import { ReactionCountResource } from '../types/resources/reaction';
2
+ import { ApiCollection, ApiResource, MessageResource } from '@/types';
3
+ import { ReactionCountResource } from '@/types/resources/reaction';
4
4
  type UseMessageReactionToggleProps = {
5
5
  conversation_id: number;
6
6
  message: MessageResource;
@@ -1 +1 @@
1
- {"version":3,"file":"use_message_reaction_toggle.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_reaction_toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+B,MAAM,uBAAuB,CAAA;AAGjF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAQnE,KAAK,6BAA6B,GAAG;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,eAAe,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACrC,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,KAAK,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAA;AAE7D,wBAAgB,wBAAwB,CAAC,EACvC,eAAe,EACf,OAAO,EACP,SAAS,GACV,EAAE,6BAA6B;;;;;EA0E/B"}
1
+ {"version":3,"file":"use_message_reaction_toggle.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_reaction_toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+B,MAAM,uBAAuB,CAAA;AAIjF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAOlE,KAAK,6BAA6B,GAAG;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,eAAe,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACrC,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,KAAK,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAA;AAE7D,wBAAgB,wBAAwB,CAAC,EACvC,eAAe,EACf,OAAO,EACP,SAAS,GACV,EAAE,6BAA6B;;;;;EA0E/B"}
@@ -1,9 +1,9 @@
1
1
  import { useMutation, useQueryClient } from '@tanstack/react-query';
2
2
  import { useCallback } from 'react';
3
3
  import { Alert } from 'react-native';
4
- import { updateRecordInPagesData, REACTION_EMOJIS } from '../utils';
5
- import { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/get_messages';
6
4
  import { useApiClient } from './use_api_client';
5
+ import { updateRecordInPagesData, REACTION_EMOJIS } from '@/utils';
6
+ import { getMessagesQueryKey, getMessagesRequestArgs } from '@/utils/request/get_messages';
7
7
  const REACT = 1;
8
8
  const UNREACT = -1;
9
9
  export function useMessageReactionToggle({ conversation_id, message, onSuccess, }) {
@@ -1 +1 @@
1
- {"version":3,"file":"use_message_reaction_toggle.js","sourceRoot":"","sources":["../../src/hooks/use_message_reaction_toggle.ts"],"names":[],"mappings":"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","sourcesContent":["import { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { Alert } from 'react-native'\nimport { ApiCollection, ApiResource, MessageResource } from '../types'\nimport { ReactionCountResource } from '../types/resources/reaction'\nimport { updateRecordInPagesData, REACTION_EMOJIS } from '../utils'\nimport { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\n\nconst REACT = 1\nconst UNREACT = -1\n\ntype UseMessageReactionToggleProps = {\n conversation_id: number\n message: MessageResource\n onSuccess?: () => void\n}\n\ntype ToggleReactionParams = {\n value: ReactionCountResource['value']\n mine: boolean\n}\n\ntype QueryData = InfiniteData<ApiCollection<MessageResource>>\n\nexport function useMessageReactionToggle({\n conversation_id,\n message,\n onSuccess,\n}: UseMessageReactionToggleProps) {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const queryKey = getMessagesQueryKey({ conversation_id })\n const message_id = message.id\n\n const toggleReaction = useCallback(\n ({ value, mine }: ToggleReactionParams) => {\n const requestParams = getMessagesRequestArgs({ conversation_id })\n\n // If already reacted, unreact; otherwise react\n const endpoint = mine ? 'unreact' : 'react'\n const url = `/me/conversations/${conversation_id}/messages/${message_id}/${endpoint}`\n const fieldsWithValueJoined = Object.fromEntries(\n Object.entries(requestParams.data.fields).map(([k, v]) => [k, v.join(',')])\n )\n\n return apiClient.chat.post<ApiResource<MessageResource>>({\n url,\n data: {\n ...requestParams.data,\n data: {\n type: 'Message',\n attributes: { value: value },\n },\n fields: fieldsWithValueJoined,\n },\n })\n },\n [apiClient, conversation_id, message_id]\n )\n\n const { mutate: handleReactionToggle, isPending } = useMutation({\n mutationFn: toggleReaction,\n onMutate: variables => {\n const previousData = queryClient.getQueryData<QueryData>(queryKey)\n if (previousData) {\n queryClient.setQueryData<QueryData>(queryKey, data =>\n optimisticUpdate({\n message,\n data,\n value: variables.value,\n mine: variables.mine,\n })\n )\n }\n return { previousData }\n },\n onSuccess: result => {\n const updatedMessage = result.data\n\n queryClient.setQueryData<QueryData>(queryKey, data =>\n updateRecordInPagesData({\n data,\n record: updatedMessage,\n })\n )\n\n if (onSuccess) {\n onSuccess()\n }\n },\n onError: (_data, _variables, context) => {\n if (context?.previousData) {\n queryClient.setQueryData<QueryData>(queryKey, context.previousData)\n }\n Alert.alert('Oops', 'We were unable to react to this message. Please try again.')\n },\n })\n\n return {\n handleReactionToggle,\n isPending,\n }\n}\n\nconst optimisticUpdate = ({\n message,\n data,\n value,\n mine,\n}: {\n message: MessageResource\n data: QueryData | undefined\n value: ReactionCountResource['value']\n mine: boolean\n}) => {\n if (!data) return data\n\n const hasExistingReaction = message.reactionCounts.some(r => r.value === value)\n\n let updatedReactionCounts: ReactionCountResource[]\n\n if (hasExistingReaction) {\n const delta = mine ? UNREACT : REACT\n updatedReactionCounts = updateCount(message.reactionCounts, value, delta)\n } else {\n updatedReactionCounts = createCount(message.reactionCounts, value, message.id)\n }\n\n const updatedMessage: MessageResource = {\n ...message,\n reactionCounts: updatedReactionCounts,\n }\n\n return updateRecordInPagesData({\n data,\n record: updatedMessage,\n })\n}\n\nconst updateCount = (\n reactionCounts: ReactionCountResource[],\n value: ReactionCountResource['value'],\n delta: typeof REACT | typeof UNREACT\n): ReactionCountResource[] => {\n return reactionCounts.map(reaction => {\n if (reaction.value === value) {\n return {\n ...reaction,\n mine: delta > 0 ? 1 : 0,\n count: reaction.count + delta,\n } as ReactionCountResource\n }\n return reaction\n })\n}\n\nconst createCount = (\n reactionCounts: ReactionCountResource[],\n value: ReactionCountResource['value'],\n messageId: string\n): ReactionCountResource[] => {\n const reactionOrder = Object.keys(REACTION_EMOJIS) as ReactionCountResource['value'][]\n const newReactionIndex = reactionOrder.indexOf(value)\n const insertIndex = reactionCounts.findIndex(\n r => reactionOrder.indexOf(r.value) > newReactionIndex\n )\n\n const newReaction: ReactionCountResource = {\n type: 'ReactionCount',\n id: `${messageId}/${value}`,\n value,\n count: 1,\n mine: 1,\n messageId,\n authorIds: [],\n }\n\n return insertIndex === -1\n ? [...reactionCounts, newReaction]\n : [...reactionCounts.slice(0, insertIndex), newReaction, ...reactionCounts.slice(insertIndex)]\n}\n"]}
1
+ {"version":3,"file":"use_message_reaction_toggle.js","sourceRoot":"","sources":["../../src/hooks/use_message_reaction_toggle.ts"],"names":[],"mappings":"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","sourcesContent":["import { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { Alert } from 'react-native'\nimport { useApiClient } from './use_api_client'\nimport { ApiCollection, ApiResource, MessageResource } from '@/types'\nimport { ReactionCountResource } from '@/types/resources/reaction'\nimport { updateRecordInPagesData, REACTION_EMOJIS } from '@/utils'\nimport { getMessagesQueryKey, getMessagesRequestArgs } from '@/utils/request/get_messages'\n\nconst REACT = 1\nconst UNREACT = -1\n\ntype UseMessageReactionToggleProps = {\n conversation_id: number\n message: MessageResource\n onSuccess?: () => void\n}\n\ntype ToggleReactionParams = {\n value: ReactionCountResource['value']\n mine: boolean\n}\n\ntype QueryData = InfiniteData<ApiCollection<MessageResource>>\n\nexport function useMessageReactionToggle({\n conversation_id,\n message,\n onSuccess,\n}: UseMessageReactionToggleProps) {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const queryKey = getMessagesQueryKey({ conversation_id })\n const message_id = message.id\n\n const toggleReaction = useCallback(\n ({ value, mine }: ToggleReactionParams) => {\n const requestParams = getMessagesRequestArgs({ conversation_id })\n\n // If already reacted, unreact; otherwise react\n const endpoint = mine ? 'unreact' : 'react'\n const url = `/me/conversations/${conversation_id}/messages/${message_id}/${endpoint}`\n const fieldsWithValueJoined = Object.fromEntries(\n Object.entries(requestParams.data.fields).map(([k, v]) => [k, v.join(',')])\n )\n\n return apiClient.chat.post<ApiResource<MessageResource>>({\n url,\n data: {\n ...requestParams.data,\n data: {\n type: 'Message',\n attributes: { value: value },\n },\n fields: fieldsWithValueJoined,\n },\n })\n },\n [apiClient, conversation_id, message_id]\n )\n\n const { mutate: handleReactionToggle, isPending } = useMutation({\n mutationFn: toggleReaction,\n onMutate: variables => {\n const previousData = queryClient.getQueryData<QueryData>(queryKey)\n if (previousData) {\n queryClient.setQueryData<QueryData>(queryKey, data =>\n optimisticUpdate({\n message,\n data,\n value: variables.value,\n mine: variables.mine,\n })\n )\n }\n return { previousData }\n },\n onSuccess: result => {\n const updatedMessage = result.data\n\n queryClient.setQueryData<QueryData>(queryKey, data =>\n updateRecordInPagesData({\n data,\n record: updatedMessage,\n })\n )\n\n if (onSuccess) {\n onSuccess()\n }\n },\n onError: (_data, _variables, context) => {\n if (context?.previousData) {\n queryClient.setQueryData<QueryData>(queryKey, context.previousData)\n }\n Alert.alert('Oops', 'We were unable to react to this message. Please try again.')\n },\n })\n\n return {\n handleReactionToggle,\n isPending,\n }\n}\n\nconst optimisticUpdate = ({\n message,\n data,\n value,\n mine,\n}: {\n message: MessageResource\n data: QueryData | undefined\n value: ReactionCountResource['value']\n mine: boolean\n}) => {\n if (!data) return data\n\n const hasExistingReaction = message.reactionCounts.some(r => r.value === value)\n\n let updatedReactionCounts: ReactionCountResource[]\n\n if (hasExistingReaction) {\n const delta = mine ? UNREACT : REACT\n updatedReactionCounts = updateCount(message.reactionCounts, value, delta)\n } else {\n updatedReactionCounts = createCount(message.reactionCounts, value, message.id)\n }\n\n const updatedMessage: MessageResource = {\n ...message,\n reactionCounts: updatedReactionCounts,\n }\n\n return updateRecordInPagesData({\n data,\n record: updatedMessage,\n })\n}\n\nconst updateCount = (\n reactionCounts: ReactionCountResource[],\n value: ReactionCountResource['value'],\n delta: typeof REACT | typeof UNREACT\n): ReactionCountResource[] => {\n return reactionCounts.map(reaction => {\n if (reaction.value === value) {\n return {\n ...reaction,\n mine: delta > 0 ? 1 : 0,\n count: reaction.count + delta,\n } as ReactionCountResource\n }\n return reaction\n })\n}\n\nconst createCount = (\n reactionCounts: ReactionCountResource[],\n value: ReactionCountResource['value'],\n messageId: string\n): ReactionCountResource[] => {\n const reactionOrder = Object.keys(REACTION_EMOJIS) as ReactionCountResource['value'][]\n const newReactionIndex = reactionOrder.indexOf(value)\n const insertIndex = reactionCounts.findIndex(\n r => reactionOrder.indexOf(r.value) > newReactionIndex\n )\n\n const newReaction: ReactionCountResource = {\n type: 'ReactionCount',\n id: `${messageId}/${value}`,\n value,\n count: 1,\n mine: 1,\n messageId,\n authorIds: [],\n }\n\n return insertIndex === -1\n ? [...reactionCounts, newReaction]\n : [...reactionCounts.slice(0, insertIndex), newReaction, ...reactionCounts.slice(insertIndex)]\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"use_my_gender.js","sourceRoot":"","sources":["../../src/hooks/use_my_gender.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAY/D,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,CAAA;IACxC,MAAM,gBAAgB,GAAG,cAAc,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,CAAA;IAExF,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,SAAS,CAAmB;QACvD,GAAG,EAAE,KAAK;QACV,OAAO,EAAE,gBAAgB;QACzB,IAAI,EAAE;YACJ,OAAO,EAAE,CAAC,QAAQ,CAAC;YACnB,MAAM,EAAE;gBACN,MAAM,EAAE,CAAC,QAAQ,CAAC;gBAClB,MAAM,EAAE,CAAC,OAAO,CAAC;aAClB;SACF;QACD,GAAG,EAAE,QAAQ;KACd,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAA;IAC3B,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,IAAI,IAAI,CAAA;IACzC,MAAM,QAAQ,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEtD,OAAO;QACL,gBAAgB;QAChB,WAAW;QACX,QAAQ;QACR,UAAU;KACX,CAAA;AACH,CAAC","sourcesContent":["import { ResourceObject } from '../types/api_primitives'\nimport { useApiGet } from './use_api'\nimport { availableFeatures, useFeatures } from './use_features'\n\ninterface GenderResource extends ResourceObject {\n type: 'Gender'\n value: string\n}\n\ninterface PersonWithGender extends ResourceObject {\n type: 'Person'\n gender: GenderResource | undefined\n}\n\nexport function useMyGender() {\n const { featureEnabled } = useFeatures()\n const isFeatureEnabled = featureEnabled(availableFeatures.gender_specific_conversations)\n\n const { data, isFetching } = useApiGet<PersonWithGender>({\n url: '/me',\n enabled: isFeatureEnabled,\n data: {\n include: ['gender'],\n fields: {\n Person: ['gender'],\n Gender: ['value'],\n },\n },\n app: 'people',\n })\n\n const gender = data?.gender\n const genderValue = gender?.value ?? null\n const genderId = gender?.id ? String(gender.id) : null\n\n return {\n isFeatureEnabled,\n genderValue,\n genderId,\n isFetching,\n }\n}\n"]}
1
+ {"version":3,"file":"use_my_gender.js","sourceRoot":"","sources":["../../src/hooks/use_my_gender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAa/D,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,CAAA;IACxC,MAAM,gBAAgB,GAAG,cAAc,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,CAAA;IAExF,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,SAAS,CAAmB;QACvD,GAAG,EAAE,KAAK;QACV,OAAO,EAAE,gBAAgB;QACzB,IAAI,EAAE;YACJ,OAAO,EAAE,CAAC,QAAQ,CAAC;YACnB,MAAM,EAAE;gBACN,MAAM,EAAE,CAAC,QAAQ,CAAC;gBAClB,MAAM,EAAE,CAAC,OAAO,CAAC;aAClB;SACF;QACD,GAAG,EAAE,QAAQ;KACd,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAA;IAC3B,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,IAAI,IAAI,CAAA;IACzC,MAAM,QAAQ,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEtD,OAAO;QACL,gBAAgB;QAChB,WAAW;QACX,QAAQ;QACR,UAAU;KACX,CAAA;AACH,CAAC","sourcesContent":["import { useApiGet } from './use_api'\nimport { availableFeatures, useFeatures } from './use_features'\nimport { ResourceObject } from '@/types/api_primitives'\n\ninterface GenderResource extends ResourceObject {\n type: 'Gender'\n value: string\n}\n\ninterface PersonWithGender extends ResourceObject {\n type: 'Person'\n gender: GenderResource | undefined\n}\n\nexport function useMyGender() {\n const { featureEnabled } = useFeatures()\n const isFeatureEnabled = featureEnabled(availableFeatures.gender_specific_conversations)\n\n const { data, isFetching } = useApiGet<PersonWithGender>({\n url: '/me',\n enabled: isFeatureEnabled,\n data: {\n include: ['gender'],\n fields: {\n Person: ['gender'],\n Gender: ['value'],\n },\n },\n app: 'people',\n })\n\n const gender = data?.gender\n const genderValue = gender?.value ?? null\n const genderId = gender?.id ? String(gender.id) : null\n\n return {\n isFeatureEnabled,\n genderValue,\n genderId,\n isFetching,\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { OrganizationResource } from '../types';
2
1
  import { App } from './use_api_client';
2
+ import { OrganizationResource } from '@/types';
3
3
  export declare const organizationRequestArgs: {
4
4
  url: string;
5
5
  data: {
@@ -10,18 +10,18 @@ export declare const organizationRequestArgs: {
10
10
  app: App;
11
11
  };
12
12
  export declare function useOrganization(): {
13
- error: import("../types").FailedResponse | null;
14
- status: "success" | "error";
13
+ error: import("@/types").FailedResponse | null;
15
14
  isError: boolean;
16
15
  isPending: false;
17
16
  isLoading: false;
18
17
  isLoadingError: false;
19
18
  isRefetchError: boolean;
20
19
  isSuccess: boolean;
20
+ status: "error" | "success";
21
21
  dataUpdatedAt: number;
22
22
  errorUpdatedAt: number;
23
23
  failureCount: number;
24
- failureReason: import("../types").FailedResponse | null;
24
+ failureReason: import("@/types").FailedResponse | null;
25
25
  errorUpdateCount: number;
26
26
  isFetched: boolean;
27
27
  isFetchedAfterMount: boolean;
@@ -30,7 +30,7 @@ export declare function useOrganization(): {
30
30
  isPaused: boolean;
31
31
  isRefetching: boolean;
32
32
  isStale: boolean;
33
- refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("../types").ApiResource<OrganizationResource>, import("../types").FailedResponse>>;
33
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@/types").ApiResource<OrganizationResource>, import("@/types").FailedResponse>>;
34
34
  fetchStatus: import("@tanstack/query-core").FetchStatus;
35
35
  data: OrganizationResource;
36
36
  links: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"use_organization.d.ts","sourceRoot":"","sources":["../../src/hooks/use_organization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,eAAO,MAAM,uBAAuB;;;;;;;SAOnB,GAAG;CACnB,CAAA;AAED,wBAAgB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;EAE9B"}
1
+ {"version":3,"file":"use_organization.d.ts","sourceRoot":"","sources":["../../src/hooks/use_organization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAE9C,eAAO,MAAM,uBAAuB;;;;;;;SAOnB,GAAG;CACnB,CAAA;AAED,wBAAgB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;EAE9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"use_organization.js","sourceRoot":"","sources":["../../src/hooks/use_organization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,GAAG,EAAE,GAAG;IACR,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,YAAY,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,sBAAsB,CAAC;SAChE;KACF;IACD,GAAG,EAAE,MAAa;CACnB,CAAA;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,cAAc,CAAuB,uBAAuB,CAAC,CAAA;AACtE,CAAC","sourcesContent":["import { OrganizationResource } from '../types'\nimport { App } from './use_api_client'\nimport { useSuspenseGet } from './use_suspense_api'\n\nexport const organizationRequestArgs = {\n url: '/',\n data: {\n fields: {\n Organization: ['contact_email', 'name', 'contact_phone_number'],\n },\n },\n app: 'chat' as App,\n}\n\nexport function useOrganization() {\n return useSuspenseGet<OrganizationResource>(organizationRequestArgs)\n}\n"]}
1
+ {"version":3,"file":"use_organization.js","sourceRoot":"","sources":["../../src/hooks/use_organization.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,GAAG,EAAE,GAAG;IACR,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,YAAY,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,sBAAsB,CAAC;SAChE;KACF;IACD,GAAG,EAAE,MAAa;CACnB,CAAA;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,cAAc,CAAuB,uBAAuB,CAAC,CAAA;AACtE,CAAC","sourcesContent":["import { App } from './use_api_client'\nimport { useSuspenseGet } from './use_suspense_api'\nimport { OrganizationResource } from '@/types'\n\nexport const organizationRequestArgs = {\n url: '/',\n data: {\n fields: {\n Organization: ['contact_email', 'name', 'contact_phone_number'],\n },\n },\n app: 'chat' as App,\n}\n\nexport function useOrganization() {\n return useSuspenseGet<OrganizationResource>(organizationRequestArgs)\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { ResourceObject } from '../types/api_primitives';
1
+ import { ResourceObject } from '@/types/api_primitives';
2
2
  type EmailResource = ResourceObject & {
3
3
  type: 'Email';
4
4
  primary: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"use_people_person.d.ts","sourceRoot":"","sources":["../../src/hooks/use_people_person.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,KAAK,aAAa,GAAG,cAAc,GAAG;IACpC,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,UAAU,YAAa,SAAQ,cAAc;IAC3C,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,aAAa,EAAE,CAAA;CACxB;AAED,eAAO,MAAM,eAAe,YAAa;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,6BAetD,CAAA"}
1
+ {"version":3,"file":"use_people_person.d.ts","sourceRoot":"","sources":["../../src/hooks/use_people_person.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,KAAK,aAAa,GAAG,cAAc,GAAG;IACpC,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,UAAU,YAAa,SAAQ,cAAc;IAC3C,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,aAAa,EAAE,CAAA;CACxB;AAED,eAAO,MAAM,eAAe,YAAa;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,6BAetD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"use_people_person.js","sourceRoot":"","sources":["../../src/hooks/use_people_person.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAgBrC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAuB,EAAE,EAAE;IACzD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,CAAe;QACrD,GAAG,EAAE,WAAW,MAAM,EAAE,EAAE,EAAE;QAC5B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5B,IAAI,EAAE;YACJ,OAAO,EAAE,CAAC,QAAQ,CAAC;YACnB,MAAM,EAAE;gBACN,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;gBAC1C,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;aAC9B;SACF;QACD,GAAG,EAAE,QAAQ;KACd,CAAC,CAAA;IAEF,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA","sourcesContent":["import { ResourceObject } from '../types/api_primitives'\nimport { useApiGet } from './use_api'\n\ntype EmailResource = ResourceObject & {\n type: 'Email'\n primary: boolean\n address: string\n}\n\ninterface PeoplePerson extends ResourceObject {\n type: 'Person'\n id: number\n name: string\n avatar: string\n emails: EmailResource[]\n}\n\nexport const usePeoplePerson = (person?: { id: number }) => {\n const { data: peoplePerson } = useApiGet<PeoplePerson>({\n url: `/people/${person?.id}`,\n enabled: Boolean(person?.id),\n data: {\n include: ['emails'],\n fields: {\n Person: ['id', 'name', 'avatar', 'emails'],\n Email: ['address', 'primary'],\n },\n },\n app: 'people',\n })\n\n return peoplePerson\n}\n"]}
1
+ {"version":3,"file":"use_people_person.js","sourceRoot":"","sources":["../../src/hooks/use_people_person.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAiBrC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAuB,EAAE,EAAE;IACzD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,CAAe;QACrD,GAAG,EAAE,WAAW,MAAM,EAAE,EAAE,EAAE;QAC5B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5B,IAAI,EAAE;YACJ,OAAO,EAAE,CAAC,QAAQ,CAAC;YACnB,MAAM,EAAE;gBACN,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;gBAC1C,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;aAC9B;SACF;QACD,GAAG,EAAE,QAAQ;KACd,CAAC,CAAA;IAEF,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA","sourcesContent":["import { useApiGet } from './use_api'\nimport { ResourceObject } from '@/types/api_primitives'\n\ntype EmailResource = ResourceObject & {\n type: 'Email'\n primary: boolean\n address: string\n}\n\ninterface PeoplePerson extends ResourceObject {\n type: 'Person'\n id: number\n name: string\n avatar: string\n emails: EmailResource[]\n}\n\nexport const usePeoplePerson = (person?: { id: number }) => {\n const { data: peoplePerson } = useApiGet<PeoplePerson>({\n url: `/people/${person?.id}`,\n enabled: Boolean(person?.id),\n data: {\n include: ['emails'],\n fields: {\n Person: ['id', 'name', 'avatar', 'emails'],\n Email: ['address', 'primary'],\n },\n },\n app: 'people',\n })\n\n return peoplePerson\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { AnalyticsMetadataResource } from '../types/resources/analytics_metadata';
1
+ import { AnalyticsMetadataResource } from '@/types/resources/analytics_metadata';
2
2
  export interface EventMetadata {
3
3
  [key: string]: string | number | boolean | null | undefined;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use_product_analytics.d.ts","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAIjF,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAC5D;AAgFD,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,QAW1F;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE;IACnD,iBAAiB,CAAC,EAAE,yBAAyB,CAAA;CAC9C,GACwE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/F"}
1
+ {"version":3,"file":"use_product_analytics.d.ts","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AAIhF,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAC5D;AAgFD,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,QAW1F;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE;IACnD,iBAAiB,CAAC,EAAE,yBAAyB,CAAA;CAC9C,GACwE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/F"}
@@ -1,7 +1,7 @@
1
1
  import { useCallback, useEffect, useMemo, useRef } from 'react';
2
- import { useChatContext } from '../contexts/chat_context';
3
- import { keysToSnakeCase } from '../utils/client/utils';
4
- import { SHA256, enc } from '../utils/sha_256';
2
+ import { useChatContext } from '@/contexts/chat_context';
3
+ import { keysToSnakeCase } from '@/utils/client/utils';
4
+ import { SHA256, enc } from '@/utils/sha_256';
5
5
  function contentSha256(payload) {
6
6
  return SHA256(payload).toString(enc.Hex);
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use_product_analytics.js","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useChatContext } from '../contexts/chat_context'\nimport { ProductAnalyticsConfig } from '../types/product_analytics'\nimport { AnalyticsMetadataResource } from '../types/resources/analytics_metadata'\nimport { keysToSnakeCase } from '../utils/client/utils'\nimport { SHA256, enc } from '../utils/sha_256'\n\nexport interface EventMetadata {\n [key: string]: string | number | boolean | null | undefined\n}\n\ninterface AnalyticsEvent {\n name: string\n meta: EventMetadata\n}\n\nfunction contentSha256(payload: string): string {\n return SHA256(payload).toString(enc.Hex)\n}\n\nfunction sendEvents(events: AnalyticsEvent[], config: ProductAnalyticsConfig): Promise<Response[]> {\n // Split into chunks of 10 and make parallel requests\n const chunks: AnalyticsEvent[][] = []\n for (let i = 0; i < events.length; i += 10) {\n chunks.push(events.slice(i, i + 10))\n }\n\n return Promise.all(\n chunks.map(async chunk => {\n const payload = JSON.stringify({ events: chunk })\n return fetch(config.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n 'X-Authorization': `Bearer ${config.token}`,\n 'X-Amz-Content-Sha256': contentSha256(payload),\n },\n body: payload,\n })\n })\n )\n}\n\nconst useProductAnalytics = () => {\n const { productAnalyticsConfig } = useChatContext()\n\n const snakeCasedBaseMeta = useMemo(\n () => keysToSnakeCase(productAnalyticsConfig?.metadata || {}),\n [productAnalyticsConfig?.metadata]\n )\n\n const publishEvent = useCallback(\n (name: string, meta: EventMetadata = {}): Promise<Response[]> => {\n if (!productAnalyticsConfig) {\n if (__DEV__) {\n console.warn('Product Analytics not available')\n }\n return Promise.resolve([])\n }\n\n const mergedMeta = { ...snakeCasedBaseMeta, ...meta } as EventMetadata\n\n return sendEvents([{ name, meta: mergedMeta }], productAnalyticsConfig)\n },\n [productAnalyticsConfig, snakeCasedBaseMeta]\n )\n\n const publishEvents = useCallback(\n (events: Array<{ name: string; meta?: EventMetadata }>): Promise<Response[]> => {\n if (!productAnalyticsConfig) {\n if (__DEV__) {\n console.warn('Product Analytics not available')\n }\n return Promise.resolve([])\n }\n\n const eventsWithMeta = events.map(event => ({\n name: event.name,\n meta: { ...snakeCasedBaseMeta, ...event.meta } as EventMetadata,\n }))\n\n return sendEvents(eventsWithMeta, productAnalyticsConfig)\n },\n [productAnalyticsConfig, snakeCasedBaseMeta]\n )\n\n return { publishEvent, publishEvents }\n}\n\nexport function usePublishProductAnalyticsEvent(eventName: string, meta: EventMetadata = {}) {\n const { publishEvent } = useProductAnalytics()\n const hasPublishedEventRef = useRef(false)\n\n useEffect(() => {\n if (hasPublishedEventRef.current) return\n\n hasPublishedEventRef.current = true\n\n publishEvent(eventName, meta)\n }, [eventName, meta, publishEvent])\n}\n\nexport function normalizeAnalyticsMetadata(resource: {\n analyticsMetadata?: AnalyticsMetadataResource\n}) {\n return keysToSnakeCase(resource?.analyticsMetadata?.metadata || {}) as Record<string, unknown>\n}\n"]}
1
+ {"version":3,"file":"use_product_analytics.js","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useChatContext } from '@/contexts/chat_context'\nimport { ProductAnalyticsConfig } from '@/types/product_analytics'\nimport { AnalyticsMetadataResource } from '@/types/resources/analytics_metadata'\nimport { keysToSnakeCase } from '@/utils/client/utils'\nimport { SHA256, enc } from '@/utils/sha_256'\n\nexport interface EventMetadata {\n [key: string]: string | number | boolean | null | undefined\n}\n\ninterface AnalyticsEvent {\n name: string\n meta: EventMetadata\n}\n\nfunction contentSha256(payload: string): string {\n return SHA256(payload).toString(enc.Hex)\n}\n\nfunction sendEvents(events: AnalyticsEvent[], config: ProductAnalyticsConfig): Promise<Response[]> {\n // Split into chunks of 10 and make parallel requests\n const chunks: AnalyticsEvent[][] = []\n for (let i = 0; i < events.length; i += 10) {\n chunks.push(events.slice(i, i + 10))\n }\n\n return Promise.all(\n chunks.map(async chunk => {\n const payload = JSON.stringify({ events: chunk })\n return fetch(config.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n 'X-Authorization': `Bearer ${config.token}`,\n 'X-Amz-Content-Sha256': contentSha256(payload),\n },\n body: payload,\n })\n })\n )\n}\n\nconst useProductAnalytics = () => {\n const { productAnalyticsConfig } = useChatContext()\n\n const snakeCasedBaseMeta = useMemo(\n () => keysToSnakeCase(productAnalyticsConfig?.metadata || {}),\n [productAnalyticsConfig?.metadata]\n )\n\n const publishEvent = useCallback(\n (name: string, meta: EventMetadata = {}): Promise<Response[]> => {\n if (!productAnalyticsConfig) {\n if (__DEV__) {\n console.warn('Product Analytics not available')\n }\n return Promise.resolve([])\n }\n\n const mergedMeta = { ...snakeCasedBaseMeta, ...meta } as EventMetadata\n\n return sendEvents([{ name, meta: mergedMeta }], productAnalyticsConfig)\n },\n [productAnalyticsConfig, snakeCasedBaseMeta]\n )\n\n const publishEvents = useCallback(\n (events: Array<{ name: string; meta?: EventMetadata }>): Promise<Response[]> => {\n if (!productAnalyticsConfig) {\n if (__DEV__) {\n console.warn('Product Analytics not available')\n }\n return Promise.resolve([])\n }\n\n const eventsWithMeta = events.map(event => ({\n name: event.name,\n meta: { ...snakeCasedBaseMeta, ...event.meta } as EventMetadata,\n }))\n\n return sendEvents(eventsWithMeta, productAnalyticsConfig)\n },\n [productAnalyticsConfig, snakeCasedBaseMeta]\n )\n\n return { publishEvent, publishEvents }\n}\n\nexport function usePublishProductAnalyticsEvent(eventName: string, meta: EventMetadata = {}) {\n const { publishEvent } = useProductAnalytics()\n const hasPublishedEventRef = useRef(false)\n\n useEffect(() => {\n if (hasPublishedEventRef.current) return\n\n hasPublishedEventRef.current = true\n\n publishEvent(eventName, meta)\n }, [eventName, meta, publishEvent])\n}\n\nexport function normalizeAnalyticsMetadata(resource: {\n analyticsMetadata?: AnalyticsMetadataResource\n}) {\n return keysToSnakeCase(resource?.analyticsMetadata?.metadata || {}) as Record<string, unknown>\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { AgeQualificationStatus } from '../types';
2
1
  import { useApiGet } from './use_api';
3
2
  import { currentPersonRequestArgs } from './use_current_person';
3
+ import { AgeQualificationStatus } from '@/types';
4
4
  export const useQualifiedByAge = () => {
5
5
  const { data: person, isFetched } = useApiGet(currentPersonRequestArgs);
6
6
  if (!isFetched) {
@@ -1 +1 @@
1
- {"version":3,"file":"use_qualified_by_age.js","sourceRoot":"","sources":["../../src/hooks/use_qualified_by_age.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,UAAU,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAE/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAY,EAAE;IAC7C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAwB,wBAAwB,CAAC,CAAA;IAE9F,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,MAAM,CAAC,sBAAsB,KAAK,sBAAsB,CAAC,SAAS,CAAA;AAC3E,CAAC,CAAA","sourcesContent":["import { AgeQualificationStatus, CurrentPersonResource } from '../types'\nimport { useApiGet } from './use_api'\nimport { currentPersonRequestArgs } from './use_current_person'\n\nexport const useQualifiedByAge = (): boolean => {\n const { data: person, isFetched } = useApiGet<CurrentPersonResource>(currentPersonRequestArgs)\n\n if (!isFetched) {\n return false\n }\n\n if (!person) {\n return false\n }\n\n return person.ageQualificationStatus === AgeQualificationStatus.QUALIFIED\n}\n"]}
1
+ {"version":3,"file":"use_qualified_by_age.js","sourceRoot":"","sources":["../../src/hooks/use_qualified_by_age.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAyB,MAAM,SAAS,CAAA;AAEvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAY,EAAE;IAC7C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAwB,wBAAwB,CAAC,CAAA;IAE9F,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,MAAM,CAAC,sBAAsB,KAAK,sBAAsB,CAAC,SAAS,CAAA;AAC3E,CAAC,CAAA","sourcesContent":["import { useApiGet } from './use_api'\nimport { currentPersonRequestArgs } from './use_current_person'\nimport { AgeQualificationStatus, CurrentPersonResource } from '@/types'\n\nexport const useQualifiedByAge = (): boolean => {\n const { data: person, isFetched } = useApiGet<CurrentPersonResource>(currentPersonRequestArgs)\n\n if (!isFetched) {\n return false\n }\n\n if (!person) {\n return false\n }\n\n return person.ageQualificationStatus === AgeQualificationStatus.QUALIFIED\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { ReadReceiptResource } from '../types/resources/read_receipt';
1
+ import { ReadReceiptResource } from '@/types/resources/read_receipt';
2
2
  export declare function useReadReceipts({ conversation_id, message_id, }: {
3
3
  conversation_id: number;
4
4
  message_id: string;
@@ -6,13 +6,13 @@ export declare function useReadReceipts({ conversation_id, message_id, }: {
6
6
  data: ReadReceiptResource[];
7
7
  totalCount: number;
8
8
  error: Response | null;
9
- status: "success" | "error";
10
9
  isError: boolean;
11
10
  isPending: false;
12
11
  isLoading: false;
13
12
  isLoadingError: false;
14
13
  isRefetchError: boolean;
15
14
  isSuccess: boolean;
15
+ status: "error" | "success";
16
16
  dataUpdatedAt: number;
17
17
  errorUpdatedAt: number;
18
18
  failureCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"use_read_receipts.d.ts","sourceRoot":"","sources":["../../src/hooks/use_read_receipts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAGrE,wBAAgB,eAAe,CAAC,EAC9B,eAAe,EACf,UAAU,GACX,EAAE;IACD,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeA"}
1
+ {"version":3,"file":"use_read_receipts.d.ts","sourceRoot":"","sources":["../../src/hooks/use_read_receipts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAEpE,wBAAgB,eAAe,CAAC,EAC9B,eAAe,EACf,UAAU,GACX,EAAE;IACD,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeA"}
@@ -1 +1 @@
1
- {"version":3,"file":"use_read_receipts.js","sourceRoot":"","sources":["../../src/hooks/use_read_receipts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzD,MAAM,UAAU,eAAe,CAAC,EAC9B,eAAe,EACf,UAAU,GAIX;IACC,OAAO,oBAAoB,CACzB;QACE,GAAG,EAAE,qBAAqB,eAAe,aAAa,UAAU,gBAAgB;QAChF,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;aAChC;SACF;KACF,EACD;QACE,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;KACV,CACF,CAAA;AACH,CAAC","sourcesContent":["import { ReadReceiptResource } from '../types/resources/read_receipt'\nimport { useSuspensePaginator } from './use_suspense_api'\n\nexport function useReadReceipts({\n conversation_id,\n message_id,\n}: {\n conversation_id: number\n message_id: string\n}) {\n return useSuspensePaginator<ReadReceiptResource>(\n {\n url: `/me/conversations/${conversation_id}/messages/${message_id}/read_receipts`,\n data: {\n fields: {\n ReadReceipt: ['name', 'avatar'],\n },\n },\n },\n {\n staleTime: 0,\n gcTime: 0,\n }\n )\n}\n"]}
1
+ {"version":3,"file":"use_read_receipts.js","sourceRoot":"","sources":["../../src/hooks/use_read_receipts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAGzD,MAAM,UAAU,eAAe,CAAC,EAC9B,eAAe,EACf,UAAU,GAIX;IACC,OAAO,oBAAoB,CACzB;QACE,GAAG,EAAE,qBAAqB,eAAe,aAAa,UAAU,gBAAgB;QAChF,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;aAChC;SACF;KACF,EACD;QACE,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;KACV,CACF,CAAA;AACH,CAAC","sourcesContent":["import { useSuspensePaginator } from './use_suspense_api'\nimport { ReadReceiptResource } from '@/types/resources/read_receipt'\n\nexport function useReadReceipts({\n conversation_id,\n message_id,\n}: {\n conversation_id: number\n message_id: string\n}) {\n return useSuspensePaginator<ReadReceiptResource>(\n {\n url: `/me/conversations/${conversation_id}/messages/${message_id}/read_receipts`,\n data: {\n fields: {\n ReadReceipt: ['name', 'avatar'],\n },\n },\n },\n {\n staleTime: 0,\n gcTime: 0,\n }\n )\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { MessageReportReason } from '../types/resources/message_report';
1
+ import { MessageReportReason } from '@/types/resources/message_report';
2
2
  export declare const useReportMessage: (conversationId: number, messageId: string) => import("@tanstack/react-query").UseMutationResult<import("..").ApiCollection | import("..").ApiResource, Error, {
3
3
  reason: MessageReportReason;
4
4
  reasonDetail?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"use_report_message.d.ts","sourceRoot":"","sources":["../../src/hooks/use_report_message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAwB,MAAM,mCAAmC,CAAA;AAI7F,eAAO,MAAM,gBAAgB,mBAAoB,MAAM,aAAa,MAAM;YAQ5D,mBAAmB;mBACZ,MAAM;WAsB1B,CAAA"}
1
+ {"version":3,"file":"use_report_message.d.ts","sourceRoot":"","sources":["../../src/hooks/use_report_message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAwB,MAAM,kCAAkC,CAAA;AAG5F,eAAO,MAAM,gBAAgB,mBAAoB,MAAM,aAAa,MAAM;YAQ5D,mBAAmB;mBACZ,MAAM;WAsB1B,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { useMutation } from '@tanstack/react-query';
2
- import { Haptic } from '../utils/native_adapters';
3
2
  import { useApiClient } from './use_api_client';
3
+ import { Haptic } from '@/utils/native_adapters';
4
4
  export const useReportMessage = (conversationId, messageId) => {
5
5
  const apiClient = useApiClient();
6
6
  return useMutation({