stream-chat-react-native-core 9.5.0-beta.7 → 9.5.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/lib/commonjs/components/ChannelDetails/ChannelDetails.js +16 -37
  2. package/lib/commonjs/components/ChannelDetails/ChannelDetails.js.map +1 -1
  3. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsActionItem.js.map +1 -1
  4. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsActionsSection.js +10 -3
  5. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsActionsSection.js.map +1 -1
  6. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsEditButton.js +23 -16
  7. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsEditButton.js.map +1 -1
  8. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsMemberSection.js +43 -59
  9. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsMemberSection.js.map +1 -1
  10. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavHeader.js +2 -2
  11. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavHeader.js.map +1 -1
  12. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavigationSection.js +8 -3
  13. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavigationSection.js.map +1 -1
  14. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsProfile.js.map +1 -1
  15. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsForm.js +35 -0
  16. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsForm.js.map +1 -0
  17. package/lib/commonjs/components/ChannelDetails/components/{ChannelEditDetails.js → ChannelEditDetailsFormContent.js} +5 -5
  18. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsFormContent.js.map +1 -0
  19. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsFormHeader.js +81 -0
  20. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsFormHeader.js.map +1 -0
  21. package/lib/commonjs/components/ChannelDetails/components/ChannelEditImageSheet.js.map +1 -1
  22. package/lib/commonjs/components/ChannelDetails/components/ChannelEditName.js.map +1 -1
  23. package/lib/commonjs/components/ChannelDetails/components/index.js +30 -8
  24. package/lib/commonjs/components/ChannelDetails/components/index.js.map +1 -1
  25. package/lib/commonjs/components/ChannelDetails/components/members/AddMemberSearchResultItem.js.map +1 -1
  26. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersButton.js +77 -0
  27. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersButton.js.map +1 -0
  28. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersForm.js +33 -0
  29. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersForm.js.map +1 -0
  30. package/lib/{module/components/ChannelDetails/components/members/ChannelAddMembers.js → commonjs/components/ChannelDetails/components/members/ChannelAddMembersFormContent.js} +5 -5
  31. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersFormContent.js.map +1 -0
  32. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.js +86 -0
  33. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.js.map +1 -0
  34. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberActionsSheet.js +4 -2
  35. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberActionsSheet.js.map +1 -1
  36. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberItem.js +12 -20
  37. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberItem.js.map +1 -1
  38. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberList.js +13 -15
  39. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberList.js.map +1 -1
  40. package/lib/commonjs/components/ChannelDetails/components/members/MemberListLoadingSkeleton.js.map +1 -1
  41. package/lib/commonjs/components/ChannelDetails/components/members/UserListLoadingSkeleton.js.map +1 -1
  42. package/lib/commonjs/components/ChannelDetails/components/members/index.js +23 -12
  43. package/lib/commonjs/components/ChannelDetails/components/members/index.js.map +1 -1
  44. package/lib/commonjs/components/ChannelDetails/components/modal/Modal.js +16 -1
  45. package/lib/commonjs/components/ChannelDetails/components/modal/Modal.js.map +1 -1
  46. package/lib/commonjs/components/ChannelDetails/components/modal/ModalHeader.js.map +1 -1
  47. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentItem.js.map +1 -1
  48. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentList.js +9 -4
  49. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentList.js.map +1 -1
  50. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.js.map +1 -1
  51. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.js.map +1 -1
  52. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaItem.js.map +1 -1
  53. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaList.js +9 -4
  54. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaList.js.map +1 -1
  55. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.js.map +1 -1
  56. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageItem.js.map +1 -1
  57. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageList.js +9 -4
  58. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageList.js.map +1 -1
  59. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.js.map +1 -1
  60. package/lib/commonjs/components/ChannelDetails/components/roles/RoleItem.js +61 -0
  61. package/lib/commonjs/components/ChannelDetails/components/roles/RoleItem.js.map +1 -0
  62. package/lib/commonjs/components/ChannelDetails/components/roles/RoleList.js +38 -0
  63. package/lib/commonjs/components/ChannelDetails/components/roles/RoleList.js.map +1 -0
  64. package/lib/commonjs/components/ChannelDetails/components/roles/index.js +26 -0
  65. package/lib/commonjs/components/ChannelDetails/components/roles/index.js.map +1 -0
  66. package/lib/commonjs/components/ChannelDetails/hooks/members/index.js +4 -4
  67. package/lib/commonjs/components/ChannelDetails/hooks/members/index.js.map +1 -1
  68. package/lib/commonjs/components/ChannelDetails/hooks/members/{useMemberRoleLabel.js → useMemberRoles.js} +27 -17
  69. package/lib/commonjs/components/ChannelDetails/hooks/members/useMemberRoles.js.map +1 -0
  70. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsActionItems.js +5 -4
  71. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsActionItems.js.map +1 -1
  72. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.js.map +1 -1
  73. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.js.map +1 -1
  74. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js +3 -5
  75. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js.map +1 -1
  76. package/lib/commonjs/components/ChannelDetails/hooks/useEditChannelImage.js +3 -3
  77. package/lib/commonjs/components/ChannelDetails/hooks/useEditChannelImage.js.map +1 -1
  78. package/lib/commonjs/components/ChannelDetails/hooks/useFileAttachmentListSections.js.map +1 -1
  79. package/lib/commonjs/components/ChannelDetails/hooks/useMediaList.js.map +1 -1
  80. package/lib/commonjs/components/ChannelDetails/hooks/useUserActivityStatus.js.map +1 -1
  81. package/lib/commonjs/components/UIComponents/EmptyList.js.map +1 -1
  82. package/lib/commonjs/components/UIComponents/EmptySearchResult.js.map +1 -1
  83. package/lib/commonjs/components/UIComponents/GenericListLoadingSkeleton.js.map +1 -1
  84. package/lib/commonjs/components/UIComponents/SearchInput.js.map +1 -1
  85. package/lib/commonjs/components/UIComponents/SelectionCircle.js.map +1 -1
  86. package/lib/commonjs/components/ui/Avatar/UserAvatar.js +2 -4
  87. package/lib/commonjs/components/ui/Avatar/UserAvatar.js.map +1 -1
  88. package/lib/commonjs/components/ui/Avatar/constants.js +33 -1
  89. package/lib/commonjs/components/ui/Avatar/constants.js.map +1 -1
  90. package/lib/commonjs/components/ui/Badge/OnlineIndicator.js +2 -23
  91. package/lib/commonjs/components/ui/Badge/OnlineIndicator.js.map +1 -1
  92. package/lib/commonjs/contexts/channelAddMembersContext/ChannelAddMembersContext.js +50 -6
  93. package/lib/commonjs/contexts/channelAddMembersContext/ChannelAddMembersContext.js.map +1 -1
  94. package/lib/commonjs/contexts/channelDetailsContext/channelDetailsContext.js +20 -6
  95. package/lib/commonjs/contexts/channelDetailsContext/channelDetailsContext.js.map +1 -1
  96. package/lib/commonjs/contexts/channelEditDetailsContext/ChannelEditDetailsContext.js +60 -6
  97. package/lib/commonjs/contexts/channelEditDetailsContext/ChannelEditDetailsContext.js.map +1 -1
  98. package/lib/commonjs/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js +4 -3
  99. package/lib/commonjs/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js.map +1 -1
  100. package/lib/commonjs/contexts/channelMediaListContext/ChannelMediaListContext.js +4 -3
  101. package/lib/commonjs/contexts/channelMediaListContext/ChannelMediaListContext.js.map +1 -1
  102. package/lib/commonjs/contexts/channelMemberListContext/ChannelMemberListContext.js +4 -3
  103. package/lib/commonjs/contexts/channelMemberListContext/ChannelMemberListContext.js.map +1 -1
  104. package/lib/commonjs/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js +4 -3
  105. package/lib/commonjs/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js.map +1 -1
  106. package/lib/commonjs/contexts/componentsContext/defaultComponents.js +9 -2
  107. package/lib/commonjs/contexts/componentsContext/defaultComponents.js.map +1 -1
  108. package/lib/commonjs/contexts/themeContext/utils/theme.js +12 -1
  109. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  110. package/lib/commonjs/hooks/index.js +33 -0
  111. package/lib/commonjs/hooks/index.js.map +1 -1
  112. package/lib/commonjs/hooks/useCanAddMembersToChannel.js +8 -0
  113. package/lib/commonjs/hooks/useCanAddMembersToChannel.js.map +1 -0
  114. package/lib/commonjs/hooks/useCanEditChannel.js +8 -0
  115. package/lib/commonjs/hooks/useCanEditChannel.js.map +1 -0
  116. package/lib/commonjs/hooks/useIsDirectChat.js +1 -1
  117. package/lib/commonjs/hooks/useIsDirectChat.js.map +1 -1
  118. package/lib/commonjs/state-store/edit-channel-details-store.js +18 -13
  119. package/lib/commonjs/state-store/edit-channel-details-store.js.map +1 -1
  120. package/lib/commonjs/state-store/index.js +33 -0
  121. package/lib/commonjs/state-store/index.js.map +1 -1
  122. package/lib/commonjs/state-store/selection-store.js.map +1 -1
  123. package/lib/commonjs/state-store/signal-store.js +29 -0
  124. package/lib/commonjs/state-store/signal-store.js.map +1 -0
  125. package/lib/commonjs/version.json +1 -1
  126. package/lib/module/components/ChannelDetails/ChannelDetails.js +16 -37
  127. package/lib/module/components/ChannelDetails/ChannelDetails.js.map +1 -1
  128. package/lib/module/components/ChannelDetails/components/ChannelDetailsActionItem.js.map +1 -1
  129. package/lib/module/components/ChannelDetails/components/ChannelDetailsActionsSection.js +10 -3
  130. package/lib/module/components/ChannelDetails/components/ChannelDetailsActionsSection.js.map +1 -1
  131. package/lib/module/components/ChannelDetails/components/ChannelDetailsEditButton.js +23 -16
  132. package/lib/module/components/ChannelDetails/components/ChannelDetailsEditButton.js.map +1 -1
  133. package/lib/module/components/ChannelDetails/components/ChannelDetailsMemberSection.js +43 -59
  134. package/lib/module/components/ChannelDetails/components/ChannelDetailsMemberSection.js.map +1 -1
  135. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavHeader.js +2 -2
  136. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavHeader.js.map +1 -1
  137. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavigationSection.js +8 -3
  138. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavigationSection.js.map +1 -1
  139. package/lib/module/components/ChannelDetails/components/ChannelDetailsProfile.js.map +1 -1
  140. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsForm.js +35 -0
  141. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsForm.js.map +1 -0
  142. package/lib/module/components/ChannelDetails/components/{ChannelEditDetails.js → ChannelEditDetailsFormContent.js} +5 -5
  143. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsFormContent.js.map +1 -0
  144. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsFormHeader.js +81 -0
  145. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsFormHeader.js.map +1 -0
  146. package/lib/module/components/ChannelDetails/components/ChannelEditImageSheet.js.map +1 -1
  147. package/lib/module/components/ChannelDetails/components/ChannelEditName.js.map +1 -1
  148. package/lib/module/components/ChannelDetails/components/index.js +30 -8
  149. package/lib/module/components/ChannelDetails/components/index.js.map +1 -1
  150. package/lib/module/components/ChannelDetails/components/members/AddMemberSearchResultItem.js.map +1 -1
  151. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersButton.js +77 -0
  152. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersButton.js.map +1 -0
  153. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersForm.js +33 -0
  154. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersForm.js.map +1 -0
  155. package/lib/{commonjs/components/ChannelDetails/components/members/ChannelAddMembers.js → module/components/ChannelDetails/components/members/ChannelAddMembersFormContent.js} +5 -5
  156. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersFormContent.js.map +1 -0
  157. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.js +86 -0
  158. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.js.map +1 -0
  159. package/lib/module/components/ChannelDetails/components/members/ChannelMemberActionsSheet.js +4 -2
  160. package/lib/module/components/ChannelDetails/components/members/ChannelMemberActionsSheet.js.map +1 -1
  161. package/lib/module/components/ChannelDetails/components/members/ChannelMemberItem.js +12 -20
  162. package/lib/module/components/ChannelDetails/components/members/ChannelMemberItem.js.map +1 -1
  163. package/lib/module/components/ChannelDetails/components/members/ChannelMemberList.js +13 -15
  164. package/lib/module/components/ChannelDetails/components/members/ChannelMemberList.js.map +1 -1
  165. package/lib/module/components/ChannelDetails/components/members/MemberListLoadingSkeleton.js.map +1 -1
  166. package/lib/module/components/ChannelDetails/components/members/UserListLoadingSkeleton.js.map +1 -1
  167. package/lib/module/components/ChannelDetails/components/members/index.js +23 -12
  168. package/lib/module/components/ChannelDetails/components/members/index.js.map +1 -1
  169. package/lib/module/components/ChannelDetails/components/modal/Modal.js +16 -1
  170. package/lib/module/components/ChannelDetails/components/modal/Modal.js.map +1 -1
  171. package/lib/module/components/ChannelDetails/components/modal/ModalHeader.js.map +1 -1
  172. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentItem.js.map +1 -1
  173. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentList.js +9 -4
  174. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentList.js.map +1 -1
  175. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.js.map +1 -1
  176. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.js.map +1 -1
  177. package/lib/module/components/ChannelDetails/components/navigation-section/MediaItem.js.map +1 -1
  178. package/lib/module/components/ChannelDetails/components/navigation-section/MediaList.js +9 -4
  179. package/lib/module/components/ChannelDetails/components/navigation-section/MediaList.js.map +1 -1
  180. package/lib/module/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.js.map +1 -1
  181. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageItem.js.map +1 -1
  182. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageList.js +9 -4
  183. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageList.js.map +1 -1
  184. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.js.map +1 -1
  185. package/lib/module/components/ChannelDetails/components/roles/RoleItem.js +61 -0
  186. package/lib/module/components/ChannelDetails/components/roles/RoleItem.js.map +1 -0
  187. package/lib/module/components/ChannelDetails/components/roles/RoleList.js +38 -0
  188. package/lib/module/components/ChannelDetails/components/roles/RoleList.js.map +1 -0
  189. package/lib/module/components/ChannelDetails/components/roles/index.js +26 -0
  190. package/lib/module/components/ChannelDetails/components/roles/index.js.map +1 -0
  191. package/lib/module/components/ChannelDetails/hooks/members/index.js +4 -4
  192. package/lib/module/components/ChannelDetails/hooks/members/index.js.map +1 -1
  193. package/lib/module/components/ChannelDetails/hooks/members/{useMemberRoleLabel.js → useMemberRoles.js} +27 -17
  194. package/lib/module/components/ChannelDetails/hooks/members/useMemberRoles.js.map +1 -0
  195. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsActionItems.js +5 -4
  196. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsActionItems.js.map +1 -1
  197. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.js.map +1 -1
  198. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.js.map +1 -1
  199. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js +3 -5
  200. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js.map +1 -1
  201. package/lib/module/components/ChannelDetails/hooks/useEditChannelImage.js +3 -3
  202. package/lib/module/components/ChannelDetails/hooks/useEditChannelImage.js.map +1 -1
  203. package/lib/module/components/ChannelDetails/hooks/useFileAttachmentListSections.js.map +1 -1
  204. package/lib/module/components/ChannelDetails/hooks/useMediaList.js.map +1 -1
  205. package/lib/module/components/ChannelDetails/hooks/useUserActivityStatus.js.map +1 -1
  206. package/lib/module/components/UIComponents/EmptyList.js.map +1 -1
  207. package/lib/module/components/UIComponents/EmptySearchResult.js.map +1 -1
  208. package/lib/module/components/UIComponents/GenericListLoadingSkeleton.js.map +1 -1
  209. package/lib/module/components/UIComponents/SearchInput.js.map +1 -1
  210. package/lib/module/components/UIComponents/SelectionCircle.js.map +1 -1
  211. package/lib/module/components/ui/Avatar/UserAvatar.js +2 -4
  212. package/lib/module/components/ui/Avatar/UserAvatar.js.map +1 -1
  213. package/lib/module/components/ui/Avatar/constants.js +33 -1
  214. package/lib/module/components/ui/Avatar/constants.js.map +1 -1
  215. package/lib/module/components/ui/Badge/OnlineIndicator.js +2 -23
  216. package/lib/module/components/ui/Badge/OnlineIndicator.js.map +1 -1
  217. package/lib/module/contexts/channelAddMembersContext/ChannelAddMembersContext.js +50 -6
  218. package/lib/module/contexts/channelAddMembersContext/ChannelAddMembersContext.js.map +1 -1
  219. package/lib/module/contexts/channelDetailsContext/channelDetailsContext.js +20 -6
  220. package/lib/module/contexts/channelDetailsContext/channelDetailsContext.js.map +1 -1
  221. package/lib/module/contexts/channelEditDetailsContext/ChannelEditDetailsContext.js +60 -6
  222. package/lib/module/contexts/channelEditDetailsContext/ChannelEditDetailsContext.js.map +1 -1
  223. package/lib/module/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js +4 -3
  224. package/lib/module/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js.map +1 -1
  225. package/lib/module/contexts/channelMediaListContext/ChannelMediaListContext.js +4 -3
  226. package/lib/module/contexts/channelMediaListContext/ChannelMediaListContext.js.map +1 -1
  227. package/lib/module/contexts/channelMemberListContext/ChannelMemberListContext.js +4 -3
  228. package/lib/module/contexts/channelMemberListContext/ChannelMemberListContext.js.map +1 -1
  229. package/lib/module/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js +4 -3
  230. package/lib/module/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js.map +1 -1
  231. package/lib/module/contexts/componentsContext/defaultComponents.js +9 -2
  232. package/lib/module/contexts/componentsContext/defaultComponents.js.map +1 -1
  233. package/lib/module/contexts/themeContext/utils/theme.js +12 -1
  234. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  235. package/lib/module/hooks/index.js +33 -0
  236. package/lib/module/hooks/index.js.map +1 -1
  237. package/lib/module/hooks/useCanAddMembersToChannel.js +8 -0
  238. package/lib/module/hooks/useCanAddMembersToChannel.js.map +1 -0
  239. package/lib/module/hooks/useCanEditChannel.js +8 -0
  240. package/lib/module/hooks/useCanEditChannel.js.map +1 -0
  241. package/lib/module/hooks/useIsDirectChat.js +1 -1
  242. package/lib/module/hooks/useIsDirectChat.js.map +1 -1
  243. package/lib/module/state-store/edit-channel-details-store.js +18 -13
  244. package/lib/module/state-store/edit-channel-details-store.js.map +1 -1
  245. package/lib/module/state-store/index.js +33 -0
  246. package/lib/module/state-store/index.js.map +1 -1
  247. package/lib/module/state-store/selection-store.js.map +1 -1
  248. package/lib/module/state-store/signal-store.js +29 -0
  249. package/lib/module/state-store/signal-store.js.map +1 -0
  250. package/lib/module/version.json +1 -1
  251. package/lib/typescript/components/ChannelDetails/ChannelDetails.d.ts +2 -95
  252. package/lib/typescript/components/ChannelDetails/ChannelDetails.d.ts.map +1 -1
  253. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionItem.d.ts +0 -3
  254. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionItem.d.ts.map +1 -1
  255. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionsSection.d.ts +17 -4
  256. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionsSection.d.ts.map +1 -1
  257. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsEditButton.d.ts +8 -4
  258. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsEditButton.d.ts.map +1 -1
  259. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsMemberSection.d.ts +7 -4
  260. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsMemberSection.d.ts.map +1 -1
  261. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavHeader.d.ts +3 -4
  262. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavHeader.d.ts.map +1 -1
  263. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavigationSection.d.ts +13 -4
  264. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavigationSection.d.ts.map +1 -1
  265. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsProfile.d.ts +0 -3
  266. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsProfile.d.ts.map +1 -1
  267. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsForm.d.ts +20 -0
  268. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsForm.d.ts.map +1 -0
  269. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormContent.d.ts +3 -0
  270. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormContent.d.ts.map +1 -0
  271. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormHeader.d.ts +7 -0
  272. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormHeader.d.ts.map +1 -0
  273. package/lib/typescript/components/ChannelDetails/components/ChannelEditImageSheet.d.ts +0 -3
  274. package/lib/typescript/components/ChannelDetails/components/ChannelEditImageSheet.d.ts.map +1 -1
  275. package/lib/typescript/components/ChannelDetails/components/ChannelEditName.d.ts +0 -3
  276. package/lib/typescript/components/ChannelDetails/components/ChannelEditName.d.ts.map +1 -1
  277. package/lib/typescript/components/ChannelDetails/components/index.d.ts +4 -2
  278. package/lib/typescript/components/ChannelDetails/components/index.d.ts.map +1 -1
  279. package/lib/typescript/components/ChannelDetails/components/members/AddMemberSearchResultItem.d.ts +0 -3
  280. package/lib/typescript/components/ChannelDetails/components/members/AddMemberSearchResultItem.d.ts.map +1 -1
  281. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersButton.d.ts +12 -0
  282. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersButton.d.ts.map +1 -0
  283. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersForm.d.ts +19 -0
  284. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersForm.d.ts.map +1 -0
  285. package/lib/typescript/components/ChannelDetails/components/members/{ChannelAddMembers.d.ts → ChannelAddMembersFormContent.d.ts} +3 -6
  286. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersFormContent.d.ts.map +1 -0
  287. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.d.ts +7 -0
  288. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.d.ts.map +1 -0
  289. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberActionsSheet.d.ts +10 -4
  290. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberActionsSheet.d.ts.map +1 -1
  291. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberItem.d.ts +8 -4
  292. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberItem.d.ts.map +1 -1
  293. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberList.d.ts +8 -3
  294. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberList.d.ts.map +1 -1
  295. package/lib/typescript/components/ChannelDetails/components/members/MemberListLoadingSkeleton.d.ts +0 -3
  296. package/lib/typescript/components/ChannelDetails/components/members/MemberListLoadingSkeleton.d.ts.map +1 -1
  297. package/lib/typescript/components/ChannelDetails/components/members/UserListLoadingSkeleton.d.ts +0 -3
  298. package/lib/typescript/components/ChannelDetails/components/members/UserListLoadingSkeleton.d.ts.map +1 -1
  299. package/lib/typescript/components/ChannelDetails/components/members/index.d.ts +4 -3
  300. package/lib/typescript/components/ChannelDetails/components/members/index.d.ts.map +1 -1
  301. package/lib/typescript/components/ChannelDetails/components/modal/Modal.d.ts +0 -3
  302. package/lib/typescript/components/ChannelDetails/components/modal/Modal.d.ts.map +1 -1
  303. package/lib/typescript/components/ChannelDetails/components/modal/ModalHeader.d.ts +0 -3
  304. package/lib/typescript/components/ChannelDetails/components/modal/ModalHeader.d.ts.map +1 -1
  305. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentItem.d.ts +0 -5
  306. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentItem.d.ts.map +1 -1
  307. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentList.d.ts +8 -4
  308. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentList.d.ts.map +1 -1
  309. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.d.ts +0 -3
  310. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.d.ts.map +1 -1
  311. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.d.ts +0 -3
  312. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.d.ts.map +1 -1
  313. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaItem.d.ts +0 -5
  314. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaItem.d.ts.map +1 -1
  315. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaList.d.ts +8 -4
  316. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaList.d.ts.map +1 -1
  317. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.d.ts +0 -2
  318. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.d.ts.map +1 -1
  319. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageItem.d.ts +0 -3
  320. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageItem.d.ts.map +1 -1
  321. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageList.d.ts +8 -5
  322. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageList.d.ts.map +1 -1
  323. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.d.ts +0 -3
  324. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.d.ts.map +1 -1
  325. package/lib/typescript/components/ChannelDetails/components/roles/RoleItem.d.ts +16 -0
  326. package/lib/typescript/components/ChannelDetails/components/roles/RoleItem.d.ts.map +1 -0
  327. package/lib/typescript/components/ChannelDetails/components/roles/RoleList.d.ts +11 -0
  328. package/lib/typescript/components/ChannelDetails/components/roles/RoleList.d.ts.map +1 -0
  329. package/lib/typescript/components/ChannelDetails/components/roles/index.d.ts +3 -0
  330. package/lib/typescript/components/ChannelDetails/components/roles/index.d.ts.map +1 -0
  331. package/lib/typescript/components/ChannelDetails/hooks/members/index.d.ts +1 -1
  332. package/lib/typescript/components/ChannelDetails/hooks/members/index.d.ts.map +1 -1
  333. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoles.d.ts +35 -0
  334. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoles.d.ts.map +1 -0
  335. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsActionItems.d.ts +5 -5
  336. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsActionItems.d.ts.map +1 -1
  337. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.d.ts +0 -1
  338. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.d.ts.map +1 -1
  339. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.d.ts +0 -3
  340. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.d.ts.map +1 -1
  341. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.d.ts +3 -9
  342. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.d.ts.map +1 -1
  343. package/lib/typescript/components/ChannelDetails/hooks/useEditChannelImage.d.ts +1 -2
  344. package/lib/typescript/components/ChannelDetails/hooks/useEditChannelImage.d.ts.map +1 -1
  345. package/lib/typescript/components/ChannelDetails/hooks/useFileAttachmentListSections.d.ts +0 -3
  346. package/lib/typescript/components/ChannelDetails/hooks/useFileAttachmentListSections.d.ts.map +1 -1
  347. package/lib/typescript/components/ChannelDetails/hooks/useMediaList.d.ts +0 -4
  348. package/lib/typescript/components/ChannelDetails/hooks/useMediaList.d.ts.map +1 -1
  349. package/lib/typescript/components/ChannelDetails/hooks/useUserActivityStatus.d.ts +0 -1
  350. package/lib/typescript/components/ChannelDetails/hooks/useUserActivityStatus.d.ts.map +1 -1
  351. package/lib/typescript/components/UIComponents/EmptyList.d.ts +0 -3
  352. package/lib/typescript/components/UIComponents/EmptyList.d.ts.map +1 -1
  353. package/lib/typescript/components/UIComponents/EmptySearchResult.d.ts +0 -3
  354. package/lib/typescript/components/UIComponents/EmptySearchResult.d.ts.map +1 -1
  355. package/lib/typescript/components/UIComponents/GenericListLoadingSkeleton.d.ts +0 -3
  356. package/lib/typescript/components/UIComponents/GenericListLoadingSkeleton.d.ts.map +1 -1
  357. package/lib/typescript/components/UIComponents/SearchInput.d.ts +0 -3
  358. package/lib/typescript/components/UIComponents/SearchInput.d.ts.map +1 -1
  359. package/lib/typescript/components/UIComponents/SelectionCircle.d.ts +0 -3
  360. package/lib/typescript/components/UIComponents/SelectionCircle.d.ts.map +1 -1
  361. package/lib/typescript/components/ui/Avatar/UserAvatar.d.ts.map +1 -1
  362. package/lib/typescript/components/ui/Avatar/constants.d.ts +10 -1
  363. package/lib/typescript/components/ui/Avatar/constants.d.ts.map +1 -1
  364. package/lib/typescript/components/ui/Badge/OnlineIndicator.d.ts.map +1 -1
  365. package/lib/typescript/contexts/channelAddMembersContext/ChannelAddMembersContext.d.ts +18 -9
  366. package/lib/typescript/contexts/channelAddMembersContext/ChannelAddMembersContext.d.ts.map +1 -1
  367. package/lib/typescript/contexts/channelDetailsContext/channelDetailsContext.d.ts +14 -15
  368. package/lib/typescript/contexts/channelDetailsContext/channelDetailsContext.d.ts.map +1 -1
  369. package/lib/typescript/contexts/channelEditDetailsContext/ChannelEditDetailsContext.d.ts +28 -13
  370. package/lib/typescript/contexts/channelEditDetailsContext/ChannelEditDetailsContext.d.ts.map +1 -1
  371. package/lib/typescript/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.d.ts +2 -11
  372. package/lib/typescript/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.d.ts.map +1 -1
  373. package/lib/typescript/contexts/channelMediaListContext/ChannelMediaListContext.d.ts +2 -11
  374. package/lib/typescript/contexts/channelMediaListContext/ChannelMediaListContext.d.ts.map +1 -1
  375. package/lib/typescript/contexts/channelMemberListContext/ChannelMemberListContext.d.ts +2 -11
  376. package/lib/typescript/contexts/channelMemberListContext/ChannelMemberListContext.d.ts.map +1 -1
  377. package/lib/typescript/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.d.ts +2 -11
  378. package/lib/typescript/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.d.ts.map +1 -1
  379. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts +21 -14
  380. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts.map +1 -1
  381. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts +12 -1
  382. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts.map +1 -1
  383. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +12 -1
  384. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  385. package/lib/typescript/hooks/index.d.ts +3 -0
  386. package/lib/typescript/hooks/index.d.ts.map +1 -1
  387. package/lib/typescript/hooks/useCanAddMembersToChannel.d.ts +6 -0
  388. package/lib/typescript/hooks/useCanAddMembersToChannel.d.ts.map +1 -0
  389. package/lib/typescript/hooks/useCanEditChannel.d.ts +6 -0
  390. package/lib/typescript/hooks/useCanEditChannel.d.ts.map +1 -0
  391. package/lib/typescript/hooks/useIsDirectChat.d.ts +1 -1
  392. package/lib/typescript/hooks/useIsDirectChat.d.ts.map +1 -1
  393. package/lib/typescript/state-store/edit-channel-details-store.d.ts +10 -11
  394. package/lib/typescript/state-store/edit-channel-details-store.d.ts.map +1 -1
  395. package/lib/typescript/state-store/index.d.ts +3 -0
  396. package/lib/typescript/state-store/index.d.ts.map +1 -1
  397. package/lib/typescript/state-store/selection-store.d.ts +0 -6
  398. package/lib/typescript/state-store/selection-store.d.ts.map +1 -1
  399. package/lib/typescript/state-store/signal-store.d.ts +9 -0
  400. package/lib/typescript/state-store/signal-store.d.ts.map +1 -0
  401. package/package.json +1 -1
  402. package/src/components/ChannelDetails/ChannelDetails.tsx +14 -160
  403. package/src/components/ChannelDetails/__tests__/ChannelDetails.test.tsx +51 -38
  404. package/src/components/ChannelDetails/__tests__/ChannelDetailsActionsSection.test.tsx +1 -1
  405. package/src/components/ChannelDetails/__tests__/ChannelDetailsEditButton.test.tsx +52 -22
  406. package/src/components/ChannelDetails/__tests__/ChannelDetailsMemberSection.test.tsx +10 -45
  407. package/src/components/ChannelDetails/__tests__/ChannelDetailsNavHeader.test.tsx +4 -4
  408. package/src/components/ChannelDetails/__tests__/ChannelDetailsNavigationSection.test.tsx +6 -3
  409. package/src/components/ChannelDetails/__tests__/ChannelDetailsProfile.test.tsx +1 -1
  410. package/src/components/ChannelDetails/__tests__/{ChannelEditDetailsModal.test.tsx → ChannelEditDetailsForm.test.tsx} +30 -35
  411. package/src/components/ChannelDetails/__tests__/{ChannelEditDetails.test.tsx → ChannelEditDetailsFormContent.test.tsx} +8 -8
  412. package/src/components/ChannelDetails/__tests__/ChannelEditImageSheet.test.tsx +1 -1
  413. package/src/components/ChannelDetails/__tests__/ChannelEditName.test.tsx +1 -1
  414. package/src/components/ChannelDetails/__tests__/members/ChannelAddMembersButton.test.tsx +163 -0
  415. package/src/components/ChannelDetails/__tests__/members/{ChannelAddMembersModal.test.tsx → ChannelAddMembersForm.test.tsx} +23 -25
  416. package/src/components/ChannelDetails/__tests__/members/{ChannelAddMembers.test.tsx → ChannelAddMembersFormContent.test.tsx} +5 -3
  417. package/src/components/ChannelDetails/__tests__/members/ChannelMemberActionsSheet.test.tsx +8 -3
  418. package/src/components/ChannelDetails/__tests__/members/ChannelMemberItem.test.tsx +11 -11
  419. package/src/components/ChannelDetails/__tests__/members/ChannelMemberList.test.tsx +35 -21
  420. package/src/components/ChannelDetails/__tests__/members/useMemberRoles.test.tsx +122 -0
  421. package/src/components/ChannelDetails/__tests__/useChannelDetailsActionItems.test.tsx +13 -9
  422. package/src/components/ChannelDetails/__tests__/useEditChannelImage.test.tsx +10 -3
  423. package/src/components/ChannelDetails/components/ChannelDetailsActionItem.tsx +0 -3
  424. package/src/components/ChannelDetails/components/ChannelDetailsActionsSection.tsx +26 -6
  425. package/src/components/ChannelDetails/components/ChannelDetailsEditButton.tsx +34 -18
  426. package/src/components/ChannelDetails/components/ChannelDetailsMemberSection.tsx +51 -59
  427. package/src/components/ChannelDetails/components/ChannelDetailsNavHeader.tsx +8 -5
  428. package/src/components/ChannelDetails/components/ChannelDetailsNavigationSection.tsx +18 -5
  429. package/src/components/ChannelDetails/components/ChannelDetailsProfile.tsx +0 -3
  430. package/src/components/ChannelDetails/components/ChannelEditDetailsForm.tsx +48 -0
  431. package/src/components/ChannelDetails/components/{ChannelEditDetails.tsx → ChannelEditDetailsFormContent.tsx} +1 -4
  432. package/src/components/ChannelDetails/components/ChannelEditDetailsFormHeader.tsx +65 -0
  433. package/src/components/ChannelDetails/components/ChannelEditImageSheet.tsx +0 -3
  434. package/src/components/ChannelDetails/components/ChannelEditName.tsx +0 -3
  435. package/src/components/ChannelDetails/components/__tests__/navigation-section/FileAttachmentList.test.tsx +1 -2
  436. package/src/components/ChannelDetails/components/__tests__/navigation-section/MediaList.test.tsx +2 -2
  437. package/src/components/ChannelDetails/components/__tests__/navigation-section/PinnedMessageList.test.tsx +1 -2
  438. package/src/components/ChannelDetails/components/index.ts +4 -2
  439. package/src/components/ChannelDetails/components/members/AddMemberSearchResultItem.tsx +0 -3
  440. package/src/components/ChannelDetails/components/members/ChannelAddMembersButton.tsx +83 -0
  441. package/src/components/ChannelDetails/components/members/ChannelAddMembersForm.tsx +41 -0
  442. package/src/components/ChannelDetails/components/members/{ChannelAddMembers.tsx → ChannelAddMembersFormContent.tsx} +4 -5
  443. package/src/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.tsx +75 -0
  444. package/src/components/ChannelDetails/components/members/ChannelMemberActionsSheet.tsx +17 -5
  445. package/src/components/ChannelDetails/components/members/ChannelMemberItem.tsx +16 -29
  446. package/src/components/ChannelDetails/components/members/ChannelMemberList.tsx +26 -19
  447. package/src/components/ChannelDetails/components/members/MemberListLoadingSkeleton.tsx +0 -3
  448. package/src/components/ChannelDetails/components/members/UserListLoadingSkeleton.tsx +0 -3
  449. package/src/components/ChannelDetails/components/members/index.ts +4 -3
  450. package/src/components/ChannelDetails/components/modal/Modal.tsx +19 -6
  451. package/src/components/ChannelDetails/components/modal/ModalHeader.tsx +0 -3
  452. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentItem.tsx +0 -5
  453. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentList.tsx +11 -7
  454. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.tsx +0 -3
  455. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.tsx +0 -3
  456. package/src/components/ChannelDetails/components/navigation-section/MediaItem.tsx +0 -5
  457. package/src/components/ChannelDetails/components/navigation-section/MediaList.tsx +16 -7
  458. package/src/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.tsx +0 -2
  459. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageItem.tsx +0 -3
  460. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageList.tsx +11 -7
  461. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.tsx +0 -3
  462. package/src/components/ChannelDetails/components/roles/RoleItem.tsx +74 -0
  463. package/src/components/ChannelDetails/components/roles/RoleList.tsx +51 -0
  464. package/src/components/ChannelDetails/components/roles/__tests__/RoleItem.test.tsx +58 -0
  465. package/src/components/ChannelDetails/components/roles/__tests__/RoleList.test.tsx +31 -0
  466. package/src/components/ChannelDetails/components/roles/index.ts +2 -0
  467. package/src/components/ChannelDetails/hooks/members/index.ts +1 -1
  468. package/src/components/ChannelDetails/hooks/members/useMemberRoles.ts +63 -0
  469. package/src/components/ChannelDetails/hooks/useChannelDetailsActionItems.ts +9 -5
  470. package/src/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.ts +0 -1
  471. package/src/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.ts +0 -3
  472. package/src/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.ts +5 -11
  473. package/src/components/ChannelDetails/hooks/useEditChannelImage.ts +3 -4
  474. package/src/components/ChannelDetails/hooks/useFileAttachmentListSections.ts +0 -3
  475. package/src/components/ChannelDetails/hooks/useMediaList.ts +0 -4
  476. package/src/components/ChannelDetails/hooks/useUserActivityStatus.ts +0 -1
  477. package/src/components/UIComponents/EmptyList.tsx +0 -3
  478. package/src/components/UIComponents/EmptySearchResult.tsx +0 -3
  479. package/src/components/UIComponents/GenericListLoadingSkeleton.tsx +0 -3
  480. package/src/components/UIComponents/SearchInput.tsx +0 -3
  481. package/src/components/UIComponents/SelectionCircle.tsx +0 -3
  482. package/src/components/ui/Avatar/UserAvatar.tsx +8 -4
  483. package/src/components/ui/Avatar/constants.ts +48 -1
  484. package/src/components/ui/Badge/OnlineIndicator.tsx +10 -24
  485. package/src/contexts/channelAddMembersContext/ChannelAddMembersContext.tsx +76 -12
  486. package/src/contexts/channelDetailsContext/channelDetailsContext.tsx +24 -19
  487. package/src/contexts/channelEditDetailsContext/ChannelEditDetailsContext.tsx +101 -18
  488. package/src/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.tsx +5 -13
  489. package/src/contexts/channelMediaListContext/ChannelMediaListContext.tsx +5 -13
  490. package/src/contexts/channelMemberListContext/ChannelMemberListContext.tsx +5 -13
  491. package/src/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.tsx +5 -13
  492. package/src/contexts/componentsContext/defaultComponents.ts +18 -4
  493. package/src/contexts/themeContext/utils/theme.ts +24 -2
  494. package/src/hooks/__tests__/useCanAddMembersToChannel.test.tsx +43 -0
  495. package/src/hooks/__tests__/useCanEditChannel.test.tsx +43 -0
  496. package/src/hooks/index.ts +3 -0
  497. package/src/hooks/useCanAddMembersToChannel.ts +9 -0
  498. package/src/hooks/useCanEditChannel.ts +9 -0
  499. package/src/hooks/useIsDirectChat.ts +2 -2
  500. package/src/state-store/__tests__/edit-channel-details-store.test.ts +72 -17
  501. package/src/state-store/__tests__/signal-store.test.ts +35 -0
  502. package/src/state-store/edit-channel-details-store.ts +22 -17
  503. package/src/state-store/index.ts +3 -0
  504. package/src/state-store/selection-store.ts +0 -6
  505. package/src/state-store/signal-store.ts +18 -0
  506. package/src/version.json +1 -1
  507. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetails.js.map +0 -1
  508. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsModal.js +0 -152
  509. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsModal.js.map +0 -1
  510. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembers.js.map +0 -1
  511. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersModal.js +0 -133
  512. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersModal.js.map +0 -1
  513. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAllMembersModal.js +0 -64
  514. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAllMembersModal.js.map +0 -1
  515. package/lib/commonjs/components/ChannelDetails/hooks/members/useMemberRoleLabel.js.map +0 -1
  516. package/lib/module/components/ChannelDetails/components/ChannelEditDetails.js.map +0 -1
  517. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsModal.js +0 -152
  518. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsModal.js.map +0 -1
  519. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembers.js.map +0 -1
  520. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersModal.js +0 -133
  521. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersModal.js.map +0 -1
  522. package/lib/module/components/ChannelDetails/components/members/ChannelAllMembersModal.js +0 -64
  523. package/lib/module/components/ChannelDetails/components/members/ChannelAllMembersModal.js.map +0 -1
  524. package/lib/module/components/ChannelDetails/hooks/members/useMemberRoleLabel.js.map +0 -1
  525. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetails.d.ts +0 -6
  526. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetails.d.ts.map +0 -1
  527. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsModal.d.ts +0 -18
  528. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsModal.d.ts.map +0 -1
  529. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembers.d.ts.map +0 -1
  530. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersModal.d.ts +0 -18
  531. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersModal.d.ts.map +0 -1
  532. package/lib/typescript/components/ChannelDetails/components/members/ChannelAllMembersModal.d.ts +0 -17
  533. package/lib/typescript/components/ChannelDetails/components/members/ChannelAllMembersModal.d.ts.map +0 -1
  534. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoleLabel.d.ts +0 -10
  535. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoleLabel.d.ts.map +0 -1
  536. package/src/components/ChannelDetails/__tests__/members/ChannelAllMembersModal.test.tsx +0 -159
  537. package/src/components/ChannelDetails/__tests__/members/useMemberRoleLabel.test.tsx +0 -130
  538. package/src/components/ChannelDetails/components/ChannelEditDetailsModal.tsx +0 -152
  539. package/src/components/ChannelDetails/components/members/ChannelAddMembersModal.tsx +0 -126
  540. package/src/components/ChannelDetails/components/members/ChannelAllMembersModal.tsx +0 -71
  541. package/src/components/ChannelDetails/hooks/members/useMemberRoleLabel.ts +0 -32
@@ -5,7 +5,10 @@ import { render, screen } from '@testing-library/react-native';
5
5
  import { NotificationManager } from 'stream-chat';
6
6
  import type { Channel } from 'stream-chat';
7
7
 
8
- import { useChannelDetailsContext } from '../../../contexts/channelDetailsContext/channelDetailsContext';
8
+ import {
9
+ ChannelDetailsContextProvider,
10
+ useChannelDetailsContext,
11
+ } from '../../../contexts/channelDetailsContext/channelDetailsContext';
9
12
  import { ChatContext } from '../../../contexts/chatContext/ChatContext';
10
13
  import { WithComponents } from '../../../contexts/componentsContext/ComponentsContext';
11
14
  import { ThemeProvider } from '../../../contexts/themeContext/ThemeContext';
@@ -64,9 +67,11 @@ const buildChannel = (capabilities: string[] = []) =>
64
67
  const renderContent = () =>
65
68
  render(
66
69
  <Providers>
67
- <WithComponents overrides={SECTION_OVERRIDES}>
68
- <ChannelDetails channel={channel} />
69
- </WithComponents>
70
+ <ChannelDetailsContextProvider channel={channel}>
71
+ <WithComponents overrides={SECTION_OVERRIDES}>
72
+ <ChannelDetails />
73
+ </WithComponents>
74
+ </ChannelDetailsContextProvider>
70
75
  </Providers>,
71
76
  );
72
77
 
@@ -108,16 +113,18 @@ describe('ChannelDetailsContent', () => {
108
113
  useIsDirectChatSpy.mockReturnValue(false);
109
114
  render(
110
115
  <Providers>
111
- <WithComponents
112
- overrides={{
113
- ChannelDetailsActionsSection: ActionsProbe,
114
- ChannelDetailsMemberSection: MemberProbe,
115
- ChannelDetailsNavigationSection: NavigationProbe,
116
- ChannelDetailsProfile: ProfileProbe,
117
- }}
118
- >
119
- <ChannelDetails channel={buildChannel(['update-channel'])} />
120
- </WithComponents>
116
+ <ChannelDetailsContextProvider channel={buildChannel(['update-channel'])}>
117
+ <WithComponents
118
+ overrides={{
119
+ ChannelDetailsActionsSection: ActionsProbe,
120
+ ChannelDetailsMemberSection: MemberProbe,
121
+ ChannelDetailsNavigationSection: NavigationProbe,
122
+ ChannelDetailsProfile: ProfileProbe,
123
+ }}
124
+ >
125
+ <ChannelDetails />
126
+ </WithComponents>
127
+ </ChannelDetailsContextProvider>
121
128
  </Providers>,
122
129
  );
123
130
 
@@ -132,32 +139,34 @@ describe('ChannelDetails', () => {
132
139
  });
133
140
 
134
141
  describe('context provisioning', () => {
135
- it('exposes channel and callbacks via ChannelDetailsContext', () => {
136
- const onChannelDismiss = jest.fn();
142
+ it('exposes the channel via ChannelDetailsContext and forwards onBack to the content', () => {
137
143
  const onBack = jest.fn();
138
144
  let captured: ReturnType<typeof useChannelDetailsContext> | undefined;
139
- const ContextProbe = () => {
145
+ let capturedOnBack: (() => void) | undefined;
146
+ const ContextProbe = ({ onBack: onBackProp }: { onBack?: () => void }) => {
140
147
  captured = useChannelDetailsContext();
148
+ capturedOnBack = onBackProp;
141
149
  return null;
142
150
  };
143
151
 
144
152
  render(
145
153
  <Providers>
146
- <WithComponents
147
- overrides={{
148
- ...SECTION_OVERRIDES,
149
- ChannelDetailsContent: ContextProbe,
150
- }}
151
- >
152
- <ChannelDetails channel={channel} onBack={onBack} onChannelDismiss={onChannelDismiss} />
153
- </WithComponents>
154
+ <ChannelDetailsContextProvider channel={channel}>
155
+ <WithComponents
156
+ overrides={{
157
+ ...SECTION_OVERRIDES,
158
+ ChannelDetailsContent: ContextProbe,
159
+ }}
160
+ >
161
+ <ChannelDetails onBack={onBack} />
162
+ </WithComponents>
163
+ </ChannelDetailsContextProvider>
154
164
  </Providers>,
155
165
  );
156
166
 
157
167
  expect(captured).toBeDefined();
158
168
  expect(captured?.channel).toBe(channel);
159
- expect(captured?.onChannelDismiss).toBe(onChannelDismiss);
160
- expect(captured?.onBack).toBe(onBack);
169
+ expect(capturedOnBack).toBe(onBack);
161
170
  });
162
171
  });
163
172
 
@@ -166,14 +175,16 @@ describe('ChannelDetails', () => {
166
175
  const Override = () => <Text testID='custom-content'>CUSTOM</Text>;
167
176
  render(
168
177
  <Providers>
169
- <WithComponents
170
- overrides={{
171
- ...SECTION_OVERRIDES,
172
- ChannelDetailsContent: Override,
173
- }}
174
- >
175
- <ChannelDetails channel={channel} />
176
- </WithComponents>
178
+ <ChannelDetailsContextProvider channel={channel}>
179
+ <WithComponents
180
+ overrides={{
181
+ ...SECTION_OVERRIDES,
182
+ ChannelDetailsContent: Override,
183
+ }}
184
+ >
185
+ <ChannelDetails />
186
+ </WithComponents>
187
+ </ChannelDetailsContextProvider>
177
188
  </Providers>,
178
189
  );
179
190
 
@@ -191,9 +202,11 @@ describe('ChannelDetails', () => {
191
202
  // wasn't swapped out — the section probes from SECTION_OVERRIDES should appear.
192
203
  render(
193
204
  <Providers>
194
- <WithComponents overrides={SECTION_OVERRIDES}>
195
- <ChannelDetails channel={channel} />
196
- </WithComponents>
205
+ <ChannelDetailsContextProvider channel={channel}>
206
+ <WithComponents overrides={SECTION_OVERRIDES}>
207
+ <ChannelDetails />
208
+ </WithComponents>
209
+ </ChannelDetailsContextProvider>
197
210
  </Providers>,
198
211
  );
199
212
  expect(screen.getByTestId('probe-header')).toBeTruthy();
@@ -71,7 +71,7 @@ const sectionElement = () => (
71
71
  } as never
72
72
  }
73
73
  >
74
- <ChannelDetailsContextProvider value={{ channel }}>
74
+ <ChannelDetailsContextProvider channel={channel}>
75
75
  <WithComponents overrides={{ ChannelDetailsActionItem: ActionItemProbe }}>
76
76
  <ChannelDetailsActionsSection />
77
77
  </WithComponents>
@@ -1,7 +1,9 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
- import { Text, View } from 'react-native';
2
+ import { StyleSheet, Text, View } from 'react-native';
3
3
 
4
4
  import { fireEvent, render, screen } from '@testing-library/react-native';
5
+
6
+ type ReactTestInstance = ReturnType<typeof screen.getByTestId>;
5
7
  import { NotificationManager } from 'stream-chat';
6
8
  import type { Channel } from 'stream-chat';
7
9
 
@@ -13,12 +15,28 @@ import { ThemeProvider } from '../../../contexts/themeContext/ThemeContext';
13
15
  import { defaultTheme } from '../../../contexts/themeContext/utils/theme';
14
16
  import { TranslationProvider } from '../../../contexts/translationContext/TranslationContext';
15
17
  import { useChannelActions } from '../../../hooks/actions/useChannelActions';
16
- import * as useIsDirectChatModule from '../../../hooks/useIsDirectChat';
17
- import { ChannelDetailsEditButton } from '../components/ChannelDetailsEditButton';
18
+ import {
19
+ ChannelDetailsEditButton,
20
+ ChannelDetailsEditButtonProps,
21
+ } from '../components/ChannelDetailsEditButton';
18
22
 
19
23
  jest.mock('../../../hooks/actions/useChannelActions');
20
24
  const mockedUseChannelActions = jest.mocked(useChannelActions);
21
25
 
26
+ // Walks up the rendered tree to confirm some host ancestor received `width: 'auto'`
27
+ // (the forwarded style overriding the Button's default `width: '100%'`).
28
+ const hasAncestorWithStyle = (instance: ReactTestInstance | null): boolean => {
29
+ for (let node = instance; node; node = node.parent) {
30
+ if (typeof node.type === 'string') {
31
+ const flattened = StyleSheet.flatten(node.props.style) ?? {};
32
+ if (flattened.width === 'auto') {
33
+ return true;
34
+ }
35
+ }
36
+ }
37
+ return false;
38
+ };
39
+
22
40
  const EditDetailsProbe = () => (
23
41
  <View testID='channel-edit-details-probe'>
24
42
  <Text>edit-details</Text>
@@ -55,16 +73,18 @@ const Providers = ({ children }: PropsWithChildren) => (
55
73
 
56
74
  const renderEditButton = ({
57
75
  channel,
58
- onEditChannelPress,
76
+ onPress,
77
+ style,
59
78
  }: {
60
79
  channel: Channel;
61
- onEditChannelPress?: () => void;
80
+ onPress?: () => void;
81
+ style?: ChannelDetailsEditButtonProps['style'];
62
82
  }) =>
63
83
  render(
64
84
  <Providers>
65
- <WithComponents overrides={{ ChannelEditDetails: EditDetailsProbe }}>
66
- <ChannelDetailsContextProvider value={{ channel, onEditChannelPress }}>
67
- <ChannelDetailsEditButton />
85
+ <WithComponents overrides={{ ChannelEditDetailsFormContent: EditDetailsProbe }}>
86
+ <ChannelDetailsContextProvider channel={channel}>
87
+ <ChannelDetailsEditButton onPress={onPress} style={style} />
68
88
  </ChannelDetailsContextProvider>
69
89
  </WithComponents>
70
90
  </Providers>,
@@ -72,7 +92,6 @@ const renderEditButton = ({
72
92
 
73
93
  describe('ChannelDetailsEditButton', () => {
74
94
  beforeEach(() => {
75
- jest.spyOn(useIsDirectChatModule, 'useIsDirectChat').mockReturnValue(false);
76
95
  mockedUseChannelActions.mockReturnValue({
77
96
  updateImage: jest.fn(),
78
97
  updateName: jest.fn(),
@@ -98,30 +117,41 @@ describe('ChannelDetailsEditButton', () => {
98
117
  expect(screen.getByText('Edit')).toBeTruthy();
99
118
  });
100
119
 
101
- it('does not render the Edit button in a direct (1:1) channel even with the update-channel capability', () => {
102
- jest.spyOn(useIsDirectChatModule, 'useIsDirectChat').mockReturnValue(true);
120
+ it('forwards the style prop to the underlying Button', () => {
121
+ renderEditButton({
122
+ channel: buildChannel(['update-channel']),
123
+ style: { width: 'auto' },
124
+ });
103
125
 
104
- renderEditButton({ channel: buildChannel(['update-channel']) });
105
-
106
- expect(screen.queryByTestId('channel-details-edit-button')).toBeNull();
126
+ // The style lands on the Button's outer wrapper View, a host ancestor of the
127
+ // testID-carrying Pressable. Search ancestors for the one that received it.
128
+ expect(hasAncestorWithStyle(screen.getByTestId('channel-details-edit-button'))).toBe(true);
107
129
  });
108
130
 
109
- it('invokes onEditChannelPress when the Edit button is pressed', () => {
110
- const onEditChannelPress = jest.fn();
111
- renderEditButton({ channel: buildChannel(['update-channel']), onEditChannelPress });
131
+ it('opens the edit modal when the Edit button is pressed', () => {
132
+ renderEditButton({ channel: buildChannel(['update-channel']) });
133
+
134
+ expect(screen.queryByTestId('channel-edit-details-probe')).toBeNull();
112
135
 
113
136
  fireEvent.press(screen.getByTestId('channel-details-edit-button'));
114
137
 
115
- expect(onEditChannelPress).toHaveBeenCalledTimes(1);
138
+ expect(screen.getByTestId('channel-edit-details-probe')).toBeTruthy();
116
139
  });
117
140
 
118
- it('opens the edit modal when the Edit button is pressed and onEditChannelPress is not provided', () => {
119
- renderEditButton({ channel: buildChannel(['update-channel']) });
141
+ it('invokes the onPress override and does not open the modal', () => {
142
+ const onPress = jest.fn();
120
143
 
121
- expect(screen.queryByTestId('channel-edit-details-probe')).toBeNull();
144
+ renderEditButton({ channel: buildChannel(['update-channel']), onPress });
122
145
 
123
146
  fireEvent.press(screen.getByTestId('channel-details-edit-button'));
124
147
 
125
- expect(screen.getByTestId('channel-edit-details-probe')).toBeTruthy();
148
+ expect(onPress).toHaveBeenCalledTimes(1);
149
+ expect(screen.queryByTestId('channel-edit-details-probe')).toBeNull();
150
+ });
151
+
152
+ it('does not mount the built-in modal when a custom onPress is provided', () => {
153
+ renderEditButton({ channel: buildChannel(['update-channel']), onPress: jest.fn() });
154
+
155
+ expect(screen.queryByTestId('channel-edit-details-probe')).toBeNull();
126
156
  });
127
157
  });
@@ -77,14 +77,10 @@ const applyCapabilities = (
77
77
  const renderSection = ({
78
78
  capabilities,
79
79
  channel,
80
- onAddMembersPress,
81
- onMemberPress,
82
80
  onViewAllMembersPress,
83
81
  }: {
84
82
  channel: Channel;
85
83
  capabilities?: Partial<OwnCapabilitiesContextValue>;
86
- onAddMembersPress?: () => void;
87
- onMemberPress?: (member: ChannelMemberResponse) => void;
88
84
  onViewAllMembersPress?: () => void;
89
85
  }) =>
90
86
  render(
@@ -109,23 +105,16 @@ const renderSection = ({
109
105
  } as never
110
106
  }
111
107
  >
112
- <ChannelDetailsContextProvider
113
- value={{
114
- channel: applyCapabilities(channel, capabilities),
115
- onAddMembersPress,
116
- onMemberPress,
117
- onViewAllMembersPress,
118
- }}
119
- >
108
+ <ChannelDetailsContextProvider channel={applyCapabilities(channel, capabilities)}>
120
109
  <WithComponents
121
110
  overrides={{
122
- ChannelAddMembers: AddMembersProbe,
111
+ ChannelAddMembersFormContent: AddMembersProbe,
123
112
  ChannelMemberActionsSheet: MemberActionsSheetProbe,
124
113
  ChannelMemberItem: MemberItemProbe,
125
114
  ChannelMemberList: MemberListProbe,
126
115
  }}
127
116
  >
128
- <ChannelDetailsMemberSection />
117
+ <ChannelDetailsMemberSection onViewAllMembersPress={onViewAllMembersPress} />
129
118
  </WithComponents>
130
119
  </ChannelDetailsContextProvider>
131
120
  </ChatContext.Provider>
@@ -209,23 +198,19 @@ describe('ChannelDetailsMemberSection', () => {
209
198
  expect(screen.queryByTestId('channel-details-member-section-add-button')).toBeNull();
210
199
  });
211
200
 
212
- it('renders the preview add button and invokes onAddMembersPress when the user has the capability', () => {
201
+ it('renders the preview add button when the user has the capability', () => {
213
202
  previewSpy.mockReturnValue({ hasMore: false, total: 3, visible: makeMembers(3) });
214
203
  const channel = buildChannel(makeMembers(3), 3);
215
- const onAddMembersPress = jest.fn();
216
204
 
217
205
  renderSection({
218
206
  capabilities: { updateChannelMembers: true },
219
207
  channel,
220
- onAddMembersPress,
221
208
  });
222
209
 
223
- fireEvent.press(screen.getByTestId('channel-details-member-section-add-button'));
224
-
225
- expect(onAddMembersPress).toHaveBeenCalledTimes(1);
210
+ expect(screen.getByTestId('channel-details-member-section-add-button')).toBeTruthy();
226
211
  });
227
212
 
228
- it('opens the Add-members sheet when the preview Add is pressed and no onAddMembersPress override is provided', () => {
213
+ it('opens the Add-members sheet when the preview Add is pressed', () => {
229
214
  previewSpy.mockReturnValue({ hasMore: false, total: 3, visible: makeMembers(3) });
230
215
  const channel = buildChannel(makeMembers(3), 3);
231
216
 
@@ -239,7 +224,7 @@ describe('ChannelDetailsMemberSection', () => {
239
224
  expect(screen.getByTestId('add-members-probe')).toBeTruthy();
240
225
  });
241
226
 
242
- it('opens the per-member actions sheet when a member row is pressed and no onMemberPress override is provided', () => {
227
+ it('opens the per-member actions sheet when a member row is pressed', () => {
243
228
  const members = makeMembers(3);
244
229
  previewSpy.mockReturnValue({ hasMore: false, total: 3, visible: members });
245
230
  const channel = buildChannel(members, 3);
@@ -259,27 +244,7 @@ describe('ChannelDetailsMemberSection', () => {
259
244
  expect(screen.getByTestId('member-actions-sheet-probe').props.children).toBe('u-0');
260
245
  });
261
246
 
262
- it('calls onMemberPress instead of opening the per-member actions sheet when provided', () => {
263
- const members = makeMembers(3);
264
- previewSpy.mockReturnValue({ hasMore: false, total: 3, visible: members });
265
- const channel = buildChannel(members, 3);
266
- const onMemberPress = jest.fn();
267
-
268
- renderSection({ channel, onMemberPress });
269
-
270
- const lastCallForSecondMember = [...memberItemProbeCalls]
271
- .reverse()
272
- .find((call) => call.member.user?.id === 'u-1');
273
- act(() => {
274
- lastCallForSecondMember?.onPress?.(lastCallForSecondMember.member);
275
- });
276
-
277
- expect(onMemberPress).toHaveBeenCalledTimes(1);
278
- expect(onMemberPress.mock.calls[0][0].user?.id).toBe('u-1');
279
- expect(screen.queryByTestId('member-actions-sheet-probe')).toBeNull();
280
- });
281
-
282
- it('swaps the all-members modal for the Add-members sheet when the modal Add button is pressed', () => {
247
+ it('opens the Add-members sheet on top of the all-members modal when the modal Add button is pressed', () => {
283
248
  previewSpy.mockReturnValue({ hasMore: true, total: 12, visible: makeMembers(5) });
284
249
  const channel = buildChannel(makeMembers(12), 12);
285
250
 
@@ -292,7 +257,7 @@ describe('ChannelDetailsMemberSection', () => {
292
257
  fireEvent.press(screen.getByTestId('channel-details-member-list-add-button'));
293
258
 
294
259
  expect(screen.getByTestId('add-members-probe')).toBeTruthy();
295
- // View-all sheet is dismissed when Add-members opens (swap, not stack).
296
- expect(screen.queryByTestId('member-list-probe')).toBeNull();
260
+ // Add-members opens layered over the all-members list (stack, not swap).
261
+ expect(screen.getByTestId('member-list-probe')).toBeTruthy();
297
262
  });
298
263
  });
@@ -59,8 +59,8 @@ const renderHeader = ({
59
59
  }) =>
60
60
  render(
61
61
  <Providers>
62
- <ChannelDetailsContextProvider value={{ channel, onBack }}>
63
- <ChannelDetailsNavHeader action={action} />
62
+ <ChannelDetailsContextProvider channel={channel}>
63
+ <ChannelDetailsNavHeader action={action} onBack={onBack} />
64
64
  </ChannelDetailsContextProvider>
65
65
  </Providers>,
66
66
  );
@@ -100,8 +100,8 @@ describe('ChannelDetailsNavHeader', () => {
100
100
 
101
101
  rerender(
102
102
  <Providers>
103
- <ChannelDetailsContextProvider value={{ channel: buildChannel([]), onBack: jest.fn() }}>
104
- <ChannelDetailsNavHeader />
103
+ <ChannelDetailsContextProvider channel={buildChannel([])}>
104
+ <ChannelDetailsNavHeader onBack={jest.fn()} />
105
105
  </ChannelDetailsContextProvider>
106
106
  </Providers>,
107
107
  );
@@ -19,6 +19,7 @@ import { defaultTheme } from '../../../contexts/themeContext/utils/theme';
19
19
  import { TranslationProvider } from '../../../contexts/translationContext/TranslationContext';
20
20
  import type { ChannelDetailsActionItemProps } from '../components/ChannelDetailsActionItem';
21
21
  import { ChannelDetailsNavigationSection } from '../components/ChannelDetailsNavigationSection';
22
+ import type { GetChannelDetailsNavigationItems } from '../hooks/useChannelDetailsNavigationItems';
22
23
 
23
24
  const probeCalls: ChannelDetailsActionItemProps[] = [];
24
25
 
@@ -67,7 +68,7 @@ jest.mock('../../ImageGallery/ImageGallery', () => {
67
68
  });
68
69
 
69
70
  const renderSection = (
70
- contextValue: Partial<ChannelDetailsContextValue> = {},
71
+ { getNavigationItems }: { getNavigationItems?: GetChannelDetailsNavigationItems } = {},
71
72
  overlay: Overlay = 'none',
72
73
  ) => {
73
74
  const overlayContextValue: OverlayContextValue = {
@@ -85,8 +86,10 @@ const renderSection = (
85
86
  }}
86
87
  >
87
88
  <OverlayContext.Provider value={overlayContextValue}>
88
- <ChannelDetailsContextProvider value={contextValue as ChannelDetailsContextValue}>
89
- <ChannelDetailsNavigationSection />
89
+ <ChannelDetailsContextProvider
90
+ channel={undefined as unknown as ChannelDetailsContextValue['channel']}
91
+ >
92
+ <ChannelDetailsNavigationSection getNavigationItems={getNavigationItems} />
90
93
  </ChannelDetailsContextProvider>
91
94
  </OverlayContext.Provider>
92
95
  </TranslationProvider>
@@ -46,7 +46,7 @@ const renderProfile = ({ channel = buildChannel() }: { channel?: Channel } = {})
46
46
  }}
47
47
  >
48
48
  <ChatProvider value={{ client: { userID: OWN_USER_ID } } as never}>
49
- <ChannelDetailsContextProvider value={{ channel }}>
49
+ <ChannelDetailsContextProvider channel={channel}>
50
50
  <ChannelDetailsProfile />
51
51
  </ChannelDetailsContextProvider>
52
52
  </ChatProvider>
@@ -14,13 +14,14 @@ import { ThemeProvider } from '../../../contexts/themeContext/ThemeContext';
14
14
  import { defaultTheme } from '../../../contexts/themeContext/utils/theme';
15
15
  import { TranslationProvider } from '../../../contexts/translationContext/TranslationContext';
16
16
  import { useChannelActions } from '../../../hooks/actions/useChannelActions';
17
- import { ChannelEditDetailsModal } from '../components/ChannelEditDetailsModal';
17
+ import { ChannelEditDetailsForm } from '../components/ChannelEditDetailsForm';
18
18
 
19
19
  jest.mock('../../../hooks/actions/useChannelActions');
20
20
  const mockedUseChannelActions = jest.mocked(useChannelActions);
21
21
 
22
- // Stands in for ChannelEditDetails: drives the channel name through the store
23
- // exposed by ChannelEditDetailsContext, the same way the real component does.
22
+ // Stands in for ChannelEditDetailsFormContent: drives the channel name through
23
+ // the store exposed by ChannelEditDetailsContext, the same way the real
24
+ // component does.
24
25
  const EditDetailsProbe = () => {
25
26
  const { store } = useChannelEditDetailsContext();
26
27
  return (
@@ -51,15 +52,7 @@ const buildChannel = (overrides?: { name?: string; cid?: string }): Channel =>
51
52
  state: { members: {} },
52
53
  }) as unknown as Channel;
53
54
 
54
- const renderModal = ({
55
- channel,
56
- onClose = jest.fn(),
57
- visible = true,
58
- }: {
59
- channel: Channel;
60
- onClose?: () => void;
61
- visible?: boolean;
62
- }) =>
55
+ const renderForm = ({ channel, onClose = jest.fn() }: { channel: Channel; onClose?: () => void }) =>
63
56
  render(
64
57
  <ThemeProvider theme={defaultTheme}>
65
58
  <AccessibilityProvider value={{ enabled: true }}>
@@ -73,9 +66,9 @@ const renderModal = ({
73
66
  <ChatContext.Provider
74
67
  value={{ client: { notifications: new NotificationManager(), userID: 'me' } } as never}
75
68
  >
76
- <ChannelDetailsContextProvider value={{ channel }}>
77
- <WithComponents overrides={{ ChannelEditDetails: EditDetailsProbe }}>
78
- <ChannelEditDetailsModal onClose={onClose} visible={visible} />
69
+ <ChannelDetailsContextProvider channel={channel}>
70
+ <WithComponents overrides={{ ChannelEditDetailsFormContent: EditDetailsProbe }}>
71
+ <ChannelEditDetailsForm onClose={onClose} />
79
72
  </WithComponents>
80
73
  </ChannelDetailsContextProvider>
81
74
  </ChatContext.Provider>
@@ -84,13 +77,11 @@ const renderModal = ({
84
77
  </ThemeProvider>,
85
78
  );
86
79
 
87
- describe('ChannelEditDetailsModal', () => {
80
+ describe('ChannelEditDetailsForm', () => {
88
81
  let updateNameSpy: jest.Mock;
89
82
 
90
83
  beforeEach(() => {
91
- updateNameSpy = jest.fn(async (_name: string, options?: { onSuccess?: () => unknown }) => {
92
- await options?.onSuccess?.();
93
- });
84
+ updateNameSpy = jest.fn().mockResolvedValue(undefined);
94
85
  mockedUseChannelActions.mockReturnValue({
95
86
  updateName: updateNameSpy,
96
87
  } as unknown as ReturnType<typeof useChannelActions>);
@@ -102,7 +93,7 @@ describe('ChannelEditDetailsModal', () => {
102
93
  });
103
94
 
104
95
  it('disables the confirm button on initial render when the name is unchanged', () => {
105
- renderModal({ channel: buildChannel() });
96
+ renderForm({ channel: buildChannel() });
106
97
 
107
98
  expect(
108
99
  screen.getByTestId('channel-details-edit-confirm-button').props.accessibilityState,
@@ -110,7 +101,7 @@ describe('ChannelEditDetailsModal', () => {
110
101
  });
111
102
 
112
103
  it('enables the confirm button after typing a different name', () => {
113
- renderModal({ channel: buildChannel() });
104
+ renderForm({ channel: buildChannel() });
114
105
 
115
106
  fireEvent.changeText(screen.getByTestId('channel-edit-name-input'), 'Different');
116
107
 
@@ -120,7 +111,7 @@ describe('ChannelEditDetailsModal', () => {
120
111
  });
121
112
 
122
113
  it('enables the confirm button after clearing a channel that previously had a name', () => {
123
- renderModal({ channel: buildChannel({ name: 'Original' }) });
114
+ renderForm({ channel: buildChannel({ name: 'Original' }) });
124
115
 
125
116
  fireEvent.changeText(screen.getByTestId('channel-edit-name-input'), '');
126
117
 
@@ -130,7 +121,7 @@ describe('ChannelEditDetailsModal', () => {
130
121
  });
131
122
 
132
123
  it('enables confirm when the value differs from the initial name only by whitespace', () => {
133
- renderModal({ channel: buildChannel({ name: 'Original' }) });
124
+ renderForm({ channel: buildChannel({ name: 'Original' }) });
134
125
 
135
126
  fireEvent.changeText(screen.getByTestId('channel-edit-name-input'), ' Original ');
136
127
 
@@ -140,7 +131,7 @@ describe('ChannelEditDetailsModal', () => {
140
131
  });
141
132
 
142
133
  it('passes the raw (untrimmed) name to updateName when the user confirms', async () => {
143
- renderModal({ channel: buildChannel({ name: 'Original' }) });
134
+ renderForm({ channel: buildChannel({ name: 'Original' }) });
144
135
 
145
136
  fireEvent.changeText(screen.getByTestId('channel-edit-name-input'), ' Renamed ');
146
137
 
@@ -151,12 +142,12 @@ describe('ChannelEditDetailsModal', () => {
151
142
 
152
143
  expect(updateNameSpy).toHaveBeenCalledWith(
153
144
  ' Renamed ',
154
- expect.objectContaining({ onSuccess: expect.any(Function) }),
145
+ expect.objectContaining({ onFailure: expect.any(Function) }),
155
146
  );
156
147
  });
157
148
 
158
149
  it('passes an empty string to updateName when the user clears and confirms', async () => {
159
- renderModal({ channel: buildChannel({ name: 'Original' }) });
150
+ renderForm({ channel: buildChannel({ name: 'Original' }) });
160
151
 
161
152
  fireEvent.changeText(screen.getByTestId('channel-edit-name-input'), '');
162
153
 
@@ -167,13 +158,13 @@ describe('ChannelEditDetailsModal', () => {
167
158
 
168
159
  expect(updateNameSpy).toHaveBeenCalledWith(
169
160
  '',
170
- expect.objectContaining({ onSuccess: expect.any(Function) }),
161
+ expect.objectContaining({ onFailure: expect.any(Function) }),
171
162
  );
172
163
  });
173
164
 
174
- it('closes the modal after updateName invokes onSuccess', async () => {
165
+ it('closes the form after updateName succeeds', async () => {
175
166
  const onClose = jest.fn();
176
- renderModal({ channel: buildChannel({ name: 'Original' }), onClose });
167
+ renderForm({ channel: buildChannel({ name: 'Original' }), onClose });
177
168
 
178
169
  fireEvent.changeText(screen.getByTestId('channel-edit-name-input'), 'Renamed');
179
170
 
@@ -185,10 +176,14 @@ describe('ChannelEditDetailsModal', () => {
185
176
  await waitFor(() => expect(onClose).toHaveBeenCalledTimes(1));
186
177
  });
187
178
 
188
- it('keeps the modal open and re-enables confirm when updateName does not invoke onSuccess', async () => {
189
- updateNameSpy.mockResolvedValueOnce(undefined);
179
+ it('keeps the form open and re-enables confirm when updateName invokes onFailure', async () => {
180
+ updateNameSpy.mockImplementationOnce(
181
+ async (_name: string, options?: { onFailure?: (error: unknown) => unknown }) => {
182
+ await options?.onFailure?.(new Error('failed'));
183
+ },
184
+ );
190
185
  const onClose = jest.fn();
191
- renderModal({ channel: buildChannel({ name: 'Original' }), onClose });
186
+ renderForm({ channel: buildChannel({ name: 'Original' }), onClose });
192
187
 
193
188
  fireEvent.changeText(screen.getByTestId('channel-edit-name-input'), 'Renamed');
194
189
 
@@ -212,7 +207,7 @@ describe('ChannelEditDetailsModal', () => {
212
207
  releaseUpdate = resolve;
213
208
  }),
214
209
  );
215
- renderModal({ channel: buildChannel({ name: 'Original' }) });
210
+ renderForm({ channel: buildChannel({ name: 'Original' }) });
216
211
 
217
212
  fireEvent.changeText(screen.getByTestId('channel-edit-name-input'), 'Renamed');
218
213
 
@@ -233,7 +228,7 @@ describe('ChannelEditDetailsModal', () => {
233
228
 
234
229
  it('invokes onClose when the user taps the close button', () => {
235
230
  const onClose = jest.fn();
236
- renderModal({ channel: buildChannel({ name: 'Original' }), onClose });
231
+ renderForm({ channel: buildChannel({ name: 'Original' }), onClose });
237
232
 
238
233
  fireEvent.changeText(screen.getByTestId('channel-edit-name-input'), 'Renamed');
239
234
  fireEvent.press(screen.getByLabelText('a11y/Close'));
@@ -242,7 +237,7 @@ describe('ChannelEditDetailsModal', () => {
242
237
  });
243
238
 
244
239
  it('renders nothing when the channel has no cid (no notification host id)', () => {
245
- renderModal({ channel: buildChannel({ cid: '' }) });
240
+ renderForm({ channel: buildChannel({ cid: '' }) });
246
241
 
247
242
  expect(screen.queryByTestId('channel-details-edit-confirm-button')).toBeNull();
248
243
  });