@planningcenter/chat-react-native 4.4.0-rc.6 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/build/components/conversation/jump_to_bottom_button.d.ts.map +1 -1
  2. package/build/components/conversation/jump_to_bottom_button.js +42 -40
  3. package/build/components/conversation/jump_to_bottom_button.js.map +1 -1
  4. package/build/components/conversation/message.d.ts +2 -1
  5. package/build/components/conversation/message.d.ts.map +1 -1
  6. package/build/components/conversation/message.js +3 -1
  7. package/build/components/conversation/message.js.map +1 -1
  8. package/build/components/conversation/message_form.d.ts.map +1 -1
  9. package/build/components/conversation/message_form.js +3 -1
  10. package/build/components/conversation/message_form.js.map +1 -1
  11. package/build/components/conversation/message_list.d.ts.map +1 -1
  12. package/build/components/conversation/message_list.js +35 -31
  13. package/build/components/conversation/message_list.js.map +1 -1
  14. package/build/components/conversation/message_reaction.d.ts +2 -1
  15. package/build/components/conversation/message_reaction.d.ts.map +1 -1
  16. package/build/components/conversation/message_reaction.js +67 -60
  17. package/build/components/conversation/message_reaction.js.map +1 -1
  18. package/build/components/conversation/messages_disabled_banners.d.ts +7 -5
  19. package/build/components/conversation/messages_disabled_banners.d.ts.map +1 -1
  20. package/build/components/conversation/messages_disabled_banners.js +15 -14
  21. package/build/components/conversation/messages_disabled_banners.js.map +1 -1
  22. package/build/components/conversation/system_message.d.ts +2 -1
  23. package/build/components/conversation/system_message.d.ts.map +1 -1
  24. package/build/components/conversation/system_message.js +133 -100
  25. package/build/components/conversation/system_message.js.map +1 -1
  26. package/build/components/conversations/archived_results_footer.d.ts +6 -0
  27. package/build/components/conversations/archived_results_footer.d.ts.map +1 -0
  28. package/build/components/conversations/archived_results_footer.js +51 -0
  29. package/build/components/conversations/archived_results_footer.js.map +1 -0
  30. package/build/components/conversations/conversation_actions.d.ts.map +1 -1
  31. package/build/components/conversations/conversation_actions.js +241 -206
  32. package/build/components/conversations/conversation_actions.js.map +1 -1
  33. package/build/components/conversations/conversation_preview.d.ts.map +1 -1
  34. package/build/components/conversations/conversation_preview.js +102 -93
  35. package/build/components/conversations/conversation_preview.js.map +1 -1
  36. package/build/components/conversations/conversations.d.ts.map +1 -1
  37. package/build/components/conversations/conversations.js +66 -41
  38. package/build/components/conversations/conversations.js.map +1 -1
  39. package/build/components/conversations/conversations_blank_state.d.ts.map +1 -1
  40. package/build/components/conversations/conversations_blank_state.js +55 -12
  41. package/build/components/conversations/conversations_blank_state.js.map +1 -1
  42. package/build/components/conversations/filtered_results_footer.d.ts +2 -0
  43. package/build/components/conversations/filtered_results_footer.d.ts.map +1 -0
  44. package/build/components/conversations/filtered_results_footer.js +77 -0
  45. package/build/components/conversations/filtered_results_footer.js.map +1 -0
  46. package/build/components/display/action_button.d.ts.map +1 -1
  47. package/build/components/display/action_button.js +18 -16
  48. package/build/components/display/action_button.js.map +1 -1
  49. package/build/components/display/filter_dropdown.d.ts +14 -0
  50. package/build/components/display/filter_dropdown.d.ts.map +1 -0
  51. package/build/components/display/filter_dropdown.js +193 -0
  52. package/build/components/display/filter_dropdown.js.map +1 -0
  53. package/build/components/display/icon_tile.d.ts +13 -0
  54. package/build/components/display/icon_tile.d.ts.map +1 -0
  55. package/build/components/display/icon_tile.js +149 -0
  56. package/build/components/display/icon_tile.js.map +1 -0
  57. package/build/components/display/index.d.ts +2 -0
  58. package/build/components/display/index.d.ts.map +1 -1
  59. package/build/components/display/index.js +2 -0
  60. package/build/components/display/index.js.map +1 -1
  61. package/build/contexts/api_provider.d.ts.map +1 -1
  62. package/build/contexts/api_provider.js +21 -9
  63. package/build/contexts/api_provider.js.map +1 -1
  64. package/build/contexts/conversations_context.d.ts.map +1 -1
  65. package/build/contexts/conversations_context.js +21 -18
  66. package/build/contexts/conversations_context.js.map +1 -1
  67. package/build/hooks/groups/use_group_members_for_new_conversation.d.ts +196 -16
  68. package/build/hooks/groups/use_group_members_for_new_conversation.d.ts.map +1 -1
  69. package/build/hooks/groups/use_group_members_for_new_conversation.js +72 -58
  70. package/build/hooks/groups/use_group_members_for_new_conversation.js.map +1 -1
  71. package/build/hooks/index.d.ts +3 -0
  72. package/build/hooks/index.d.ts.map +1 -1
  73. package/build/hooks/index.js +3 -0
  74. package/build/hooks/index.js.map +1 -1
  75. package/build/hooks/use_animated_message_background_color.d.ts.map +1 -1
  76. package/build/hooks/use_animated_message_background_color.js +5 -3
  77. package/build/hooks/use_animated_message_background_color.js.map +1 -1
  78. package/build/hooks/use_api.d.ts +3 -2
  79. package/build/hooks/use_api.d.ts.map +1 -1
  80. package/build/hooks/use_api.js.map +1 -1
  81. package/build/hooks/use_can_browse_archived_conversations.d.ts +2 -0
  82. package/build/hooks/use_can_browse_archived_conversations.d.ts.map +1 -0
  83. package/build/hooks/use_can_browse_archived_conversations.js +29 -0
  84. package/build/hooks/use_can_browse_archived_conversations.js.map +1 -0
  85. package/build/hooks/use_clear_conversation_filters.d.ts +2 -0
  86. package/build/hooks/use_clear_conversation_filters.d.ts.map +1 -0
  87. package/build/hooks/use_clear_conversation_filters.js +25 -0
  88. package/build/hooks/use_clear_conversation_filters.js.map +1 -0
  89. package/build/hooks/use_conversation.d.ts +73 -1
  90. package/build/hooks/use_conversation.d.ts.map +1 -1
  91. package/build/hooks/use_conversation.js +130 -3
  92. package/build/hooks/use_conversation.js.map +1 -1
  93. package/build/hooks/use_conversation_messages.d.ts.map +1 -1
  94. package/build/hooks/use_conversation_messages.js +29 -26
  95. package/build/hooks/use_conversation_messages.js.map +1 -1
  96. package/build/hooks/use_current_person.d.ts.map +1 -1
  97. package/build/hooks/use_current_person.js +1 -1
  98. package/build/hooks/use_current_person.js.map +1 -1
  99. package/build/hooks/use_features.d.ts +2 -0
  100. package/build/hooks/use_features.d.ts.map +1 -1
  101. package/build/hooks/use_features.js +2 -0
  102. package/build/hooks/use_features.js.map +1 -1
  103. package/build/hooks/use_filter_dropdown_enabled.d.ts +2 -0
  104. package/build/hooks/use_filter_dropdown_enabled.d.ts.map +1 -0
  105. package/build/hooks/use_filter_dropdown_enabled.js +18 -0
  106. package/build/hooks/use_filter_dropdown_enabled.js.map +1 -0
  107. package/build/hooks/use_jolt.d.ts +1 -0
  108. package/build/hooks/use_jolt.d.ts.map +1 -1
  109. package/build/hooks/use_jolt.js +59 -0
  110. package/build/hooks/use_jolt.js.map +1 -1
  111. package/build/hooks/use_manual_archiving_enabled.d.ts +2 -0
  112. package/build/hooks/use_manual_archiving_enabled.d.ts.map +1 -0
  113. package/build/hooks/use_manual_archiving_enabled.js +18 -0
  114. package/build/hooks/use_manual_archiving_enabled.js.map +1 -0
  115. package/build/hooks/use_mark_latest_message_read.d.ts.map +1 -1
  116. package/build/hooks/use_mark_latest_message_read.js +3 -3
  117. package/build/hooks/use_mark_latest_message_read.js.map +1 -1
  118. package/build/hooks/use_reduce_motion.d.ts +2 -0
  119. package/build/hooks/use_reduce_motion.d.ts.map +1 -0
  120. package/build/hooks/use_reduce_motion.js +28 -0
  121. package/build/hooks/use_reduce_motion.js.map +1 -0
  122. package/build/hooks/use_unarchive_conversation_action.d.ts +7 -0
  123. package/build/hooks/use_unarchive_conversation_action.d.ts.map +1 -0
  124. package/build/hooks/use_unarchive_conversation_action.js +52 -0
  125. package/build/hooks/use_unarchive_conversation_action.js.map +1 -0
  126. package/build/screens/attachment_actions/attachment_actions_screen.d.ts.map +1 -1
  127. package/build/screens/attachment_actions/attachment_actions_screen.js +84 -61
  128. package/build/screens/attachment_actions/attachment_actions_screen.js.map +1 -1
  129. package/build/screens/conversation_details_screen.d.ts.map +1 -1
  130. package/build/screens/conversation_details_screen.js +490 -395
  131. package/build/screens/conversation_details_screen.js.map +1 -1
  132. package/build/screens/conversation_filters/components/conversation_filters.d.ts.map +1 -1
  133. package/build/screens/conversation_filters/components/conversation_filters.js +88 -18
  134. package/build/screens/conversation_filters/components/conversation_filters.js.map +1 -1
  135. package/build/screens/conversation_filters/components/rows.d.ts +9 -0
  136. package/build/screens/conversation_filters/components/rows.d.ts.map +1 -1
  137. package/build/screens/conversation_filters/components/rows.js +93 -1
  138. package/build/screens/conversation_filters/components/rows.js.map +1 -1
  139. package/build/screens/conversation_filters/context/conversation_filter_context.d.ts.map +1 -1
  140. package/build/screens/conversation_filters/context/conversation_filter_context.js +8 -4
  141. package/build/screens/conversation_filters/context/conversation_filter_context.js.map +1 -1
  142. package/build/screens/conversation_filters/filter_types.d.ts +1 -0
  143. package/build/screens/conversation_filters/filter_types.d.ts.map +1 -1
  144. package/build/screens/conversation_filters/filter_types.js +1 -0
  145. package/build/screens/conversation_filters/filter_types.js.map +1 -1
  146. package/build/screens/conversation_filters/screen_props.d.ts +1 -0
  147. package/build/screens/conversation_filters/screen_props.d.ts.map +1 -1
  148. package/build/screens/conversation_filters/screen_props.js.map +1 -1
  149. package/build/screens/conversation_filters_screen.d.ts +1 -0
  150. package/build/screens/conversation_filters_screen.d.ts.map +1 -1
  151. package/build/screens/conversation_filters_screen.js +79 -48
  152. package/build/screens/conversation_filters_screen.js.map +1 -1
  153. package/build/screens/conversation_new/components/groups_form.d.ts.map +1 -1
  154. package/build/screens/conversation_new/components/groups_form.js +37 -34
  155. package/build/screens/conversation_new/components/groups_form.js.map +1 -1
  156. package/build/screens/conversation_screen.d.ts.map +1 -1
  157. package/build/screens/conversation_screen.js +13 -10
  158. package/build/screens/conversation_screen.js.map +1 -1
  159. package/build/screens/conversations/components/filter_dropdown_list_header_component.d.ts +2 -0
  160. package/build/screens/conversations/components/filter_dropdown_list_header_component.d.ts.map +1 -0
  161. package/build/screens/conversations/components/filter_dropdown_list_header_component.js +580 -0
  162. package/build/screens/conversations/components/filter_dropdown_list_header_component.js.map +1 -0
  163. package/build/screens/conversations/components/list_header_component.d.ts.map +1 -1
  164. package/build/screens/conversations/components/list_header_component.js +95 -90
  165. package/build/screens/conversations/components/list_header_component.js.map +1 -1
  166. package/build/screens/conversations/components/search_list_header_component.d.ts.map +1 -1
  167. package/build/screens/conversations/components/search_list_header_component.js +100 -95
  168. package/build/screens/conversations/components/search_list_header_component.js.map +1 -1
  169. package/build/screens/conversations/conversations_screen.d.ts +1 -0
  170. package/build/screens/conversations/conversations_screen.d.ts.map +1 -1
  171. package/build/screens/conversations/conversations_screen.js +15 -2
  172. package/build/screens/conversations/conversations_screen.js.map +1 -1
  173. package/build/screens/design_system_screen.d.ts.map +1 -1
  174. package/build/screens/design_system_screen.js +275 -215
  175. package/build/screens/design_system_screen.js.map +1 -1
  176. package/build/screens/message_actions_screen.d.ts.map +1 -1
  177. package/build/screens/message_actions_screen.js +112 -92
  178. package/build/screens/message_actions_screen.js.map +1 -1
  179. package/build/screens/search/search_screen.d.ts.map +1 -1
  180. package/build/screens/search/search_screen.js +10 -2
  181. package/build/screens/search/search_screen.js.map +1 -1
  182. package/build/screens/send_giphy_screen.d.ts +1 -0
  183. package/build/screens/send_giphy_screen.d.ts.map +1 -1
  184. package/build/screens/send_giphy_screen.js +108 -106
  185. package/build/screens/send_giphy_screen.js.map +1 -1
  186. package/build/screens/team_conversation_screen.js +1 -1
  187. package/build/screens/team_conversation_screen.js.map +1 -1
  188. package/build/types/jolt_events/message_events.d.ts +2 -0
  189. package/build/types/jolt_events/message_events.d.ts.map +1 -1
  190. package/build/types/jolt_events/message_events.js.map +1 -1
  191. package/build/types/resources/conversation.d.ts +2 -2
  192. package/build/types/resources/conversation.d.ts.map +1 -1
  193. package/build/types/resources/conversation.js.map +1 -1
  194. package/build/types/resources/member_ability.d.ts +2 -0
  195. package/build/types/resources/member_ability.d.ts.map +1 -1
  196. package/build/types/resources/member_ability.js.map +1 -1
  197. package/build/types/resources/message.d.ts +2 -0
  198. package/build/types/resources/message.d.ts.map +1 -1
  199. package/build/types/resources/message.js.map +1 -1
  200. package/build/types/resources/person.d.ts +1 -0
  201. package/build/types/resources/person.d.ts.map +1 -1
  202. package/build/types/resources/person.js.map +1 -1
  203. package/build/utils/archived_conversation.d.ts +5 -0
  204. package/build/utils/archived_conversation.d.ts.map +1 -0
  205. package/build/utils/archived_conversation.js +5 -0
  206. package/build/utils/archived_conversation.js.map +1 -0
  207. package/build/utils/date.d.ts +1 -0
  208. package/build/utils/date.d.ts.map +1 -1
  209. package/build/utils/date.js +9 -0
  210. package/build/utils/date.js.map +1 -1
  211. package/build/utils/index.d.ts +1 -0
  212. package/build/utils/index.d.ts.map +1 -1
  213. package/build/utils/index.js +1 -0
  214. package/build/utils/index.js.map +1 -1
  215. package/build/utils/jolt/transform_message_event_data_to_message_resource.d.ts.map +1 -1
  216. package/build/utils/jolt/transform_message_event_data_to_message_resource.js +2 -1
  217. package/build/utils/jolt/transform_message_event_data_to_message_resource.js.map +1 -1
  218. package/build/utils/native_adapters/configuration.d.ts +3 -0
  219. package/build/utils/native_adapters/configuration.d.ts.map +1 -1
  220. package/build/utils/native_adapters/configuration.js +3 -0
  221. package/build/utils/native_adapters/configuration.js.map +1 -1
  222. package/build/utils/native_adapters/index.d.ts +1 -0
  223. package/build/utils/native_adapters/index.d.ts.map +1 -1
  224. package/build/utils/native_adapters/index.js +1 -0
  225. package/build/utils/native_adapters/index.js.map +1 -1
  226. package/build/utils/native_adapters/menu.d.ts +41 -0
  227. package/build/utils/native_adapters/menu.d.ts.map +1 -0
  228. package/build/utils/native_adapters/menu.js +56 -0
  229. package/build/utils/native_adapters/menu.js.map +1 -0
  230. package/build/utils/request/conversation.d.ts +2 -1
  231. package/build/utils/request/conversation.d.ts.map +1 -1
  232. package/build/utils/request/conversation.js +4 -1
  233. package/build/utils/request/conversation.js.map +1 -1
  234. package/build/utils/request/messages_data_options.d.ts.map +1 -1
  235. package/build/utils/request/messages_data_options.js +1 -1
  236. package/build/utils/request/messages_data_options.js.map +1 -1
  237. package/build/utils/system_messages.d.ts +7 -5
  238. package/build/utils/system_messages.d.ts.map +1 -1
  239. package/build/utils/system_messages.js +10 -2
  240. package/build/utils/system_messages.js.map +1 -1
  241. package/build/vendor/font_awesome_pro_solid_icons.d.ts +1 -0
  242. package/build/vendor/font_awesome_pro_solid_icons.d.ts.map +1 -1
  243. package/build/vendor/font_awesome_pro_solid_icons.js +5 -0
  244. package/build/vendor/font_awesome_pro_solid_icons.js.map +1 -1
  245. package/package.json +3 -3
  246. package/src/__tests__/hooks/use_can_browse_archived_conversations.test.tsx +98 -0
  247. package/src/__tests__/hooks/use_filter_dropdown_enabled.test.tsx +42 -0
  248. package/src/__tests__/screens/conversation_filters/components/conversation_filters.test.tsx +132 -0
  249. package/src/__tests__/screens/conversation_filters_screen.test.tsx +76 -0
  250. package/src/__tests__/screens/conversation_new/components/services_form.test.tsx +1 -0
  251. package/src/__tests__/screens/message_actions_screen.test.tsx +65 -2
  252. package/src/__tests__/screens/send_giphy_screen.test.tsx +102 -0
  253. package/src/__tests__/utils/system_messages.ts +19 -32
  254. package/src/components/conversation/__tests__/message_list.test.tsx +68 -2
  255. package/src/components/conversation/__tests__/system_message.test.tsx +106 -0
  256. package/src/components/conversation/jump_to_bottom_button.tsx +4 -3
  257. package/src/components/conversation/message.tsx +3 -0
  258. package/src/components/conversation/message_form.tsx +3 -1
  259. package/src/components/conversation/message_list.tsx +9 -1
  260. package/src/components/conversation/message_reaction.tsx +7 -2
  261. package/src/components/conversation/messages_disabled_banners.tsx +17 -18
  262. package/src/components/conversation/system_message.tsx +44 -16
  263. package/src/components/conversations/__tests__/conversation_actions.test.tsx +67 -0
  264. package/src/components/conversations/__tests__/conversation_preview.test.tsx +105 -0
  265. package/src/components/conversations/__tests__/conversations.test.tsx +93 -0
  266. package/src/components/conversations/__tests__/conversations_blank_state.test.tsx +73 -0
  267. package/src/components/conversations/archived_results_footer.tsx +36 -0
  268. package/src/components/conversations/conversation_actions.tsx +27 -19
  269. package/src/components/conversations/conversation_preview.tsx +39 -10
  270. package/src/components/conversations/conversations.tsx +26 -3
  271. package/src/components/conversations/conversations_blank_state.tsx +21 -0
  272. package/src/components/conversations/filtered_results_footer.tsx +38 -0
  273. package/src/components/display/__tests__/filter_dropdown.test.tsx +114 -0
  274. package/src/components/display/__tests__/icon_tile.test.tsx +16 -0
  275. package/src/components/display/action_button.tsx +4 -3
  276. package/src/components/display/filter_dropdown.tsx +124 -0
  277. package/src/components/display/icon_tile.tsx +67 -0
  278. package/src/components/display/index.ts +2 -0
  279. package/src/contexts/api_provider.tsx +8 -0
  280. package/src/contexts/conversations_context.tsx +2 -1
  281. package/src/hooks/__tests__/use_conversation_archive.test.tsx +152 -0
  282. package/src/hooks/__tests__/use_conversation_jolt_events.test.tsx +74 -0
  283. package/src/hooks/__tests__/use_conversation_messages.test.tsx +10 -2
  284. package/src/hooks/__tests__/use_jolt.test.tsx +100 -1
  285. package/src/hooks/__tests__/use_mark_latest_message_read.test.tsx +21 -7
  286. package/src/hooks/__tests__/use_reduce_motion.test.tsx +61 -0
  287. package/src/hooks/__tests__/use_unarchive_conversation_action.test.tsx +67 -0
  288. package/src/hooks/groups/use_group_members_for_new_conversation.ts +21 -16
  289. package/src/hooks/index.ts +3 -0
  290. package/src/hooks/use_animated_message_background_color.ts +6 -3
  291. package/src/hooks/use_api.ts +9 -2
  292. package/src/hooks/use_can_browse_archived_conversations.ts +17 -0
  293. package/src/hooks/use_clear_conversation_filters.ts +16 -0
  294. package/src/hooks/use_conversation.ts +44 -3
  295. package/src/hooks/use_conversation_messages.ts +7 -5
  296. package/src/hooks/use_current_person.ts +1 -0
  297. package/src/hooks/use_features.ts +2 -0
  298. package/src/hooks/use_filter_dropdown_enabled.ts +10 -0
  299. package/src/hooks/use_jolt.ts +57 -1
  300. package/src/hooks/use_manual_archiving_enabled.ts +10 -0
  301. package/src/hooks/use_mark_latest_message_read.ts +4 -3
  302. package/src/hooks/use_reduce_motion.ts +19 -0
  303. package/src/hooks/use_unarchive_conversation_action.ts +24 -0
  304. package/src/screens/__tests__/conversation_details_screen.test.tsx +305 -0
  305. package/src/screens/attachment_actions/__tests__/attachment_actions_screen.test.tsx +72 -0
  306. package/src/screens/attachment_actions/attachment_actions_screen.tsx +3 -1
  307. package/src/screens/conversation_details_screen.tsx +80 -16
  308. package/src/screens/conversation_filters/__tests__/conversation_filters.test.tsx +101 -0
  309. package/src/screens/conversation_filters/components/conversation_filters.tsx +40 -7
  310. package/src/screens/conversation_filters/components/rows.tsx +29 -1
  311. package/src/screens/conversation_filters/context/conversation_filter_context.tsx +4 -0
  312. package/src/screens/conversation_filters/filter_types.ts +1 -0
  313. package/src/screens/conversation_filters/screen_props.ts +1 -0
  314. package/src/screens/conversation_filters_screen.tsx +25 -5
  315. package/src/screens/conversation_new/components/groups_form.tsx +1 -0
  316. package/src/screens/conversation_screen.tsx +4 -2
  317. package/src/screens/conversations/__tests__/conversations_screen.test.tsx +52 -0
  318. package/src/screens/conversations/components/__tests__/filter_dropdown_list_header_component.test.tsx +259 -0
  319. package/src/screens/conversations/components/__tests__/list_header_component.test.tsx +21 -4
  320. package/src/screens/conversations/components/filter_dropdown_list_header_component.tsx +286 -0
  321. package/src/screens/conversations/components/list_header_component.tsx +17 -12
  322. package/src/screens/conversations/components/search_list_header_component.tsx +17 -12
  323. package/src/screens/conversations/conversations_screen.tsx +15 -2
  324. package/src/screens/design_system_screen.tsx +26 -0
  325. package/src/screens/message_actions_screen.tsx +29 -20
  326. package/src/screens/search/__tests__/search_screen.test.tsx +13 -1
  327. package/src/screens/search/search_screen.tsx +8 -2
  328. package/src/screens/send_giphy_screen.tsx +6 -3
  329. package/src/screens/team_conversation_screen.tsx +1 -1
  330. package/src/types/jolt_events/message_events.ts +2 -0
  331. package/src/types/resources/conversation.ts +2 -2
  332. package/src/types/resources/member_ability.ts +2 -0
  333. package/src/types/resources/message.ts +3 -0
  334. package/src/types/resources/person.ts +1 -0
  335. package/src/utils/__tests__/conversation.test.ts +1 -0
  336. package/src/utils/__tests__/date.test.ts +23 -0
  337. package/src/utils/__tests__/group_messages.test.ts +1 -0
  338. package/src/utils/archived_conversation.ts +13 -0
  339. package/src/utils/date.ts +8 -0
  340. package/src/utils/index.ts +1 -0
  341. package/src/utils/jolt/__tests__/transform_message_event_data_to_message_resource.test.ts +35 -0
  342. package/src/utils/jolt/transform_message_event_data_to_message_resource.ts +1 -0
  343. package/src/utils/native_adapters/__tests__/menu.test.tsx +46 -0
  344. package/src/utils/native_adapters/configuration.ts +5 -0
  345. package/src/utils/native_adapters/index.ts +1 -0
  346. package/src/utils/native_adapters/menu.tsx +70 -0
  347. package/src/utils/request/conversation.ts +4 -0
  348. package/src/utils/request/messages_data_options.ts +1 -0
  349. package/src/utils/system_messages.ts +19 -10
  350. package/src/vendor/font_awesome_pro_solid_icons.ts +12 -0
@@ -148,40 +148,40 @@ export const useConversationMessages = (t0, opts) => {
148
148
  }
149
149
  const messages = t9;
150
150
  let t10;
151
- let t11;
152
- if ($[26] !== infiniteData || $[27] !== queryClient || $[28] !== queryKey) {
153
- t10 = () => {
154
- const settled = markLiveIfCaughtUp(infiniteData);
155
- if (settled !== infiniteData) {
156
- queryClient.setQueryData(queryKey, settled);
157
- }
151
+ if ($[26] !== anchor || $[27] !== conversation_id || $[28] !== reply_root_id) {
152
+ t10 = {
153
+ conversation_id,
154
+ reply_root_id,
155
+ anchor
158
156
  };
159
- t11 = [infiniteData, queryClient, queryKey];
160
- $[26] = infiniteData;
161
- $[27] = queryClient;
162
- $[28] = queryKey;
157
+ $[26] = anchor;
158
+ $[27] = conversation_id;
159
+ $[28] = reply_root_id;
163
160
  $[29] = t10;
164
- $[30] = t11;
165
161
  } else {
166
162
  t10 = $[29];
167
- t11 = $[30];
168
163
  }
169
- useEffect(t10, t11);
164
+ useEnsureWindowOpenedAtAnchor(t10);
165
+ let t11;
170
166
  let t12;
171
- if ($[31] !== anchor || $[32] !== conversation_id || $[33] !== reply_root_id) {
172
- t12 = {
173
- conversation_id,
174
- reply_root_id,
175
- anchor
167
+ if ($[30] !== infiniteData || $[31] !== queryClient || $[32] !== queryKey) {
168
+ t11 = () => {
169
+ const settled = markLiveIfCaughtUp(infiniteData);
170
+ if (settled !== infiniteData) {
171
+ queryClient.setQueryData(queryKey, settled);
172
+ }
176
173
  };
177
- $[31] = anchor;
178
- $[32] = conversation_id;
179
- $[33] = reply_root_id;
174
+ t12 = [infiniteData, queryClient, queryKey];
175
+ $[30] = infiniteData;
176
+ $[31] = queryClient;
177
+ $[32] = queryKey;
178
+ $[33] = t11;
180
179
  $[34] = t12;
181
180
  } else {
181
+ t11 = $[33];
182
182
  t12 = $[34];
183
183
  }
184
- useEnsureWindowHoldsAnchor(t12);
184
+ useEffect(t11, t12);
185
185
  let t13;
186
186
  if ($[35] !== behind || $[36] !== fetchLiveWindow || $[37] !== fetchNewer || $[38] !== fetchOlder || $[39] !== hasNextPage || $[40] !== isRefetching || $[41] !== messages || $[42] !== queryKey || $[43] !== refetch) {
187
187
  t13 = {
@@ -210,7 +210,7 @@ export const useConversationMessages = (t0, opts) => {
210
210
  }
211
211
  return t13;
212
212
  };
213
- const useEnsureWindowHoldsAnchor = t0 => {
213
+ const useEnsureWindowOpenedAtAnchor = t0 => {
214
214
  const $ = _c(6);
215
215
  const {
216
216
  conversation_id,
@@ -230,8 +230,11 @@ const useEnsureWindowHoldsAnchor = t0 => {
230
230
  reply_root_id
231
231
  });
232
232
  const cached = queryClient.getQueryData(queryKey);
233
- const holdsAnchor = cached?.pages.some(page => page.data.some(m => m.id === anchor));
234
- if (cached && !holdsAnchor) {
233
+ if (!cached) {
234
+ return;
235
+ }
236
+ const openedAtAnchor = cached.pageParams[0]?.where?.id_around === anchor;
237
+ if (!openedAtAnchor) {
235
238
  queryClient.resetQueries({
236
239
  queryKey,
237
240
  exact: true
@@ -1 +1 @@
1
- {"version":3,"file":"use_conversation_messages.js","names":["useQueryClient","useEffect","useMemo","chatQueryClient","anchoredPageParam","isBehindLiveEdge","livePageParam","markLiveIfCaughtUp","newerPageParam","newestFirst","replaceEqualById","getMessagesQueryKey","getMessagesRequestArgs","useApiClient","useSuspensePaginator","useConversationMessages","t0","opts","$","_c","conversation_id","reply_root_id","anchor","queryClient","apiClient","t1","queryKey","t2","requestArgs","t3","t4","structuralSharing","initialPageParam","getPreviousPageParam","transformPage","data","infiniteData","refetch","isRefetching","fetchNextPage","fetchPreviousPage","hasNextPage","hasPreviousPage","t5","behind","t6","cancelRefetch","fetchOlder","t7","fetchNewer","t8","page","chat","get","cancelQueries","exact","setQueryData","pages","pageParams","fetchLiveWindow","t9","filter","_temp","sort","_temp2","messages","t10","t11","settled","t12","useEnsureWindowHoldsAnchor","t13","cached","getQueryData","holdsAnchor","some","m","id","resetQueries","dropMessagesWindowIfBehind","options","removeQueries","message","deletedAt","attachments","length","text","a","b","localeCompare"],"sources":["../../src/hooks/use_conversation_messages.ts"],"sourcesContent":["import { useQueryClient } from '@tanstack/react-query'\nimport { useEffect, useMemo } from 'react'\nimport { chatQueryClient } from '../contexts/api_provider'\nimport { ApiCollection, MessageResource } from '../types'\nimport {\n anchoredPageParam,\n isBehindLiveEdge,\n livePageParam,\n markLiveIfCaughtUp,\n MessagesWindow,\n newerPageParam,\n newestFirst,\n} from '../utils/cache/messages_window'\nimport { replaceEqualById } from '../utils/replace_equal_by_id'\nimport { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\nimport { SuspensePaginatorOptions, useSuspensePaginator } from './use_suspense_api'\n\ntype WindowOptions = { conversation_id: number; reply_root_id?: string | null }\ntype Options = WindowOptions & { anchor?: string | null }\n\nexport const useConversationMessages = (\n { conversation_id, reply_root_id, anchor }: Options,\n opts?: SuspensePaginatorOptions\n) => {\n const queryClient = useQueryClient()\n const apiClient = useApiClient()\n const queryKey = getMessagesQueryKey({ conversation_id, reply_root_id })\n const requestArgs = getMessagesRequestArgs({ conversation_id, reply_root_id })\n const {\n data,\n infiniteData,\n refetch,\n isRefetching,\n fetchNextPage,\n fetchPreviousPage,\n hasNextPage,\n hasPreviousPage,\n } = useSuspensePaginator<MessageResource>(requestArgs, {\n structuralSharing: replaceEqualById,\n initialPageParam: anchor ? anchoredPageParam(anchor) : livePageParam,\n getPreviousPageParam: newerPageParam,\n transformPage: newestFirst,\n ...opts,\n })\n const behind = isBehindLiveEdge(infiniteData)\n\n const fetchOlder = () => fetchNextPage({ cancelRefetch: false })\n\n const fetchNewer = async () => {\n if (!hasPreviousPage) return\n\n await fetchPreviousPage({ cancelRefetch: false })\n }\n\n const fetchLiveWindow = async () => {\n if (!behind) return\n\n const page = await apiClient.chat.get<ApiCollection<MessageResource>>(requestArgs)\n await queryClient.cancelQueries({ queryKey, exact: true })\n queryClient.setQueryData<MessagesWindow>(queryKey, {\n pages: [page],\n pageParams: [livePageParam],\n })\n }\n\n const messages = useMemo(\n () =>\n data\n .filter(message => message.deletedAt || message.attachments?.length || message.text?.length)\n .sort((a, b) => -a.id.localeCompare(b.id)),\n [data]\n )\n\n // Once nothing newer remains, the top of the window is the live edge. Without this,\n // a refetch would replay from the anchor and drop rows Jolt has added since.\n useEffect(() => {\n const settled = markLiveIfCaughtUp(infiniteData)\n\n if (settled !== infiniteData) {\n queryClient.setQueryData(queryKey, settled)\n }\n }, [infiniteData, queryClient, queryKey])\n\n useEnsureWindowHoldsAnchor({ conversation_id, reply_root_id, anchor })\n\n return {\n messages,\n behind,\n refetch,\n isRefetching,\n fetchNextPage: fetchOlder,\n fetchNewer,\n fetchLiveWindow,\n hasNextPage,\n queryKey,\n }\n}\n\nconst useEnsureWindowHoldsAnchor = ({ conversation_id, reply_root_id, anchor }: Options) => {\n const queryClient = useQueryClient()\n\n useEffect(() => {\n if (!anchor) return\n\n const queryKey = getMessagesQueryKey({ conversation_id, reply_root_id })\n const cached = queryClient.getQueryData<MessagesWindow>(queryKey)\n const holdsAnchor = cached?.pages.some(page => page.data.some(m => m.id === anchor))\n if (cached && !holdsAnchor) {\n queryClient.resetQueries({ queryKey, exact: true })\n }\n }, [anchor, conversation_id, reply_root_id, queryClient])\n}\n\nexport const dropMessagesWindowIfBehind = (options: WindowOptions) => {\n const queryKey = getMessagesQueryKey(options)\n const cached = chatQueryClient.getQueryData<MessagesWindow>(queryKey)\n if (isBehindLiveEdge(cached)) chatQueryClient.removeQueries({ queryKey, exact: true })\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"use_conversation_messages.js","names":["useQueryClient","useEffect","useMemo","chatQueryClient","anchoredPageParam","isBehindLiveEdge","livePageParam","markLiveIfCaughtUp","newerPageParam","newestFirst","replaceEqualById","getMessagesQueryKey","getMessagesRequestArgs","useApiClient","useSuspensePaginator","useConversationMessages","t0","opts","$","_c","conversation_id","reply_root_id","anchor","queryClient","apiClient","t1","queryKey","t2","requestArgs","t3","t4","structuralSharing","initialPageParam","getPreviousPageParam","transformPage","data","infiniteData","refetch","isRefetching","fetchNextPage","fetchPreviousPage","hasNextPage","hasPreviousPage","t5","behind","t6","cancelRefetch","fetchOlder","t7","fetchNewer","t8","page","chat","get","cancelQueries","exact","setQueryData","pages","pageParams","fetchLiveWindow","t9","filter","_temp","sort","_temp2","messages","t10","useEnsureWindowOpenedAtAnchor","t11","t12","settled","t13","cached","getQueryData","openedAtAnchor","where","id_around","resetQueries","dropMessagesWindowIfBehind","options","removeQueries","message","deletedAt","attachments","length","text","a","b","id","localeCompare"],"sources":["../../src/hooks/use_conversation_messages.ts"],"sourcesContent":["import { useQueryClient } from '@tanstack/react-query'\nimport { useEffect, useMemo } from 'react'\nimport { chatQueryClient } from '../contexts/api_provider'\nimport { ApiCollection, MessageResource } from '../types'\nimport {\n anchoredPageParam,\n isBehindLiveEdge,\n livePageParam,\n markLiveIfCaughtUp,\n MessagesWindow,\n newerPageParam,\n newestFirst,\n} from '../utils/cache/messages_window'\nimport { replaceEqualById } from '../utils/replace_equal_by_id'\nimport { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\nimport { SuspensePaginatorOptions, useSuspensePaginator } from './use_suspense_api'\n\ntype WindowOptions = { conversation_id: number; reply_root_id?: string | null }\ntype Options = WindowOptions & { anchor?: string | null }\n\nexport const useConversationMessages = (\n { conversation_id, reply_root_id, anchor }: Options,\n opts?: SuspensePaginatorOptions\n) => {\n const queryClient = useQueryClient()\n const apiClient = useApiClient()\n const queryKey = getMessagesQueryKey({ conversation_id, reply_root_id })\n const requestArgs = getMessagesRequestArgs({ conversation_id, reply_root_id })\n const {\n data,\n infiniteData,\n refetch,\n isRefetching,\n fetchNextPage,\n fetchPreviousPage,\n hasNextPage,\n hasPreviousPage,\n } = useSuspensePaginator<MessageResource>(requestArgs, {\n structuralSharing: replaceEqualById,\n initialPageParam: anchor ? anchoredPageParam(anchor) : livePageParam,\n getPreviousPageParam: newerPageParam,\n transformPage: newestFirst,\n ...opts,\n })\n const behind = isBehindLiveEdge(infiniteData)\n\n const fetchOlder = () => fetchNextPage({ cancelRefetch: false })\n\n const fetchNewer = async () => {\n if (!hasPreviousPage) return\n\n await fetchPreviousPage({ cancelRefetch: false })\n }\n\n const fetchLiveWindow = async () => {\n if (!behind) return\n\n const page = await apiClient.chat.get<ApiCollection<MessageResource>>(requestArgs)\n await queryClient.cancelQueries({ queryKey, exact: true })\n queryClient.setQueryData<MessagesWindow>(queryKey, {\n pages: [page],\n pageParams: [livePageParam],\n })\n }\n\n const messages = useMemo(\n () =>\n data\n .filter(message => message.deletedAt || message.attachments?.length || message.text?.length)\n .sort((a, b) => -a.id.localeCompare(b.id)),\n [data]\n )\n\n useEnsureWindowOpenedAtAnchor({ conversation_id, reply_root_id, anchor })\n\n // Once nothing newer remains, the top of the window is the live edge. Without this,\n // a refetch would replay from the anchor and drop rows Jolt has added since.\n useEffect(() => {\n const settled = markLiveIfCaughtUp(infiniteData)\n\n if (settled !== infiniteData) {\n queryClient.setQueryData(queryKey, settled)\n }\n }, [infiniteData, queryClient, queryKey])\n\n return {\n messages,\n behind,\n refetch,\n isRefetching,\n fetchNextPage: fetchOlder,\n fetchNewer,\n fetchLiveWindow,\n hasNextPage,\n queryKey,\n }\n}\n\nconst useEnsureWindowOpenedAtAnchor = ({ conversation_id, reply_root_id, anchor }: Options) => {\n const queryClient = useQueryClient()\n\n useEffect(() => {\n if (!anchor) return\n\n const queryKey = getMessagesQueryKey({ conversation_id, reply_root_id })\n const cached = queryClient.getQueryData<MessagesWindow>(queryKey)\n if (!cached) return\n\n const openedAtAnchor = cached.pageParams[0]?.where?.id_around === anchor\n if (!openedAtAnchor) {\n queryClient.resetQueries({ queryKey, exact: true })\n }\n }, [anchor, conversation_id, reply_root_id, queryClient])\n}\n\nexport const dropMessagesWindowIfBehind = (options: WindowOptions) => {\n const queryKey = getMessagesQueryKey(options)\n const cached = chatQueryClient.getQueryData<MessagesWindow>(queryKey)\n if (isBehindLiveEdge(cached)) chatQueryClient.removeQueries({ queryKey, exact: true })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"use_current_person.d.ts","sourceRoot":"","sources":["../../src/hooks/use_current_person.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAKhD,eAAO,MAAM,wBAAwB;;;;;;;CAkBpC,CAAA;AAED,eAAO,MAAM,qBAAqB,8CAA+C,CAAA;AAEjF,eAAO,MAAM,gBAAgB,6BAO5B,CAAA;AAED,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAE5D,eAAO,MAAM,qBAAqB;qBAGtB,OAAO,CAAC,qBAAqB,CAAC,kBACvB,aAAa,CAAC,qBAAqB,CAAC;;CActD,CAAA"}
1
+ {"version":3,"file":"use_current_person.d.ts","sourceRoot":"","sources":["../../src/hooks/use_current_person.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAKhD,eAAO,MAAM,wBAAwB;;;;;;;CAmBpC,CAAA;AAED,eAAO,MAAM,qBAAqB,8CAA+C,CAAA;AAEjF,eAAO,MAAM,gBAAgB,6BAO5B,CAAA;AAED,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAE5D,eAAO,MAAM,qBAAqB;qBAGtB,OAAO,CAAC,qBAAqB,CAAC,kBACvB,aAAa,CAAC,qBAAqB,CAAC;;CActD,CAAA"}
@@ -6,7 +6,7 @@ export const currentPersonRequestArgs = {
6
6
  url: '/me',
7
7
  data: {
8
8
  fields: {
9
- Person: ['id', 'name', 'avatar', 'can_chat', 'unread_count', 'pco_chat_enabled', 'age_qualification_status', 'direct_messages_disabled', 'direct_messages_eligible', 'under_18']
9
+ Person: ['id', 'name', 'avatar', 'can_chat', 'unread_count', 'pco_chat_enabled', 'age_qualification_status', 'direct_messages_disabled', 'direct_messages_eligible', 'can_browse_archived_conversations', 'under_18']
10
10
  }
11
11
  }
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use_current_person.js","names":["useQueryClient","FIVE_MINUTES","THIRTY_MINUTES","getRequestQueryKey","useSuspenseGet","currentPersonRequestArgs","url","data","fields","Person","currentPersonQueryKey","useCurrentPerson","$","_c","t0","Symbol","for","staleTime","gcTime","person","useCurrentPersonCache","queryClient","handleUpdate","update","processRecord","r","u","setQueryData","handleInvalidate","invalidateQueries","queryKey","invalidate"],"sources":["../../src/hooks/use_current_person.ts"],"sourcesContent":["import { useQueryClient } from '@tanstack/react-query'\nimport { CurrentPersonResource } from '../types'\nimport { ApiResource } from '../types/api_primitives'\nimport { FIVE_MINUTES, THIRTY_MINUTES } from '../utils/time'\nimport { getRequestQueryKey, useSuspenseGet } from './use_suspense_api'\n\nexport const currentPersonRequestArgs = {\n url: '/me',\n data: {\n fields: {\n Person: [\n 'id',\n 'name',\n 'avatar',\n 'can_chat',\n 'unread_count',\n 'pco_chat_enabled',\n 'age_qualification_status',\n 'direct_messages_disabled',\n 'direct_messages_eligible',\n 'under_18',\n ],\n },\n },\n}\n\nexport const currentPersonQueryKey = getRequestQueryKey(currentPersonRequestArgs)\n\nexport const useCurrentPerson = () => {\n const { data: person } = useSuspenseGet<CurrentPersonResource>(currentPersonRequestArgs, {\n staleTime: FIVE_MINUTES,\n gcTime: THIRTY_MINUTES,\n })\n\n return person\n}\n\ntype ProcessRecord<T> = (record: T, update: Partial<T>) => T\n\nexport const useCurrentPersonCache = () => {\n const queryClient = useQueryClient()\n const handleUpdate = (\n update: Partial<CurrentPersonResource>,\n processRecord: ProcessRecord<CurrentPersonResource> = (r, u) => ({ ...r, ...u })\n ) => {\n queryClient.setQueryData<ApiResource<CurrentPersonResource>>(currentPersonQueryKey, data => {\n if (!data) return data\n\n return { ...data, data: processRecord(data.data, update) }\n })\n }\n\n const handleInvalidate = () => {\n queryClient.invalidateQueries({ queryKey: currentPersonQueryKey })\n }\n\n return { update: handleUpdate, invalidate: handleInvalidate }\n}\n"],"mappings":";AAAA,SAASA,cAAc,QAAQ,uBAAuB;AAGtD,SAASC,YAAY,EAAEC,cAAc,QAAQ,eAAe;AAC5D,SAASC,kBAAkB,EAAEC,cAAc,QAAQ,oBAAoB;AAEvE,OAAO,MAAMC,wBAAwB,GAAG;EACtCC,GAAG,EAAE,KAAK;EACVC,IAAI,EAAE;IACJC,MAAM,EAAE;MACNC,MAAM,EAAE,CACN,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,UAAU;IAEd;EACF;AACF,CAAC;AAED,OAAO,MAAMC,qBAAqB,GAAGP,kBAAkB,CAACE,wBAAwB,CAAC;AAEjF,OAAO,MAAMM,gBAAgB,GAAGA,CAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAF,CAAA,QAAAG,MAAA,CAAAC,GAAA;IAC2DF,EAAA;MAAAG,SAAA,EAC5EhB,YAAY;MAAAiB,MAAA,EACfhB;IACV,CAAC;IAAAU,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAHD;IAAAL,IAAA,EAAAY;EAAA,IAAyBf,cAAc,CAAwBC,wBAAwB,EAAES,EAGxF,CAAC;EAAA,OAEKK,MAAM;AAAA,CACd;AAID,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACzC,MAAMC,WAAW,GAAGrB,cAAc,CAAC,CAAC;EACpC,MAAMsB,YAAY,GAAGA,CACnBC,MAAsC,EACtCC,aAAmD,GAAGA,CAACC,CAAC,EAAEC,CAAC,MAAM;IAAE,GAAGD,CAAC;IAAE,GAAGC;EAAE,CAAC,CAAC,KAC7E;IACHL,WAAW,CAACM,YAAY,CAAqCjB,qBAAqB,EAAEH,IAAI,IAAI;MAC1F,IAAI,CAACA,IAAI,EAAE,OAAOA,IAAI;MAEtB,OAAO;QAAE,GAAGA,IAAI;QAAEA,IAAI,EAAEiB,aAAa,CAACjB,IAAI,CAACA,IAAI,EAAEgB,MAAM;MAAE,CAAC;IAC5D,CAAC,CAAC;EACJ,CAAC;EAED,MAAMK,gBAAgB,GAAGA,CAAA,KAAM;IAC7BP,WAAW,CAACQ,iBAAiB,CAAC;MAAEC,QAAQ,EAAEpB;IAAsB,CAAC,CAAC;EACpE,CAAC;EAED,OAAO;IAAEa,MAAM,EAAED,YAAY;IAAES,UAAU,EAAEH;EAAiB,CAAC;AAC/D,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"use_current_person.js","names":["useQueryClient","FIVE_MINUTES","THIRTY_MINUTES","getRequestQueryKey","useSuspenseGet","currentPersonRequestArgs","url","data","fields","Person","currentPersonQueryKey","useCurrentPerson","$","_c","t0","Symbol","for","staleTime","gcTime","person","useCurrentPersonCache","queryClient","handleUpdate","update","processRecord","r","u","setQueryData","handleInvalidate","invalidateQueries","queryKey","invalidate"],"sources":["../../src/hooks/use_current_person.ts"],"sourcesContent":["import { useQueryClient } from '@tanstack/react-query'\nimport { CurrentPersonResource } from '../types'\nimport { ApiResource } from '../types/api_primitives'\nimport { FIVE_MINUTES, THIRTY_MINUTES } from '../utils/time'\nimport { getRequestQueryKey, useSuspenseGet } from './use_suspense_api'\n\nexport const currentPersonRequestArgs = {\n url: '/me',\n data: {\n fields: {\n Person: [\n 'id',\n 'name',\n 'avatar',\n 'can_chat',\n 'unread_count',\n 'pco_chat_enabled',\n 'age_qualification_status',\n 'direct_messages_disabled',\n 'direct_messages_eligible',\n 'can_browse_archived_conversations',\n 'under_18',\n ],\n },\n },\n}\n\nexport const currentPersonQueryKey = getRequestQueryKey(currentPersonRequestArgs)\n\nexport const useCurrentPerson = () => {\n const { data: person } = useSuspenseGet<CurrentPersonResource>(currentPersonRequestArgs, {\n staleTime: FIVE_MINUTES,\n gcTime: THIRTY_MINUTES,\n })\n\n return person\n}\n\ntype ProcessRecord<T> = (record: T, update: Partial<T>) => T\n\nexport const useCurrentPersonCache = () => {\n const queryClient = useQueryClient()\n const handleUpdate = (\n update: Partial<CurrentPersonResource>,\n processRecord: ProcessRecord<CurrentPersonResource> = (r, u) => ({ ...r, ...u })\n ) => {\n queryClient.setQueryData<ApiResource<CurrentPersonResource>>(currentPersonQueryKey, data => {\n if (!data) return data\n\n return { ...data, data: processRecord(data.data, update) }\n })\n }\n\n const handleInvalidate = () => {\n queryClient.invalidateQueries({ queryKey: currentPersonQueryKey })\n }\n\n return { update: handleUpdate, invalidate: handleInvalidate }\n}\n"],"mappings":";AAAA,SAASA,cAAc,QAAQ,uBAAuB;AAGtD,SAASC,YAAY,EAAEC,cAAc,QAAQ,eAAe;AAC5D,SAASC,kBAAkB,EAAEC,cAAc,QAAQ,oBAAoB;AAEvE,OAAO,MAAMC,wBAAwB,GAAG;EACtCC,GAAG,EAAE,KAAK;EACVC,IAAI,EAAE;IACJC,MAAM,EAAE;MACNC,MAAM,EAAE,CACN,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,mCAAmC,EACnC,UAAU;IAEd;EACF;AACF,CAAC;AAED,OAAO,MAAMC,qBAAqB,GAAGP,kBAAkB,CAACE,wBAAwB,CAAC;AAEjF,OAAO,MAAMM,gBAAgB,GAAGA,CAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAF,CAAA,QAAAG,MAAA,CAAAC,GAAA;IAC2DF,EAAA;MAAAG,SAAA,EAC5EhB,YAAY;MAAAiB,MAAA,EACfhB;IACV,CAAC;IAAAU,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAHD;IAAAL,IAAA,EAAAY;EAAA,IAAyBf,cAAc,CAAwBC,wBAAwB,EAAES,EAGxF,CAAC;EAAA,OAEKK,MAAM;AAAA,CACd;AAID,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACzC,MAAMC,WAAW,GAAGrB,cAAc,CAAC,CAAC;EACpC,MAAMsB,YAAY,GAAGA,CACnBC,MAAsC,EACtCC,aAAmD,GAAGA,CAACC,CAAC,EAAEC,CAAC,MAAM;IAAE,GAAGD,CAAC;IAAE,GAAGC;EAAE,CAAC,CAAC,KAC7E;IACHL,WAAW,CAACM,YAAY,CAAqCjB,qBAAqB,EAAEH,IAAI,IAAI;MAC1F,IAAI,CAACA,IAAI,EAAE,OAAOA,IAAI;MAEtB,OAAO;QAAE,GAAGA,IAAI;QAAEA,IAAI,EAAEiB,aAAa,CAACjB,IAAI,CAACA,IAAI,EAAEgB,MAAM;MAAE,CAAC;IAC5D,CAAC,CAAC;EACJ,CAAC;EAED,MAAMK,gBAAgB,GAAGA,CAAA,KAAM;IAC7BP,WAAW,CAACQ,iBAAiB,CAAC;MAAEC,QAAQ,EAAEpB;IAAsB,CAAC,CAAC;EACpE,CAAC;EAED,OAAO;IAAEa,MAAM,EAAED,YAAY;IAAES,UAAU,EAAEH;EAAiB,CAAC;AAC/D,CAAC","ignoreList":[]}
@@ -29,6 +29,8 @@ export declare const availableFeatures: {
29
29
  readonly dm_search_clear_fix: "ROLLOUT_MOBILE_dm_search_clear_fix";
30
30
  readonly search: "QA_MOBILE_search";
31
31
  readonly search_rollout: "ROLLOUT_MOBILE_search";
32
+ readonly filter_dropdown: "QA_MOBILE_filter_dropdown";
33
+ readonly filter_dropdown_rollout: "ROLLOUT_MOBILE_filter_dropdown";
32
34
  readonly manual_archiving: "QA_MOBILE_manual_archiving";
33
35
  readonly manual_archiving_rollout: "ROLLOUT_MOBILE_manual_archiving";
34
36
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use_features.d.ts","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAgB,MAAM,kBAAkB,CAAA;AAE1D,KAAK,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE7E,KAAK,kBAAkB,GAAG,aAAa,CAAC,eAAe,CAAC,GAAG;IACzD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B,CAAA;AAED,wBAAgB,WAAW;;kCAOT,WAAW;EAS5B;AAED,eAAO,MAAM,oBAAoB,GAAI,WAAW,SAAS;;;;;;;CAerD,CAAA;AAEJ,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CAYsC,CAAA"}
1
+ {"version":3,"file":"use_features.d.ts","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAgB,MAAM,kBAAkB,CAAA;AAE1D,KAAK,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE7E,KAAK,kBAAkB,GAAG,aAAa,CAAC,eAAe,CAAC,GAAG;IACzD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B,CAAA;AAED,wBAAgB,WAAW;;kCAOT,WAAW;EAS5B;AAED,eAAO,MAAM,oBAAoB,GAAI,WAAW,SAAS;;;;;;;CAerD,CAAA;AAEJ,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAcsC,CAAA"}
@@ -69,6 +69,8 @@ export const availableFeatures = {
69
69
  dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',
70
70
  search: 'QA_MOBILE_search',
71
71
  search_rollout: 'ROLLOUT_MOBILE_search',
72
+ filter_dropdown: 'QA_MOBILE_filter_dropdown',
73
+ filter_dropdown_rollout: 'ROLLOUT_MOBILE_filter_dropdown',
72
74
  manual_archiving: 'QA_MOBILE_manual_archiving',
73
75
  manual_archiving_rollout: 'ROLLOUT_MOBILE_manual_archiving'
74
76
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use_features.js","names":["queryOptions","useSuspenseQuery","useCallback","getFeaturesRequestArgs","getFeaturesQueryKey","FIVE_MINUTES","ONE_MINUTE","useApiClient","useFeatures","$","_c","apiClient","t0","featuresQueryOptions","data","features","t1","featureName","some","feature","name","enabled","featureEnabled","t2","queryKey","queryFn","chat","get","catch","error","stableEmptyFeatures","failure","status","staleTime","query","state","gcTime","Infinity","availableFeatures","gender_specific_conversations","message_reporting","granular_notifications_ui","custom_conversation_avatars","conversation_safety_lock","video_moderation","dm_search_clear_fix","search","search_rollout","manual_archiving","manual_archiving_rollout","links","meta","count","totalCount"],"sources":["../../src/hooks/use_features.ts"],"sourcesContent":["import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection } from '../types'\nimport type { FeatureResource } from '../types/resources/feature_resource'\nimport { getFeaturesRequestArgs, getFeaturesQueryKey } from '../utils/request/get_features'\nimport { FIVE_MINUTES, ONE_MINUTE } from '../utils/time'\nimport { ApiClient, useApiClient } from './use_api_client'\n\ntype FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures]\n\ntype FeaturesCollection = ApiCollection<FeatureResource> & {\n failure?: { status?: number }\n}\n\nexport function useFeatures() {\n const apiClient = useApiClient()\n const { data } = useSuspenseQuery(featuresQueryOptions(apiClient))\n\n const features = data.data\n\n const featureEnabled = useCallback(\n (featureName: FeatureName) =>\n features.some(feature => feature.name === featureName && feature.enabled),\n [features]\n )\n\n return {\n features,\n featureEnabled,\n }\n}\n\nexport const featuresQueryOptions = (apiClient: ApiClient) =>\n queryOptions({\n queryKey: getFeaturesQueryKey(),\n queryFn: (): Promise<FeaturesCollection> => {\n return apiClient.chat\n .get<ApiCollection<FeatureResource>>(getFeaturesRequestArgs())\n .catch(error => ({ ...stableEmptyFeatures, failure: { status: error?.status } }))\n },\n staleTime: query => {\n const failure = query.state.data?.failure\n if (!failure) return FIVE_MINUTES\n\n return failure.status === 429 ? ONE_MINUTE : 0\n },\n gcTime: Infinity,\n })\n\nexport const availableFeatures = {\n gender_specific_conversations: 'ROLLOUT_gender_specific_conversations',\n message_reporting: 'ROLLOUT_MOBILE_message_reporting',\n granular_notifications_ui: 'ROLLOUT_granular_notification_preferences_ui',\n custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',\n conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',\n video_moderation: 'ROLLOUT_MOBILE_video_moderation',\n dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',\n search: 'QA_MOBILE_search',\n search_rollout: 'ROLLOUT_MOBILE_search',\n manual_archiving: 'QA_MOBILE_manual_archiving',\n manual_archiving_rollout: 'ROLLOUT_MOBILE_manual_archiving',\n} as const satisfies Record<string, `${'QA' | 'ROLLOUT'}_${string}`>\n\nconst stableEmptyFeatures: ApiCollection<FeatureResource> = {\n data: [],\n links: {},\n meta: {\n count: 0,\n totalCount: 0,\n },\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"use_features.js","names":["queryOptions","useSuspenseQuery","useCallback","getFeaturesRequestArgs","getFeaturesQueryKey","FIVE_MINUTES","ONE_MINUTE","useApiClient","useFeatures","$","_c","apiClient","t0","featuresQueryOptions","data","features","t1","featureName","some","feature","name","enabled","featureEnabled","t2","queryKey","queryFn","chat","get","catch","error","stableEmptyFeatures","failure","status","staleTime","query","state","gcTime","Infinity","availableFeatures","gender_specific_conversations","message_reporting","granular_notifications_ui","custom_conversation_avatars","conversation_safety_lock","video_moderation","dm_search_clear_fix","search","search_rollout","filter_dropdown","filter_dropdown_rollout","manual_archiving","manual_archiving_rollout","links","meta","count","totalCount"],"sources":["../../src/hooks/use_features.ts"],"sourcesContent":["import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection } from '../types'\nimport type { FeatureResource } from '../types/resources/feature_resource'\nimport { getFeaturesRequestArgs, getFeaturesQueryKey } from '../utils/request/get_features'\nimport { FIVE_MINUTES, ONE_MINUTE } from '../utils/time'\nimport { ApiClient, useApiClient } from './use_api_client'\n\ntype FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures]\n\ntype FeaturesCollection = ApiCollection<FeatureResource> & {\n failure?: { status?: number }\n}\n\nexport function useFeatures() {\n const apiClient = useApiClient()\n const { data } = useSuspenseQuery(featuresQueryOptions(apiClient))\n\n const features = data.data\n\n const featureEnabled = useCallback(\n (featureName: FeatureName) =>\n features.some(feature => feature.name === featureName && feature.enabled),\n [features]\n )\n\n return {\n features,\n featureEnabled,\n }\n}\n\nexport const featuresQueryOptions = (apiClient: ApiClient) =>\n queryOptions({\n queryKey: getFeaturesQueryKey(),\n queryFn: (): Promise<FeaturesCollection> => {\n return apiClient.chat\n .get<ApiCollection<FeatureResource>>(getFeaturesRequestArgs())\n .catch(error => ({ ...stableEmptyFeatures, failure: { status: error?.status } }))\n },\n staleTime: query => {\n const failure = query.state.data?.failure\n if (!failure) return FIVE_MINUTES\n\n return failure.status === 429 ? ONE_MINUTE : 0\n },\n gcTime: Infinity,\n })\n\nexport const availableFeatures = {\n gender_specific_conversations: 'ROLLOUT_gender_specific_conversations',\n message_reporting: 'ROLLOUT_MOBILE_message_reporting',\n granular_notifications_ui: 'ROLLOUT_granular_notification_preferences_ui',\n custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',\n conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',\n video_moderation: 'ROLLOUT_MOBILE_video_moderation',\n dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',\n search: 'QA_MOBILE_search',\n search_rollout: 'ROLLOUT_MOBILE_search',\n filter_dropdown: 'QA_MOBILE_filter_dropdown',\n filter_dropdown_rollout: 'ROLLOUT_MOBILE_filter_dropdown',\n manual_archiving: 'QA_MOBILE_manual_archiving',\n manual_archiving_rollout: 'ROLLOUT_MOBILE_manual_archiving',\n} as const satisfies Record<string, `${'QA' | 'ROLLOUT'}_${string}`>\n\nconst stableEmptyFeatures: ApiCollection<FeatureResource> = {\n data: [],\n links: {},\n meta: {\n count: 0,\n totalCount: 0,\n },\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare function useFilterDropdownEnabled(): boolean;
2
+ //# sourceMappingURL=use_filter_dropdown_enabled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_filter_dropdown_enabled.d.ts","sourceRoot":"","sources":["../../src/hooks/use_filter_dropdown_enabled.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,YAOvC"}
@@ -0,0 +1,18 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { availableFeatures, useFeatures } from './use_features';
3
+ export function useFilterDropdownEnabled() {
4
+ const $ = _c(2);
5
+ const {
6
+ featureEnabled
7
+ } = useFeatures();
8
+ let t0;
9
+ if ($[0] !== featureEnabled) {
10
+ t0 = featureEnabled(availableFeatures.filter_dropdown) || featureEnabled(availableFeatures.filter_dropdown_rollout);
11
+ $[0] = featureEnabled;
12
+ $[1] = t0;
13
+ } else {
14
+ t0 = $[1];
15
+ }
16
+ return t0;
17
+ }
18
+ //# sourceMappingURL=use_filter_dropdown_enabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_filter_dropdown_enabled.js","names":["availableFeatures","useFeatures","useFilterDropdownEnabled","$","_c","featureEnabled","t0","filter_dropdown","filter_dropdown_rollout"],"sources":["../../src/hooks/use_filter_dropdown_enabled.ts"],"sourcesContent":["import { availableFeatures, useFeatures } from './use_features'\n\nexport function useFilterDropdownEnabled() {\n const { featureEnabled } = useFeatures()\n\n return (\n featureEnabled(availableFeatures.filter_dropdown) ||\n featureEnabled(availableFeatures.filter_dropdown_rollout)\n )\n}\n"],"mappings":";AAAA,SAASA,iBAAiB,EAAEC,WAAW,QAAQ,gBAAgB;AAE/D,OAAO,SAAAC,yBAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACL;IAAAC;EAAA,IAA2BJ,WAAW,CAAC,CAAC;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAE,cAAA;IAGtCC,EAAA,GAAAD,cAAc,CAACL,iBAAiB,CAAAO,eACwB,CAAC,IAAzDF,cAAc,CAACL,iBAAiB,CAAAQ,uBAAwB,CAAC;IAAAL,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,OADzDG,EACyD;AAAA","ignoreList":[]}
@@ -3,6 +3,7 @@ import { CustomMessage } from '@planningcenter/jolt-client/dist/types/JoltConnec
3
3
  import { JoltSubscription } from '@planningcenter/jolt-client/dist/types/JoltSubscription';
4
4
  import type { JoltSubscriptionPattern } from '../types/jolt_events';
5
5
  export declare const useJoltClient: () => JoltClient | undefined;
6
+ export declare const useJoltForegroundPing: () => void;
6
7
  export declare function useJoltChannel(channelName: string, enabled?: boolean): JoltSubscription | undefined | null;
7
8
  type UserCallbackFn<T> = (_event: T) => void;
8
9
  export declare function useJoltEvent<T extends CustomMessage>(channel: JoltSubscription | undefined | null, eventName: JoltSubscriptionPattern, callback: UserCallbackFn<T>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"use_jolt.d.ts","sourceRoot":"","sources":["../../src/hooks/use_jolt.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,6BAA6B,CAAA;AACpD,OAAO,EACL,aAAa,EAEd,MAAM,uDAAuD,CAAA;AAC9D,OAAO,EAEL,gBAAgB,EACjB,MAAM,yDAAyD,CAAA;AAKhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAWnE,eAAO,MAAM,aAAa,QAAO,UAAU,GAAG,SAqG7C,CAAA;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAc,GACtB,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAoCrC;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAA;AAE5C,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAClD,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,EAC5C,SAAS,EAAE,uBAAuB,EAClC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,QAO5B"}
1
+ {"version":3,"file":"use_jolt.d.ts","sourceRoot":"","sources":["../../src/hooks/use_jolt.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,6BAA6B,CAAA;AACpD,OAAO,EACL,aAAa,EAEd,MAAM,uDAAuD,CAAA;AAC9D,OAAO,EAEL,gBAAgB,EACjB,MAAM,yDAAyD,CAAA;AAMhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAWnE,eAAO,MAAM,aAAa,QAAO,UAAU,GAAG,SAqG7C,CAAA;AA+CD,eAAO,MAAM,qBAAqB,YAQjC,CAAA;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAc,GACtB,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAoCrC;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAA;AAE5C,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAClD,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,EAC5C,SAAS,EAAE,uBAAuB,EAClC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,QAO5B"}
@@ -2,6 +2,7 @@ import { c as _c } from "react/compiler-runtime";
2
2
  import JoltClient from '@planningcenter/jolt-client';
3
3
  import { useQuery, useQueryClient, useSuspenseQuery } from '@tanstack/react-query';
4
4
  import { useCallback, useEffect, useMemo } from 'react';
5
+ import { AppState } from 'react-native';
5
6
  import { useChatContext } from '../contexts/chat_context';
6
7
  import { Client, Uri } from '../utils';
7
8
  import { throwResponseError } from '../utils/response_error';
@@ -181,6 +182,64 @@ export const useJoltClient = () => {
181
182
  } = useQuery(t11);
182
183
  return joltClient;
183
184
  };
185
+ const pingSubscribedJoltClients = queryClient => {
186
+ queryClient.getQueryCache().findAll({
187
+ queryKey: ['jolt-client']
188
+ }).forEach(query => {
189
+ const joltClient = query.state.data;
190
+ if (!joltClient || joltClient.subscriptions.length === 0) return;
191
+ try {
192
+ joltClient.ping();
193
+ } catch {}
194
+ });
195
+ };
196
+ const foregroundPingListeners = new Map();
197
+ const subscribeToForegroundPing = queryClient => {
198
+ const existing = foregroundPingListeners.get(queryClient);
199
+ if (existing) {
200
+ existing.mounts += 1;
201
+ return;
202
+ }
203
+ let previousState = AppState.currentState;
204
+ const subscription = AppState.addEventListener('change', nextState => {
205
+ if (nextState === 'active' && previousState !== 'active') {
206
+ pingSubscribedJoltClients(queryClient);
207
+ }
208
+ previousState = nextState;
209
+ });
210
+ foregroundPingListeners.set(queryClient, {
211
+ mounts: 1,
212
+ remove: () => subscription.remove()
213
+ });
214
+ };
215
+ const unsubscribeFromForegroundPing = queryClient => {
216
+ const existing = foregroundPingListeners.get(queryClient);
217
+ if (!existing) return;
218
+ existing.mounts -= 1;
219
+ if (existing.mounts > 0) return;
220
+ existing.remove();
221
+ foregroundPingListeners.delete(queryClient);
222
+ };
223
+ export const useJoltForegroundPing = () => {
224
+ const $ = _c(3);
225
+ const queryClient = useQueryClient();
226
+ let t0;
227
+ let t1;
228
+ if ($[0] !== queryClient) {
229
+ t0 = () => {
230
+ subscribeToForegroundPing(queryClient);
231
+ return () => unsubscribeFromForegroundPing(queryClient);
232
+ };
233
+ t1 = [queryClient];
234
+ $[0] = queryClient;
235
+ $[1] = t0;
236
+ $[2] = t1;
237
+ } else {
238
+ t0 = $[1];
239
+ t1 = $[2];
240
+ }
241
+ useEffect(t0, t1);
242
+ };
184
243
  export function useJoltChannel(channelName, t0) {
185
244
  const $ = _c(16);
186
245
  const enabled = t0 === undefined ? true : t0;
@@ -1 +1 @@
1
- {"version":3,"file":"use_jolt.js","names":["JoltClient","useQuery","useQueryClient","useSuspenseQuery","useCallback","useEffect","useMemo","useChatContext","Client","Uri","throwResponseError","FIVE_SECONDS","useJoltClient","$","_c","session","sessionAccessToken","token","access_token","queryClient","t0","uri","t1","root","api","defaultHeaders","headers","version","apiClient","t2","fetchQuery","queryKey","queryFn","post","url","data","type","attributes","catch","staleTime","fetchJoltToken","t3","Symbol","for","t4","then","_temp","Infinity","gcTime","refetchOnWindowFocus","wssUrl","t5","_temp2","fetchAuthTokenFn","t6","channel","connectionId","cid","_temp3","_temp4","fetchSubscribeToken","t7","channel_0","connectionId_0","options","fetchSubscribeTokenFn","t8","Boolean","t9","t10","logToConsole","t11","enabled","joltClient","useJoltChannel","channelName","undefined","jolt","ready","alreadySubscribed","subscriptions","find","c","subscribe","handleSubscribe","subscription","removeQueries","exact","unsubscribe","handleUnsubscribe","useJoltEvent","eventName","callback","_temp5","bind","e","res","res_0","id","res_1","res_2","console","error"],"sources":["../../src/hooks/use_jolt.ts"],"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 type { JoltSubscriptionPattern } from '../types/jolt_events'\nimport { Client, Uri } from '../utils'\nimport { throwResponseError } from '../utils/response_error'\nimport { FIVE_SECONDS } from '../utils/time'\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\n .post<ApiResource<JoltResponse>>({\n url: '/me/jolt_authorize',\n data: {\n data: {\n type: 'JoltToken',\n attributes: {},\n },\n },\n })\n .catch(throwResponseError)\n },\n staleTime: FIVE_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: JoltSubscriptionPattern,\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"],"mappings":";AAAA,OAAOA,UAAU,MAAM,6BAA6B;AASpD,SAASC,QAAQ,EAAEC,cAAc,EAAEC,gBAAgB,QAAQ,uBAAuB;AAClF,SAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AACvD,SAASC,cAAc,QAAQ,0BAA0B;AAGzD,SAASC,MAAM,EAAEC,GAAG,QAAQ,UAAU;AACtC,SAASC,kBAAkB,QAAQ,yBAAyB;AAC5D,SAASC,YAAY,QAAQ,eAAe;AAQ5C,OAAO,MAAMC,aAAa,GAAGA,CAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAC3B;IAAAC;EAAA,IAAoBR,cAAc,CAAC,CAAC;EACpC,MAAAS,kBAAA,GAA2BD,OAAO,CAAAE,KAAoB,EAAAC,YAAA;EACtD,MAAAC,WAAA,GAAoBjB,cAAc,CAAC,CAAC;EAAA,IAAAkB,EAAA;EAAA,IAAAP,CAAA,QAAAE,OAAA;IACVK,EAAA,OAAIX,GAAG,CAAC;MAAAM;IAAU,CAAC,CAAC;IAAAF,CAAA,MAAAE,OAAA;IAAAF,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAA9C,MAAAQ,GAAA,GAA0BD,EAAoB;EAAY,IAAAE,EAAA;EAAA,IAAAT,CAAA,QAAAQ,GAAA;IAGtDC,EAAA,OAAId,MAAM,CAAC;MAAAe,IAAA,EACHF,GAAG,CAAAG,GAAI,CAAC,UAAU,CAAC;MAAAC,cAAA,EACTJ,GAAG,CAAAK,OAAQ;MAAAC,OAAA,EAClB;IACX,CAAC,CAAC;IAAAd,CAAA,MAAAQ,GAAA;IAAAR,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EANN,MAAAe,SAAA,GAEIN,EAIE;EAEL,IAAAO,EAAA;EAAA,IAAAhB,CAAA,QAAAe,SAAA,IAAAf,CAAA,QAAAM,WAAA;IAEsBU,EAAA,SAAAA,CAAA,KACdV,WAAW,CAAAW,UAAW,CAAC;MAAAC,QAAA,EAClB,CAAC,YAAY,CAAC;MAAAC,OAAA,EACfA,CAAA,KACAJ,SAAS,CAAAK,IACT,CAA4B;QAAAC,GAAA,EAC1B,oBAAoB;QAAAC,IAAA,EACnB;UAAAA,IAAA,EACE;YAAAC,IAAA,EACE,WAAW;YAAAC,UAAA,EACL,CAAC;UACf;QACF;MACF,CAAC,CAAC,CAAAC,KACI,CAAC5B,kBAAkB,CAC5B;MAAA6B,SAAA,EACU5B;IACb,CAAC,CACF;IAAAE,CAAA,MAAAe,SAAA;IAAAf,CAAA,MAAAM,WAAA;IAAAN,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EAlBD,MAAA2B,cAAA,GAAuBX,EAkBtB;EAAA,IAAAY,EAAA;EAAA,IAAA5B,CAAA,QAAA6B,MAAA,CAAAC,GAAA;IAIWF,EAAA,IAAC,SAAS,CAAC;IAAA5B,CAAA,MAAA4B,EAAA;EAAA;IAAAA,EAAA,GAAA5B,CAAA;EAAA;EAAA,IAAA+B,EAAA;EAAA,IAAA/B,CAAA,QAAA2B,cAAA;IAD2BI,EAAA;MAAAb,QAAA,EACtCU,EAAW;MAAAT,OAAA,EACZA,CAAA,KAAMQ,cAAc,CAAC,CAAC,CAAAK,IAAK,CAACC,KAAsB,CAAC;MAAAP,SAAA,EACjDQ,QAAQ;MAAAC,MAAA,EACXD,QAAQ;MAAAE,oBAAA,EACM;IACxB,CAAC;IAAApC,CAAA,MAAA2B,cAAA;IAAA3B,CAAA,MAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EAND;IAAAsB,IAAA,EAAAe;EAAA,IAAyB/C,gBAAgB,CAASyC,EAMjD,CAAC;EAAA,IAAAO,EAAA;EAAA,IAAAtC,CAAA,SAAA2B,cAAA,IAAA3B,CAAA,SAAAM,WAAA;IAEuCgC,EAAA,GAAAA,CAAA,KAChChC,WAAW,CAAAW,UAAW,CAAC;MAAAC,QAAA,EAClB,CAAC,iBAAiB,CAAC;MAAAC,OAAA,EACpBA,CAAA,KAAMQ,cAAc,CAAC,CAAC,CAAAK,IAAK,CAACO,MAAkB;IACzD,CAAC,CACF;IAAAvC,CAAA,OAAA2B,cAAA;IAAA3B,CAAA,OAAAM,WAAA;IAAAN,CAAA,OAAAsC,EAAA;EAAA;IAAAA,EAAA,GAAAtC,CAAA;EAAA;EALD,MAAAwC,gBAAA,GAAyCF,EAKxC;EAAA,IAAAG,EAAA;EAAA,IAAAzC,CAAA,SAAAe,SAAA;IAEgD0B,EAAA,GAAAA,CAAAC,OAAA,EAAAC,YAAA,KACxC5B,SAAS,CAAAK,IACT,CAA4B;MAAAC,GAAA,EAC1B,oBAAoB;MAAAC,IAAA,EACnB;QAAAA,IAAA,EACE;UAAAC,IAAA,EACE,oBAAoB;UAAAC,UAAA,EACd;YAAAkB,OAAA;YAAAE,GAAA,EAAgBD;UAAa;QAC3C;MACF;IACF,CAAC,CAAC,CAAAX,IACG,CAACa,MAAkB,CAAC,CAAApB,KACnB,CAACqB,MAGN,CACJ;IAAA9C,CAAA,OAAAe,SAAA;IAAAf,CAAA,OAAAyC,EAAA;EAAA;IAAAA,EAAA,GAAAzC,CAAA;EAAA;EAhBD,MAAA+C,mBAAA,GAAiDN,EAgBhD;EAAA,IAAAO,EAAA;EAAA,IAAAhD,CAAA,SAAA+C,mBAAA,IAAA/C,CAAA,SAAAM,WAAA;IAEkD0C,EAAA,GAAAA,CAAAC,SAAA,EAAAC,cAAA,EAAAC,OAAA,KAK1C7C,WAAW,CAAAW,UAAW,CAAC;MAAAC,QAAA,EAClB,CAAC,sBAAsB,EAAEwB,SAAO,EAAEC,cAAY,CAAC;MAAAxB,OAAA,EAChDA,CAAA,KAAM4B,mBAAmB,CAACL,SAAO,EAAEC,cAAY,EAAEQ,OAAO;IACnE,CAAC,CACF;IAAAnD,CAAA,OAAA+C,mBAAA;IAAA/C,CAAA,OAAAM,WAAA;IAAAN,CAAA,OAAAgD,EAAA;EAAA;IAAAA,EAAA,GAAAhD,CAAA;EAAA;EATD,MAAAoD,qBAAA,GAAmDJ,EASlD;EAGU,MAAAK,EAAA,GAAAC,OAAO,CAACjB,MAAM,CAAC;EAAA,IAAAkB,EAAA;EAAA,IAAAvD,CAAA,SAAAG,kBAAA,IAAAH,CAAA,SAAAqC,MAAA;IACdkB,EAAA,IAAC,aAAa,EAAElB,MAAM,EAAElC,kBAAkB,CAAC;IAAAH,CAAA,OAAAG,kBAAA;IAAAH,CAAA,OAAAqC,MAAA;IAAArC,CAAA,OAAAuD,EAAA;EAAA;IAAAA,EAAA,GAAAvD,CAAA;EAAA;EAAA,IAAAwD,GAAA;EAAA,IAAAxD,CAAA,SAAAwC,gBAAA,IAAAxC,CAAA,SAAAoD,qBAAA,IAAApD,CAAA,SAAAqC,MAAA;IAC5CmB,GAAA,SAAAA,CAAA;MACP,IAAI,CAACnB,MAAM;QAAA;MAAA;MAAkB,OAEtB,IAAIlD,UAAU,CACnBkD,MAAM,EACN;QAAAG,gBAAA;QAAAY;MAGA,CAAC,EACD;QAAAK,YAAA,EAAgB;MAAM,CACxB,CAAC;IAAA,CACF;IAAAzD,CAAA,OAAAwC,gBAAA;IAAAxC,CAAA,OAAAoD,qBAAA;IAAApD,CAAA,OAAAqC,MAAA;IAAArC,CAAA,OAAAwD,GAAA;EAAA;IAAAA,GAAA,GAAAxD,CAAA;EAAA;EAAA,IAAA0D,GAAA;EAAA,IAAA1D,CAAA,SAAAwD,GAAA,IAAAxD,CAAA,SAAAqD,EAAA,IAAArD,CAAA,SAAAuD,EAAA;IAdmCG,GAAA;MAAAC,OAAA,EAC3BN,EAAe;MAAAnC,QAAA,EACdqC,EAA2C;MAAApC,OAAA,EAC5CqC,GAWR;MAAApB,oBAAA,EACqB,KAAK;MAAAV,SAAA,EAChBQ,QAAQ;MAAAC,MAAA,EACXD;IACV,CAAC;IAAAlC,CAAA,OAAAwD,GAAA;IAAAxD,CAAA,OAAAqD,EAAA;IAAArD,CAAA,OAAAuD,EAAA;IAAAvD,CAAA,OAAA0D,GAAA;EAAA;IAAAA,GAAA,GAAA1D,CAAA;EAAA;EAlBD;IAAAsB,IAAA,EAAAsC;EAAA,IAA6BxE,QAAQ,CAACsE,GAkBrC,CAAC;EAAA,OAEKE,UAAU;AAAA,CAClB;AAED,OAAO,SAAAC,eAAAC,WAAA,EAAAvD,EAAA;EAAA,MAAAP,CAAA,GAAAC,EAAA;EAEL,MAAA0D,OAAA,GAAApD,EAAuB,KAAvBwD,SAAuB,GAAvB,IAAuB,GAAvBxD,EAAuB;EAEvB,MAAAyD,IAAA,GAAajE,aAAa,CAAC,CAAC;EAC5B,MAAAO,WAAA,GAAoBjB,cAAc,CAAC,CAAC;EACpC,MAAA4E,KAAA,GAAcX,OAAO,CAACU,IAAe,CAAC,IAAxBL,OAAwB;EAAA,IAAAlD,EAAA;EAAA,IAAAT,CAAA,QAAA8D,WAAA,IAAA9D,CAAA,QAAAgE,IAAA;IAEFvD,EAAA,SAAAA,CAAA;MAClC,IAAI,CAACuD,IAAI;QAAA,OAAS,IAAI;MAAA;MAGtB,MAAAE,iBAAA,GAA0BF,IAAI,CAAAG,aAAc,CAAAC,IAAK,CAACC,CAAA,IAAKA,CAAC,CAAA3B,OAAQ,KAAKoB,WAAW,CAAC;MACjF,IAAII,iBAAiB;QAAA,OAASA,iBAAiB;MAAA;MAAA,OAExCF,IAAI,CAAAM,SAAU,CAACR,WAAW,CAAC;IAAA,CACnC;IAAA9D,CAAA,MAAA8D,WAAA;IAAA9D,CAAA,MAAAgE,IAAA;IAAAhE,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EARD,MAAAuE,eAAA,GAAwB9D,EAQD;EAAA,IAAAO,EAAA;EAAA,IAAAhB,CAAA,QAAA8D,WAAA;IAGX9C,EAAA,IAAC,mBAAmB,EAAE8C,WAAW,CAAC;IAAA9D,CAAA,MAAA8D,WAAA;IAAA9D,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EAAA,IAAA4B,EAAA;EAAA,IAAA5B,CAAA,QAAAuE,eAAA,IAAAvE,CAAA,QAAAiE,KAAA,IAAAjE,CAAA,QAAAgB,EAAA;IADmBY,EAAA;MAAAV,QAAA,EACrDF,EAAkC;MAAAG,OAAA,EACnCoD,eAAe;MAAAnC,oBAAA,EACF,KAAK;MAAAuB,OAAA,EAClBM;IACX,CAAC;IAAAjE,CAAA,MAAAuE,eAAA;IAAAvE,CAAA,MAAAiE,KAAA;IAAAjE,CAAA,MAAAgB,EAAA;IAAAhB,CAAA,MAAA4B,EAAA;EAAA;IAAAA,EAAA,GAAA5B,CAAA;EAAA;EALD;IAAAsB,IAAA,EAAAkD;EAAA,IAA+BpF,QAAQ,CAA0BwC,EAKhE,CAAC;EAAA,IAAAG,EAAA;EAAA,IAAA/B,CAAA,QAAA8D,WAAA,IAAA9D,CAAA,SAAAgE,IAAA,IAAAhE,CAAA,SAAAM,WAAA;IAEoCyB,EAAA,GAAAA,CAAA;MACpCzB,WAAW,CAAAmE,aAAc,CAAC;QAAAvD,QAAA,EACd,CAAC,mBAAmB,EAAE4C,WAAW,CAAC;QAAAY,KAAA,EACrC;MACT,CAAC,CAAC;MAEFV,IAAI,EAAAW,WAA0B,CAAZb,WAAW,CAAC;IAAA,CAC/B;IAAA9D,CAAA,MAAA8D,WAAA;IAAA9D,CAAA,OAAAgE,IAAA;IAAAhE,CAAA,OAAAM,WAAA;IAAAN,CAAA,OAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EAPD,MAAA4E,iBAAA,GAA0B7C,EAOU;EAAA,IAAAO,EAAA;EAAA,IAAAG,EAAA;EAAA,IAAAzC,CAAA,SAAA4E,iBAAA;IAE1BtC,EAAA,GAAAA,CAAA,KACDsC,iBACR;IAAEnC,EAAA,IAACmC,iBAAiB,CAAC;IAAA5E,CAAA,OAAA4E,iBAAA;IAAA5E,CAAA,OAAAsC,EAAA;IAAAtC,CAAA,OAAAyC,EAAA;EAAA;IAAAH,EAAA,GAAAtC,CAAA;IAAAyC,EAAA,GAAAzC,CAAA;EAAA;EAFtBR,SAAS,CAAC8C,EAET,EAAEG,EAAmB,CAAC;EAAA,OAEhB+B,YAAY;AAAA;AAKrB,OAAO,SAAAK,aAAAnC,OAAA,EAAAoC,SAAA,EAAAC,QAAA;EAAA,MAAA/E,CAAA,GAAAC,EAAA;EAAA,IAAAM,EAAA;EAAA,IAAAE,EAAA;EAAA,IAAAT,CAAA,QAAA+E,QAAA,IAAA/E,CAAA,QAAA0C,OAAA,IAAA1C,CAAA,QAAA8E,SAAA;IAKKvE,EAAA,GAAAA,CAAA;MACR,IAAI,CAACmC,OAAO;QAAA,OAASsC,MAAQ;MAAA;MAAA,OAEtBtC,OAAO,CAAAuC,IAAK,CAACH,SAAS,EAAEI,CAAA,IAAKH,QAAQ,CAACG,CAAM,CAAC,CAAC;IAAA,CACtD;IAAEzE,EAAA,IAACiC,OAAO,EAAEoC,SAAS,EAAEC,QAAQ,CAAC;IAAA/E,CAAA,MAAA+E,QAAA;IAAA/E,CAAA,MAAA0C,OAAA;IAAA1C,CAAA,MAAA8E,SAAA;IAAA9E,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAS,EAAA;EAAA;IAAAF,EAAA,GAAAP,CAAA;IAAAS,EAAA,GAAAT,CAAA;EAAA;EAJjCR,SAAS,CAACe,EAIT,EAAEE,EAA8B,CAAC;AAAA;AAT7B,SAAAuE,OAAA;AAlJsB,SAAA/C,MAAAkD,GAAA;EAAA,OAsCmBA,GAAG,CAAA7D,IAAK,CAAAe,MAAO;AAAA;AAtClC,SAAAE,OAAA6C,KAAA;EAAA,OA+CqBD,KAAG,CAAA7D,IAAK,CAAA+D,EAAG;AAAA;AA/ChC,SAAAxC,OAAAyC,KAAA;EAAA,OA8DVH,KAAG,CAAA7D,IAAK,CAAA+D,EAAG;AAAA;AA9DD,SAAAvC,OAAAyC,KAAA;EAgErBC,OAAO,CAAAC,KAAM,CAAC,qCAAqC,EAAEN,KAAG,CAAC;EAAA,OAClD,EAAE;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"use_jolt.js","names":["JoltClient","useQuery","useQueryClient","useSuspenseQuery","useCallback","useEffect","useMemo","AppState","useChatContext","Client","Uri","throwResponseError","FIVE_SECONDS","useJoltClient","$","_c","session","sessionAccessToken","token","access_token","queryClient","t0","uri","t1","root","api","defaultHeaders","headers","version","apiClient","t2","fetchQuery","queryKey","queryFn","post","url","data","type","attributes","catch","staleTime","fetchJoltToken","t3","Symbol","for","t4","then","_temp","Infinity","gcTime","refetchOnWindowFocus","wssUrl","t5","_temp2","fetchAuthTokenFn","t6","channel","connectionId","cid","_temp3","_temp4","fetchSubscribeToken","t7","channel_0","connectionId_0","options","fetchSubscribeTokenFn","t8","Boolean","t9","t10","logToConsole","t11","enabled","joltClient","pingSubscribedJoltClients","getQueryCache","findAll","forEach","query","state","subscriptions","length","ping","foregroundPingListeners","Map","subscribeToForegroundPing","existing","get","mounts","previousState","currentState","subscription","addEventListener","nextState","set","remove","unsubscribeFromForegroundPing","delete","useJoltForegroundPing","useJoltChannel","channelName","undefined","jolt","ready","alreadySubscribed","find","c","subscribe","handleSubscribe","removeQueries","exact","unsubscribe","handleUnsubscribe","useJoltEvent","eventName","callback","_temp5","bind","e","res","res_0","id","res_1","res_2","console","error"],"sources":["../../src/hooks/use_jolt.ts"],"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 { QueryClient, useQuery, useQueryClient, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { AppState, AppStateStatus } from 'react-native'\nimport { useChatContext } from '../contexts/chat_context'\nimport { ApiResource } from '../types'\nimport type { JoltSubscriptionPattern } from '../types/jolt_events'\nimport { Client, Uri } from '../utils'\nimport { throwResponseError } from '../utils/response_error'\nimport { FIVE_SECONDS } from '../utils/time'\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\n .post<ApiResource<JoltResponse>>({\n url: '/me/jolt_authorize',\n data: {\n data: {\n type: 'JoltToken',\n attributes: {},\n },\n },\n })\n .catch(throwResponseError)\n },\n staleTime: FIVE_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\nconst pingSubscribedJoltClients = (queryClient: QueryClient) => {\n queryClient\n .getQueryCache()\n .findAll({ queryKey: ['jolt-client'] })\n .forEach(query => {\n const joltClient = query.state.data as JoltClient | undefined\n if (!joltClient || joltClient.subscriptions.length === 0) return\n\n try {\n joltClient.ping()\n } catch {}\n })\n}\n\nconst foregroundPingListeners = new Map<QueryClient, { mounts: number; remove: () => void }>()\n\nconst subscribeToForegroundPing = (queryClient: QueryClient) => {\n const existing = foregroundPingListeners.get(queryClient)\n if (existing) {\n existing.mounts += 1\n return\n }\n\n let previousState: AppStateStatus = AppState.currentState\n const subscription = AppState.addEventListener('change', nextState => {\n if (nextState === 'active' && previousState !== 'active') {\n pingSubscribedJoltClients(queryClient)\n }\n previousState = nextState\n })\n\n foregroundPingListeners.set(queryClient, { mounts: 1, remove: () => subscription.remove() })\n}\n\nconst unsubscribeFromForegroundPing = (queryClient: QueryClient) => {\n const existing = foregroundPingListeners.get(queryClient)\n if (!existing) return\n\n existing.mounts -= 1\n if (existing.mounts > 0) return\n\n existing.remove()\n foregroundPingListeners.delete(queryClient)\n}\n\nexport const useJoltForegroundPing = () => {\n const queryClient = useQueryClient()\n\n useEffect(() => {\n subscribeToForegroundPing(queryClient)\n\n return () => unsubscribeFromForegroundPing(queryClient)\n }, [queryClient])\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: JoltSubscriptionPattern,\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"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare function useManualArchivingEnabled(): boolean;
2
+ //# sourceMappingURL=use_manual_archiving_enabled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_manual_archiving_enabled.d.ts","sourceRoot":"","sources":["../../src/hooks/use_manual_archiving_enabled.ts"],"names":[],"mappings":"AAEA,wBAAgB,yBAAyB,YAOxC"}
@@ -0,0 +1,18 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { availableFeatures, useFeatures } from './use_features';
3
+ export function useManualArchivingEnabled() {
4
+ const $ = _c(2);
5
+ const {
6
+ featureEnabled
7
+ } = useFeatures();
8
+ let t0;
9
+ if ($[0] !== featureEnabled) {
10
+ t0 = featureEnabled(availableFeatures.manual_archiving) || featureEnabled(availableFeatures.manual_archiving_rollout);
11
+ $[0] = featureEnabled;
12
+ $[1] = t0;
13
+ } else {
14
+ t0 = $[1];
15
+ }
16
+ return t0;
17
+ }
18
+ //# sourceMappingURL=use_manual_archiving_enabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_manual_archiving_enabled.js","names":["availableFeatures","useFeatures","useManualArchivingEnabled","$","_c","featureEnabled","t0","manual_archiving","manual_archiving_rollout"],"sources":["../../src/hooks/use_manual_archiving_enabled.ts"],"sourcesContent":["import { availableFeatures, useFeatures } from './use_features'\n\nexport function useManualArchivingEnabled() {\n const { featureEnabled } = useFeatures()\n\n return (\n featureEnabled(availableFeatures.manual_archiving) ||\n featureEnabled(availableFeatures.manual_archiving_rollout)\n )\n}\n"],"mappings":";AAAA,SAASA,iBAAiB,EAAEC,WAAW,QAAQ,gBAAgB;AAE/D,OAAO,SAAAC,0BAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACL;IAAAC;EAAA,IAA2BJ,WAAW,CAAC,CAAC;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAE,cAAA;IAGtCC,EAAA,GAAAD,cAAc,CAACL,iBAAiB,CAAAO,gBACyB,CAAC,IAA1DF,cAAc,CAACL,iBAAiB,CAAAQ,wBAAyB,CAAC;IAAAL,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,OAD1DG,EAC0D;AAAA","ignoreList":[]}
@@ -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;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,YAAY,EAAE,OAAc,EAAE,EAAE,KAAK,QAqB/E"}
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;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,YAAY,EAAE,OAAc,EAAE,EAAE,KAAK,QAsB/E"}
@@ -18,13 +18,13 @@ export function useMarkLatestMessageRead({
18
18
  }), [markRead]);
19
19
  const unreadCount = conversation.unreadCount;
20
20
  const unreadReaction = conversation.unreadReaction;
21
- const shouldMarkRead = Boolean(unreadCount >= 1 || unreadReaction || !firedOnce.current);
21
+ const shouldMarkRead = !firedOnce.current || enabled && Boolean(unreadCount >= 1 || unreadReaction);
22
22
  const appState = useAppState();
23
23
  const isActive = appState === 'active';
24
24
  useEffect(() => {
25
- if (!enabled || !isActive || !shouldMarkRead) return;
25
+ if (!isActive || !shouldMarkRead) return;
26
26
  firedOnce.current = true;
27
27
  debouncedMarkRead(true);
28
- }, [debouncedMarkRead, enabled, isActive, shouldMarkRead, unreadReaction]);
28
+ }, [debouncedMarkRead, isActive, shouldMarkRead, unreadReaction]);
29
29
  }
30
30
  //# sourceMappingURL=use_mark_latest_message_read.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_mark_latest_message_read.js","names":["debounce","useEffect","useMemo","useRef","useAppState","useConversationsMarkRead","useMarkLatestMessageRead","conversation","enabled","firedOnce","markRead","debouncedMarkRead","leading","trailing","unreadCount","unreadReaction","shouldMarkRead","Boolean","current","appState","isActive"],"sources":["../../src/hooks/use_mark_latest_message_read.ts"],"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 enabled?: boolean\n}\n\nexport function useMarkLatestMessageRead({ conversation, enabled = true }: 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 unreadReaction = conversation.unreadReaction\n\n const shouldMarkRead = Boolean(unreadCount >= 1 || unreadReaction || !firedOnce.current)\n const appState = useAppState()\n const isActive = appState === 'active'\n\n useEffect(() => {\n if (!enabled || !isActive || !shouldMarkRead) return\n\n firedOnce.current = true\n\n debouncedMarkRead(true)\n }, [debouncedMarkRead, enabled, isActive, shouldMarkRead, unreadReaction])\n}\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,QAAQ;AACjC,SAASC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AAElD,SAASC,WAAW,QAAQ,iBAAiB;AAC7C,SAASC,wBAAwB,QAAQ,6BAA6B;AAQtE,OAAO,SAASC,wBAAwBA,CAAC;EAAEC,YAAY;EAAEC,OAAO,GAAG;AAAY,CAAC,EAAE;EAChF,MAAMC,SAAS,GAAGN,MAAM,CAAU,KAAK,CAAC;EACxC,MAAM;IAAEO;EAAS,CAAC,GAAGL,wBAAwB,CAAC;IAAEE;EAAa,CAAC,CAAC;EAC/D,MAAMI,iBAAiB,GAAGT,OAAO,CAC/B,MAAMF,QAAQ,CAACU,QAAQ,EAAE,IAAI,EAAE;IAAEE,OAAO,EAAE,IAAI;IAAEC,QAAQ,EAAE;EAAK,CAAC,CAAC,EACjE,CAACH,QAAQ,CACX,CAAC;EACD,MAAMI,WAAW,GAAGP,YAAY,CAACO,WAAW;EAC5C,MAAMC,cAAc,GAAGR,YAAY,CAACQ,cAAc;EAElD,MAAMC,cAAc,GAAGC,OAAO,CAACH,WAAW,IAAI,CAAC,IAAIC,cAAc,IAAI,CAACN,SAAS,CAACS,OAAO,CAAC;EACxF,MAAMC,QAAQ,GAAGf,WAAW,CAAC,CAAC;EAC9B,MAAMgB,QAAQ,GAAGD,QAAQ,KAAK,QAAQ;EAEtClB,SAAS,CAAC,MAAM;IACd,IAAI,CAACO,OAAO,IAAI,CAACY,QAAQ,IAAI,CAACJ,cAAc,EAAE;IAE9CP,SAAS,CAACS,OAAO,GAAG,IAAI;IAExBP,iBAAiB,CAAC,IAAI,CAAC;EACzB,CAAC,EAAE,CAACA,iBAAiB,EAAEH,OAAO,EAAEY,QAAQ,EAAEJ,cAAc,EAAED,cAAc,CAAC,CAAC;AAC5E","ignoreList":[]}
1
+ {"version":3,"file":"use_mark_latest_message_read.js","names":["debounce","useEffect","useMemo","useRef","useAppState","useConversationsMarkRead","useMarkLatestMessageRead","conversation","enabled","firedOnce","markRead","debouncedMarkRead","leading","trailing","unreadCount","unreadReaction","shouldMarkRead","current","Boolean","appState","isActive"],"sources":["../../src/hooks/use_mark_latest_message_read.ts"],"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 enabled?: boolean\n}\n\nexport function useMarkLatestMessageRead({ conversation, enabled = true }: 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 unreadReaction = conversation.unreadReaction\n\n const shouldMarkRead =\n !firedOnce.current || (enabled && Boolean(unreadCount >= 1 || unreadReaction))\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 }, [debouncedMarkRead, isActive, shouldMarkRead, unreadReaction])\n}\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,QAAQ;AACjC,SAASC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AAElD,SAASC,WAAW,QAAQ,iBAAiB;AAC7C,SAASC,wBAAwB,QAAQ,6BAA6B;AAQtE,OAAO,SAASC,wBAAwBA,CAAC;EAAEC,YAAY;EAAEC,OAAO,GAAG;AAAY,CAAC,EAAE;EAChF,MAAMC,SAAS,GAAGN,MAAM,CAAU,KAAK,CAAC;EACxC,MAAM;IAAEO;EAAS,CAAC,GAAGL,wBAAwB,CAAC;IAAEE;EAAa,CAAC,CAAC;EAC/D,MAAMI,iBAAiB,GAAGT,OAAO,CAC/B,MAAMF,QAAQ,CAACU,QAAQ,EAAE,IAAI,EAAE;IAAEE,OAAO,EAAE,IAAI;IAAEC,QAAQ,EAAE;EAAK,CAAC,CAAC,EACjE,CAACH,QAAQ,CACX,CAAC;EACD,MAAMI,WAAW,GAAGP,YAAY,CAACO,WAAW;EAC5C,MAAMC,cAAc,GAAGR,YAAY,CAACQ,cAAc;EAElD,MAAMC,cAAc,GAClB,CAACP,SAAS,CAACQ,OAAO,IAAKT,OAAO,IAAIU,OAAO,CAACJ,WAAW,IAAI,CAAC,IAAIC,cAAc,CAAE;EAChF,MAAMI,QAAQ,GAAGf,WAAW,CAAC,CAAC;EAC9B,MAAMgB,QAAQ,GAAGD,QAAQ,KAAK,QAAQ;EAEtClB,SAAS,CAAC,MAAM;IACd,IAAI,CAACmB,QAAQ,IAAI,CAACJ,cAAc,EAAE;IAElCP,SAAS,CAACQ,OAAO,GAAG,IAAI;IAExBN,iBAAiB,CAAC,IAAI,CAAC;EACzB,CAAC,EAAE,CAACA,iBAAiB,EAAES,QAAQ,EAAEJ,cAAc,EAAED,cAAc,CAAC,CAAC;AACnE","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare const useReduceMotion: () => boolean;
2
+ //# sourceMappingURL=use_reduce_motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_reduce_motion.d.ts","sourceRoot":"","sources":["../../src/hooks/use_reduce_motion.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,eAc3B,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { AccessibilityInfo } from 'react-native';
4
+ import { useReducedMotion } from 'react-native-reanimated';
5
+ export const useReduceMotion = () => {
6
+ const $ = _c(2);
7
+ const [reduceMotion, setReduceMotion] = useState(useReducedMotion());
8
+ let t0;
9
+ let t1;
10
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
11
+ t0 = () => {
12
+ AccessibilityInfo.isReduceMotionEnabled().then(setReduceMotion);
13
+ const subscription = AccessibilityInfo.addEventListener("reduceMotionChanged", setReduceMotion);
14
+ return () => {
15
+ subscription.remove();
16
+ };
17
+ };
18
+ t1 = [];
19
+ $[0] = t0;
20
+ $[1] = t1;
21
+ } else {
22
+ t0 = $[0];
23
+ t1 = $[1];
24
+ }
25
+ useEffect(t0, t1);
26
+ return reduceMotion;
27
+ };
28
+ //# sourceMappingURL=use_reduce_motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_reduce_motion.js","names":["useEffect","useState","AccessibilityInfo","useReducedMotion","useReduceMotion","$","_c","reduceMotion","setReduceMotion","t0","t1","Symbol","for","isReduceMotionEnabled","then","subscription","addEventListener","remove"],"sources":["../../src/hooks/use_reduce_motion.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { AccessibilityInfo } from 'react-native'\nimport { useReducedMotion } from 'react-native-reanimated'\n\nexport const useReduceMotion = () => {\n const [reduceMotion, setReduceMotion] = useState(useReducedMotion())\n\n useEffect(() => {\n AccessibilityInfo.isReduceMotionEnabled().then(setReduceMotion)\n\n const subscription = AccessibilityInfo.addEventListener('reduceMotionChanged', setReduceMotion)\n\n return () => {\n subscription.remove()\n }\n }, [])\n\n return reduceMotion\n}\n"],"mappings":";AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,iBAAiB,QAAQ,cAAc;AAChD,SAASC,gBAAgB,QAAQ,yBAAyB;AAE1D,OAAO,MAAMC,eAAe,GAAGA,CAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAC7B,OAAAC,YAAA,EAAAC,eAAA,IAAwCP,QAAQ,CAACE,gBAAgB,CAAC,CAAC,CAAC;EAAA,IAAAM,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAL,CAAA,QAAAM,MAAA,CAAAC,GAAA;IAE1DH,EAAA,GAAAA,CAAA;MACRP,iBAAiB,CAAAW,qBAAsB,CAAC,CAAC,CAAAC,IAAK,CAACN,eAAe,CAAC;MAE/D,MAAAO,YAAA,GAAqBb,iBAAiB,CAAAc,gBAAiB,CAAC,qBAAqB,EAAER,eAAe,CAAC;MAAA,OAExF;QACLO,YAAY,CAAAE,MAAO,CAAC,CAAC;MAAA,CACtB;IAAA,CACF;IAAEP,EAAA,KAAE;IAAAL,CAAA,MAAAI,EAAA;IAAAJ,CAAA,MAAAK,EAAA;EAAA;IAAAD,EAAA,GAAAJ,CAAA;IAAAK,EAAA,GAAAL,CAAA;EAAA;EARLL,SAAS,CAACS,EAQT,EAAEC,EAAE,CAAC;EAAA,OAECH,YAAY;AAAA,CACpB","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import { ConversationResource } from '../types';
2
+ export declare function useUnarchiveConversationAction(conversation: ConversationResource): {
3
+ label: string;
4
+ onPress: () => void;
5
+ loading: boolean;
6
+ } | undefined;
7
+ //# sourceMappingURL=use_unarchive_conversation_action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_unarchive_conversation_action.d.ts","sourceRoot":"","sources":["../../src/hooks/use_unarchive_conversation_action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAK/C,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,oBAAoB;;;;cAkBhF"}