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

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 (508) hide show
  1. package/build/components/conversation/attachments/attachment_card.js +2 -2
  2. package/build/components/conversation/attachments/attachment_card.js.map +1 -1
  3. package/build/components/conversation/attachments/attachment_deleting_overlay.js +1 -1
  4. package/build/components/conversation/attachments/attachment_deleting_overlay.js.map +1 -1
  5. package/build/components/conversation/attachments/audio_attachment.d.ts.map +1 -1
  6. package/build/components/conversation/attachments/audio_attachment.js +3 -3
  7. package/build/components/conversation/attachments/audio_attachment.js.map +1 -1
  8. package/build/components/conversation/attachments/expanded_link.d.ts.map +1 -1
  9. package/build/components/conversation/attachments/expanded_link.js +2 -2
  10. package/build/components/conversation/attachments/expanded_link.js.map +1 -1
  11. package/build/components/conversation/attachments/generic_file_attachment.d.ts.map +1 -1
  12. package/build/components/conversation/attachments/generic_file_attachment.js +4 -4
  13. package/build/components/conversation/attachments/generic_file_attachment.js.map +1 -1
  14. package/build/components/conversation/attachments/giphy_attachment.d.ts.map +1 -1
  15. package/build/components/conversation/attachments/giphy_attachment.js +3 -3
  16. package/build/components/conversation/attachments/giphy_attachment.js.map +1 -1
  17. package/build/components/conversation/attachments/image_attachment.d.ts.map +1 -1
  18. package/build/components/conversation/attachments/image_attachment.js +6 -6
  19. package/build/components/conversation/attachments/image_attachment.js.map +1 -1
  20. package/build/components/conversation/attachments/video_attachment.d.ts.map +1 -1
  21. package/build/components/conversation/attachments/video_attachment.js +4 -4
  22. package/build/components/conversation/attachments/video_attachment.js.map +1 -1
  23. package/build/components/conversation/jump_to_bottom_button.js +1 -1
  24. package/build/components/conversation/jump_to_bottom_button.js.map +1 -1
  25. package/build/components/conversation/message.d.ts.map +1 -1
  26. package/build/components/conversation/message.js +11 -11
  27. package/build/components/conversation/message.js.map +1 -1
  28. package/build/components/conversation/message_attachments.d.ts.map +1 -1
  29. package/build/components/conversation/message_attachments.js +4 -4
  30. package/build/components/conversation/message_attachments.js.map +1 -1
  31. package/build/components/conversation/message_form/message_form_attachment_image.d.ts.map +1 -1
  32. package/build/components/conversation/message_form/message_form_attachment_image.js.map +1 -1
  33. package/build/components/conversation/message_form/message_form_attachment_video.d.ts.map +1 -1
  34. package/build/components/conversation/message_form/message_form_attachment_video.js.map +1 -1
  35. package/build/components/conversation/message_form.d.ts.map +1 -1
  36. package/build/components/conversation/message_form.js +9 -9
  37. package/build/components/conversation/message_form.js.map +1 -1
  38. package/build/components/conversation/message_markdown.js +2 -2
  39. package/build/components/conversation/message_markdown.js.map +1 -1
  40. package/build/components/conversation/message_reaction.d.ts +1 -1
  41. package/build/components/conversation/message_reaction.d.ts.map +1 -1
  42. package/build/components/conversation/message_reaction.js +2 -2
  43. package/build/components/conversation/message_reaction.js.map +1 -1
  44. package/build/components/conversation/message_read_receipts.d.ts.map +1 -1
  45. package/build/components/conversation/message_read_receipts.js +1 -1
  46. package/build/components/conversation/message_read_receipts.js.map +1 -1
  47. package/build/components/conversation/messages_disabled_banners.js +1 -1
  48. package/build/components/conversation/messages_disabled_banners.js.map +1 -1
  49. package/build/components/conversation/reply_shadow_message.d.ts.map +1 -1
  50. package/build/components/conversation/reply_shadow_message.js +7 -7
  51. package/build/components/conversation/reply_shadow_message.js.map +1 -1
  52. package/build/components/conversation/typing_indicator.js +1 -1
  53. package/build/components/conversation/typing_indicator.js.map +1 -1
  54. package/build/components/conversations/conversation_preview.d.ts.map +1 -1
  55. package/build/components/conversations/conversation_preview.js +3 -3
  56. package/build/components/conversations/conversation_preview.js.map +1 -1
  57. package/build/components/conversations/conversations.js +1 -1
  58. package/build/components/conversations/conversations.js.map +1 -1
  59. package/build/components/conversations/mute_indicator.js +1 -1
  60. package/build/components/conversations/mute_indicator.js.map +1 -1
  61. package/build/components/conversations/swipeable_toggle_button.d.ts.map +1 -1
  62. package/build/components/conversations/swipeable_toggle_button.js +2 -2
  63. package/build/components/conversations/swipeable_toggle_button.js.map +1 -1
  64. package/build/components/conversations/unread_count_badge.js +1 -1
  65. package/build/components/conversations/unread_count_badge.js.map +1 -1
  66. package/build/components/display/action_button.js +3 -3
  67. package/build/components/display/action_button.js.map +1 -1
  68. package/build/components/display/banner.d.ts +1 -1
  69. package/build/components/display/banner.d.ts.map +1 -1
  70. package/build/components/display/banner.js.map +1 -1
  71. package/build/components/display/banner_collapsible.d.ts.map +1 -1
  72. package/build/components/display/banner_collapsible.js +1 -1
  73. package/build/components/display/banner_collapsible.js.map +1 -1
  74. package/build/components/display/button.d.ts.map +1 -1
  75. package/build/components/display/button.js +2 -2
  76. package/build/components/display/button.js.map +1 -1
  77. package/build/components/display/child_notice.d.ts +1 -1
  78. package/build/components/display/child_notice.d.ts.map +1 -1
  79. package/build/components/display/child_notice.js +3 -3
  80. package/build/components/display/child_notice.js.map +1 -1
  81. package/build/components/display/heading.d.ts.map +1 -1
  82. package/build/components/display/heading.js +2 -2
  83. package/build/components/display/heading.js.map +1 -1
  84. package/build/components/display/icon.d.ts +4 -4
  85. package/build/components/display/icon.d.ts.map +1 -1
  86. package/build/components/display/icon.js +5 -5
  87. package/build/components/display/icon.js.map +1 -1
  88. package/build/components/display/icon_button.d.ts.map +1 -1
  89. package/build/components/display/icon_button.js +1 -1
  90. package/build/components/display/icon_button.js.map +1 -1
  91. package/build/components/display/image_attachment_preview.js +3 -3
  92. package/build/components/display/image_attachment_preview.js.map +1 -1
  93. package/build/components/display/person.d.ts.map +1 -1
  94. package/build/components/display/person.js +1 -1
  95. package/build/components/display/person.js.map +1 -1
  96. package/build/components/display/platform_modal_header_buttons.d.ts +1 -1
  97. package/build/components/display/platform_modal_header_buttons.d.ts.map +1 -1
  98. package/build/components/display/platform_modal_header_buttons.js +3 -3
  99. package/build/components/display/platform_modal_header_buttons.js.map +1 -1
  100. package/build/components/display/text.d.ts.map +1 -1
  101. package/build/components/display/text.js +1 -1
  102. package/build/components/display/text.js.map +1 -1
  103. package/build/components/display/text_inline_button.d.ts.map +1 -1
  104. package/build/components/display/text_inline_button.js +2 -2
  105. package/build/components/display/text_inline_button.js.map +1 -1
  106. package/build/components/display/toggle_button.d.ts.map +1 -1
  107. package/build/components/display/toggle_button.js +3 -3
  108. package/build/components/display/toggle_button.js.map +1 -1
  109. package/build/components/display/video_attachment_preview.js +4 -4
  110. package/build/components/display/video_attachment_preview.js.map +1 -1
  111. package/build/components/group_conversation_list.d.ts.map +1 -1
  112. package/build/components/group_conversation_list.js +2 -2
  113. package/build/components/group_conversation_list.js.map +1 -1
  114. package/build/components/primitive/avatar_primitive.d.ts.map +1 -1
  115. package/build/components/primitive/avatar_primitive.js +1 -1
  116. package/build/components/primitive/avatar_primitive.js.map +1 -1
  117. package/build/components/primitive/banner_primitive.d.ts +1 -1
  118. package/build/components/primitive/banner_primitive.d.ts.map +1 -1
  119. package/build/components/primitive/banner_primitive.js +3 -3
  120. package/build/components/primitive/banner_primitive.js.map +1 -1
  121. package/build/components/primitive/form_sheet.d.ts.map +1 -1
  122. package/build/components/primitive/form_sheet.js +1 -1
  123. package/build/components/primitive/form_sheet.js.map +1 -1
  124. package/build/components/safe_area_modal.js +1 -1
  125. package/build/components/safe_area_modal.js.map +1 -1
  126. package/build/contexts/api_provider.js +3 -3
  127. package/build/contexts/api_provider.js.map +1 -1
  128. package/build/contexts/chat_context.d.ts +3 -3
  129. package/build/contexts/chat_context.d.ts.map +1 -1
  130. package/build/contexts/chat_context.js +1 -1
  131. package/build/contexts/chat_context.js.map +1 -1
  132. package/build/contexts/conversations_context.d.ts +1 -1
  133. package/build/contexts/conversations_context.d.ts.map +1 -1
  134. package/build/contexts/conversations_context.js.map +1 -1
  135. package/build/contexts/session_context.d.ts.map +1 -1
  136. package/build/contexts/session_context.js +1 -1
  137. package/build/contexts/session_context.js.map +1 -1
  138. package/build/hooks/groups/use_groups_conversation_create.d.ts +2 -1
  139. package/build/hooks/groups/use_groups_conversation_create.d.ts.map +1 -1
  140. package/build/hooks/groups/use_groups_conversation_create.js +3 -2
  141. package/build/hooks/groups/use_groups_conversation_create.js.map +1 -1
  142. package/build/hooks/services/use_find_or_create_services_conversation.d.ts.map +1 -1
  143. package/build/hooks/services/use_find_or_create_services_conversation.js +2 -2
  144. package/build/hooks/services/use_find_or_create_services_conversation.js.map +1 -1
  145. package/build/hooks/services/use_team_members_for_new_conversation.js +1 -1
  146. package/build/hooks/services/use_team_members_for_new_conversation.js.map +1 -1
  147. package/build/hooks/services/use_team_plans.js +2 -2
  148. package/build/hooks/services/use_team_plans.js.map +1 -1
  149. package/build/hooks/use_api_client.d.ts.map +1 -1
  150. package/build/hooks/use_api_client.js +1 -1
  151. package/build/hooks/use_api_client.js.map +1 -1
  152. package/build/hooks/use_attachment_uploader.d.ts.map +1 -1
  153. package/build/hooks/use_attachment_uploader.js +1 -1
  154. package/build/hooks/use_attachment_uploader.js.map +1 -1
  155. package/build/hooks/use_broadcast_typing_status.js +1 -1
  156. package/build/hooks/use_broadcast_typing_status.js.map +1 -1
  157. package/build/hooks/use_conversation.js +2 -2
  158. package/build/hooks/use_conversation.js.map +1 -1
  159. package/build/hooks/use_conversation_membership.js +2 -2
  160. package/build/hooks/use_conversation_membership.js.map +1 -1
  161. package/build/hooks/use_conversation_message.js +1 -1
  162. package/build/hooks/use_conversation_message.js.map +1 -1
  163. package/build/hooks/use_conversation_messages.d.ts.map +1 -1
  164. package/build/hooks/use_conversation_messages.js +1 -1
  165. package/build/hooks/use_conversation_messages.js.map +1 -1
  166. package/build/hooks/use_conversation_messages_jolt_events.js +8 -8
  167. package/build/hooks/use_conversation_messages_jolt_events.js.map +1 -1
  168. package/build/hooks/use_create_android_ripple_color.js +1 -1
  169. package/build/hooks/use_create_android_ripple_color.js.map +1 -1
  170. package/build/hooks/use_current_person.js.map +1 -1
  171. package/build/hooks/use_features.d.ts +1 -0
  172. package/build/hooks/use_features.d.ts.map +1 -1
  173. package/build/hooks/use_features.js +1 -0
  174. package/build/hooks/use_features.js.map +1 -1
  175. package/build/hooks/use_font_scale.js +1 -1
  176. package/build/hooks/use_font_scale.js.map +1 -1
  177. package/build/hooks/use_giphy.d.ts.map +1 -1
  178. package/build/hooks/use_giphy.js.map +1 -1
  179. package/build/hooks/use_interaction_ghost_color.js +1 -1
  180. package/build/hooks/use_interaction_ghost_color.js.map +1 -1
  181. package/build/hooks/use_live_relative_time.d.ts.map +1 -1
  182. package/build/hooks/use_live_relative_time.js +1 -1
  183. package/build/hooks/use_live_relative_time.js.map +1 -1
  184. package/build/hooks/use_message_create_or_update.d.ts.map +1 -1
  185. package/build/hooks/use_message_create_or_update.js +5 -5
  186. package/build/hooks/use_message_create_or_update.js.map +1 -1
  187. package/build/hooks/use_message_draft.js +1 -1
  188. package/build/hooks/use_message_draft.js.map +1 -1
  189. package/build/hooks/use_message_reaction_toggle.d.ts.map +1 -1
  190. package/build/hooks/use_message_reaction_toggle.js +2 -2
  191. package/build/hooks/use_message_reaction_toggle.js.map +1 -1
  192. package/build/hooks/use_my_gender.d.ts +7 -0
  193. package/build/hooks/use_my_gender.d.ts.map +1 -0
  194. package/build/hooks/use_my_gender.js +28 -0
  195. package/build/hooks/use_my_gender.js.map +1 -0
  196. package/build/hooks/use_organization.d.ts.map +1 -1
  197. package/build/hooks/use_organization.js.map +1 -1
  198. package/build/hooks/use_product_analytics.d.ts.map +1 -1
  199. package/build/hooks/use_product_analytics.js +1 -1
  200. package/build/hooks/use_product_analytics.js.map +1 -1
  201. package/build/hooks/use_report_message.d.ts.map +1 -1
  202. package/build/hooks/use_report_message.js +1 -1
  203. package/build/hooks/use_report_message.js.map +1 -1
  204. package/build/hooks/use_submit_age_check.d.ts.map +1 -1
  205. package/build/hooks/use_submit_age_check.js +2 -2
  206. package/build/hooks/use_submit_age_check.js.map +1 -1
  207. package/build/hooks/use_suspense_api.d.ts +1 -1
  208. package/build/hooks/use_suspense_api.d.ts.map +1 -1
  209. package/build/hooks/use_suspense_api.js +1 -1
  210. package/build/hooks/use_suspense_api.js.map +1 -1
  211. package/build/hooks/use_typing_indicators.d.ts.map +1 -1
  212. package/build/hooks/use_typing_indicators.js +1 -1
  213. package/build/hooks/use_typing_indicators.js.map +1 -1
  214. package/build/navigation/chat_access_gate.js +4 -4
  215. package/build/navigation/chat_access_gate.js.map +1 -1
  216. package/build/navigation/index.d.ts +4 -4
  217. package/build/navigation/index.d.ts.map +1 -1
  218. package/build/navigation/index.js +6 -6
  219. package/build/navigation/index.js.map +1 -1
  220. package/build/navigation/screenLayout.js +1 -1
  221. package/build/navigation/screenLayout.js.map +1 -1
  222. package/build/polyfills/events/Event.d.ts +0 -4
  223. package/build/polyfills/events/Event.d.ts.map +1 -1
  224. package/build/polyfills/events/Event.js +5 -1
  225. package/build/polyfills/events/Event.js.map +1 -1
  226. package/build/polyfills/events/EventTarget.d.ts +0 -3
  227. package/build/polyfills/events/EventTarget.d.ts.map +1 -1
  228. package/build/polyfills/events/EventTarget.js +1 -1
  229. package/build/polyfills/events/EventTarget.js.map +1 -1
  230. package/build/screens/age_check/age_check_required_screen.d.ts.map +1 -1
  231. package/build/screens/age_check/age_check_required_screen.js +5 -5
  232. package/build/screens/age_check/age_check_required_screen.js.map +1 -1
  233. package/build/screens/age_check/age_check_underage_screen.d.ts.map +1 -1
  234. package/build/screens/age_check/age_check_underage_screen.js +1 -1
  235. package/build/screens/age_check/age_check_underage_screen.js.map +1 -1
  236. package/build/screens/age_check/components/age_check_select_birthdate_modal.d.ts.map +1 -1
  237. package/build/screens/age_check/components/age_check_select_birthdate_modal.js +2 -2
  238. package/build/screens/age_check/components/age_check_select_birthdate_modal.js.map +1 -1
  239. package/build/screens/attachment_actions/hooks/useDeleteAttachment.js +2 -2
  240. package/build/screens/attachment_actions/hooks/useDeleteAttachment.js.map +1 -1
  241. package/build/screens/bug_report_screen.d.ts +1 -1
  242. package/build/screens/bug_report_screen.d.ts.map +1 -1
  243. package/build/screens/bug_report_screen.js +9 -9
  244. package/build/screens/bug_report_screen.js.map +1 -1
  245. package/build/screens/conversation/message_read_receipts_screen.js +2 -2
  246. package/build/screens/conversation/message_read_receipts_screen.js.map +1 -1
  247. package/build/screens/conversation_details_screen.d.ts.map +1 -1
  248. package/build/screens/conversation_details_screen.js.map +1 -1
  249. package/build/screens/conversation_filter_recipients/components/checkbox_row.d.ts.map +1 -1
  250. package/build/screens/conversation_filter_recipients/components/checkbox_row.js +2 -2
  251. package/build/screens/conversation_filter_recipients/components/checkbox_row.js.map +1 -1
  252. package/build/screens/conversation_filter_recipients/components/header_row.d.ts.map +1 -1
  253. package/build/screens/conversation_filter_recipients/components/header_row.js +3 -3
  254. package/build/screens/conversation_filter_recipients/components/header_row.js.map +1 -1
  255. package/build/screens/conversation_filter_recipients/conversation_filter_recipients_screen.d.ts.map +1 -1
  256. package/build/screens/conversation_filter_recipients/conversation_filter_recipients_screen.js +1 -1
  257. package/build/screens/conversation_filter_recipients/conversation_filter_recipients_screen.js.map +1 -1
  258. package/build/screens/conversation_filter_recipients/types.d.ts +1 -1
  259. package/build/screens/conversation_filter_recipients/types.d.ts.map +1 -1
  260. package/build/screens/conversation_filter_recipients/types.js.map +1 -1
  261. package/build/screens/conversation_filters/components/rows.d.ts.map +1 -1
  262. package/build/screens/conversation_filters/components/rows.js +1 -1
  263. package/build/screens/conversation_filters/components/rows.js.map +1 -1
  264. package/build/screens/conversation_filters/context/conversation_filter_context.d.ts.map +1 -1
  265. package/build/screens/conversation_filters/context/conversation_filter_context.js +2 -2
  266. package/build/screens/conversation_filters/context/conversation_filter_context.js.map +1 -1
  267. package/build/screens/conversation_filters/group_filters.d.ts +1 -1
  268. package/build/screens/conversation_filters/group_filters.d.ts.map +1 -1
  269. package/build/screens/conversation_filters/group_filters.js +1 -1
  270. package/build/screens/conversation_filters/group_filters.js.map +1 -1
  271. package/build/screens/conversation_filters/hooks/filters.d.ts +1 -1
  272. package/build/screens/conversation_filters/hooks/filters.d.ts.map +1 -1
  273. package/build/screens/conversation_filters/hooks/filters.js.map +1 -1
  274. package/build/screens/conversation_filters_screen.d.ts.map +1 -1
  275. package/build/screens/conversation_filters_screen.js +2 -2
  276. package/build/screens/conversation_filters_screen.js.map +1 -1
  277. package/build/screens/conversation_new/components/filter_by_plan.d.ts.map +1 -1
  278. package/build/screens/conversation_new/components/filter_by_plan.js +4 -4
  279. package/build/screens/conversation_new/components/filter_by_plan.js.map +1 -1
  280. package/build/screens/conversation_new/components/form_list.d.ts.map +1 -1
  281. package/build/screens/conversation_new/components/form_list.js.map +1 -1
  282. package/build/screens/conversation_new/components/gender_filter_toggle.d.ts +10 -0
  283. package/build/screens/conversation_new/components/gender_filter_toggle.d.ts.map +1 -0
  284. package/build/screens/conversation_new/components/gender_filter_toggle.js +50 -0
  285. package/build/screens/conversation_new/components/gender_filter_toggle.js.map +1 -0
  286. package/build/screens/conversation_new/components/groups_form.d.ts.map +1 -1
  287. package/build/screens/conversation_new/components/groups_form.js +28 -4
  288. package/build/screens/conversation_new/components/groups_form.js.map +1 -1
  289. package/build/screens/conversation_new/components/services_form.d.ts.map +1 -1
  290. package/build/screens/conversation_new/components/services_form.js +6 -6
  291. package/build/screens/conversation_new/components/services_form.js.map +1 -1
  292. package/build/screens/conversation_new/conversation_new_screen.d.ts.map +1 -1
  293. package/build/screens/conversation_new/conversation_new_screen.js.map +1 -1
  294. package/build/screens/conversation_notification_level_select_screen.js +1 -1
  295. package/build/screens/conversation_notification_level_select_screen.js.map +1 -1
  296. package/build/screens/conversation_screen.d.ts +1 -1
  297. package/build/screens/conversation_screen.d.ts.map +1 -1
  298. package/build/screens/conversation_screen.js +9 -9
  299. package/build/screens/conversation_screen.js.map +1 -1
  300. package/build/screens/conversation_select_recipients/conversation_new_entry_screen.d.ts.map +1 -1
  301. package/build/screens/conversation_select_recipients/conversation_new_entry_screen.js +1 -1
  302. package/build/screens/conversation_select_recipients/conversation_new_entry_screen.js.map +1 -1
  303. package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.d.ts.map +1 -1
  304. package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js +1 -1
  305. package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js.map +1 -1
  306. package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.d.ts.map +1 -1
  307. package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.js +2 -2
  308. package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.js.map +1 -1
  309. package/build/screens/conversation_select_type_screen.d.ts +1 -1
  310. package/build/screens/conversation_select_type_screen.d.ts.map +1 -1
  311. package/build/screens/conversation_select_type_screen.js +1 -1
  312. package/build/screens/conversation_select_type_screen.js.map +1 -1
  313. package/build/screens/conversations/components/list_header_component.js +4 -4
  314. package/build/screens/conversations/components/list_header_component.js.map +1 -1
  315. package/build/screens/design_system_screen.js +3 -3
  316. package/build/screens/design_system_screen.js.map +1 -1
  317. package/build/screens/group_notification_settings_screen.js.map +1 -1
  318. package/build/screens/message_actions_screen.js +2 -2
  319. package/build/screens/message_actions_screen.js.map +1 -1
  320. package/build/screens/message_report/components/report_reason_list.d.ts.map +1 -1
  321. package/build/screens/message_report/components/report_reason_list.js +2 -2
  322. package/build/screens/message_report/components/report_reason_list.js.map +1 -1
  323. package/build/screens/message_report_screen.d.ts +2 -2
  324. package/build/screens/message_report_screen.d.ts.map +1 -1
  325. package/build/screens/message_report_screen.js +5 -5
  326. package/build/screens/message_report_screen.js.map +1 -1
  327. package/build/screens/not_found.d.ts.map +1 -1
  328. package/build/screens/not_found.js +1 -1
  329. package/build/screens/not_found.js.map +1 -1
  330. package/build/screens/notification_settings/hooks/groups.js +1 -1
  331. package/build/screens/notification_settings/hooks/groups.js.map +1 -1
  332. package/build/screens/notification_settings_screen.js +1 -1
  333. package/build/screens/notification_settings_screen.js.map +1 -1
  334. package/build/screens/preferred_app_selection_screen.d.ts.map +1 -1
  335. package/build/screens/preferred_app_selection_screen.js +1 -1
  336. package/build/screens/preferred_app_selection_screen.js.map +1 -1
  337. package/build/screens/send_giphy_screen.js +1 -1
  338. package/build/screens/send_giphy_screen.js.map +1 -1
  339. package/build/screens/team_conversation_screen.js +1 -1
  340. package/build/screens/team_conversation_screen.js.map +1 -1
  341. package/build/utils/cache/messages_cache.d.ts.map +1 -1
  342. package/build/utils/cache/messages_cache.js +3 -3
  343. package/build/utils/cache/messages_cache.js.map +1 -1
  344. package/build/utils/cache/optimistically_create_message.d.ts.map +1 -1
  345. package/build/utils/cache/optimistically_create_message.js +2 -2
  346. package/build/utils/cache/optimistically_create_message.js.map +1 -1
  347. package/build/utils/cache/optimistically_update_message.d.ts.map +1 -1
  348. package/build/utils/cache/optimistically_update_message.js +1 -1
  349. package/build/utils/cache/optimistically_update_message.js.map +1 -1
  350. package/build/utils/client/client.d.ts.map +1 -1
  351. package/build/utils/client/client.js.map +1 -1
  352. package/build/utils/client/transform_request_data.d.ts.map +1 -1
  353. package/build/utils/client/transform_request_data.js.map +1 -1
  354. package/build/utils/gender_display_label.d.ts +2 -0
  355. package/build/utils/gender_display_label.d.ts.map +1 -0
  356. package/build/utils/gender_display_label.js +11 -0
  357. package/build/utils/gender_display_label.js.map +1 -0
  358. package/build/utils/native_adapters/configuration.d.ts +3 -3
  359. package/build/utils/native_adapters/configuration.d.ts.map +1 -1
  360. package/build/utils/native_adapters/configuration.js +5 -5
  361. package/build/utils/native_adapters/configuration.js.map +1 -1
  362. package/build/utils/performance_tracking.js +1 -1
  363. package/build/utils/performance_tracking.js.map +1 -1
  364. package/build/utils/theme.d.ts.map +1 -1
  365. package/build/utils/theme.js +1 -1
  366. package/build/utils/theme.js.map +1 -1
  367. package/package.json +2 -2
  368. package/src/__tests__/contexts/session_context.tsx +4 -4
  369. package/src/__tests__/event-polyfill.test.ts +2 -3
  370. package/src/__tests__/hooks/useTheme.tsx +3 -3
  371. package/src/__tests__/hooks/use_async_storage.test.tsx +2 -2
  372. package/src/__tests__/hooks/use_conversation_messages.ts +1 -1
  373. package/src/__tests__/utils/client.ts +2 -2
  374. package/src/__tests__/utils/native_adapters/configuration.ts +2 -2
  375. package/src/__utils__/handlers.ts +1 -1
  376. package/src/components/conversation/attachments/attachment_card.tsx +2 -2
  377. package/src/components/conversation/attachments/attachment_deleting_overlay.tsx +1 -1
  378. package/src/components/conversation/attachments/audio_attachment.tsx +3 -3
  379. package/src/components/conversation/attachments/expanded_link.tsx +2 -2
  380. package/src/components/conversation/attachments/generic_file_attachment.tsx +5 -5
  381. package/src/components/conversation/attachments/giphy_attachment.tsx +3 -3
  382. package/src/components/conversation/attachments/image_attachment.tsx +7 -7
  383. package/src/components/conversation/attachments/video_attachment.tsx +4 -4
  384. package/src/components/conversation/jump_to_bottom_button.tsx +1 -1
  385. package/src/components/conversation/message.tsx +13 -13
  386. package/src/components/conversation/message_attachments.tsx +4 -4
  387. package/src/components/conversation/message_form/message_form_attachment_image.tsx +1 -1
  388. package/src/components/conversation/message_form/message_form_attachment_video.tsx +1 -1
  389. package/src/components/conversation/message_form.tsx +15 -17
  390. package/src/components/conversation/message_markdown.tsx +2 -2
  391. package/src/components/conversation/message_reaction.tsx +3 -3
  392. package/src/components/conversation/message_read_receipts.tsx +2 -2
  393. package/src/components/conversation/messages_disabled_banners.tsx +1 -1
  394. package/src/components/conversation/reply_shadow_message.tsx +7 -7
  395. package/src/components/conversation/typing_indicator.tsx +1 -1
  396. package/src/components/conversations/conversation_preview.tsx +4 -4
  397. package/src/components/conversations/conversations.tsx +1 -1
  398. package/src/components/conversations/mute_indicator.tsx +1 -1
  399. package/src/components/conversations/swipeable_toggle_button.tsx +2 -2
  400. package/src/components/conversations/unread_count_badge.tsx +1 -1
  401. package/src/components/display/action_button.tsx +4 -4
  402. package/src/components/display/banner.tsx +1 -1
  403. package/src/components/display/banner_collapsible.tsx +1 -1
  404. package/src/components/display/button.tsx +2 -2
  405. package/src/components/display/child_notice.tsx +3 -3
  406. package/src/components/display/heading.tsx +2 -2
  407. package/src/components/display/icon.tsx +7 -8
  408. package/src/components/display/icon_button.tsx +2 -2
  409. package/src/components/display/image_attachment_preview.tsx +3 -3
  410. package/src/components/display/person.tsx +2 -2
  411. package/src/components/display/platform_modal_header_buttons.tsx +4 -4
  412. package/src/components/display/text.tsx +1 -1
  413. package/src/components/display/text_inline_button.tsx +2 -2
  414. package/src/components/display/toggle_button.tsx +3 -3
  415. package/src/components/display/video_attachment_preview.tsx +4 -4
  416. package/src/components/group_conversation_list.tsx +4 -4
  417. package/src/components/primitive/avatar_primitive.tsx +1 -1
  418. package/src/components/primitive/banner_primitive.tsx +6 -6
  419. package/src/components/primitive/form_sheet.tsx +1 -1
  420. package/src/components/safe_area_modal.tsx +1 -1
  421. package/src/contexts/api_provider.tsx +3 -3
  422. package/src/contexts/chat_context.tsx +4 -4
  423. package/src/contexts/conversations_context.tsx +3 -3
  424. package/src/contexts/session_context.tsx +2 -2
  425. package/src/hooks/groups/use_groups_conversation_create.ts +4 -2
  426. package/src/hooks/services/use_find_or_create_services_conversation.ts +2 -2
  427. package/src/hooks/services/use_team_members_for_new_conversation.ts +2 -2
  428. package/src/hooks/services/use_team_plans.ts +3 -3
  429. package/src/hooks/use_api_client.ts +1 -1
  430. package/src/hooks/use_attachment_uploader.ts +3 -3
  431. package/src/hooks/use_broadcast_typing_status.ts +1 -1
  432. package/src/hooks/use_conversation.ts +2 -2
  433. package/src/hooks/use_conversation_membership.ts +2 -2
  434. package/src/hooks/use_conversation_message.ts +1 -1
  435. package/src/hooks/use_conversation_messages.ts +1 -1
  436. package/src/hooks/use_conversation_messages_jolt_events.ts +12 -12
  437. package/src/hooks/use_create_android_ripple_color.ts +1 -1
  438. package/src/hooks/use_current_person.ts +1 -1
  439. package/src/hooks/use_features.ts +3 -2
  440. package/src/hooks/use_font_scale.ts +1 -1
  441. package/src/hooks/use_giphy.ts +1 -1
  442. package/src/hooks/use_interaction_ghost_color.ts +1 -1
  443. package/src/hooks/use_live_relative_time.ts +1 -1
  444. package/src/hooks/use_message_create_or_update.ts +7 -7
  445. package/src/hooks/use_message_draft.ts +2 -2
  446. package/src/hooks/use_message_reaction_toggle.ts +2 -2
  447. package/src/hooks/use_my_gender.ts +42 -0
  448. package/src/hooks/use_organization.ts +1 -1
  449. package/src/hooks/use_product_analytics.ts +2 -2
  450. package/src/hooks/use_report_message.ts +2 -2
  451. package/src/hooks/use_submit_age_check.ts +3 -3
  452. package/src/hooks/use_suspense_api.ts +3 -3
  453. package/src/hooks/use_typing_indicators.ts +2 -2
  454. package/src/navigation/chat_access_gate.tsx +4 -4
  455. package/src/navigation/index.tsx +12 -12
  456. package/src/navigation/screenLayout.tsx +1 -1
  457. package/src/polyfills/events/Event.ts +1 -1
  458. package/src/polyfills/events/EventTarget.ts +1 -1
  459. package/src/screens/age_check/age_check_required_screen.tsx +5 -5
  460. package/src/screens/age_check/age_check_underage_screen.tsx +1 -1
  461. package/src/screens/age_check/components/age_check_select_birthdate_modal.tsx +2 -2
  462. package/src/screens/attachment_actions/hooks/useDeleteAttachment.tsx +2 -2
  463. package/src/screens/bug_report_screen.tsx +13 -13
  464. package/src/screens/conversation/message_read_receipts_screen.tsx +3 -3
  465. package/src/screens/conversation_details_screen.tsx +0 -1
  466. package/src/screens/conversation_filter_recipients/components/checkbox_row.tsx +2 -2
  467. package/src/screens/conversation_filter_recipients/components/header_row.tsx +4 -4
  468. package/src/screens/conversation_filter_recipients/conversation_filter_recipients_screen.tsx +1 -1
  469. package/src/screens/conversation_filter_recipients/types.tsx +1 -1
  470. package/src/screens/conversation_filters/components/rows.tsx +1 -1
  471. package/src/screens/conversation_filters/context/conversation_filter_context.tsx +3 -3
  472. package/src/screens/conversation_filters/group_filters.tsx +3 -3
  473. package/src/screens/conversation_filters/hooks/filters.ts +1 -1
  474. package/src/screens/conversation_filters_screen.tsx +2 -2
  475. package/src/screens/conversation_new/components/filter_by_plan.tsx +4 -4
  476. package/src/screens/conversation_new/components/form_list.tsx +1 -1
  477. package/src/screens/conversation_new/components/gender_filter_toggle.tsx +92 -0
  478. package/src/screens/conversation_new/components/groups_form.tsx +63 -4
  479. package/src/screens/conversation_new/components/services_form.tsx +7 -7
  480. package/src/screens/conversation_new/conversation_new_screen.tsx +3 -3
  481. package/src/screens/conversation_notification_level_select_screen.tsx +1 -1
  482. package/src/screens/conversation_screen.tsx +13 -13
  483. package/src/screens/conversation_select_recipients/conversation_new_entry_screen.tsx +3 -3
  484. package/src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx +3 -3
  485. package/src/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.tsx +3 -3
  486. package/src/screens/conversation_select_type_screen.tsx +2 -2
  487. package/src/screens/conversations/components/list_header_component.tsx +4 -4
  488. package/src/screens/design_system_screen.tsx +3 -3
  489. package/src/screens/group_notification_settings_screen.tsx +1 -1
  490. package/src/screens/message_actions_screen.tsx +3 -3
  491. package/src/screens/message_report/components/report_reason_list.tsx +2 -2
  492. package/src/screens/message_report_screen.tsx +8 -8
  493. package/src/screens/not_found.tsx +1 -1
  494. package/src/screens/notification_settings/hooks/groups.ts +1 -1
  495. package/src/screens/notification_settings_screen.tsx +1 -1
  496. package/src/screens/preferred_app_selection_screen.tsx +1 -1
  497. package/src/screens/send_giphy_screen.tsx +1 -1
  498. package/src/screens/team_conversation_screen.tsx +1 -1
  499. package/src/utils/__tests__/convert_attachments_for_create.test.ts +2 -2
  500. package/src/utils/cache/messages_cache.ts +3 -3
  501. package/src/utils/cache/optimistically_create_message.ts +4 -4
  502. package/src/utils/cache/optimistically_update_message.ts +1 -1
  503. package/src/utils/client/client.ts +0 -1
  504. package/src/utils/client/transform_request_data.ts +1 -1
  505. package/src/utils/gender_display_label.ts +10 -0
  506. package/src/utils/native_adapters/configuration.ts +5 -5
  507. package/src/utils/performance_tracking.ts +1 -1
  508. package/src/utils/theme.ts +1 -1
@@ -0,0 +1,92 @@
1
+ import React from 'react'
2
+ import { ActivityIndicator, StyleSheet, View } from 'react-native'
3
+ import { Heading, Switch, Text } from '../../../components'
4
+ import { useTheme } from '../../../hooks'
5
+ import { genderDisplayLabel } from '../../../utils/gender_display_label'
6
+
7
+ interface FilterableGenderContentProps {
8
+ genderValue: string
9
+ enabled: boolean
10
+ onToggle: (enabled: boolean) => void
11
+ }
12
+
13
+ function FilterableGenderContent({ genderValue, enabled, onToggle }: FilterableGenderContentProps) {
14
+ const { colors } = useTheme()
15
+ const styles = useStyles()
16
+ const displayLabel = genderDisplayLabel(genderValue)
17
+
18
+ return (
19
+ <>
20
+ <View style={styles.toggleRow}>
21
+ <Text>{displayLabel}</Text>
22
+ <Switch
23
+ value={enabled}
24
+ onValueChange={onToggle}
25
+ accessibilityLabel={`Filter by ${displayLabel}`}
26
+ />
27
+ </View>
28
+ <Text style={{ color: colors.textColorDefaultSecondary }}>
29
+ Filter limited to your profile's set gender
30
+ </Text>
31
+ </>
32
+ )
33
+ }
34
+
35
+ function NoGenderContent({ isFetching }: { isFetching: boolean }) {
36
+ const { colors } = useTheme()
37
+
38
+ return (
39
+ <>
40
+ <Text>Gender</Text>
41
+ {isFetching ? (
42
+ <ActivityIndicator size="small" />
43
+ ) : (
44
+ <Text style={{ color: colors.textColorDefaultSecondary }}>
45
+ Set a gender in your Church Center profile to enable gender filtering.
46
+ </Text>
47
+ )}
48
+ </>
49
+ )
50
+ }
51
+
52
+ interface GenderFilterToggleProps {
53
+ genderValue: string | null
54
+ isFetching: boolean
55
+ enabled: boolean
56
+ onToggle: (enabled: boolean) => void
57
+ }
58
+
59
+ export function GenderFilterToggle({
60
+ genderValue,
61
+ isFetching,
62
+ enabled,
63
+ onToggle,
64
+ }: GenderFilterToggleProps) {
65
+ const styles = useStyles()
66
+ const hasFilterableGender = genderValue !== null && genderValue !== 'Prefer not to say'
67
+
68
+ return (
69
+ <View style={styles.container}>
70
+ <Heading variant="h3">Filter by</Heading>
71
+ {hasFilterableGender ? (
72
+ <FilterableGenderContent genderValue={genderValue} enabled={enabled} onToggle={onToggle} />
73
+ ) : (
74
+ <NoGenderContent isFetching={isFetching} />
75
+ )}
76
+ </View>
77
+ )
78
+ }
79
+
80
+ const useStyles = () => {
81
+ return StyleSheet.create({
82
+ container: {
83
+ padding: 16,
84
+ gap: 8,
85
+ },
86
+ toggleRow: {
87
+ flexDirection: 'row',
88
+ justifyContent: 'space-between',
89
+ alignItems: 'center',
90
+ },
91
+ })
92
+ }
@@ -10,11 +10,14 @@ import {
10
10
  useGroupMembersForNewConversation,
11
11
  } from '../../../hooks/groups/use_group_members_for_new_conversation'
12
12
  import { useGroupsConversationCreate } from '../../../hooks/groups/use_groups_conversation_create'
13
+ import { useMyGender } from '../../../hooks/use_my_gender'
13
14
  import { GroupsGroupResource } from '../../../types'
14
15
  import { GraphId } from '../../../types/resources/group_resource'
15
16
  import { pluralize } from '../../../utils'
16
- import { Divider, FormList } from './form_list'
17
+ import { genderDisplayLabel } from '../../../utils/gender_display_label'
17
18
  import { Haptic } from '../../../utils/native_adapters'
19
+ import { Divider, FormList } from './form_list'
20
+ import { GenderFilterToggle } from './gender_filter_toggle'
18
21
 
19
22
  type GroupsFormProps = {
20
23
  groupId: number
@@ -23,7 +26,14 @@ type GroupsFormProps = {
23
26
 
24
27
  export const GroupsForm = ({ groupId, chat_group_graph_id }: GroupsFormProps) => {
25
28
  const navigation = useNavigation()
26
- const [title, setTitle] = useState<string>()
29
+ const [title, setTitle] = useState('')
30
+ const [genderFilterEnabled, setGenderFilterEnabled] = useState(false)
31
+ const {
32
+ isFeatureEnabled: genderFilterAvailable,
33
+ genderId,
34
+ genderValue,
35
+ isFetching: genderFetching,
36
+ } = useMyGender()
27
37
  const { data: group } = useSuspenseGet<GroupsGroupResource>({
28
38
  url: `/me/groups/${groupId}`,
29
39
  data: {
@@ -36,6 +46,23 @@ export const GroupsForm = ({ groupId, chat_group_graph_id }: GroupsFormProps) =>
36
46
 
37
47
  const groupMemberships = useGroupMembersForNewConversation({ id: groupId })
38
48
 
49
+ const activeGenderId = genderFilterEnabled ? genderId : null
50
+
51
+ const handleGenderToggle = (enabled: boolean) => {
52
+ const displayLabel = genderValue ? genderDisplayLabel(genderValue) : ''
53
+ const defaultTitle = `${group.name} (${displayLabel})`
54
+ const shouldAutoPopulateTitle = enabled && genderValue && title === ''
55
+ const shouldClearAutoPopulatedTitle = !enabled && title === defaultTitle
56
+
57
+ setGenderFilterEnabled(enabled)
58
+
59
+ if (shouldAutoPopulateTitle) {
60
+ setTitle(defaultTitle)
61
+ } else if (shouldClearAutoPopulatedTitle) {
62
+ setTitle('')
63
+ }
64
+ }
65
+
39
66
  const redirectToConversation = useCallback(
40
67
  (conversationId: number) => {
41
68
  // navigate to the conversation screen
@@ -53,6 +80,7 @@ export const GroupsForm = ({ groupId, chat_group_graph_id }: GroupsFormProps) =>
53
80
  const { mutate: handleSave, isPending } = useGroupsConversationCreate({
54
81
  groupId,
55
82
  title,
83
+ genderId: activeGenderId,
56
84
  onSuccess: redirectToConversation,
57
85
  })
58
86
 
@@ -67,6 +95,11 @@ export const GroupsForm = ({ groupId, chat_group_graph_id }: GroupsFormProps) =>
67
95
  group={group}
68
96
  title={title}
69
97
  setTitle={setTitle}
98
+ genderFilterAvailable={genderFilterAvailable}
99
+ genderFilterEnabled={genderFilterEnabled}
100
+ genderValue={genderValue}
101
+ genderFetching={genderFetching}
102
+ onGenderToggle={handleGenderToggle}
70
103
  groupMemberships={groupMemberships}
71
104
  />
72
105
  }
@@ -83,12 +116,27 @@ export const GroupsForm = ({ groupId, chat_group_graph_id }: GroupsFormProps) =>
83
116
 
84
117
  interface FormContentProps {
85
118
  group: GroupsGroupResource
86
- title?: string
119
+ title: string
87
120
  setTitle: (title: string) => void
121
+ genderFilterAvailable: boolean
122
+ genderFilterEnabled: boolean
123
+ genderValue: string | null
124
+ genderFetching: boolean
125
+ onGenderToggle: (enabled: boolean) => void
88
126
  groupMemberships: GroupMembersForNewConversationResult
89
127
  }
90
128
 
91
- function FormContent({ group, title, setTitle, groupMemberships }: FormContentProps) {
129
+ function FormContent({
130
+ group,
131
+ title,
132
+ setTitle,
133
+ genderFilterAvailable,
134
+ genderFilterEnabled,
135
+ genderValue,
136
+ genderFetching,
137
+ onGenderToggle,
138
+ groupMemberships,
139
+ }: FormContentProps) {
92
140
  const styles = useStyles()
93
141
  const inputRef = useRef<TextInput>(null)
94
142
  const currentPerson = useCurrentPerson()
@@ -129,6 +177,17 @@ function FormContent({ group, title, setTitle, groupMemberships }: FormContentPr
129
177
  />
130
178
  </Pressable>
131
179
  <Divider />
180
+ {genderFilterAvailable && (
181
+ <>
182
+ <GenderFilterToggle
183
+ genderValue={genderValue}
184
+ isFetching={genderFetching}
185
+ enabled={genderFilterEnabled}
186
+ onToggle={onGenderToggle}
187
+ />
188
+ <Divider />
189
+ </>
190
+ )}
132
191
  <View style={styles.memberSection}>
133
192
  <Heading variant="h3">{memberHeaderLabel}</Heading>
134
193
  {hasChildren && (
@@ -1,19 +1,19 @@
1
1
  import { StackActions, useNavigation } from '@react-navigation/native'
2
+ import { uniq } from 'lodash'
2
3
  import React, { useCallback, useEffect, useMemo, useState } from 'react'
3
4
  import { StyleSheet, View } from 'react-native'
4
5
  import { Badge, Banner, ChildNotice, Heading, Switch, TextButton } from '../../../components'
5
6
  import { ActionButton } from '../../../components/display/action_button'
6
- import { Divider, FormList } from './form_list'
7
- import { pluralize } from '../../../utils'
8
- import { uniq } from 'lodash'
9
- import { FilterByPlan } from './filter_by_plan'
10
- import { useTeamMembersForNewConversation } from '../../../hooks/services/use_team_members_for_new_conversation'
11
7
  import { useFindOrCreateServicesConversation } from '../../../hooks/services/use_find_or_create_services_conversation'
8
+ import { useServicesTeams } from '../../../hooks/services/use_services_team'
9
+ import { useTeamMembersForNewConversation } from '../../../hooks/services/use_team_members_for_new_conversation'
12
10
  import { ConversationResource, MemberResource } from '../../../types'
11
+ import { pluralize } from '../../../utils'
12
+ import { Haptic } from '../../../utils/native_adapters'
13
13
  import { tokens } from '../../../vendor/tapestry/tokens'
14
14
  import { TeamFilterTypes } from '../../conversation_filter_recipients/types'
15
- import { useServicesTeams } from '../../../hooks/services/use_services_team'
16
- import { Haptic } from '../../../utils/native_adapters'
15
+ import { FilterByPlan } from './filter_by_plan'
16
+ import { Divider, FormList } from './form_list'
17
17
 
18
18
  type ServicesFormProps = {
19
19
  initialTeamIds?: number[]
@@ -1,11 +1,11 @@
1
1
  import { StaticScreenProps } from '@react-navigation/native'
2
2
  import React from 'react'
3
- import { GroupsForm } from './components/groups_form'
4
- import { ServicesForm } from './components/services_form'
5
- import { SourceAppErrorCard } from './components/source_app_error_card'
6
3
  import { AppName } from '../../types/resources/app_name'
7
4
  import { GraphId } from '../../types/resources/group_resource'
8
5
  import { TeamFilterTypes } from '../conversation_filter_recipients/types'
6
+ import { GroupsForm } from './components/groups_form'
7
+ import { ServicesForm } from './components/services_form'
8
+ import { SourceAppErrorCard } from './components/source_app_error_card'
9
9
 
10
10
  type ConversationNewScreenProps = StaticScreenProps<{
11
11
  group_id?: number
@@ -1,8 +1,8 @@
1
1
  import { StaticScreenProps, useNavigation } from '@react-navigation/native'
2
2
  import React from 'react'
3
3
  import { StyleSheet } from 'react-native'
4
- import FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'
5
4
  import { PressableRow } from '../components'
5
+ import FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'
6
6
  import { useTheme } from '../hooks'
7
7
  import { useConversation } from '../hooks/use_conversation'
8
8
  import { useConversationMembershipUpdate } from '../hooks/use_conversation_membership'
@@ -8,38 +8,38 @@ import {
8
8
  useTheme as useNavigationTheme,
9
9
  useRoute,
10
10
  } from '@react-navigation/native'
11
- import dayjs from '../utils/dayjs'
12
11
  import React, { useCallback, useEffect, useRef, useState } from 'react'
13
12
  import { FlatList, Platform, StyleSheet, View } from 'react-native'
14
13
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
15
14
  import { Badge, Icon, Text } from '../components'
15
+ import { EmptyConversationBlankState } from '../components/conversation/empty_conversation_blank_state'
16
+ import { JumpToBottomButton } from '../components/conversation/jump_to_bottom_button'
17
+ import { Message } from '../components/conversation/message'
18
+ import { MessageForm } from '../components/conversation/message_form'
16
19
  import {
17
20
  LeaderMessagesDisabledBanner,
18
21
  MemberMessagesDisabledBanner,
19
22
  } from '../components/conversation/messages_disabled_banners'
20
- import { EmptyConversationBlankState } from '../components/conversation/empty_conversation_blank_state'
21
- import BlankState from '../components/primitive/blank_state_primitive'
22
- import { Message } from '../components/conversation/message'
23
- import { MessageForm } from '../components/conversation/message_form'
23
+ import { ReplyShadowMessage } from '../components/conversation/reply_shadow_message'
24
24
  import { TypingIndicator } from '../components/conversation/typing_indicator'
25
25
  import { KeyboardView } from '../components/display/keyboard_view'
26
+ import BlankState from '../components/primitive/blank_state_primitive'
27
+ import { ConversationContextProvider } from '../contexts/conversation_context'
26
28
  import { useTheme } from '../hooks'
29
+ import { useConversation } from '../hooks/use_conversation'
30
+ import { useConversationJoltEvents } from '../hooks/use_conversation_jolt_events'
31
+ import { useConversationMessages } from '../hooks/use_conversation_messages'
32
+ import { useConversationMessagesJoltEvents } from '../hooks/use_conversation_messages_jolt_events'
33
+ import { useMarkLatestMessageRead } from '../hooks/use_mark_latest_message_read'
27
34
  import {
28
35
  normalizeAnalyticsMetadata,
29
36
  usePublishProductAnalyticsEvent,
30
37
  } from '../hooks/use_product_analytics'
31
- import { useConversation } from '../hooks/use_conversation'
32
- import { useConversationMessages } from '../hooks/use_conversation_messages'
33
- import { useConversationMessagesJoltEvents } from '../hooks/use_conversation_messages_jolt_events'
34
38
  import { MessageResource } from '../types'
35
39
  import { ConversationBadgeResource } from '../types/resources/conversation_badge'
36
40
  import { getRelativeDateStatus } from '../utils/date'
37
- import { useMarkLatestMessageRead } from '../hooks/use_mark_latest_message_read'
41
+ import dayjs from '../utils/dayjs'
38
42
  import { CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL } from '../utils/styles'
39
- import { useConversationJoltEvents } from '../hooks/use_conversation_jolt_events'
40
- import { JumpToBottomButton } from '../components/conversation/jump_to_bottom_button'
41
- import { ReplyShadowMessage } from '../components/conversation/reply_shadow_message'
42
- import { ConversationContextProvider } from '../contexts/conversation_context'
43
43
 
44
44
  export type ConversationRouteProps = {
45
45
  conversation_id: number
@@ -2,15 +2,15 @@ import { useNavigation } from '@react-navigation/native'
2
2
  import type { NativeStackNavigationProp } from '@react-navigation/native-stack'
3
3
  import React, { useEffect } from 'react'
4
4
  import { ScrollView, StyleSheet, View } from 'react-native'
5
+ import { useSafeAreaInsets } from 'react-native-safe-area-context'
5
6
  import { Button, Heading } from '../../components'
6
7
  import { DefaultLoading } from '../../components/page/loading'
7
- import { useSafeAreaInsets } from 'react-native-safe-area-context'
8
+ import { useNewConversationEntry } from '../../hooks/use_new_conversation_entry'
9
+ import { Haptic } from '../../utils/native_adapters'
8
10
  import type {
9
11
  ConversationSelectRecipientsParams,
10
12
  ConversationSelectRecipientsScreenProps,
11
13
  } from './types/screen_props'
12
- import { useNewConversationEntry } from '../../hooks/use_new_conversation_entry'
13
- import { Haptic } from '../../utils/native_adapters'
14
14
 
15
15
  type NewConversationStackParamList = {
16
16
  ConversationNewEntry: ConversationSelectRecipientsParams | undefined
@@ -2,13 +2,13 @@ import { useNavigation } from '@react-navigation/native'
2
2
  import { partition } from 'lodash'
3
3
  import React from 'react'
4
4
  import { SectionList, StyleSheet, View } from 'react-native'
5
+ import { useSafeAreaInsets } from 'react-native-safe-area-context'
5
6
  import { Heading, Text } from '../../components'
6
- import { GroupsGroupResource } from '../../types'
7
7
  import { useGroupsGroups } from '../../hooks/use_groups_groups'
8
- import { useSafeAreaInsets } from 'react-native-safe-area-context'
9
- import { ConversationSelectRecipientsScreenProps } from './types/screen_props'
8
+ import { GroupsGroupResource } from '../../types'
10
9
  import { GroupsRecipientRow } from './components/groups_recipient_row'
11
10
  import { RestrictedGroupRow } from './components/restricted_group_row'
11
+ import { ConversationSelectRecipientsScreenProps } from './types/screen_props'
12
12
 
13
13
  const SectionKey = {
14
14
  my: 'my',
@@ -1,13 +1,13 @@
1
1
  import { useNavigation } from '@react-navigation/native'
2
2
  import React from 'react'
3
3
  import { FlatList, StyleSheet, View } from 'react-native'
4
- import { Button, Heading } from '../../components'
5
4
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
6
- import { ConversationSelectRecipientsScreenProps } from './types/screen_props'
5
+ import { Button, Heading } from '../../components'
6
+ import { Haptic } from '../../utils/native_adapters'
7
7
  import { useServiceTypesWithTeams } from '../conversation_filter_recipients/hooks/use_service_types_with_teams'
8
8
  import { ServiceTypeWithTeams, TeamFilterTypes } from '../conversation_filter_recipients/types'
9
9
  import { TeamRecipientRow } from './components/team_recipient_row'
10
- import { Haptic } from '../../utils/native_adapters'
10
+ import { ConversationSelectRecipientsScreenProps } from './types/screen_props'
11
11
 
12
12
  export const ConversationSelectTeamsILeadRecipientsScreen = ({
13
13
  route,
@@ -1,9 +1,9 @@
1
- import React from 'react'
2
1
  import { StaticScreenProps, useNavigation } from '@react-navigation/native'
2
+ import React from 'react'
3
3
  import FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'
4
- import { Haptic } from '../utils/native_adapters'
5
4
  import { AppName } from '../types/resources/app_name'
6
5
  import { GraphId } from '../types/resources/group_resource'
6
+ import { Haptic } from '../utils/native_adapters'
7
7
 
8
8
  export const ConversationSelectTypeScreenOptions = getFormSheetScreenOptions({
9
9
  headerTitle: 'New conversation',
@@ -3,15 +3,15 @@ import React, { useCallback, useMemo } from 'react'
3
3
  import { Alert, ScrollView, StyleSheet, View } from 'react-native'
4
4
  import { Heading, TextButton, ToggleButton } from '../../../components'
5
5
  import { useAtFontScaleBreakpoint, useCurrentPersonCache, useTheme } from '../../../hooks'
6
+ import { useCanCreateConversations } from '../../../hooks'
7
+ import { useAppName } from '../../../hooks/use_app_name'
6
8
  import { useMarkAllRead } from '../../../hooks/use_conversations_actions'
7
9
  import { useCanDisplayGroups } from '../../../hooks/use_groups'
8
- import { useCanCreateConversations } from '../../../hooks'
9
10
  import { useNewConversationEntry } from '../../../hooks/use_new_conversation_entry'
10
- import { useAppName } from '../../../hooks/use_app_name'
11
+ import { MAX_FONT_SIZE_MULTIPLIER_LANDMARK } from '../../../utils'
12
+ import { Haptic } from '../../../utils/native_adapters'
11
13
  import { ConversationsScreenProps } from '../conversations_screen'
12
14
  import { ChatGroupBadge } from './chat_group_badge'
13
- import { Haptic } from '../../../utils/native_adapters'
14
- import { MAX_FONT_SIZE_MULTIPLIER_LANDMARK } from '../../../utils'
15
15
  import { ListHeaderActionButton } from './list_header_action_button'
16
16
 
17
17
  const ROW_PADDING_HORIZONTAL = 16
@@ -1,7 +1,6 @@
1
1
  import React, { useState } from 'react'
2
2
  import { Alert, Pressable, ScrollView, StyleSheet, View } from 'react-native'
3
3
  import type { ViewStyle } from 'react-native'
4
- import { useInteractionGhostBackgroundColor, useTheme } from '../hooks'
5
4
  import {
6
5
  Avatar,
7
6
  AvatarGroup,
@@ -22,15 +21,16 @@ import {
22
21
  TextInlineButton,
23
22
  ImageAttachmentPreview,
24
23
  } from '../components/display'
24
+ import { VideoAttachmentPreview } from '../components/display/video_attachment_preview'
25
+ import BannerPrimitive from '../components/primitive/banner_primitive'
25
26
  import BlankState from '../components/primitive/blank_state_primitive'
27
+ import { useInteractionGhostBackgroundColor, useTheme } from '../hooks'
26
28
  import {
27
29
  MAX_FONT_SIZE_MULTIPLIER,
28
30
  platformPressedOpacityStyle,
29
31
  platformFontWeightMedium,
30
32
  Haptic,
31
33
  } from '../utils'
32
- import BannerPrimitive from '../components/primitive/banner_primitive'
33
- import { VideoAttachmentPreview } from '../components/display/video_attachment_preview'
34
34
 
35
35
  // =================================
36
36
  // ====== Docs Utils ===============
@@ -6,8 +6,8 @@ import { Platform, StyleSheet, View } from 'react-native'
6
6
  import { Heading, Icon, Text } from '../components'
7
7
  import { useTheme } from '../hooks'
8
8
  import { platformFontWeightBold } from '../utils/styles'
9
- import { useGroup } from './notification_settings/hooks/groups'
10
9
  import type { GroupNotificationLevelSelectScreenProps } from './group_notification_level_select_screen'
10
+ import { useGroup } from './notification_settings/hooks/groups'
11
11
 
12
12
  type GroupNotificationSettingsStackParamList = {
13
13
  GroupNotificationLevelSelect: GroupNotificationLevelSelectScreenProps['route']['params']
@@ -6,16 +6,16 @@ import React, { useCallback } from 'react'
6
6
  import { Alert, Platform, StyleSheet, View } from 'react-native'
7
7
  import { Text } from '../components'
8
8
  import { useReactionStyles } from '../components/conversation/message_reaction'
9
- import { REACTION_EMOJIS } from '../utils'
10
9
  import FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'
11
10
  import { useCreateAndroidRippleColor, useFontScale, useTheme } from '../hooks'
12
11
  import { useApiClient } from '../hooks/use_api_client'
13
12
  import { useConversationMessages } from '../hooks/use_conversation_messages'
13
+ import { availableFeatures, useFeatures } from '../hooks/use_features'
14
14
  import { useMessageReactionToggle } from '../hooks/use_message_reaction_toggle'
15
+ import { MessageResource } from '../types'
15
16
  import { ReactionCountResource } from '../types/resources/reaction'
17
+ import { REACTION_EMOJIS } from '../utils'
16
18
  import { Clipboard, Haptic } from '../utils/native_adapters'
17
- import { MessageResource } from '../types'
18
- import { availableFeatures, useFeatures } from '../hooks/use_features'
19
19
 
20
20
  export const MessageActionsScreenOptions = getFormSheetScreenOptions({
21
21
  sheetAllowedDetents: [0.5],
@@ -1,13 +1,13 @@
1
+ import { PlatformPressable } from '@react-navigation/elements'
1
2
  import React from 'react'
2
3
  import { View, StyleSheet } from 'react-native'
3
- import { PlatformPressable } from '@react-navigation/elements'
4
4
  import { Text } from '../../../components'
5
5
  import { useTheme, useCreateAndroidRippleColor } from '../../../hooks'
6
- import { Haptic } from '../../../utils/native_adapters'
7
6
  import {
8
7
  MESSAGE_REPORT_REASONS,
9
8
  MessageReportReason,
10
9
  } from '../../../types/resources/message_report'
10
+ import { Haptic } from '../../../utils/native_adapters'
11
11
 
12
12
  const MESSAGE_REPORT_REASONS_LIST = Object.entries(MESSAGE_REPORT_REASONS).map(([key, label]) => ({
13
13
  key: key as MessageReportReason,
@@ -1,25 +1,25 @@
1
- import React, { useCallback, useLayoutEffect, useMemo, useState } from 'react'
2
- import { View, StyleSheet, TextInput, ScrollView } from 'react-native'
1
+ import { StaticScreenProps, useNavigation, StackActions } from '@react-navigation/native'
3
2
  import type {
4
3
  NativeStackNavigationOptions,
5
4
  NativeStackScreenProps,
6
5
  } from '@react-navigation/native-stack'
7
- import { StaticScreenProps, useNavigation, StackActions } from '@react-navigation/native'
6
+ import React, { useCallback, useLayoutEffect, useMemo, useState } from 'react'
7
+ import { View, StyleSheet, TextInput, ScrollView } from 'react-native'
8
+ import { useSafeAreaInsets } from 'react-native-safe-area-context'
8
9
  import { Spinner, Text, KeyboardView } from '../components'
9
- import BlankState from '../components/primitive/blank_state_primitive'
10
- import { useTheme } from '../hooks'
11
- import { useReportMessage } from '../hooks/use_report_message'
12
10
  import {
13
11
  HeaderDismissButton,
14
12
  HeaderTextButton,
15
13
  } from '../components/display/platform_modal_header_buttons'
16
- import { useSafeAreaInsets } from 'react-native-safe-area-context'
14
+ import BlankState from '../components/primitive/blank_state_primitive'
15
+ import { useTheme } from '../hooks'
17
16
  import { useConversationMessages } from '../hooks/use_conversation_messages'
17
+ import { useReportMessage } from '../hooks/use_report_message'
18
18
  import { MessageResource } from '../types'
19
19
  import { MessageReportReason } from '../types/resources/message_report'
20
+ import { platformFontWeightBold } from '../utils'
20
21
  import { MessagePreview } from './message_report/components/message_preview'
21
22
  import { ReportReasonList } from './message_report/components/report_reason_list'
22
- import { platformFontWeightBold } from '../utils'
23
23
 
24
24
  const MAX_DETAIL_LENGTH = 500
25
25
 
@@ -1,5 +1,5 @@
1
- import React from 'react'
2
1
  import { Button, Text } from '@react-navigation/elements'
2
+ import React from 'react'
3
3
  import { StyleSheet, View } from 'react-native'
4
4
 
5
5
  export function NotFound() {
@@ -4,8 +4,8 @@ import { getRequestQueryKey, useApiClient } from '../../../hooks'
4
4
  import { useSuspenseGet, useSuspensePaginator } from '../../../hooks'
5
5
  import { ApiCollection, ApiResource } from '../../../types'
6
6
  import { GroupMembership, GroupResourceWithMembership } from '../../../types/resources'
7
- import { throwResponseError } from '../../../utils/response_error'
8
7
  import { updateRecordInPagesData } from '../../../utils'
8
+ import { throwResponseError } from '../../../utils/response_error'
9
9
 
10
10
  export const getGroupsRequestArgs = () => ({
11
11
  url: '/me/groups',
@@ -2,10 +2,10 @@ import { PlatformPressable } from '@react-navigation/elements'
2
2
  import { StaticScreenProps, useNavigation } from '@react-navigation/native'
3
3
  import React, { useCallback, useEffect, type ReactNode } from 'react'
4
4
  import { FlatList, Platform, StyleSheet, View, type ViewProps, type ViewStyle } from 'react-native'
5
+ import { useSafeAreaInsets } from 'react-native-safe-area-context'
5
6
  import { Badge, Heading, Icon, Text } from '../components'
6
7
  import { HeaderTextButton } from '../components/display/platform_modal_header_buttons'
7
8
  import { useTheme } from '../hooks'
8
- import { useSafeAreaInsets } from 'react-native-safe-area-context'
9
9
  import { isDefined } from '../types'
10
10
  import { useGroups } from './notification_settings/hooks/groups'
11
11
  import { useChatTypes } from './preferred_app/hooks/use_chat_types'
@@ -5,9 +5,9 @@ import React, { type PropsWithChildren } from 'react'
5
5
  import { Image, StyleSheet, View, type ViewStyle } from 'react-native'
6
6
  import { Heading, Icon, Text } from '../components'
7
7
  import { useApiClient, useTheme } from '../hooks'
8
- import { PreferredApp, useChatTypes } from './preferred_app/hooks/use_chat_types'
9
8
  import { useAppName } from '../hooks/use_app_name'
10
9
  import { throwResponseError } from '../utils/response_error'
10
+ import { PreferredApp, useChatTypes } from './preferred_app/hooks/use_chat_types'
11
11
 
12
12
  export type PreferredAppSelectionScreenProps = StaticScreenProps<{
13
13
  chatTypeId: number | string
@@ -2,8 +2,8 @@ import { StackActions, StaticScreenProps, useNavigation } from '@react-navigatio
2
2
  import React from 'react'
3
3
  import { Image as NativeImage, Platform, StyleSheet, useWindowDimensions, View } from 'react-native'
4
4
  import { Button, IconButton, IconString, TextButton } from '../components'
5
- import BlankState from '../components/primitive/blank_state_primitive'
6
5
  import { DefaultLoading } from '../components/page/loading'
6
+ import BlankState from '../components/primitive/blank_state_primitive'
7
7
  import FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'
8
8
  import { useCreateAndroidRippleColor, useTheme } from '../hooks'
9
9
  import { useGiphy } from '../hooks/use_giphy'
@@ -1,12 +1,12 @@
1
1
  import { StackActions, StaticScreenProps, useNavigation } from '@react-navigation/native'
2
2
  import { useQuery, useQueryClient } from '@tanstack/react-query'
3
3
  import { useEffect } from 'react'
4
+ import { DefaultLoading } from '../components/page/loading'
4
5
  import { useApiClient } from '../hooks'
5
6
  import {
6
7
  buildTeamAndPlanParams,
7
8
  findOrCreateServicesConversation,
8
9
  } from '../hooks/services/use_find_or_create_services_conversation'
9
- import { DefaultLoading } from '../components/page/loading'
10
10
 
11
11
  export type TeamConversationRouteProps = {
12
12
  plan_id?: number
@@ -1,9 +1,9 @@
1
- import { convertAttachmentsForCreate } from '../convert_attachments_for_create'
1
+ import { DenormalizedExpandedLinkAttachmentResource } from '../../types/resources/denormalized_attachment_resource'
2
2
  import {
3
3
  DenormalizedMessageAttachmentResourceForCreate,
4
4
  DenormalizedGiphyAttachmentResourceForCreate,
5
5
  } from '../../types/resources/denormalized_attachment_resource_for_create'
6
- import { DenormalizedExpandedLinkAttachmentResource } from '../../types/resources/denormalized_attachment_resource'
6
+ import { convertAttachmentsForCreate } from '../convert_attachments_for_create'
7
7
 
8
8
  describe('convertAttachmentsForCreate', () => {
9
9
  it('converts MessageAttachment correctly', () => {
@@ -1,11 +1,11 @@
1
1
  import { InfiniteData, QueryClient } from '@tanstack/react-query'
2
+ import { getRequestQueryKey } from '../../hooks/use_suspense_api'
2
3
  import { ApiCollection, ApiResource, MessageResource } from '../../types'
3
- import { deleteRecordInPagesData } from './page_mutations'
4
- import { updateOrCreateRecordInPagesData, updateRecordInPagesData } from './page_mutations'
5
4
  import { JoltReactionEvent } from '../../types/jolt_events'
6
5
  import { transformReactionEventDataToReactionCountResource } from '../jolt/transform_reaction_event_data_to_reaction_count_resource'
7
6
  import { getMessagesRequestArgs } from '../request/get_messages'
8
- import { getRequestQueryKey } from '../../hooks/use_suspense_api'
7
+ import { updateOrCreateRecordInPagesData, updateRecordInPagesData } from './page_mutations'
8
+ import { deleteRecordInPagesData } from './page_mutations'
9
9
 
10
10
  export function updateCacheWithMessage(
11
11
  queryClient: QueryClient,