stream-chat-react-native-core 9.5.0-beta.6 → 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 (549) hide show
  1. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +2 -1
  2. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
  3. package/lib/commonjs/components/ChannelDetails/ChannelDetails.js +16 -37
  4. package/lib/commonjs/components/ChannelDetails/ChannelDetails.js.map +1 -1
  5. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsActionItem.js.map +1 -1
  6. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsActionsSection.js +10 -3
  7. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsActionsSection.js.map +1 -1
  8. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsEditButton.js +23 -16
  9. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsEditButton.js.map +1 -1
  10. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsMemberSection.js +43 -59
  11. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsMemberSection.js.map +1 -1
  12. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavHeader.js +2 -2
  13. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavHeader.js.map +1 -1
  14. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavigationSection.js +8 -3
  15. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavigationSection.js.map +1 -1
  16. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsProfile.js.map +1 -1
  17. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsForm.js +35 -0
  18. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsForm.js.map +1 -0
  19. package/lib/commonjs/components/ChannelDetails/components/{ChannelEditDetails.js → ChannelEditDetailsFormContent.js} +5 -5
  20. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsFormContent.js.map +1 -0
  21. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsFormHeader.js +81 -0
  22. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsFormHeader.js.map +1 -0
  23. package/lib/commonjs/components/ChannelDetails/components/ChannelEditImageSheet.js.map +1 -1
  24. package/lib/commonjs/components/ChannelDetails/components/ChannelEditName.js.map +1 -1
  25. package/lib/commonjs/components/ChannelDetails/components/index.js +30 -8
  26. package/lib/commonjs/components/ChannelDetails/components/index.js.map +1 -1
  27. package/lib/commonjs/components/ChannelDetails/components/members/AddMemberSearchResultItem.js.map +1 -1
  28. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersButton.js +77 -0
  29. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersButton.js.map +1 -0
  30. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersForm.js +33 -0
  31. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersForm.js.map +1 -0
  32. package/lib/{module/components/ChannelDetails/components/members/ChannelAddMembers.js → commonjs/components/ChannelDetails/components/members/ChannelAddMembersFormContent.js} +5 -5
  33. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersFormContent.js.map +1 -0
  34. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.js +86 -0
  35. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.js.map +1 -0
  36. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberActionsSheet.js +4 -2
  37. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberActionsSheet.js.map +1 -1
  38. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberItem.js +12 -20
  39. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberItem.js.map +1 -1
  40. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberList.js +13 -15
  41. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberList.js.map +1 -1
  42. package/lib/commonjs/components/ChannelDetails/components/members/MemberListLoadingSkeleton.js.map +1 -1
  43. package/lib/commonjs/components/ChannelDetails/components/members/UserListLoadingSkeleton.js.map +1 -1
  44. package/lib/commonjs/components/ChannelDetails/components/members/index.js +23 -12
  45. package/lib/commonjs/components/ChannelDetails/components/members/index.js.map +1 -1
  46. package/lib/commonjs/components/ChannelDetails/components/modal/Modal.js +16 -1
  47. package/lib/commonjs/components/ChannelDetails/components/modal/Modal.js.map +1 -1
  48. package/lib/commonjs/components/ChannelDetails/components/modal/ModalHeader.js.map +1 -1
  49. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentItem.js.map +1 -1
  50. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentList.js +9 -4
  51. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentList.js.map +1 -1
  52. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.js.map +1 -1
  53. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.js.map +1 -1
  54. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaItem.js.map +1 -1
  55. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaList.js +9 -4
  56. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaList.js.map +1 -1
  57. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.js.map +1 -1
  58. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageItem.js.map +1 -1
  59. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageList.js +9 -4
  60. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageList.js.map +1 -1
  61. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.js.map +1 -1
  62. package/lib/commonjs/components/ChannelDetails/components/roles/RoleItem.js +61 -0
  63. package/lib/commonjs/components/ChannelDetails/components/roles/RoleItem.js.map +1 -0
  64. package/lib/commonjs/components/ChannelDetails/components/roles/RoleList.js +38 -0
  65. package/lib/commonjs/components/ChannelDetails/components/roles/RoleList.js.map +1 -0
  66. package/lib/commonjs/components/ChannelDetails/components/roles/index.js +26 -0
  67. package/lib/commonjs/components/ChannelDetails/components/roles/index.js.map +1 -0
  68. package/lib/commonjs/components/ChannelDetails/hooks/members/index.js +4 -4
  69. package/lib/commonjs/components/ChannelDetails/hooks/members/index.js.map +1 -1
  70. package/lib/commonjs/components/ChannelDetails/hooks/members/{useMemberRoleLabel.js → useMemberRoles.js} +27 -17
  71. package/lib/commonjs/components/ChannelDetails/hooks/members/useMemberRoles.js.map +1 -0
  72. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsActionItems.js +5 -4
  73. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsActionItems.js.map +1 -1
  74. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.js.map +1 -1
  75. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.js.map +1 -1
  76. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js +3 -5
  77. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js.map +1 -1
  78. package/lib/commonjs/components/ChannelDetails/hooks/useEditChannelImage.js +3 -3
  79. package/lib/commonjs/components/ChannelDetails/hooks/useEditChannelImage.js.map +1 -1
  80. package/lib/commonjs/components/ChannelDetails/hooks/useFileAttachmentListSections.js.map +1 -1
  81. package/lib/commonjs/components/ChannelDetails/hooks/useMediaList.js.map +1 -1
  82. package/lib/commonjs/components/ChannelDetails/hooks/useUserActivityStatus.js.map +1 -1
  83. package/lib/commonjs/components/UIComponents/EmptyList.js.map +1 -1
  84. package/lib/commonjs/components/UIComponents/EmptySearchResult.js.map +1 -1
  85. package/lib/commonjs/components/UIComponents/GenericListLoadingSkeleton.js.map +1 -1
  86. package/lib/commonjs/components/UIComponents/SearchInput.js.map +1 -1
  87. package/lib/commonjs/components/UIComponents/SelectionCircle.js.map +1 -1
  88. package/lib/commonjs/components/ui/Avatar/AvatarGroup.js +2 -2
  89. package/lib/commonjs/components/ui/Avatar/UserAvatar.js +2 -4
  90. package/lib/commonjs/components/ui/Avatar/UserAvatar.js.map +1 -1
  91. package/lib/commonjs/components/ui/Avatar/constants.js +33 -1
  92. package/lib/commonjs/components/ui/Avatar/constants.js.map +1 -1
  93. package/lib/commonjs/components/ui/Badge/OnlineIndicator.js +2 -23
  94. package/lib/commonjs/components/ui/Badge/OnlineIndicator.js.map +1 -1
  95. package/lib/commonjs/contexts/channelAddMembersContext/ChannelAddMembersContext.js +50 -6
  96. package/lib/commonjs/contexts/channelAddMembersContext/ChannelAddMembersContext.js.map +1 -1
  97. package/lib/commonjs/contexts/channelDetailsContext/channelDetailsContext.js +20 -6
  98. package/lib/commonjs/contexts/channelDetailsContext/channelDetailsContext.js.map +1 -1
  99. package/lib/commonjs/contexts/channelEditDetailsContext/ChannelEditDetailsContext.js +60 -6
  100. package/lib/commonjs/contexts/channelEditDetailsContext/ChannelEditDetailsContext.js.map +1 -1
  101. package/lib/commonjs/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js +4 -3
  102. package/lib/commonjs/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js.map +1 -1
  103. package/lib/commonjs/contexts/channelMediaListContext/ChannelMediaListContext.js +4 -3
  104. package/lib/commonjs/contexts/channelMediaListContext/ChannelMediaListContext.js.map +1 -1
  105. package/lib/commonjs/contexts/channelMemberListContext/ChannelMemberListContext.js +4 -3
  106. package/lib/commonjs/contexts/channelMemberListContext/ChannelMemberListContext.js.map +1 -1
  107. package/lib/commonjs/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js +4 -3
  108. package/lib/commonjs/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js.map +1 -1
  109. package/lib/commonjs/contexts/componentsContext/defaultComponents.js +9 -2
  110. package/lib/commonjs/contexts/componentsContext/defaultComponents.js.map +1 -1
  111. package/lib/commonjs/contexts/themeContext/utils/theme.js +12 -1
  112. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  113. package/lib/commonjs/hooks/index.js +33 -0
  114. package/lib/commonjs/hooks/index.js.map +1 -1
  115. package/lib/commonjs/hooks/useCanAddMembersToChannel.js +8 -0
  116. package/lib/commonjs/hooks/useCanAddMembersToChannel.js.map +1 -0
  117. package/lib/commonjs/hooks/useCanEditChannel.js +8 -0
  118. package/lib/commonjs/hooks/useCanEditChannel.js.map +1 -0
  119. package/lib/commonjs/hooks/useIsDirectChat.js +1 -1
  120. package/lib/commonjs/hooks/useIsDirectChat.js.map +1 -1
  121. package/lib/commonjs/state-store/edit-channel-details-store.js +18 -13
  122. package/lib/commonjs/state-store/edit-channel-details-store.js.map +1 -1
  123. package/lib/commonjs/state-store/index.js +33 -0
  124. package/lib/commonjs/state-store/index.js.map +1 -1
  125. package/lib/commonjs/state-store/selection-store.js.map +1 -1
  126. package/lib/commonjs/state-store/signal-store.js +29 -0
  127. package/lib/commonjs/state-store/signal-store.js.map +1 -0
  128. package/lib/commonjs/version.json +1 -1
  129. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +2 -1
  130. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
  131. package/lib/module/components/ChannelDetails/ChannelDetails.js +16 -37
  132. package/lib/module/components/ChannelDetails/ChannelDetails.js.map +1 -1
  133. package/lib/module/components/ChannelDetails/components/ChannelDetailsActionItem.js.map +1 -1
  134. package/lib/module/components/ChannelDetails/components/ChannelDetailsActionsSection.js +10 -3
  135. package/lib/module/components/ChannelDetails/components/ChannelDetailsActionsSection.js.map +1 -1
  136. package/lib/module/components/ChannelDetails/components/ChannelDetailsEditButton.js +23 -16
  137. package/lib/module/components/ChannelDetails/components/ChannelDetailsEditButton.js.map +1 -1
  138. package/lib/module/components/ChannelDetails/components/ChannelDetailsMemberSection.js +43 -59
  139. package/lib/module/components/ChannelDetails/components/ChannelDetailsMemberSection.js.map +1 -1
  140. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavHeader.js +2 -2
  141. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavHeader.js.map +1 -1
  142. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavigationSection.js +8 -3
  143. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavigationSection.js.map +1 -1
  144. package/lib/module/components/ChannelDetails/components/ChannelDetailsProfile.js.map +1 -1
  145. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsForm.js +35 -0
  146. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsForm.js.map +1 -0
  147. package/lib/module/components/ChannelDetails/components/{ChannelEditDetails.js → ChannelEditDetailsFormContent.js} +5 -5
  148. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsFormContent.js.map +1 -0
  149. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsFormHeader.js +81 -0
  150. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsFormHeader.js.map +1 -0
  151. package/lib/module/components/ChannelDetails/components/ChannelEditImageSheet.js.map +1 -1
  152. package/lib/module/components/ChannelDetails/components/ChannelEditName.js.map +1 -1
  153. package/lib/module/components/ChannelDetails/components/index.js +30 -8
  154. package/lib/module/components/ChannelDetails/components/index.js.map +1 -1
  155. package/lib/module/components/ChannelDetails/components/members/AddMemberSearchResultItem.js.map +1 -1
  156. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersButton.js +77 -0
  157. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersButton.js.map +1 -0
  158. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersForm.js +33 -0
  159. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersForm.js.map +1 -0
  160. package/lib/{commonjs/components/ChannelDetails/components/members/ChannelAddMembers.js → module/components/ChannelDetails/components/members/ChannelAddMembersFormContent.js} +5 -5
  161. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersFormContent.js.map +1 -0
  162. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.js +86 -0
  163. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.js.map +1 -0
  164. package/lib/module/components/ChannelDetails/components/members/ChannelMemberActionsSheet.js +4 -2
  165. package/lib/module/components/ChannelDetails/components/members/ChannelMemberActionsSheet.js.map +1 -1
  166. package/lib/module/components/ChannelDetails/components/members/ChannelMemberItem.js +12 -20
  167. package/lib/module/components/ChannelDetails/components/members/ChannelMemberItem.js.map +1 -1
  168. package/lib/module/components/ChannelDetails/components/members/ChannelMemberList.js +13 -15
  169. package/lib/module/components/ChannelDetails/components/members/ChannelMemberList.js.map +1 -1
  170. package/lib/module/components/ChannelDetails/components/members/MemberListLoadingSkeleton.js.map +1 -1
  171. package/lib/module/components/ChannelDetails/components/members/UserListLoadingSkeleton.js.map +1 -1
  172. package/lib/module/components/ChannelDetails/components/members/index.js +23 -12
  173. package/lib/module/components/ChannelDetails/components/members/index.js.map +1 -1
  174. package/lib/module/components/ChannelDetails/components/modal/Modal.js +16 -1
  175. package/lib/module/components/ChannelDetails/components/modal/Modal.js.map +1 -1
  176. package/lib/module/components/ChannelDetails/components/modal/ModalHeader.js.map +1 -1
  177. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentItem.js.map +1 -1
  178. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentList.js +9 -4
  179. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentList.js.map +1 -1
  180. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.js.map +1 -1
  181. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.js.map +1 -1
  182. package/lib/module/components/ChannelDetails/components/navigation-section/MediaItem.js.map +1 -1
  183. package/lib/module/components/ChannelDetails/components/navigation-section/MediaList.js +9 -4
  184. package/lib/module/components/ChannelDetails/components/navigation-section/MediaList.js.map +1 -1
  185. package/lib/module/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.js.map +1 -1
  186. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageItem.js.map +1 -1
  187. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageList.js +9 -4
  188. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageList.js.map +1 -1
  189. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.js.map +1 -1
  190. package/lib/module/components/ChannelDetails/components/roles/RoleItem.js +61 -0
  191. package/lib/module/components/ChannelDetails/components/roles/RoleItem.js.map +1 -0
  192. package/lib/module/components/ChannelDetails/components/roles/RoleList.js +38 -0
  193. package/lib/module/components/ChannelDetails/components/roles/RoleList.js.map +1 -0
  194. package/lib/module/components/ChannelDetails/components/roles/index.js +26 -0
  195. package/lib/module/components/ChannelDetails/components/roles/index.js.map +1 -0
  196. package/lib/module/components/ChannelDetails/hooks/members/index.js +4 -4
  197. package/lib/module/components/ChannelDetails/hooks/members/index.js.map +1 -1
  198. package/lib/module/components/ChannelDetails/hooks/members/{useMemberRoleLabel.js → useMemberRoles.js} +27 -17
  199. package/lib/module/components/ChannelDetails/hooks/members/useMemberRoles.js.map +1 -0
  200. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsActionItems.js +5 -4
  201. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsActionItems.js.map +1 -1
  202. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.js.map +1 -1
  203. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.js.map +1 -1
  204. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js +3 -5
  205. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js.map +1 -1
  206. package/lib/module/components/ChannelDetails/hooks/useEditChannelImage.js +3 -3
  207. package/lib/module/components/ChannelDetails/hooks/useEditChannelImage.js.map +1 -1
  208. package/lib/module/components/ChannelDetails/hooks/useFileAttachmentListSections.js.map +1 -1
  209. package/lib/module/components/ChannelDetails/hooks/useMediaList.js.map +1 -1
  210. package/lib/module/components/ChannelDetails/hooks/useUserActivityStatus.js.map +1 -1
  211. package/lib/module/components/UIComponents/EmptyList.js.map +1 -1
  212. package/lib/module/components/UIComponents/EmptySearchResult.js.map +1 -1
  213. package/lib/module/components/UIComponents/GenericListLoadingSkeleton.js.map +1 -1
  214. package/lib/module/components/UIComponents/SearchInput.js.map +1 -1
  215. package/lib/module/components/UIComponents/SelectionCircle.js.map +1 -1
  216. package/lib/module/components/ui/Avatar/AvatarGroup.js +2 -2
  217. package/lib/module/components/ui/Avatar/UserAvatar.js +2 -4
  218. package/lib/module/components/ui/Avatar/UserAvatar.js.map +1 -1
  219. package/lib/module/components/ui/Avatar/constants.js +33 -1
  220. package/lib/module/components/ui/Avatar/constants.js.map +1 -1
  221. package/lib/module/components/ui/Badge/OnlineIndicator.js +2 -23
  222. package/lib/module/components/ui/Badge/OnlineIndicator.js.map +1 -1
  223. package/lib/module/contexts/channelAddMembersContext/ChannelAddMembersContext.js +50 -6
  224. package/lib/module/contexts/channelAddMembersContext/ChannelAddMembersContext.js.map +1 -1
  225. package/lib/module/contexts/channelDetailsContext/channelDetailsContext.js +20 -6
  226. package/lib/module/contexts/channelDetailsContext/channelDetailsContext.js.map +1 -1
  227. package/lib/module/contexts/channelEditDetailsContext/ChannelEditDetailsContext.js +60 -6
  228. package/lib/module/contexts/channelEditDetailsContext/ChannelEditDetailsContext.js.map +1 -1
  229. package/lib/module/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js +4 -3
  230. package/lib/module/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js.map +1 -1
  231. package/lib/module/contexts/channelMediaListContext/ChannelMediaListContext.js +4 -3
  232. package/lib/module/contexts/channelMediaListContext/ChannelMediaListContext.js.map +1 -1
  233. package/lib/module/contexts/channelMemberListContext/ChannelMemberListContext.js +4 -3
  234. package/lib/module/contexts/channelMemberListContext/ChannelMemberListContext.js.map +1 -1
  235. package/lib/module/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js +4 -3
  236. package/lib/module/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js.map +1 -1
  237. package/lib/module/contexts/componentsContext/defaultComponents.js +9 -2
  238. package/lib/module/contexts/componentsContext/defaultComponents.js.map +1 -1
  239. package/lib/module/contexts/themeContext/utils/theme.js +12 -1
  240. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  241. package/lib/module/hooks/index.js +33 -0
  242. package/lib/module/hooks/index.js.map +1 -1
  243. package/lib/module/hooks/useCanAddMembersToChannel.js +8 -0
  244. package/lib/module/hooks/useCanAddMembersToChannel.js.map +1 -0
  245. package/lib/module/hooks/useCanEditChannel.js +8 -0
  246. package/lib/module/hooks/useCanEditChannel.js.map +1 -0
  247. package/lib/module/hooks/useIsDirectChat.js +1 -1
  248. package/lib/module/hooks/useIsDirectChat.js.map +1 -1
  249. package/lib/module/state-store/edit-channel-details-store.js +18 -13
  250. package/lib/module/state-store/edit-channel-details-store.js.map +1 -1
  251. package/lib/module/state-store/index.js +33 -0
  252. package/lib/module/state-store/index.js.map +1 -1
  253. package/lib/module/state-store/selection-store.js.map +1 -1
  254. package/lib/module/state-store/signal-store.js +29 -0
  255. package/lib/module/state-store/signal-store.js.map +1 -0
  256. package/lib/module/version.json +1 -1
  257. package/lib/typescript/components/ChannelDetails/ChannelDetails.d.ts +2 -95
  258. package/lib/typescript/components/ChannelDetails/ChannelDetails.d.ts.map +1 -1
  259. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionItem.d.ts +0 -3
  260. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionItem.d.ts.map +1 -1
  261. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionsSection.d.ts +17 -4
  262. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionsSection.d.ts.map +1 -1
  263. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsEditButton.d.ts +8 -4
  264. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsEditButton.d.ts.map +1 -1
  265. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsMemberSection.d.ts +7 -4
  266. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsMemberSection.d.ts.map +1 -1
  267. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavHeader.d.ts +3 -4
  268. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavHeader.d.ts.map +1 -1
  269. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavigationSection.d.ts +13 -4
  270. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavigationSection.d.ts.map +1 -1
  271. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsProfile.d.ts +0 -3
  272. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsProfile.d.ts.map +1 -1
  273. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsForm.d.ts +20 -0
  274. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsForm.d.ts.map +1 -0
  275. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormContent.d.ts +3 -0
  276. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormContent.d.ts.map +1 -0
  277. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormHeader.d.ts +7 -0
  278. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsFormHeader.d.ts.map +1 -0
  279. package/lib/typescript/components/ChannelDetails/components/ChannelEditImageSheet.d.ts +0 -3
  280. package/lib/typescript/components/ChannelDetails/components/ChannelEditImageSheet.d.ts.map +1 -1
  281. package/lib/typescript/components/ChannelDetails/components/ChannelEditName.d.ts +0 -3
  282. package/lib/typescript/components/ChannelDetails/components/ChannelEditName.d.ts.map +1 -1
  283. package/lib/typescript/components/ChannelDetails/components/index.d.ts +4 -2
  284. package/lib/typescript/components/ChannelDetails/components/index.d.ts.map +1 -1
  285. package/lib/typescript/components/ChannelDetails/components/members/AddMemberSearchResultItem.d.ts +0 -3
  286. package/lib/typescript/components/ChannelDetails/components/members/AddMemberSearchResultItem.d.ts.map +1 -1
  287. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersButton.d.ts +12 -0
  288. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersButton.d.ts.map +1 -0
  289. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersForm.d.ts +19 -0
  290. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersForm.d.ts.map +1 -0
  291. package/lib/typescript/components/ChannelDetails/components/members/{ChannelAddMembers.d.ts → ChannelAddMembersFormContent.d.ts} +3 -6
  292. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersFormContent.d.ts.map +1 -0
  293. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.d.ts +7 -0
  294. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.d.ts.map +1 -0
  295. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberActionsSheet.d.ts +10 -4
  296. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberActionsSheet.d.ts.map +1 -1
  297. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberItem.d.ts +8 -4
  298. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberItem.d.ts.map +1 -1
  299. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberList.d.ts +8 -3
  300. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberList.d.ts.map +1 -1
  301. package/lib/typescript/components/ChannelDetails/components/members/MemberListLoadingSkeleton.d.ts +0 -3
  302. package/lib/typescript/components/ChannelDetails/components/members/MemberListLoadingSkeleton.d.ts.map +1 -1
  303. package/lib/typescript/components/ChannelDetails/components/members/UserListLoadingSkeleton.d.ts +0 -3
  304. package/lib/typescript/components/ChannelDetails/components/members/UserListLoadingSkeleton.d.ts.map +1 -1
  305. package/lib/typescript/components/ChannelDetails/components/members/index.d.ts +4 -3
  306. package/lib/typescript/components/ChannelDetails/components/members/index.d.ts.map +1 -1
  307. package/lib/typescript/components/ChannelDetails/components/modal/Modal.d.ts +0 -3
  308. package/lib/typescript/components/ChannelDetails/components/modal/Modal.d.ts.map +1 -1
  309. package/lib/typescript/components/ChannelDetails/components/modal/ModalHeader.d.ts +0 -3
  310. package/lib/typescript/components/ChannelDetails/components/modal/ModalHeader.d.ts.map +1 -1
  311. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentItem.d.ts +0 -5
  312. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentItem.d.ts.map +1 -1
  313. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentList.d.ts +8 -4
  314. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentList.d.ts.map +1 -1
  315. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.d.ts +0 -3
  316. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.d.ts.map +1 -1
  317. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.d.ts +0 -3
  318. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.d.ts.map +1 -1
  319. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaItem.d.ts +0 -5
  320. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaItem.d.ts.map +1 -1
  321. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaList.d.ts +8 -4
  322. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaList.d.ts.map +1 -1
  323. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.d.ts +0 -2
  324. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.d.ts.map +1 -1
  325. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageItem.d.ts +0 -3
  326. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageItem.d.ts.map +1 -1
  327. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageList.d.ts +8 -5
  328. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageList.d.ts.map +1 -1
  329. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.d.ts +0 -3
  330. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.d.ts.map +1 -1
  331. package/lib/typescript/components/ChannelDetails/components/roles/RoleItem.d.ts +16 -0
  332. package/lib/typescript/components/ChannelDetails/components/roles/RoleItem.d.ts.map +1 -0
  333. package/lib/typescript/components/ChannelDetails/components/roles/RoleList.d.ts +11 -0
  334. package/lib/typescript/components/ChannelDetails/components/roles/RoleList.d.ts.map +1 -0
  335. package/lib/typescript/components/ChannelDetails/components/roles/index.d.ts +3 -0
  336. package/lib/typescript/components/ChannelDetails/components/roles/index.d.ts.map +1 -0
  337. package/lib/typescript/components/ChannelDetails/hooks/members/index.d.ts +1 -1
  338. package/lib/typescript/components/ChannelDetails/hooks/members/index.d.ts.map +1 -1
  339. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoles.d.ts +35 -0
  340. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoles.d.ts.map +1 -0
  341. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsActionItems.d.ts +5 -5
  342. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsActionItems.d.ts.map +1 -1
  343. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.d.ts +0 -1
  344. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.d.ts.map +1 -1
  345. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.d.ts +0 -3
  346. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.d.ts.map +1 -1
  347. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.d.ts +3 -9
  348. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.d.ts.map +1 -1
  349. package/lib/typescript/components/ChannelDetails/hooks/useEditChannelImage.d.ts +1 -2
  350. package/lib/typescript/components/ChannelDetails/hooks/useEditChannelImage.d.ts.map +1 -1
  351. package/lib/typescript/components/ChannelDetails/hooks/useFileAttachmentListSections.d.ts +0 -3
  352. package/lib/typescript/components/ChannelDetails/hooks/useFileAttachmentListSections.d.ts.map +1 -1
  353. package/lib/typescript/components/ChannelDetails/hooks/useMediaList.d.ts +0 -4
  354. package/lib/typescript/components/ChannelDetails/hooks/useMediaList.d.ts.map +1 -1
  355. package/lib/typescript/components/ChannelDetails/hooks/useUserActivityStatus.d.ts +0 -1
  356. package/lib/typescript/components/ChannelDetails/hooks/useUserActivityStatus.d.ts.map +1 -1
  357. package/lib/typescript/components/UIComponents/EmptyList.d.ts +0 -3
  358. package/lib/typescript/components/UIComponents/EmptyList.d.ts.map +1 -1
  359. package/lib/typescript/components/UIComponents/EmptySearchResult.d.ts +0 -3
  360. package/lib/typescript/components/UIComponents/EmptySearchResult.d.ts.map +1 -1
  361. package/lib/typescript/components/UIComponents/GenericListLoadingSkeleton.d.ts +0 -3
  362. package/lib/typescript/components/UIComponents/GenericListLoadingSkeleton.d.ts.map +1 -1
  363. package/lib/typescript/components/UIComponents/SearchInput.d.ts +0 -3
  364. package/lib/typescript/components/UIComponents/SearchInput.d.ts.map +1 -1
  365. package/lib/typescript/components/UIComponents/SelectionCircle.d.ts +0 -3
  366. package/lib/typescript/components/UIComponents/SelectionCircle.d.ts.map +1 -1
  367. package/lib/typescript/components/ui/Avatar/UserAvatar.d.ts.map +1 -1
  368. package/lib/typescript/components/ui/Avatar/constants.d.ts +10 -1
  369. package/lib/typescript/components/ui/Avatar/constants.d.ts.map +1 -1
  370. package/lib/typescript/components/ui/Badge/OnlineIndicator.d.ts.map +1 -1
  371. package/lib/typescript/contexts/channelAddMembersContext/ChannelAddMembersContext.d.ts +18 -9
  372. package/lib/typescript/contexts/channelAddMembersContext/ChannelAddMembersContext.d.ts.map +1 -1
  373. package/lib/typescript/contexts/channelDetailsContext/channelDetailsContext.d.ts +14 -15
  374. package/lib/typescript/contexts/channelDetailsContext/channelDetailsContext.d.ts.map +1 -1
  375. package/lib/typescript/contexts/channelEditDetailsContext/ChannelEditDetailsContext.d.ts +28 -13
  376. package/lib/typescript/contexts/channelEditDetailsContext/ChannelEditDetailsContext.d.ts.map +1 -1
  377. package/lib/typescript/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.d.ts +2 -11
  378. package/lib/typescript/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.d.ts.map +1 -1
  379. package/lib/typescript/contexts/channelMediaListContext/ChannelMediaListContext.d.ts +2 -11
  380. package/lib/typescript/contexts/channelMediaListContext/ChannelMediaListContext.d.ts.map +1 -1
  381. package/lib/typescript/contexts/channelMemberListContext/ChannelMemberListContext.d.ts +2 -11
  382. package/lib/typescript/contexts/channelMemberListContext/ChannelMemberListContext.d.ts.map +1 -1
  383. package/lib/typescript/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.d.ts +2 -11
  384. package/lib/typescript/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.d.ts.map +1 -1
  385. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts +21 -14
  386. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts.map +1 -1
  387. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts +12 -1
  388. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts.map +1 -1
  389. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +12 -1
  390. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  391. package/lib/typescript/hooks/index.d.ts +3 -0
  392. package/lib/typescript/hooks/index.d.ts.map +1 -1
  393. package/lib/typescript/hooks/useCanAddMembersToChannel.d.ts +6 -0
  394. package/lib/typescript/hooks/useCanAddMembersToChannel.d.ts.map +1 -0
  395. package/lib/typescript/hooks/useCanEditChannel.d.ts +6 -0
  396. package/lib/typescript/hooks/useCanEditChannel.d.ts.map +1 -0
  397. package/lib/typescript/hooks/useIsDirectChat.d.ts +1 -1
  398. package/lib/typescript/hooks/useIsDirectChat.d.ts.map +1 -1
  399. package/lib/typescript/state-store/edit-channel-details-store.d.ts +10 -11
  400. package/lib/typescript/state-store/edit-channel-details-store.d.ts.map +1 -1
  401. package/lib/typescript/state-store/index.d.ts +3 -0
  402. package/lib/typescript/state-store/index.d.ts.map +1 -1
  403. package/lib/typescript/state-store/selection-store.d.ts +0 -6
  404. package/lib/typescript/state-store/selection-store.d.ts.map +1 -1
  405. package/lib/typescript/state-store/signal-store.d.ts +9 -0
  406. package/lib/typescript/state-store/signal-store.d.ts.map +1 -0
  407. package/package.json +1 -1
  408. package/src/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.tsx +1 -0
  409. package/src/components/ChannelDetails/ChannelDetails.tsx +14 -160
  410. package/src/components/ChannelDetails/__tests__/ChannelDetails.test.tsx +51 -38
  411. package/src/components/ChannelDetails/__tests__/ChannelDetailsActionsSection.test.tsx +1 -1
  412. package/src/components/ChannelDetails/__tests__/ChannelDetailsEditButton.test.tsx +52 -22
  413. package/src/components/ChannelDetails/__tests__/ChannelDetailsMemberSection.test.tsx +10 -45
  414. package/src/components/ChannelDetails/__tests__/ChannelDetailsNavHeader.test.tsx +4 -4
  415. package/src/components/ChannelDetails/__tests__/ChannelDetailsNavigationSection.test.tsx +6 -3
  416. package/src/components/ChannelDetails/__tests__/ChannelDetailsProfile.test.tsx +1 -1
  417. package/src/components/ChannelDetails/__tests__/{ChannelEditDetailsModal.test.tsx → ChannelEditDetailsForm.test.tsx} +30 -35
  418. package/src/components/ChannelDetails/__tests__/{ChannelEditDetails.test.tsx → ChannelEditDetailsFormContent.test.tsx} +8 -8
  419. package/src/components/ChannelDetails/__tests__/ChannelEditImageSheet.test.tsx +1 -1
  420. package/src/components/ChannelDetails/__tests__/ChannelEditName.test.tsx +1 -1
  421. package/src/components/ChannelDetails/__tests__/members/ChannelAddMembersButton.test.tsx +163 -0
  422. package/src/components/ChannelDetails/__tests__/members/{ChannelAddMembersModal.test.tsx → ChannelAddMembersForm.test.tsx} +23 -25
  423. package/src/components/ChannelDetails/__tests__/members/{ChannelAddMembers.test.tsx → ChannelAddMembersFormContent.test.tsx} +5 -3
  424. package/src/components/ChannelDetails/__tests__/members/ChannelMemberActionsSheet.test.tsx +8 -3
  425. package/src/components/ChannelDetails/__tests__/members/ChannelMemberItem.test.tsx +11 -11
  426. package/src/components/ChannelDetails/__tests__/members/ChannelMemberList.test.tsx +35 -21
  427. package/src/components/ChannelDetails/__tests__/members/useMemberRoles.test.tsx +122 -0
  428. package/src/components/ChannelDetails/__tests__/useChannelDetailsActionItems.test.tsx +13 -9
  429. package/src/components/ChannelDetails/__tests__/useEditChannelImage.test.tsx +10 -3
  430. package/src/components/ChannelDetails/components/ChannelDetailsActionItem.tsx +0 -3
  431. package/src/components/ChannelDetails/components/ChannelDetailsActionsSection.tsx +26 -6
  432. package/src/components/ChannelDetails/components/ChannelDetailsEditButton.tsx +34 -18
  433. package/src/components/ChannelDetails/components/ChannelDetailsMemberSection.tsx +51 -59
  434. package/src/components/ChannelDetails/components/ChannelDetailsNavHeader.tsx +8 -5
  435. package/src/components/ChannelDetails/components/ChannelDetailsNavigationSection.tsx +18 -5
  436. package/src/components/ChannelDetails/components/ChannelDetailsProfile.tsx +0 -3
  437. package/src/components/ChannelDetails/components/ChannelEditDetailsForm.tsx +48 -0
  438. package/src/components/ChannelDetails/components/{ChannelEditDetails.tsx → ChannelEditDetailsFormContent.tsx} +1 -4
  439. package/src/components/ChannelDetails/components/ChannelEditDetailsFormHeader.tsx +65 -0
  440. package/src/components/ChannelDetails/components/ChannelEditImageSheet.tsx +0 -3
  441. package/src/components/ChannelDetails/components/ChannelEditName.tsx +0 -3
  442. package/src/components/ChannelDetails/components/__tests__/navigation-section/FileAttachmentList.test.tsx +1 -2
  443. package/src/components/ChannelDetails/components/__tests__/navigation-section/MediaList.test.tsx +2 -2
  444. package/src/components/ChannelDetails/components/__tests__/navigation-section/PinnedMessageList.test.tsx +1 -2
  445. package/src/components/ChannelDetails/components/index.ts +4 -2
  446. package/src/components/ChannelDetails/components/members/AddMemberSearchResultItem.tsx +0 -3
  447. package/src/components/ChannelDetails/components/members/ChannelAddMembersButton.tsx +83 -0
  448. package/src/components/ChannelDetails/components/members/ChannelAddMembersForm.tsx +41 -0
  449. package/src/components/ChannelDetails/components/members/{ChannelAddMembers.tsx → ChannelAddMembersFormContent.tsx} +4 -5
  450. package/src/components/ChannelDetails/components/members/ChannelAddMembersFormHeader.tsx +75 -0
  451. package/src/components/ChannelDetails/components/members/ChannelMemberActionsSheet.tsx +17 -5
  452. package/src/components/ChannelDetails/components/members/ChannelMemberItem.tsx +16 -29
  453. package/src/components/ChannelDetails/components/members/ChannelMemberList.tsx +26 -19
  454. package/src/components/ChannelDetails/components/members/MemberListLoadingSkeleton.tsx +0 -3
  455. package/src/components/ChannelDetails/components/members/UserListLoadingSkeleton.tsx +0 -3
  456. package/src/components/ChannelDetails/components/members/index.ts +4 -3
  457. package/src/components/ChannelDetails/components/modal/Modal.tsx +19 -6
  458. package/src/components/ChannelDetails/components/modal/ModalHeader.tsx +0 -3
  459. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentItem.tsx +0 -5
  460. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentList.tsx +11 -7
  461. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.tsx +0 -3
  462. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.tsx +0 -3
  463. package/src/components/ChannelDetails/components/navigation-section/MediaItem.tsx +0 -5
  464. package/src/components/ChannelDetails/components/navigation-section/MediaList.tsx +16 -7
  465. package/src/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.tsx +0 -2
  466. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageItem.tsx +0 -3
  467. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageList.tsx +11 -7
  468. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.tsx +0 -3
  469. package/src/components/ChannelDetails/components/roles/RoleItem.tsx +74 -0
  470. package/src/components/ChannelDetails/components/roles/RoleList.tsx +51 -0
  471. package/src/components/ChannelDetails/components/roles/__tests__/RoleItem.test.tsx +58 -0
  472. package/src/components/ChannelDetails/components/roles/__tests__/RoleList.test.tsx +31 -0
  473. package/src/components/ChannelDetails/components/roles/index.ts +2 -0
  474. package/src/components/ChannelDetails/hooks/members/index.ts +1 -1
  475. package/src/components/ChannelDetails/hooks/members/useMemberRoles.ts +63 -0
  476. package/src/components/ChannelDetails/hooks/useChannelDetailsActionItems.ts +9 -5
  477. package/src/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.ts +0 -1
  478. package/src/components/ChannelDetails/hooks/useChannelDetailsMembersPreview.ts +0 -3
  479. package/src/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.ts +5 -11
  480. package/src/components/ChannelDetails/hooks/useEditChannelImage.ts +3 -4
  481. package/src/components/ChannelDetails/hooks/useFileAttachmentListSections.ts +0 -3
  482. package/src/components/ChannelDetails/hooks/useMediaList.ts +0 -4
  483. package/src/components/ChannelDetails/hooks/useUserActivityStatus.ts +0 -1
  484. package/src/components/UIComponents/EmptyList.tsx +0 -3
  485. package/src/components/UIComponents/EmptySearchResult.tsx +0 -3
  486. package/src/components/UIComponents/GenericListLoadingSkeleton.tsx +0 -3
  487. package/src/components/UIComponents/SearchInput.tsx +0 -3
  488. package/src/components/UIComponents/SelectionCircle.tsx +0 -3
  489. package/src/components/ui/Avatar/AvatarGroup.tsx +2 -2
  490. package/src/components/ui/Avatar/UserAvatar.tsx +8 -4
  491. package/src/components/ui/Avatar/constants.ts +48 -1
  492. package/src/components/ui/Badge/OnlineIndicator.tsx +10 -24
  493. package/src/contexts/channelAddMembersContext/ChannelAddMembersContext.tsx +76 -12
  494. package/src/contexts/channelDetailsContext/channelDetailsContext.tsx +24 -19
  495. package/src/contexts/channelEditDetailsContext/ChannelEditDetailsContext.tsx +101 -18
  496. package/src/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.tsx +5 -13
  497. package/src/contexts/channelMediaListContext/ChannelMediaListContext.tsx +5 -13
  498. package/src/contexts/channelMemberListContext/ChannelMemberListContext.tsx +5 -13
  499. package/src/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.tsx +5 -13
  500. package/src/contexts/componentsContext/defaultComponents.ts +18 -4
  501. package/src/contexts/themeContext/utils/theme.ts +24 -2
  502. package/src/hooks/__tests__/useCanAddMembersToChannel.test.tsx +43 -0
  503. package/src/hooks/__tests__/useCanEditChannel.test.tsx +43 -0
  504. package/src/hooks/index.ts +3 -0
  505. package/src/hooks/useCanAddMembersToChannel.ts +9 -0
  506. package/src/hooks/useCanEditChannel.ts +9 -0
  507. package/src/hooks/useIsDirectChat.ts +2 -2
  508. package/src/state-store/__tests__/edit-channel-details-store.test.ts +72 -17
  509. package/src/state-store/__tests__/signal-store.test.ts +35 -0
  510. package/src/state-store/edit-channel-details-store.ts +22 -17
  511. package/src/state-store/index.ts +3 -0
  512. package/src/state-store/selection-store.ts +0 -6
  513. package/src/state-store/signal-store.ts +18 -0
  514. package/src/version.json +1 -1
  515. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetails.js.map +0 -1
  516. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsModal.js +0 -152
  517. package/lib/commonjs/components/ChannelDetails/components/ChannelEditDetailsModal.js.map +0 -1
  518. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembers.js.map +0 -1
  519. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersModal.js +0 -133
  520. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAddMembersModal.js.map +0 -1
  521. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAllMembersModal.js +0 -64
  522. package/lib/commonjs/components/ChannelDetails/components/members/ChannelAllMembersModal.js.map +0 -1
  523. package/lib/commonjs/components/ChannelDetails/hooks/members/useMemberRoleLabel.js.map +0 -1
  524. package/lib/module/components/ChannelDetails/components/ChannelEditDetails.js.map +0 -1
  525. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsModal.js +0 -152
  526. package/lib/module/components/ChannelDetails/components/ChannelEditDetailsModal.js.map +0 -1
  527. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembers.js.map +0 -1
  528. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersModal.js +0 -133
  529. package/lib/module/components/ChannelDetails/components/members/ChannelAddMembersModal.js.map +0 -1
  530. package/lib/module/components/ChannelDetails/components/members/ChannelAllMembersModal.js +0 -64
  531. package/lib/module/components/ChannelDetails/components/members/ChannelAllMembersModal.js.map +0 -1
  532. package/lib/module/components/ChannelDetails/hooks/members/useMemberRoleLabel.js.map +0 -1
  533. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetails.d.ts +0 -6
  534. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetails.d.ts.map +0 -1
  535. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsModal.d.ts +0 -18
  536. package/lib/typescript/components/ChannelDetails/components/ChannelEditDetailsModal.d.ts.map +0 -1
  537. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembers.d.ts.map +0 -1
  538. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersModal.d.ts +0 -18
  539. package/lib/typescript/components/ChannelDetails/components/members/ChannelAddMembersModal.d.ts.map +0 -1
  540. package/lib/typescript/components/ChannelDetails/components/members/ChannelAllMembersModal.d.ts +0 -17
  541. package/lib/typescript/components/ChannelDetails/components/members/ChannelAllMembersModal.d.ts.map +0 -1
  542. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoleLabel.d.ts +0 -10
  543. package/lib/typescript/components/ChannelDetails/hooks/members/useMemberRoleLabel.d.ts.map +0 -1
  544. package/src/components/ChannelDetails/__tests__/members/ChannelAllMembersModal.test.tsx +0 -159
  545. package/src/components/ChannelDetails/__tests__/members/useMemberRoleLabel.test.tsx +0 -130
  546. package/src/components/ChannelDetails/components/ChannelEditDetailsModal.tsx +0 -152
  547. package/src/components/ChannelDetails/components/members/ChannelAddMembersModal.tsx +0 -126
  548. package/src/components/ChannelDetails/components/members/ChannelAllMembersModal.tsx +0 -71
  549. 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,