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

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 (543) 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/Channel/hooks/useCreateThreadContext.d.ts.map +1 -1
  252. package/lib/typescript/components/ChannelDetails/ChannelDetails.d.ts +2 -95
  253. package/lib/typescript/components/ChannelDetails/ChannelDetails.d.ts.map +1 -1
  254. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionItem.d.ts +0 -3
  255. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionItem.d.ts.map +1 -1
  256. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionsSection.d.ts +17 -4
  257. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionsSection.d.ts.map +1 -1
  258. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsEditButton.d.ts +8 -4
  259. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsEditButton.d.ts.map +1 -1
  260. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsMemberSection.d.ts +7 -4
  261. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsMemberSection.d.ts.map +1 -1
  262. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavHeader.d.ts +3 -4
  263. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavHeader.d.ts.map +1 -1
  264. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavigationSection.d.ts +13 -4
  265. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavigationSection.d.ts.map +1 -1
  266. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsProfile.d.ts +0 -3
  267. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsProfile.d.ts.map +1 -1
  268. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsForm.d.ts +20 -0
  269. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsForm.d.ts.map +1 -0
  270. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormContent.d.ts +3 -0
  271. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormContent.d.ts.map +1 -0
  272. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormHeader.d.ts +7 -0
  273. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormHeader.d.ts.map +1 -0
  274. package/lib/typescript/components/ChannelDetails/components/ChannelEditImageSheet.d.ts +0 -3
  275. package/lib/typescript/components/ChannelDetails/components/ChannelEditImageSheet.d.ts.map +1 -1
  276. package/lib/typescript/components/ChannelDetails/components/ChannelEditName.d.ts +0 -3
  277. package/lib/typescript/components/ChannelDetails/components/ChannelEditName.d.ts.map +1 -1
  278. package/lib/typescript/components/ChannelDetails/components/index.d.ts +4 -2
  279. package/lib/typescript/components/ChannelDetails/components/index.d.ts.map +1 -1
  280. package/lib/typescript/components/ChannelDetails/components/members/AddMemberSearchResultItem.d.ts +0 -3
  281. package/lib/typescript/components/ChannelDetails/components/members/AddMemberSearchResultItem.d.ts.map +1 -1
  282. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersButton.d.ts +12 -0
  283. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersButton.d.ts.map +1 -0
  284. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersForm.d.ts +19 -0
  285. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersForm.d.ts.map +1 -0
  286. package/lib/typescript/components/ChannelDetails/components/members/{ChannelAddMembers.d.ts → ChannelAddMembersFormContent.d.ts} +3 -6
  287. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersFormContent.d.ts.map +1 -0
  288. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.d.ts +7 -0
  289. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.d.ts.map +1 -0
  290. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberActionsSheet.d.ts +10 -4
  291. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberActionsSheet.d.ts.map +1 -1
  292. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberItem.d.ts +8 -4
  293. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberItem.d.ts.map +1 -1
  294. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberList.d.ts +8 -3
  295. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberList.d.ts.map +1 -1
  296. package/lib/typescript/components/ChannelDetails/components/members/MemberListLoadingSkeleton.d.ts +0 -3
  297. package/lib/typescript/components/ChannelDetails/components/members/MemberListLoadingSkeleton.d.ts.map +1 -1
  298. package/lib/typescript/components/ChannelDetails/components/members/UserListLoadingSkeleton.d.ts +0 -3
  299. package/lib/typescript/components/ChannelDetails/components/members/UserListLoadingSkeleton.d.ts.map +1 -1
  300. package/lib/typescript/components/ChannelDetails/components/members/index.d.ts +4 -3
  301. package/lib/typescript/components/ChannelDetails/components/members/index.d.ts.map +1 -1
  302. package/lib/typescript/components/ChannelDetails/components/modal/Modal.d.ts +0 -3
  303. package/lib/typescript/components/ChannelDetails/components/modal/Modal.d.ts.map +1 -1
  304. package/lib/typescript/components/ChannelDetails/components/modal/ModalHeader.d.ts +0 -3
  305. package/lib/typescript/components/ChannelDetails/components/modal/ModalHeader.d.ts.map +1 -1
  306. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentItem.d.ts +0 -5
  307. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentItem.d.ts.map +1 -1
  308. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentList.d.ts +8 -4
  309. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentList.d.ts.map +1 -1
  310. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.d.ts +0 -3
  311. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.d.ts.map +1 -1
  312. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.d.ts +0 -3
  313. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.d.ts.map +1 -1
  314. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaItem.d.ts +0 -5
  315. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaItem.d.ts.map +1 -1
  316. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaList.d.ts +8 -4
  317. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaList.d.ts.map +1 -1
  318. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.d.ts +0 -2
  319. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.d.ts.map +1 -1
  320. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageItem.d.ts +0 -3
  321. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageItem.d.ts.map +1 -1
  322. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageList.d.ts +8 -5
  323. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageList.d.ts.map +1 -1
  324. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.d.ts +0 -3
  325. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.d.ts.map +1 -1
  326. package/lib/typescript/components/ChannelDetails/components/roles/RoleItem.d.ts +16 -0
  327. package/lib/typescript/components/ChannelDetails/components/roles/RoleItem.d.ts.map +1 -0
  328. package/lib/typescript/components/ChannelDetails/components/roles/RoleList.d.ts +11 -0
  329. package/lib/typescript/components/ChannelDetails/components/roles/RoleList.d.ts.map +1 -0
  330. package/lib/typescript/components/ChannelDetails/components/roles/index.d.ts +3 -0
  331. package/lib/typescript/components/ChannelDetails/components/roles/index.d.ts.map +1 -0
  332. package/lib/typescript/components/ChannelDetails/hooks/members/index.d.ts +1 -1
  333. package/lib/typescript/components/ChannelDetails/hooks/members/index.d.ts.map +1 -1
  334. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoles.d.ts +35 -0
  335. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoles.d.ts.map +1 -0
  336. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsActionItems.d.ts +5 -5
  337. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsActionItems.d.ts.map +1 -1
  338. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.d.ts +0 -1
  339. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.d.ts.map +1 -1
  340. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.d.ts +0 -3
  341. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.d.ts.map +1 -1
  342. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.d.ts +3 -9
  343. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.d.ts.map +1 -1
  344. package/lib/typescript/components/ChannelDetails/hooks/useEditChannelImage.d.ts +1 -2
  345. package/lib/typescript/components/ChannelDetails/hooks/useEditChannelImage.d.ts.map +1 -1
  346. package/lib/typescript/components/ChannelDetails/hooks/useFileAttachmentListSections.d.ts +0 -3
  347. package/lib/typescript/components/ChannelDetails/hooks/useFileAttachmentListSections.d.ts.map +1 -1
  348. package/lib/typescript/components/ChannelDetails/hooks/useMediaList.d.ts +0 -4
  349. package/lib/typescript/components/ChannelDetails/hooks/useMediaList.d.ts.map +1 -1
  350. package/lib/typescript/components/ChannelDetails/hooks/useUserActivityStatus.d.ts +0 -1
  351. package/lib/typescript/components/ChannelDetails/hooks/useUserActivityStatus.d.ts.map +1 -1
  352. package/lib/typescript/components/UIComponents/EmptyList.d.ts +0 -3
  353. package/lib/typescript/components/UIComponents/EmptyList.d.ts.map +1 -1
  354. package/lib/typescript/components/UIComponents/EmptySearchResult.d.ts +0 -3
  355. package/lib/typescript/components/UIComponents/EmptySearchResult.d.ts.map +1 -1
  356. package/lib/typescript/components/UIComponents/GenericListLoadingSkeleton.d.ts +0 -3
  357. package/lib/typescript/components/UIComponents/GenericListLoadingSkeleton.d.ts.map +1 -1
  358. package/lib/typescript/components/UIComponents/SearchInput.d.ts +0 -3
  359. package/lib/typescript/components/UIComponents/SearchInput.d.ts.map +1 -1
  360. package/lib/typescript/components/UIComponents/SelectionCircle.d.ts +0 -3
  361. package/lib/typescript/components/UIComponents/SelectionCircle.d.ts.map +1 -1
  362. package/lib/typescript/components/ui/Avatar/UserAvatar.d.ts.map +1 -1
  363. package/lib/typescript/components/ui/Avatar/constants.d.ts +10 -1
  364. package/lib/typescript/components/ui/Avatar/constants.d.ts.map +1 -1
  365. package/lib/typescript/components/ui/Badge/OnlineIndicator.d.ts.map +1 -1
  366. package/lib/typescript/contexts/channelAddMembersContext/ChannelAddMembersContext.d.ts +18 -9
  367. package/lib/typescript/contexts/channelAddMembersContext/ChannelAddMembersContext.d.ts.map +1 -1
  368. package/lib/typescript/contexts/channelDetailsContext/channelDetailsContext.d.ts +14 -15
  369. package/lib/typescript/contexts/channelDetailsContext/channelDetailsContext.d.ts.map +1 -1
  370. package/lib/typescript/contexts/channelEditDetailsContext/ChannelEditDetailsContext.d.ts +28 -13
  371. package/lib/typescript/contexts/channelEditDetailsContext/ChannelEditDetailsContext.d.ts.map +1 -1
  372. package/lib/typescript/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.d.ts +2 -11
  373. package/lib/typescript/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.d.ts.map +1 -1
  374. package/lib/typescript/contexts/channelMediaListContext/ChannelMediaListContext.d.ts +2 -11
  375. package/lib/typescript/contexts/channelMediaListContext/ChannelMediaListContext.d.ts.map +1 -1
  376. package/lib/typescript/contexts/channelMemberListContext/ChannelMemberListContext.d.ts +2 -11
  377. package/lib/typescript/contexts/channelMemberListContext/ChannelMemberListContext.d.ts.map +1 -1
  378. package/lib/typescript/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.d.ts +2 -11
  379. package/lib/typescript/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.d.ts.map +1 -1
  380. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts +21 -14
  381. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts.map +1 -1
  382. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts +12 -1
  383. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts.map +1 -1
  384. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +12 -1
  385. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  386. package/lib/typescript/hooks/index.d.ts +3 -0
  387. package/lib/typescript/hooks/index.d.ts.map +1 -1
  388. package/lib/typescript/hooks/useCanAddMembersToChannel.d.ts +6 -0
  389. package/lib/typescript/hooks/useCanAddMembersToChannel.d.ts.map +1 -0
  390. package/lib/typescript/hooks/useCanEditChannel.d.ts +6 -0
  391. package/lib/typescript/hooks/useCanEditChannel.d.ts.map +1 -0
  392. package/lib/typescript/hooks/useIsDirectChat.d.ts +1 -1
  393. package/lib/typescript/hooks/useIsDirectChat.d.ts.map +1 -1
  394. package/lib/typescript/hooks/useTranslatedMessage.d.ts.map +1 -1
  395. package/lib/typescript/state-store/edit-channel-details-store.d.ts +10 -11
  396. package/lib/typescript/state-store/edit-channel-details-store.d.ts.map +1 -1
  397. package/lib/typescript/state-store/index.d.ts +3 -0
  398. package/lib/typescript/state-store/index.d.ts.map +1 -1
  399. package/lib/typescript/state-store/selection-store.d.ts +0 -6
  400. package/lib/typescript/state-store/selection-store.d.ts.map +1 -1
  401. package/lib/typescript/state-store/signal-store.d.ts +9 -0
  402. package/lib/typescript/state-store/signal-store.d.ts.map +1 -0
  403. package/package.json +2 -2
  404. package/src/components/ChannelDetails/ChannelDetails.tsx +14 -160
  405. package/src/components/ChannelDetails/__tests__/ChannelDetails.test.tsx +51 -38
  406. package/src/components/ChannelDetails/__tests__/ChannelDetailsActionsSection.test.tsx +1 -1
  407. package/src/components/ChannelDetails/__tests__/ChannelDetailsEditButton.test.tsx +52 -22
  408. package/src/components/ChannelDetails/__tests__/ChannelDetailsMemberSection.test.tsx +10 -45
  409. package/src/components/ChannelDetails/__tests__/ChannelDetailsNavHeader.test.tsx +4 -4
  410. package/src/components/ChannelDetails/__tests__/ChannelDetailsNavigationSection.test.tsx +6 -3
  411. package/src/components/ChannelDetails/__tests__/ChannelDetailsProfile.test.tsx +1 -1
  412. package/src/components/ChannelDetails/__tests__/{ChannelEditDetailsModal.test.tsx → ChannelEditDetailsForm.test.tsx} +30 -35
  413. package/src/components/ChannelDetails/__tests__/{ChannelEditDetails.test.tsx → ChannelEditDetailsFormContent.test.tsx} +8 -8
  414. package/src/components/ChannelDetails/__tests__/ChannelEditImageSheet.test.tsx +1 -1
  415. package/src/components/ChannelDetails/__tests__/ChannelEditName.test.tsx +1 -1
  416. package/src/components/ChannelDetails/__tests__/members/ChannelAddMembersButton.test.tsx +163 -0
  417. package/src/components/ChannelDetails/__tests__/members/{ChannelAddMembersModal.test.tsx → ChannelAddMembersForm.test.tsx} +23 -25
  418. package/src/components/ChannelDetails/__tests__/members/{ChannelAddMembers.test.tsx → ChannelAddMembersFormContent.test.tsx} +5 -3
  419. package/src/components/ChannelDetails/__tests__/members/ChannelMemberActionsSheet.test.tsx +8 -3
  420. package/src/components/ChannelDetails/__tests__/members/ChannelMemberItem.test.tsx +11 -11
  421. package/src/components/ChannelDetails/__tests__/members/ChannelMemberList.test.tsx +35 -21
  422. package/src/components/ChannelDetails/__tests__/members/useMemberRoles.test.tsx +122 -0
  423. package/src/components/ChannelDetails/__tests__/useChannelDetailsActionItems.test.tsx +13 -9
  424. package/src/components/ChannelDetails/__tests__/useEditChannelImage.test.tsx +10 -3
  425. package/src/components/ChannelDetails/components/ChannelDetailsActionItem.tsx +0 -3
  426. package/src/components/ChannelDetails/components/ChannelDetailsActionsSection.tsx +26 -6
  427. package/src/components/ChannelDetails/components/ChannelDetailsEditButton.tsx +34 -18
  428. package/src/components/ChannelDetails/components/ChannelDetailsMemberSection.tsx +51 -59
  429. package/src/components/ChannelDetails/components/ChannelDetailsNavHeader.tsx +8 -5
  430. package/src/components/ChannelDetails/components/ChannelDetailsNavigationSection.tsx +18 -5
  431. package/src/components/ChannelDetails/components/ChannelDetailsProfile.tsx +0 -3
  432. package/src/components/ChannelDetails/components/ChannelEditDetailsForm.tsx +48 -0
  433. package/src/components/ChannelDetails/components/{ChannelEditDetails.tsx → ChannelEditDetailsFormContent.tsx} +1 -4
  434. package/src/components/ChannelDetails/components/ChannelEditDetailsFormHeader.tsx +65 -0
  435. package/src/components/ChannelDetails/components/ChannelEditImageSheet.tsx +0 -3
  436. package/src/components/ChannelDetails/components/ChannelEditName.tsx +0 -3
  437. package/src/components/ChannelDetails/components/__tests__/navigation-section/FileAttachmentList.test.tsx +1 -2
  438. package/src/components/ChannelDetails/components/__tests__/navigation-section/MediaList.test.tsx +2 -2
  439. package/src/components/ChannelDetails/components/__tests__/navigation-section/PinnedMessageList.test.tsx +1 -2
  440. package/src/components/ChannelDetails/components/index.ts +4 -2
  441. package/src/components/ChannelDetails/components/members/AddMemberSearchResultItem.tsx +0 -3
  442. package/src/components/ChannelDetails/components/members/ChannelAddMembersButton.tsx +83 -0
  443. package/src/components/ChannelDetails/components/members/ChannelAddMembersForm.tsx +41 -0
  444. package/src/components/ChannelDetails/components/members/{ChannelAddMembers.tsx → ChannelAddMembersFormContent.tsx} +4 -5
  445. package/src/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.tsx +75 -0
  446. package/src/components/ChannelDetails/components/members/ChannelMemberActionsSheet.tsx +17 -5
  447. package/src/components/ChannelDetails/components/members/ChannelMemberItem.tsx +16 -29
  448. package/src/components/ChannelDetails/components/members/ChannelMemberList.tsx +26 -19
  449. package/src/components/ChannelDetails/components/members/MemberListLoadingSkeleton.tsx +0 -3
  450. package/src/components/ChannelDetails/components/members/UserListLoadingSkeleton.tsx +0 -3
  451. package/src/components/ChannelDetails/components/members/index.ts +4 -3
  452. package/src/components/ChannelDetails/components/modal/Modal.tsx +19 -6
  453. package/src/components/ChannelDetails/components/modal/ModalHeader.tsx +0 -3
  454. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentItem.tsx +0 -5
  455. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentList.tsx +11 -7
  456. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.tsx +0 -3
  457. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.tsx +0 -3
  458. package/src/components/ChannelDetails/components/navigation-section/MediaItem.tsx +0 -5
  459. package/src/components/ChannelDetails/components/navigation-section/MediaList.tsx +16 -7
  460. package/src/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.tsx +0 -2
  461. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageItem.tsx +0 -3
  462. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageList.tsx +11 -7
  463. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.tsx +0 -3
  464. package/src/components/ChannelDetails/components/roles/RoleItem.tsx +74 -0
  465. package/src/components/ChannelDetails/components/roles/RoleList.tsx +51 -0
  466. package/src/components/ChannelDetails/components/roles/__tests__/RoleItem.test.tsx +58 -0
  467. package/src/components/ChannelDetails/components/roles/__tests__/RoleList.test.tsx +31 -0
  468. package/src/components/ChannelDetails/components/roles/index.ts +2 -0
  469. package/src/components/ChannelDetails/hooks/members/index.ts +1 -1
  470. package/src/components/ChannelDetails/hooks/members/useMemberRoles.ts +63 -0
  471. package/src/components/ChannelDetails/hooks/useChannelDetailsActionItems.ts +9 -5
  472. package/src/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.ts +0 -1
  473. package/src/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.ts +0 -3
  474. package/src/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.ts +5 -11
  475. package/src/components/ChannelDetails/hooks/useEditChannelImage.ts +3 -4
  476. package/src/components/ChannelDetails/hooks/useFileAttachmentListSections.ts +0 -3
  477. package/src/components/ChannelDetails/hooks/useMediaList.ts +0 -4
  478. package/src/components/ChannelDetails/hooks/useUserActivityStatus.ts +0 -1
  479. package/src/components/UIComponents/EmptyList.tsx +0 -3
  480. package/src/components/UIComponents/EmptySearchResult.tsx +0 -3
  481. package/src/components/UIComponents/GenericListLoadingSkeleton.tsx +0 -3
  482. package/src/components/UIComponents/SearchInput.tsx +0 -3
  483. package/src/components/UIComponents/SelectionCircle.tsx +0 -3
  484. package/src/components/ui/Avatar/UserAvatar.tsx +8 -4
  485. package/src/components/ui/Avatar/constants.ts +48 -1
  486. package/src/components/ui/Badge/OnlineIndicator.tsx +10 -24
  487. package/src/contexts/channelAddMembersContext/ChannelAddMembersContext.tsx +76 -12
  488. package/src/contexts/channelDetailsContext/channelDetailsContext.tsx +24 -19
  489. package/src/contexts/channelEditDetailsContext/ChannelEditDetailsContext.tsx +101 -18
  490. package/src/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.tsx +5 -13
  491. package/src/contexts/channelMediaListContext/ChannelMediaListContext.tsx +5 -13
  492. package/src/contexts/channelMemberListContext/ChannelMemberListContext.tsx +5 -13
  493. package/src/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.tsx +5 -13
  494. package/src/contexts/componentsContext/defaultComponents.ts +18 -4
  495. package/src/contexts/themeContext/utils/theme.ts +24 -2
  496. package/src/hooks/__tests__/useCanAddMembersToChannel.test.tsx +43 -0
  497. package/src/hooks/__tests__/useCanEditChannel.test.tsx +43 -0
  498. package/src/hooks/index.ts +3 -0
  499. package/src/hooks/useCanAddMembersToChannel.ts +9 -0
  500. package/src/hooks/useCanEditChannel.ts +9 -0
  501. package/src/hooks/useIsDirectChat.ts +2 -2
  502. package/src/state-store/__tests__/edit-channel-details-store.test.ts +72 -17
  503. package/src/state-store/__tests__/signal-store.test.ts +35 -0
  504. package/src/state-store/edit-channel-details-store.ts +22 -17
  505. package/src/state-store/index.ts +3 -0
  506. package/src/state-store/selection-store.ts +0 -6
  507. package/src/state-store/signal-store.ts +18 -0
  508. package/src/version.json +1 -1
  509. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetails.js.map +0 -1
  510. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsModal.js +0 -152
  511. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsModal.js.map +0 -1
  512. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembers.js.map +0 -1
  513. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersModal.js +0 -133
  514. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersModal.js.map +0 -1
  515. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAllMembersModal.js +0 -64
  516. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAllMembersModal.js.map +0 -1
  517. package/lib/commonjs/components/ChannelDetails/hooks/members/useMemberRoleLabel.js.map +0 -1
  518. package/lib/module/components/ChannelDetails/components/ChannelEditDetails.js.map +0 -1
  519. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsModal.js +0 -152
  520. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsModal.js.map +0 -1
  521. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembers.js.map +0 -1
  522. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersModal.js +0 -133
  523. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersModal.js.map +0 -1
  524. package/lib/module/components/ChannelDetails/components/members/ChannelAllMembersModal.js +0 -64
  525. package/lib/module/components/ChannelDetails/components/members/ChannelAllMembersModal.js.map +0 -1
  526. package/lib/module/components/ChannelDetails/hooks/members/useMemberRoleLabel.js.map +0 -1
  527. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetails.d.ts +0 -6
  528. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetails.d.ts.map +0 -1
  529. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsModal.d.ts +0 -18
  530. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsModal.d.ts.map +0 -1
  531. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembers.d.ts.map +0 -1
  532. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersModal.d.ts +0 -18
  533. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersModal.d.ts.map +0 -1
  534. package/lib/typescript/components/ChannelDetails/components/members/ChannelAllMembersModal.d.ts +0 -17
  535. package/lib/typescript/components/ChannelDetails/components/members/ChannelAllMembersModal.d.ts.map +0 -1
  536. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoleLabel.d.ts +0 -10
  537. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoleLabel.d.ts.map +0 -1
  538. package/src/components/ChannelDetails/__tests__/members/ChannelAllMembersModal.test.tsx +0 -159
  539. package/src/components/ChannelDetails/__tests__/members/useMemberRoleLabel.test.tsx +0 -130
  540. package/src/components/ChannelDetails/components/ChannelEditDetailsModal.tsx +0 -152
  541. package/src/components/ChannelDetails/components/members/ChannelAddMembersModal.tsx +0 -126
  542. package/src/components/ChannelDetails/components/members/ChannelAllMembersModal.tsx +0 -71
  543. package/src/components/ChannelDetails/hooks/members/useMemberRoleLabel.ts +0 -32
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+
3
+ import { useChannelDetailsContext } from '../../../contexts/channelDetailsContext/channelDetailsContext';
4
+ import { ChannelEditDetailsProvider } from '../../../contexts/channelEditDetailsContext/ChannelEditDetailsContext';
5
+ import { useComponentsContext } from '../../../contexts/componentsContext/ComponentsContext';
6
+ import type { GlobalFileUploadRequest } from '../../../types/types';
7
+ import { NotificationList } from '../../Notifications/NotificationList';
8
+
9
+ export type ChannelEditDetailsFormProps = {
10
+ /** Called when the form is dismissed via the close button or after a successful save. */
11
+ onClose: () => void;
12
+ /**
13
+ * Compress image with quality (from 0 to 1, where 1 is best quality) applied
14
+ * to the channel image picked during editing.
15
+ */
16
+ compressImageQuality?: number;
17
+ /** Override the upload request used to upload the channel image. */
18
+ doFileUploadRequest?: GlobalFileUploadRequest;
19
+ };
20
+
21
+ /**
22
+ * Renders the channel edit details form: a header with a confirm action, the
23
+ * editable fields, and the notification list. Wrap-free — mount it wherever the
24
+ * edit UI should appear (e.g. inside a modal or a navigation screen).
25
+ */
26
+ export const ChannelEditDetailsForm = ({
27
+ compressImageQuality,
28
+ doFileUploadRequest,
29
+ onClose,
30
+ }: ChannelEditDetailsFormProps) => {
31
+ const { channel } = useChannelDetailsContext();
32
+ const { ChannelEditDetailsFormContent, ChannelEditDetailsFormHeader } = useComponentsContext();
33
+
34
+ if (!channel?.cid) {
35
+ return null;
36
+ }
37
+
38
+ return (
39
+ <ChannelEditDetailsProvider
40
+ compressImageQuality={compressImageQuality}
41
+ doFileUploadRequest={doFileUploadRequest}
42
+ >
43
+ <ChannelEditDetailsFormHeader onClose={onClose} />
44
+ <ChannelEditDetailsFormContent />
45
+ <NotificationList />
46
+ </ChannelEditDetailsProvider>
47
+ );
48
+ };
@@ -18,10 +18,7 @@ const selector = (state: EditChannelDetailsState) => ({
18
18
  updatedImage: state.updatedImage,
19
19
  });
20
20
 
21
- /**
22
- * @experimental This component is experimental and is subject to change.
23
- */
24
- export const ChannelEditDetails = () => {
21
+ export const ChannelEditDetailsFormContent = () => {
25
22
  const { channel } = useChannelDetailsContext();
26
23
  const { store } = useChannelEditDetailsContext();
27
24
  const { ChannelEditImageSheet, ChannelEditName } = useComponentsContext();
@@ -0,0 +1,65 @@
1
+ import React, { useState } from 'react';
2
+
3
+ import { ActivityIndicator, Keyboard } from 'react-native';
4
+
5
+ import { ModalHeader } from './modal/ModalHeader';
6
+
7
+ import { useChannelEditDetailsContext } from '../../../contexts/channelEditDetailsContext/ChannelEditDetailsContext';
8
+ import { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';
9
+ import { useStableCallback } from '../../../hooks/useStableCallback';
10
+ import { Checkmark } from '../../../icons/checkmark-1';
11
+ import { useAreChannelDetailsEdited } from '../../../state-store/edit-channel-details-store';
12
+ import { Button } from '../../ui/Button/Button';
13
+
14
+ const loadingIconStyle = { margin: 0 };
15
+ const LoadingButtonIcon = ({ height, width }: { height?: number; width?: number }) => (
16
+ <ActivityIndicator style={{ ...loadingIconStyle, ...{ height, width } }} />
17
+ );
18
+
19
+ export type ChannelEditDetailsFormHeaderProps = {
20
+ /** Called when the form is dismissed via the close button or after a successful save. */
21
+ onClose: () => void;
22
+ };
23
+
24
+ export const ChannelEditDetailsFormHeader = ({ onClose }: ChannelEditDetailsFormHeaderProps) => {
25
+ const { store, submit } = useChannelEditDetailsContext();
26
+ const { t } = useTranslationContext();
27
+ const [saving, setSaving] = useState(false);
28
+ const channelDetailsEdited = useAreChannelDetailsEdited(store);
29
+ const confirmEnabled = channelDetailsEdited && !saving;
30
+
31
+ const handleConfirm = useStableCallback(async () => {
32
+ if (!confirmEnabled) return;
33
+ Keyboard.dismiss();
34
+ setSaving(true);
35
+ try {
36
+ await submit();
37
+ onClose();
38
+ } catch {
39
+ // failure notification already surfaced by the channel action
40
+ } finally {
41
+ setSaving(false);
42
+ }
43
+ });
44
+
45
+ return (
46
+ <ModalHeader
47
+ onClose={onClose}
48
+ rightAction={
49
+ <Button
50
+ accessibilityLabel={t('a11y/Confirm edit channel')}
51
+ accessibilityRole='button'
52
+ accessibilityState={{ busy: saving, disabled: !confirmEnabled }}
53
+ disabled={!confirmEnabled}
54
+ iconOnly
55
+ LeadingIcon={saving ? LoadingButtonIcon : Checkmark}
56
+ onPress={handleConfirm}
57
+ testID='channel-details-edit-confirm-button'
58
+ type='solid'
59
+ variant='primary'
60
+ />
61
+ }
62
+ title={t('Edit')}
63
+ />
64
+ );
65
+ };
@@ -165,9 +165,6 @@ const ChannelEditImageSheetInner = () => {
165
165
  );
166
166
  };
167
167
 
168
- /**
169
- * @experimental This component is experimental and is subject to change.
170
- */
171
168
  export const ChannelEditImageSheet = ({ onClose, visible }: ChannelEditImageSheetProps) => (
172
169
  <BottomSheetModal enableDynamicSizing onClose={onClose} visible={visible}>
173
170
  <ChannelEditImageSheetInner />
@@ -11,9 +11,6 @@ const selectCurrentName = (state: EditChannelDetailsState) => ({
11
11
  currentName: state.currentName,
12
12
  });
13
13
 
14
- /**
15
- * @experimental This component is experimental and is subject to change.
16
- */
17
14
  export const ChannelEditName = () => {
18
15
  const { store } = useChannelEditDetailsContext();
19
16
  const { t } = useTranslationContext();
@@ -81,7 +81,6 @@ jest.mock(
81
81
  return children;
82
82
  },
83
83
  useChannelFileAttachmentListContext: () => ({
84
- channel: mockChannel,
85
84
  searchSource: mockCurrentSearchSource,
86
85
  }),
87
86
  }),
@@ -135,7 +134,7 @@ const tree = (
135
134
  <ThemeProvider theme={defaultTheme}>
136
135
  <TranslationProvider value={props.translators ?? fakeTranslators}>
137
136
  <ChannelDetailsContextProvider
138
- value={{ channel: mockChannel } as unknown as ChannelDetailsContextValue}
137
+ channel={mockChannel as unknown as ChannelDetailsContextValue['channel']}
139
138
  >
140
139
  <FileAttachmentList
141
140
  additionalSectionListProps={props.additionalSectionListProps as never}
@@ -105,7 +105,7 @@ jest.mock('../../../../../contexts/channelMediaListContext/ChannelMediaListConte
105
105
  mockProviderProbe.push({ channel: providedChannel });
106
106
  return ReactLib.createElement(
107
107
  actual.ChannelMediaListContext.Provider,
108
- { value: { channel: mockChannel, searchSource: mockCurrentSearchSource } },
108
+ { value: { searchSource: mockCurrentSearchSource } },
109
109
  children,
110
110
  );
111
111
  },
@@ -165,7 +165,7 @@ const tree = (searchSource: FakeSearchSource, props: { additionalFlatListProps?:
165
165
  }}
166
166
  >
167
167
  <ChannelDetailsContextProvider
168
- value={{ channel: mockChannel } as unknown as ChannelDetailsContextValue}
168
+ channel={mockChannel as unknown as ChannelDetailsContextValue['channel']}
169
169
  >
170
170
  <MediaList additionalFlatListProps={props.additionalFlatListProps as never} />
171
171
  </ChannelDetailsContextProvider>
@@ -74,7 +74,6 @@ jest.mock(
74
74
  return children;
75
75
  },
76
76
  useChannelPinnedMessageListContext: () => ({
77
- channel: mockChannel,
78
77
  searchSource: mockCurrentSearchSource,
79
78
  }),
80
79
  }),
@@ -148,7 +147,7 @@ const tree = (searchSource: FakeSearchSource, props: { additionalFlatListProps?:
148
147
  }}
149
148
  >
150
149
  <ChannelDetailsContextProvider
151
- value={{ channel: mockChannel } as unknown as ChannelDetailsContextValue}
150
+ channel={mockChannel as unknown as ChannelDetailsContextValue['channel']}
152
151
  >
153
152
  <PinnedMessageList additionalFlatListProps={props.additionalFlatListProps as never} />
154
153
  </ChannelDetailsContextProvider>
@@ -5,10 +5,12 @@ export * from './ChannelDetailsNavigationSection';
5
5
  export * from './ChannelDetailsProfile';
6
6
  export * from './ChannelDetailsEditButton';
7
7
  export * from './ChannelDetailsNavHeader';
8
- export * from './ChannelEditDetails';
9
- export * from './ChannelEditDetailsModal';
8
+ export * from './ChannelEditDetailsForm';
9
+ export * from './ChannelEditDetailsFormContent';
10
+ export * from './ChannelEditDetailsFormHeader';
10
11
  export * from './ChannelEditImageSheet';
11
12
  export * from './ChannelEditName';
12
13
  export * from './ChannelDetailsEditButton';
13
14
  export * from './members';
14
15
  export * from './navigation-section';
16
+ export * from './roles';
@@ -17,9 +17,6 @@ export type AddMemberSearchResultItemProps = {
17
17
  user: UserResponse;
18
18
  };
19
19
 
20
- /**
21
- * @experimental This component is experimental and is subject to change.
22
- */
23
20
  export const AddMemberSearchResultItem = ({ onPress, user }: AddMemberSearchResultItemProps) => {
24
21
  const { t } = useTranslationContext();
25
22
  const { selectionStore } = useChannelAddMembersContext();
@@ -0,0 +1,83 @@
1
+ import React, { useCallback, useState } from 'react';
2
+
3
+ import { useChannelDetailsContext } from '../../../../contexts/channelDetailsContext/channelDetailsContext';
4
+ import { useComponentsContext } from '../../../../contexts/componentsContext/ComponentsContext';
5
+ import { useTranslationContext } from '../../../../contexts/translationContext/TranslationContext';
6
+ import { useCanAddMembersToChannel } from '../../../../hooks/useCanAddMembersToChannel';
7
+ import { UserAdd } from '../../../../icons/user-add';
8
+ import { Button, ButtonProps } from '../../../ui/Button/Button';
9
+ import { ChannelDetailsModal } from '../modal/Modal';
10
+
11
+ export type ChannelAddMembersButtonProps = {
12
+ /** Override the default behavior, which opens the Add-members modal. */
13
+ onPress?: () => void;
14
+ /** Style forwarded to the underlying Button. */
15
+ style?: ButtonProps['style'];
16
+ testID?: string;
17
+ variant?: 'icon' | 'text';
18
+ };
19
+
20
+ export const ChannelAddMembersButton = ({
21
+ onPress,
22
+ style,
23
+ testID,
24
+ variant = 'text',
25
+ }: ChannelAddMembersButtonProps) => {
26
+ const { channel } = useChannelDetailsContext();
27
+ const { ChannelAddMembersForm } = useComponentsContext();
28
+ const { t } = useTranslationContext();
29
+ const isVisible = useCanAddMembersToChannel(channel);
30
+ const [isAddMembersVisible, setAddMembersVisible] = useState(false);
31
+
32
+ // The built-in modal is only used by the default press behavior. When a custom handler
33
+ // (onPress prop) is provided, the consumer owns the modal, so we must not render the built-in one.
34
+ const usesDefaultModal = !onPress;
35
+
36
+ const handlePress = useCallback(() => {
37
+ if (onPress) {
38
+ onPress();
39
+ return;
40
+ }
41
+ setAddMembersVisible(true);
42
+ }, [onPress]);
43
+
44
+ const handleClose = useCallback(() => setAddMembersVisible(false), []);
45
+
46
+ if (!isVisible) {
47
+ return null;
48
+ }
49
+
50
+ return (
51
+ <>
52
+ {variant === 'icon' ? (
53
+ <Button
54
+ accessibilityLabelKey='a11y/Add members'
55
+ iconOnly
56
+ LeadingIcon={UserAdd}
57
+ onPress={handlePress}
58
+ size='md'
59
+ style={style}
60
+ testID={testID}
61
+ type='outline'
62
+ variant='secondary'
63
+ />
64
+ ) : (
65
+ <Button
66
+ accessibilityLabelKey='a11y/Add members'
67
+ label={t('Add')}
68
+ onPress={handlePress}
69
+ size='sm'
70
+ style={style}
71
+ testID={testID}
72
+ type='outline'
73
+ variant='secondary'
74
+ />
75
+ )}
76
+ {usesDefaultModal ? (
77
+ <ChannelDetailsModal onClose={handleClose} visible={isAddMembersVisible}>
78
+ <ChannelAddMembersForm onClose={handleClose} />
79
+ </ChannelDetailsModal>
80
+ ) : null}
81
+ </>
82
+ );
83
+ };
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+
3
+ import type { UserSearchSource } from 'stream-chat';
4
+
5
+ import { ChannelAddMembersProvider } from '../../../../contexts/channelAddMembersContext/ChannelAddMembersContext';
6
+ import { useChannelDetailsContext } from '../../../../contexts/channelDetailsContext/channelDetailsContext';
7
+ import { useComponentsContext } from '../../../../contexts/componentsContext/ComponentsContext';
8
+ import { NotificationList } from '../../../Notifications/NotificationList';
9
+
10
+ export type ChannelAddMembersFormProps = {
11
+ /** Called when the form is dismissed via the close button or after members are added. */
12
+ onClose: () => void;
13
+ /**
14
+ * A custom `UserSearchSource` used to query and paginate the users to add.
15
+ * Overrides the source the provider creates by default (pre-configured to
16
+ * autocomplete by `name`).
17
+ */
18
+ searchSource?: UserSearchSource;
19
+ };
20
+
21
+ /**
22
+ * Renders the add-members form: a header with a confirm action, the user search
23
+ * list, and the notification list. Mount it wherever the add-members UI should
24
+ * appear (e.g. inside a modal or a navigation screen).
25
+ */
26
+ export const ChannelAddMembersForm = ({ onClose, searchSource }: ChannelAddMembersFormProps) => {
27
+ const { channel } = useChannelDetailsContext();
28
+ const { ChannelAddMembersFormContent, ChannelAddMembersFormHeader } = useComponentsContext();
29
+
30
+ if (!channel?.cid) {
31
+ return null;
32
+ }
33
+
34
+ return (
35
+ <ChannelAddMembersProvider searchSource={searchSource}>
36
+ <ChannelAddMembersFormHeader onClose={onClose} />
37
+ <ChannelAddMembersFormContent />
38
+ <NotificationList />
39
+ </ChannelAddMembersProvider>
40
+ );
41
+ };
@@ -17,7 +17,7 @@ import { useNotificationApi } from '../../../Notifications/hooks/useNotification
17
17
  import { EmptySearchResult } from '../../../UIComponents/EmptySearchResult';
18
18
  import { SearchInput } from '../../../UIComponents/SearchInput';
19
19
 
20
- export type ChannelAddMembersProps = {
20
+ export type ChannelAddMembersFormContentProps = {
21
21
  /**
22
22
  * Besides the existing default behavior of the user list, you can attach
23
23
  * additional props to the underlying React Native FlatList.
@@ -38,10 +38,9 @@ const listStateSelector = (state: SearchSourceState<UserResponse>) => {
38
38
  };
39
39
  };
40
40
 
41
- /**
42
- * @experimental This component is experimental and is subject to change.
43
- */
44
- export const ChannelAddMembers = ({ additionalFlatListProps }: ChannelAddMembersProps) => {
41
+ export const ChannelAddMembersFormContent = ({
42
+ additionalFlatListProps,
43
+ }: ChannelAddMembersFormContentProps) => {
45
44
  const { t } = useTranslationContext();
46
45
  const styles = useStyles();
47
46
  const {
@@ -0,0 +1,75 @@
1
+ import React, { useCallback, useState } from 'react';
2
+
3
+ import { ActivityIndicator } from 'react-native';
4
+
5
+ import { useChannelAddMembersContext } from '../../../../contexts/channelAddMembersContext/ChannelAddMembersContext';
6
+ import { useTheme } from '../../../../contexts/themeContext/ThemeContext';
7
+ import { useTranslationContext } from '../../../../contexts/translationContext/TranslationContext';
8
+ import { useStableCallback } from '../../../../hooks/useStableCallback';
9
+ import { Checkmark } from '../../../../icons/checkmark-1';
10
+ import { useIsSelectionEmpty } from '../../../../state-store/selection-store';
11
+ import { Button } from '../../../ui/Button/Button';
12
+ import { ModalHeader } from '../modal/ModalHeader';
13
+
14
+ const loadingIconStyle = { margin: 0 };
15
+ const LoadingButtonIcon = ({ height, width }: { height?: number; width?: number }) => (
16
+ <ActivityIndicator style={{ ...loadingIconStyle, ...{ height, width } }} />
17
+ );
18
+
19
+ export type ChannelAddMembersFormHeaderProps = {
20
+ /** Called when the form is dismissed via the close button or after members are added. */
21
+ onClose: () => void;
22
+ };
23
+
24
+ export const ChannelAddMembersFormHeader = ({ onClose }: ChannelAddMembersFormHeaderProps) => {
25
+ const { selectionStore, submit } = useChannelAddMembersContext();
26
+ const { t } = useTranslationContext();
27
+ const {
28
+ theme: {
29
+ channelDetails: {
30
+ memberSection: { confirmButton: confirmButtonOverride },
31
+ },
32
+ },
33
+ } = useTheme();
34
+ const isSelectionEmpty = useIsSelectionEmpty(selectionStore);
35
+ const [addingMembers, setAddingMembers] = useState(false);
36
+ const confirmEnabled = !isSelectionEmpty && !addingMembers;
37
+
38
+ const handleClose = useCallback(() => {
39
+ onClose();
40
+ }, [onClose]);
41
+
42
+ const handleConfirm = useStableCallback(async () => {
43
+ setAddingMembers(true);
44
+ try {
45
+ await submit();
46
+ onClose();
47
+ } catch {
48
+ // failure notification already surfaced by the channel action
49
+ } finally {
50
+ setAddingMembers(false);
51
+ }
52
+ });
53
+
54
+ return (
55
+ <ModalHeader
56
+ onClose={handleClose}
57
+ rightAction={
58
+ <Button
59
+ accessibilityLabel={t('a11y/Confirm add members')}
60
+ accessibilityRole='button'
61
+ accessibilityState={{ busy: addingMembers, disabled: !confirmEnabled }}
62
+ disabled={!confirmEnabled}
63
+ variant='primary'
64
+ onPress={handleConfirm}
65
+ type='solid'
66
+ LeadingIcon={addingMembers ? LoadingButtonIcon : Checkmark}
67
+ iconOnly
68
+ testID='channel-details-add-members-confirm-button'
69
+ style={confirmButtonOverride}
70
+ />
71
+ }
72
+ title={t('Add Members')}
73
+ />
74
+ );
75
+ };
@@ -8,6 +8,7 @@ import { useComponentsContext } from '../../../../contexts/componentsContext/Com
8
8
  import { useTheme } from '../../../../contexts/themeContext/ThemeContext';
9
9
  import {
10
10
  ChannelMemberActionItem,
11
+ GetChannelMemberActionItems,
11
12
  useChannelMemberActionItems,
12
13
  } from '../../../../hooks/actions/useChannelMemberActionItems';
13
14
  import { BottomSheetModal } from '../../../UIComponents/BottomSheetModal';
@@ -17,15 +18,24 @@ export type ChannelMemberActionsSheetProps = {
17
18
  member: ChannelMemberResponse;
18
19
  onClose: () => void;
19
20
  visible: boolean;
21
+ /**
22
+ * Customize the list of action items rendered in the per-member actions bottom sheet.
23
+ *
24
+ * Receives the default items the SDK produces for the tapped member (e.g. `muteUser`,
25
+ * `block`) and returns the final list to render. Use this to filter, reorder, replace,
26
+ * or add items — for example, to inject a "Send Direct Message" action in your app.
27
+ */
28
+ getChannelMemberActionItems?: GetChannelMemberActionItems;
20
29
  };
21
30
 
22
31
  const keyExtractor = (item: ChannelMemberActionItem) => item.id;
23
32
 
24
33
  const ChannelMemberActionsSheetInner = ({
34
+ getChannelMemberActionItems,
25
35
  member,
26
36
  onClose,
27
37
  }: Omit<ChannelMemberActionsSheetProps, 'visible'>) => {
28
- const { channel, getChannelMemberActionItems } = useChannelDetailsContext();
38
+ const { channel } = useChannelDetailsContext();
29
39
  const { ChannelDetailsActionItem, ChannelMemberItem } = useComponentsContext();
30
40
  const {
31
41
  theme: {
@@ -79,16 +89,18 @@ const ChannelMemberActionsSheetInner = ({
79
89
  );
80
90
  };
81
91
 
82
- /**
83
- * @experimental This component is experimental and is subject to change.
84
- */
85
92
  export const ChannelMemberActionsSheet = ({
93
+ getChannelMemberActionItems,
86
94
  member,
87
95
  onClose,
88
96
  visible,
89
97
  }: ChannelMemberActionsSheetProps) => (
90
98
  <BottomSheetModal enableDynamicSizing onClose={onClose} visible={visible}>
91
- <ChannelMemberActionsSheetInner member={member} onClose={onClose} />
99
+ <ChannelMemberActionsSheetInner
100
+ getChannelMemberActionItems={getChannelMemberActionItems}
101
+ member={member}
102
+ onClose={onClose}
103
+ />
92
104
  </BottomSheetModal>
93
105
  );
94
106
 
@@ -5,19 +5,26 @@ import type { ChannelMemberResponse } from 'stream-chat';
5
5
 
6
6
  import { composeAccessibilityLabel } from '../../../../a11y/a11yUtils';
7
7
  import { useChatContext } from '../../../../contexts/chatContext/ChatContext';
8
+ import { useComponentsContext } from '../../../../contexts/componentsContext/ComponentsContext';
8
9
  import { useTheme } from '../../../../contexts/themeContext/ThemeContext';
9
10
  import { useTranslationContext } from '../../../../contexts/translationContext/TranslationContext';
10
11
  import { Mute } from '../../../../icons';
11
12
  import { primitives } from '../../../../theme';
12
13
  import { useUserMuteActive } from '../../../Message/hooks/useUserMuteActive';
13
14
  import { UserAvatar } from '../../../ui/Avatar/UserAvatar';
14
- import { useMemberRoleLabel } from '../../hooks/members/useMemberRoleLabel';
15
+ import { GetMemberRoles, useMemberRoles } from '../../hooks/members/useMemberRoles';
15
16
  import { useUserActivityStatus } from '../../hooks/useUserActivityStatus';
16
17
 
17
18
  export type ChannelMemberItemSize = 'sm' | 'lg';
18
19
 
19
20
  export type ChannelMemberItemProps = {
20
21
  member: ChannelMemberResponse;
22
+ /**
23
+ * Override the roles shown next to the member. Receives `{ channel, defaultRoleLabels, member, t }`
24
+ * and returns an array of `{ key, label }` (or an empty array to render none). Defaults to the
25
+ * built-in Owner / Admin / Moderator logic, returning every role that applies.
26
+ */
27
+ getMemberRoles?: GetMemberRoles;
21
28
  onPress?: (member: ChannelMemberResponse) => void;
22
29
  /**
23
30
  * Visual size of the row.
@@ -29,10 +36,8 @@ export type ChannelMemberItemProps = {
29
36
  testID?: string;
30
37
  };
31
38
 
32
- /**
33
- * @experimental This component is experimental and is subject to change.
34
- */
35
39
  export const ChannelMemberItem = ({
40
+ getMemberRoles,
36
41
  member,
37
42
  onPress,
38
43
  size = 'sm',
@@ -40,22 +45,18 @@ export const ChannelMemberItem = ({
40
45
  }: ChannelMemberItemProps) => {
41
46
  const { t } = useTranslationContext();
42
47
  const { client } = useChatContext();
48
+ const { RoleList } = useComponentsContext();
43
49
  const {
44
50
  theme: {
45
51
  channelDetails: {
46
- memberItem: {
47
- container: containerOverride,
48
- name: nameOverride,
49
- role: roleOverride,
50
- status: statusOverride,
51
- },
52
+ memberItem: { container: containerOverride, name: nameOverride, status: statusOverride },
52
53
  },
53
54
  semantics,
54
55
  },
55
56
  } = useTheme();
56
57
  const styles = useStyles();
57
58
  const statusLine = useUserActivityStatus(member.user);
58
- const roleLabel = useMemberRoleLabel(member);
59
+ const roles = useMemberRoles(member, getMemberRoles);
59
60
  const isMuted = useUserMuteActive(member.user);
60
61
 
61
62
  const user = member.user;
@@ -66,7 +67,7 @@ export const ChannelMemberItem = ({
66
67
  const displayName = isCurrentUser ? t('You') : (user.name ?? user.id);
67
68
  const accessibilityLabel = composeAccessibilityLabel(
68
69
  displayName,
69
- roleLabel,
70
+ roles.map((role) => role.label).join(', ') || undefined,
70
71
  isMuted ? t('Muted') : undefined,
71
72
  statusLine,
72
73
  );
@@ -98,7 +99,7 @@ export const ChannelMemberItem = ({
98
99
  </Text>
99
100
  ) : null}
100
101
  </View>
101
- {isMuted || roleLabel ? (
102
+ {isMuted || roles.length > 0 ? (
102
103
  <View style={styles.trailing}>
103
104
  {isMuted ? (
104
105
  <Mute
@@ -108,14 +109,7 @@ export const ChannelMemberItem = ({
108
109
  width={16}
109
110
  />
110
111
  ) : null}
111
- {roleLabel ? (
112
- <Text
113
- numberOfLines={1}
114
- style={[styles.role, { color: semantics.textTertiary }, roleOverride]}
115
- >
116
- {roleLabel}
117
- </Text>
118
- ) : null}
112
+ <RoleList roles={roles} />
119
113
  </View>
120
114
  ) : null}
121
115
  </>
@@ -171,7 +165,7 @@ const useStyles = () => {
171
165
  flexDirection: 'row',
172
166
  gap: primitives.spacingSm,
173
167
  minHeight: 48,
174
- paddingHorizontal: primitives.spacingMd,
168
+ paddingHorizontal: primitives.spacingSm,
175
169
  paddingVertical: primitives.spacingXs,
176
170
  },
177
171
  containerLarge: {
@@ -193,13 +187,6 @@ const useStyles = () => {
193
187
  lineHeight: primitives.typographyLineHeightNormal,
194
188
  writingDirection: I18nManager.isRTL ? 'rtl' : 'ltr',
195
189
  },
196
- role: {
197
- flexShrink: 0,
198
- fontSize: primitives.typographyFontSizeSm,
199
- fontWeight: primitives.typographyFontWeightRegular,
200
- lineHeight: primitives.typographyLineHeightNormal,
201
- writingDirection: I18nManager.isRTL ? 'rtl' : 'ltr',
202
- },
203
190
  status: {
204
191
  fontSize: primitives.typographyFontSizeXs,
205
192
  fontWeight: primitives.typographyFontWeightRegular,