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,122 @@
1
+ import React from 'react';
2
+
3
+ import { renderHook } from '@testing-library/react-native';
4
+ import type { Channel, ChannelMemberResponse } from 'stream-chat';
5
+
6
+ import { ChannelDetailsContextProvider } from '../../../../contexts/channelDetailsContext/channelDetailsContext';
7
+ import { TranslationProvider } from '../../../../contexts/translationContext/TranslationContext';
8
+ import { generateMember } from '../../../../mock-builders/generator/member';
9
+ import { generateUser } from '../../../../mock-builders/generator/user';
10
+ import { type GetMemberRoles, useMemberRoles } from '../../hooks/members/useMemberRoles';
11
+
12
+ const buildChannel = (createdById = 'creator'): Channel =>
13
+ ({
14
+ cid: 'messaging:test',
15
+ data: { created_by: { id: createdById } },
16
+ on: () => ({ unsubscribe: () => undefined }),
17
+ }) as unknown as Channel;
18
+
19
+ const buildMember = (
20
+ overrides: {
21
+ user?: Partial<NonNullable<ChannelMemberResponse['user']>>;
22
+ channel_role?: ChannelMemberResponse['channel_role'];
23
+ } = {},
24
+ ): ChannelMemberResponse =>
25
+ generateMember({
26
+ channel_role: overrides.channel_role,
27
+ user: generateUser({ id: 'alice', name: 'Alice', ...(overrides.user ?? {}) }),
28
+ });
29
+
30
+ const t = ((key: string) => key) as never;
31
+
32
+ const renderRoles = (
33
+ member: ChannelMemberResponse,
34
+ {
35
+ channel = buildChannel(),
36
+ getMemberRoles,
37
+ }: { channel?: Channel; getMemberRoles?: GetMemberRoles } = {},
38
+ ) =>
39
+ renderHook(() => useMemberRoles(member, getMemberRoles), {
40
+ wrapper: ({ children }) => (
41
+ <TranslationProvider
42
+ value={{ t, tDateTimeParser: ((input: unknown) => input) as never, userLanguage: 'en' }}
43
+ >
44
+ <ChannelDetailsContextProvider channel={channel}>{children}</ChannelDetailsContextProvider>
45
+ </TranslationProvider>
46
+ ),
47
+ });
48
+
49
+ describe('useMemberRoles', () => {
50
+ describe('default rules', () => {
51
+ it('returns the owner role when the member is the channel creator', () => {
52
+ const { result } = renderRoles(buildMember(), { channel: buildChannel('alice') });
53
+ expect(result.current).toEqual([{ key: 'owner', label: 'Owner' }]);
54
+ });
55
+
56
+ it('returns the admin role when the member has the admin user role', () => {
57
+ const { result } = renderRoles(buildMember({ user: { role: 'admin' } }));
58
+ expect(result.current).toEqual([{ key: 'admin', label: 'Admin' }]);
59
+ });
60
+
61
+ it('returns the moderator role when the member has the channel_moderator channel_role', () => {
62
+ const { result } = renderRoles(buildMember({ channel_role: 'channel_moderator' }));
63
+ expect(result.current).toEqual([{ key: 'moderator', label: 'Moderator' }]);
64
+ });
65
+
66
+ it('returns an empty array for a plain member', () => {
67
+ const { result } = renderRoles(buildMember());
68
+ expect(result.current).toEqual([]);
69
+ });
70
+
71
+ it('returns all applicable roles in Owner > Admin > Moderator order', () => {
72
+ const { result } = renderRoles(
73
+ buildMember({ channel_role: 'channel_moderator', user: { role: 'admin' } }),
74
+ { channel: buildChannel('alice') },
75
+ );
76
+ expect(result.current).toEqual([
77
+ { key: 'owner', label: 'Owner' },
78
+ { key: 'admin', label: 'Admin' },
79
+ { key: 'moderator', label: 'Moderator' },
80
+ ]);
81
+ });
82
+
83
+ it('does not match owner when the member has no user id', () => {
84
+ const member = generateMember({ user: undefined, user_id: 'orphan' });
85
+ const { result } = renderRoles(member, { channel: buildChannel('orphan') });
86
+ expect(result.current).toEqual([]);
87
+ });
88
+ });
89
+
90
+ describe('custom getMemberRoles', () => {
91
+ it('uses the return value of the custom function', () => {
92
+ const { result } = renderRoles(buildMember({ user: { role: 'admin' } }), {
93
+ channel: buildChannel('alice'),
94
+ getMemberRoles: () => [{ key: 'vip', label: 'VIP' }],
95
+ });
96
+ expect(result.current).toEqual([{ key: 'vip', label: 'VIP' }]);
97
+ });
98
+
99
+ it('returns an empty array when the custom function returns an empty array', () => {
100
+ const { result } = renderRoles(buildMember({ user: { role: 'admin' } }), {
101
+ getMemberRoles: () => [],
102
+ });
103
+ expect(result.current).toEqual([]);
104
+ });
105
+
106
+ it('passes channel, defaultRoleLabels, member, and t to the custom function', () => {
107
+ const channel = buildChannel('alice');
108
+ const member = buildMember({ user: { role: 'admin' } });
109
+ const getMemberRoles = jest.fn(() => []);
110
+ renderRoles(member, { channel, getMemberRoles });
111
+ expect(getMemberRoles).toHaveBeenCalledWith({
112
+ channel,
113
+ defaultRoleLabels: [
114
+ { key: 'owner', label: 'Owner' },
115
+ { key: 'admin', label: 'Admin' },
116
+ ],
117
+ member,
118
+ t: expect.any(Function),
119
+ });
120
+ });
121
+ });
122
+ });
@@ -7,6 +7,7 @@ import type {
7
7
  GetChannelActionItems,
8
8
  } from '../../../hooks/actions/useChannelActionItems';
9
9
  import * as useChannelActionItemsModule from '../../../hooks/actions/useChannelActionItems';
10
+ import { SignalStore } from '../../../state-store/signal-store';
10
11
  import { useChannelDetailsActionItems } from '../hooks/useChannelDetailsActionItems';
11
12
 
12
13
  const NoopIcon = () => null;
@@ -28,7 +29,8 @@ const mockContext = (
28
29
  ) => {
29
30
  const value: channelDetailsContextModule.ChannelDetailsContextValue = {
30
31
  channel,
31
- onChannelDismiss: jest.fn(),
32
+ closeModals: jest.fn(),
33
+ signalStore: new SignalStore(),
32
34
  ...overrides,
33
35
  };
34
36
  jest.spyOn(channelDetailsContextModule, 'useChannelDetailsContext').mockReturnValue(value);
@@ -58,12 +60,12 @@ describe('useChannelDetailsActionItems', () => {
58
60
  });
59
61
  });
60
62
 
61
- it('forwards the getChannelActionItems prop from context unchanged', () => {
63
+ it('forwards the getChannelActionItems argument unchanged', () => {
62
64
  const getChannelActionItems: GetChannelActionItems = ({ defaultItems }) => defaultItems;
63
- mockContext({ getChannelActionItems });
65
+ mockContext();
64
66
  const spy = mockUseChannelActionItems([]);
65
67
 
66
- renderHook(() => useChannelDetailsActionItems());
68
+ renderHook(() => useChannelDetailsActionItems({ getChannelActionItems }));
67
69
 
68
70
  expect(spy).toHaveBeenCalledWith({ channel, getChannelActionItems, surface: 'details' });
69
71
  });
@@ -88,7 +90,8 @@ describe('useChannelDetailsActionItems', () => {
88
90
  ])(
89
91
  'wraps the $id action to call onChannelDismiss after the original action resolves',
90
92
  async ({ id, label }) => {
91
- const { onChannelDismiss } = mockContext();
93
+ mockContext();
94
+ const onChannelDismiss = jest.fn();
92
95
 
93
96
  const callOrder: string[] = [];
94
97
  let resolveAction: (() => void) | undefined;
@@ -110,7 +113,7 @@ describe('useChannelDetailsActionItems', () => {
110
113
  const item = buildItem({ action: originalAction, id, label, type: 'destructive' });
111
114
  mockUseChannelActionItems([item]);
112
115
 
113
- const { result } = renderHook(() => useChannelDetailsActionItems());
116
+ const { result } = renderHook(() => useChannelDetailsActionItems({ onChannelDismiss }));
114
117
  const [wrapped] = result.current;
115
118
 
116
119
  expect(wrapped).not.toBe(item);
@@ -132,11 +135,12 @@ describe('useChannelDetailsActionItems', () => {
132
135
  );
133
136
 
134
137
  it('composes a caller-supplied onSuccess with onChannelDismiss and passes other options through', () => {
135
- const { onChannelDismiss } = mockContext();
138
+ mockContext();
139
+ const onChannelDismiss = jest.fn();
136
140
  const originalLeave = jest.fn();
137
141
  mockUseChannelActionItems([buildItem({ action: originalLeave, id: 'leave' })]);
138
142
 
139
- const { result } = renderHook(() => useChannelDetailsActionItems());
143
+ const { result } = renderHook(() => useChannelDetailsActionItems({ onChannelDismiss }));
140
144
  const callerOnSuccess = jest.fn();
141
145
  const callerOnFailure = jest.fn();
142
146
  result.current[0].action({
@@ -161,7 +165,7 @@ describe('useChannelDetailsActionItems', () => {
161
165
  it.each([{ id: 'leave' }, { id: 'deleteChannel' }])(
162
166
  'does not throw when onChannelDismiss is undefined on the $id path',
163
167
  async ({ id }) => {
164
- mockContext({ onChannelDismiss: undefined });
168
+ mockContext();
165
169
  const originalAction = jest.fn().mockResolvedValue(undefined);
166
170
  mockUseChannelActionItems([buildItem({ action: originalAction, id })]);
167
171
 
@@ -4,10 +4,11 @@ import { Alert } from 'react-native';
4
4
  import { act, renderHook } from '@testing-library/react-native';
5
5
  import type { Channel } from 'stream-chat';
6
6
 
7
- import { ChannelDetailsContextProvider } from '../../../contexts/channelDetailsContext/channelDetailsContext';
7
+ import { ChannelEditDetailsContext } from '../../../contexts/channelEditDetailsContext/ChannelEditDetailsContext';
8
8
  import { TranslationProvider } from '../../../contexts/translationContext/TranslationContext';
9
9
  import { generateFileReference } from '../../../mock-builders/attachments';
10
10
  import { NativeHandlers } from '../../../native';
11
+ import { EditChannelDetailsStore } from '../../../state-store/edit-channel-details-store';
11
12
  import { useEditChannelImage } from '../hooks/useEditChannelImage';
12
13
 
13
14
  jest.spyOn(Alert, 'alert').mockImplementation(() => undefined);
@@ -29,9 +30,15 @@ const wrap = ({ compressImageQuality }: { compressImageQuality?: number }) => {
29
30
  userLanguage: 'en',
30
31
  }}
31
32
  >
32
- <ChannelDetailsContextProvider value={{ channel: buildChannel(), compressImageQuality }}>
33
+ <ChannelEditDetailsContext.Provider
34
+ value={{
35
+ compressImageQuality,
36
+ store: new EditChannelDetailsStore(buildChannel()),
37
+ submit: jest.fn(),
38
+ }}
39
+ >
33
40
  {children}
34
- </ChannelDetailsContextProvider>
41
+ </ChannelEditDetailsContext.Provider>
35
42
  </TranslationProvider>
36
43
  );
37
44
  return Wrapper;
@@ -14,9 +14,6 @@ export type ChannelDetailsActionItemProps = {
14
14
  trailing?: React.ReactNode;
15
15
  };
16
16
 
17
- /**
18
- * @experimental This component is experimental and is subject to change.
19
- */
20
17
  export const ChannelDetailsActionItem = ({
21
18
  Icon,
22
19
  destructive = false,
@@ -4,7 +4,10 @@ import { StyleSheet, Switch, View } from 'react-native';
4
4
  import { useChannelDetailsContext } from '../../../contexts/channelDetailsContext/channelDetailsContext';
5
5
  import { useComponentsContext } from '../../../contexts/componentsContext/ComponentsContext';
6
6
  import { useTheme } from '../../../contexts/themeContext/ThemeContext';
7
- import { ChannelActionItem } from '../../../hooks/actions/useChannelActionItems';
7
+ import {
8
+ ChannelActionItem,
9
+ GetChannelActionItems,
10
+ } from '../../../hooks/actions/useChannelActionItems';
8
11
  import { getOtherUserInDirectChannel } from '../../../hooks/actions/useChannelActions';
9
12
  import { useIsDirectChat } from '../../../hooks/useIsDirectChat';
10
13
  import { primitives } from '../../../theme';
@@ -101,10 +104,26 @@ const UserMuteToggleRow = ({ item }: { item: ChannelActionItem }) => {
101
104
  );
102
105
  };
103
106
 
104
- /**
105
- * @experimental This component is experimental and is subject to change.
106
- */
107
- export const ChannelDetailsActionsSection = () => {
107
+ export type ChannelDetailsActionsSectionProps = {
108
+ /**
109
+ * Customize the list of action items rendered in the channel details actions section.
110
+ *
111
+ * Receives the default items the SDK produces for the current channel and returns the
112
+ * final list to render. Use this to filter, reorder, replace, or add items.
113
+ *
114
+ * The SDK still wires `onChannelDismiss` into the resulting `leave`, `deleteChannel`, and
115
+ * `block` items (matched by `id`) after this callback runs, so those actions continue to
116
+ * dismiss the screen on success regardless of how the items are customized.
117
+ */
118
+ getChannelActionItems?: GetChannelActionItems;
119
+ /** Fired after the channel is no longer available to the current user (delete, leave, or block actions). */
120
+ onChannelDismiss?: () => void;
121
+ };
122
+
123
+ export const ChannelDetailsActionsSection = ({
124
+ getChannelActionItems,
125
+ onChannelDismiss,
126
+ }: ChannelDetailsActionsSectionProps) => {
108
127
  const {
109
128
  theme: {
110
129
  channelDetails: { sectionCard: sectionCardOverride },
@@ -114,7 +133,7 @@ export const ChannelDetailsActionsSection = () => {
114
133
  const { ChannelDetailsActionItem } = useComponentsContext();
115
134
  const styles = useStyles();
116
135
 
117
- const items = useChannelDetailsActionItems();
136
+ const items = useChannelDetailsActionItems({ getChannelActionItems, onChannelDismiss });
118
137
 
119
138
  if (items.length === 0) return null;
120
139
 
@@ -173,6 +192,7 @@ const useStyles = () => {
173
192
  borderRadius: primitives.radiusLg,
174
193
  overflow: 'hidden',
175
194
  paddingVertical: primitives.spacingXs,
195
+ paddingHorizontal: primitives.spacingXxs,
176
196
  },
177
197
  }),
178
198
  [],
@@ -1,35 +1,46 @@
1
1
  import React, { useCallback, useState } from 'react';
2
2
 
3
- import { ChannelEditDetailsModal } from './ChannelEditDetailsModal';
3
+ import { ChannelDetailsModal } from './modal/Modal';
4
4
 
5
5
  import { useChannelDetailsContext } from '../../../contexts/channelDetailsContext/channelDetailsContext';
6
+ import { useComponentsContext } from '../../../contexts/componentsContext/ComponentsContext';
6
7
  import { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';
7
- import { useChannelOwnCapabilities } from '../../../hooks/useChannelOwnCapabilities';
8
- import { useIsDirectChat } from '../../../hooks/useIsDirectChat';
9
- import { Button } from '../../ui/Button/Button';
10
-
11
- /**
12
- * @experimental This component is experimental and is subject to change.
13
- */
14
- export const ChannelDetailsEditButton = () => {
15
- const { channel, onEditChannelPress } = useChannelDetailsContext();
8
+ import { useCanEditChannel } from '../../../hooks/useCanEditChannel';
9
+ import { Button, ButtonProps } from '../../ui/Button/Button';
10
+
11
+ export type ChannelDetailsEditButtonProps = {
12
+ /** Override the default behavior, which opens the Edit modal. */
13
+ onPress?: () => void;
14
+ /** Style forwarded to the underlying Button. */
15
+ style?: ButtonProps['style'];
16
+ };
17
+
18
+ export const ChannelDetailsEditButton = ({
19
+ onPress,
20
+ style,
21
+ }: ChannelDetailsEditButtonProps = {}) => {
22
+ const { channel } = useChannelDetailsContext();
23
+ const { ChannelEditDetailsForm } = useComponentsContext();
16
24
  const { t } = useTranslationContext();
17
- const ownCapabilities = useChannelOwnCapabilities(channel);
18
- const canUpdateChannel = ownCapabilities?.includes('update-channel') ?? false;
19
- const isDirect = useIsDirectChat(channel);
25
+ const isVisible = useCanEditChannel(channel);
20
26
  const [editModalVisible, setEditModalVisible] = useState(false);
21
27
 
28
+ // The built-in modal is only used by the default press behavior. When a custom handler
29
+ // (onPress prop) is provided, the consumer owns the navigation/modal, so we must not render
30
+ // the built-in one.
31
+ const usesDefaultModal = !onPress;
32
+
22
33
  const handleEditPress = useCallback(() => {
23
- if (onEditChannelPress) {
24
- onEditChannelPress();
34
+ if (onPress) {
35
+ onPress();
25
36
  return;
26
37
  }
27
38
  setEditModalVisible(true);
28
- }, [onEditChannelPress]);
39
+ }, [onPress]);
29
40
 
30
41
  const handleEditModalClose = useCallback(() => setEditModalVisible(false), []);
31
42
 
32
- if (!canUpdateChannel || isDirect) {
43
+ if (!isVisible) {
33
44
  return null;
34
45
  }
35
46
 
@@ -40,11 +51,16 @@ export const ChannelDetailsEditButton = () => {
40
51
  label={t('Edit')}
41
52
  onPress={handleEditPress}
42
53
  size='sm'
54
+ style={style}
43
55
  testID='channel-details-edit-button'
44
56
  type='outline'
45
57
  variant='secondary'
46
58
  />
47
- <ChannelEditDetailsModal onClose={handleEditModalClose} visible={editModalVisible} />
59
+ {usesDefaultModal ? (
60
+ <ChannelDetailsModal onClose={handleEditModalClose} visible={editModalVisible}>
61
+ <ChannelEditDetailsForm onClose={handleEditModalClose} />
62
+ </ChannelDetailsModal>
63
+ ) : null}
48
64
  </>
49
65
  );
50
66
  };
@@ -3,27 +3,28 @@ import { I18nManager, Pressable, StyleSheet, Text, View } from 'react-native';
3
3
 
4
4
  import type { ChannelMemberResponse } from 'stream-chat';
5
5
 
6
- import { ChannelAddMembersModal } from './members/ChannelAddMembersModal';
7
- import { ChannelAllMembersModal } from './members/ChannelAllMembersModal';
6
+ import { ChannelDetailsModal } from './modal/Modal';
7
+ import { ModalHeader } from './modal/ModalHeader';
8
8
 
9
9
  import { useChannelDetailsContext } from '../../../contexts/channelDetailsContext/channelDetailsContext';
10
10
  import { useComponentsContext } from '../../../contexts/componentsContext/ComponentsContext';
11
11
  import { useTheme } from '../../../contexts/themeContext/ThemeContext';
12
12
  import { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';
13
- import { useChannelOwnCapabilities } from '../../../hooks/useChannelOwnCapabilities';
14
13
  import { primitives } from '../../../theme';
15
- import { Button } from '../../ui/Button/Button';
16
14
  import { useChannelDetailsMembersPreview } from '../hooks/useChannelDetailsMembersPreview';
17
15
 
18
- /**
19
- * @experimental This component is experimental and is subject to change.
20
- */
21
- export const ChannelDetailsMemberSection = () => {
22
- const { channel, onAddMembersPress, onMemberPress, onViewAllMembersPress } =
23
- useChannelDetailsContext();
16
+ export type ChannelDetailsMemberSectionProps = {
17
+ /**
18
+ * Fired when the user taps the "view all members" button. By default it opens the members bottom sheet.
19
+ */
20
+ onViewAllMembersPress?: () => void;
21
+ };
22
+
23
+ export const ChannelDetailsMemberSection = ({
24
+ onViewAllMembersPress,
25
+ }: ChannelDetailsMemberSectionProps) => {
26
+ const { channel } = useChannelDetailsContext();
24
27
  const { t } = useTranslationContext();
25
- const ownCapabilities = useChannelOwnCapabilities(channel);
26
- const updateChannelMembers = ownCapabilities?.includes('update-channel-members') ?? false;
27
28
  const {
28
29
  theme: {
29
30
  channelDetails: {
@@ -32,17 +33,22 @@ export const ChannelDetailsMemberSection = () => {
32
33
  header: headerOverride,
33
34
  headerTitle: headerTitleOverride,
34
35
  viewAllLabel: viewAllLabelOverride,
36
+ addButtonWrapper: addButtonWrapperOverride,
35
37
  },
36
38
  sectionCard: sectionCardOverride,
37
39
  },
38
40
  semantics,
39
41
  },
40
42
  } = useTheme();
41
- const { ChannelMemberActionsSheet, ChannelMemberItem } = useComponentsContext();
43
+ const {
44
+ ChannelAddMembersButton,
45
+ ChannelMemberActionsSheet,
46
+ ChannelMemberItem,
47
+ ChannelMemberList,
48
+ } = useComponentsContext();
42
49
  const { hasMore, total, visible } = useChannelDetailsMembersPreview(channel);
43
50
  const styles = useStyles();
44
51
  const [isMemberListVisible, setMemberListVisible] = useState(false);
45
- const [isAddMembersVisible, setAddMembersVisible] = useState(false);
46
52
  const [selectedMember, setSelectedMember] = useState<ChannelMemberResponse | null>(null);
47
53
 
48
54
  const handleViewAllPress = useCallback(() => {
@@ -55,28 +61,11 @@ export const ChannelDetailsMemberSection = () => {
55
61
 
56
62
  const handleMemberListClose = useCallback(() => setMemberListVisible(false), []);
57
63
 
58
- const handleAddMembersClose = useCallback(() => setAddMembersVisible(false), []);
59
-
60
- const handleAddMembersPress = useCallback(() => {
61
- if (onAddMembersPress) {
62
- onAddMembersPress();
63
- return;
64
- }
65
- setMemberListVisible(false);
66
- setAddMembersVisible(true);
67
- }, [onAddMembersPress]);
68
-
69
64
  const handleMemberActionsClose = useCallback(() => setSelectedMember(null), []);
70
65
 
71
66
  const handleMemberPress = useCallback(
72
- (member: ChannelMemberResponse) => {
73
- if (onMemberPress) {
74
- onMemberPress(member);
75
- return;
76
- }
77
- setSelectedMember(member);
78
- },
79
- [onMemberPress],
67
+ (member: ChannelMemberResponse) => setSelectedMember(member),
68
+ [],
80
69
  );
81
70
 
82
71
  return (
@@ -94,20 +83,13 @@ export const ChannelDetailsMemberSection = () => {
94
83
  >
95
84
  {t('{{count}} members', { count: total })}
96
85
  </Text>
97
- {updateChannelMembers ? (
98
- <View style={styles.headerAddButton}>
99
- <Button
100
- accessibilityLabelKey='a11y/Add members'
101
- label={t('Add')}
102
- onPress={handleAddMembersPress}
103
- size='sm'
104
- style={styles.headerAddButtonInner}
105
- testID='channel-details-member-section-add-button'
106
- type='outline'
107
- variant='secondary'
108
- />
109
- </View>
110
- ) : null}
86
+ <View style={[styles.addButtonWrapper, addButtonWrapperOverride]}>
87
+ <ChannelAddMembersButton
88
+ style={{ flexShrink: 0, width: 'auto' }}
89
+ testID='channel-details-member-section-add-button'
90
+ variant='text'
91
+ />
92
+ </View>
111
93
  </View>
112
94
  <View style={styles.list}>
113
95
  {visible.map((member) => {
@@ -133,12 +115,21 @@ export const ChannelDetailsMemberSection = () => {
133
115
  </View>
134
116
  </Pressable>
135
117
  ) : null}
136
- <ChannelAllMembersModal
137
- onAddMembersPress={handleAddMembersPress}
138
- onClose={handleMemberListClose}
139
- visible={isMemberListVisible}
140
- />
141
- <ChannelAddMembersModal onClose={handleAddMembersClose} visible={isAddMembersVisible} />
118
+ {onViewAllMembersPress ? null : (
119
+ <ChannelDetailsModal onClose={handleMemberListClose} visible={isMemberListVisible}>
120
+ <ModalHeader
121
+ onClose={handleMemberListClose}
122
+ rightAction={
123
+ <ChannelAddMembersButton
124
+ testID='channel-details-member-list-add-button'
125
+ variant='icon'
126
+ />
127
+ }
128
+ title={t('{{count}} members', { count: total })}
129
+ />
130
+ <ChannelMemberList />
131
+ </ChannelDetailsModal>
132
+ )}
142
133
  {selectedMember ? (
143
134
  <ChannelMemberActionsSheet
144
135
  member={selectedMember}
@@ -167,12 +158,6 @@ const useStyles = () =>
167
158
  paddingHorizontal: primitives.spacingMd,
168
159
  paddingTop: primitives.spacingXs,
169
160
  },
170
- headerAddButton: {
171
- flexShrink: 0,
172
- },
173
- headerAddButtonInner: {
174
- width: 'auto',
175
- },
176
161
  headerTitle: {
177
162
  flexShrink: 1,
178
163
  fontSize: primitives.typographyFontSizeMd,
@@ -182,6 +167,7 @@ const useStyles = () =>
182
167
  },
183
168
  list: {
184
169
  paddingBottom: primitives.spacingSm,
170
+ paddingHorizontal: primitives.spacingXxs,
185
171
  },
186
172
  sectionCard: {
187
173
  borderRadius: primitives.radiusLg,
@@ -198,6 +184,12 @@ const useStyles = () =>
198
184
  fontWeight: primitives.typographyFontWeightSemiBold,
199
185
  lineHeight: primitives.typographyLineHeightNormal,
200
186
  },
187
+ addButtonWrapper: {
188
+ height: 48,
189
+ display: 'flex',
190
+ justifyContent: 'center',
191
+ alignItems: 'center',
192
+ },
201
193
  }),
202
194
  [],
203
195
  );
@@ -14,15 +14,18 @@ import { Button } from '../../ui/Button/Button';
14
14
  export type ChannelDetailsNavHeaderProps = {
15
15
  /** Content rendered on the trailing side of the header (e.g. the edit button). */
16
16
  action?: React.ReactNode;
17
+ /** Fired when the back button is pressed. The back button only renders when provided. */
18
+ onBack?: () => void;
17
19
  /** Override the auto-resolved screen title (1:1 → "Contact Info", group → "Group Info"). */
18
20
  title?: string;
19
21
  };
20
22
 
21
- /**
22
- * @experimental This component is experimental and is subject to change.
23
- */
24
- export const ChannelDetailsNavHeader = ({ action, title }: ChannelDetailsNavHeaderProps) => {
25
- const { channel, onBack } = useChannelDetailsContext();
23
+ export const ChannelDetailsNavHeader = ({
24
+ action,
25
+ onBack,
26
+ title,
27
+ }: ChannelDetailsNavHeaderProps) => {
28
+ const { channel } = useChannelDetailsContext();
26
29
  const { t } = useTranslationContext();
27
30
  const {
28
31
  theme: {
@@ -14,13 +14,25 @@ import { primitives } from '../../../theme';
14
14
  import { ImageGallery } from '../../ImageGallery/ImageGallery';
15
15
  import {
16
16
  type ChannelDetailsNavigationSectionType,
17
+ type GetChannelDetailsNavigationItems,
17
18
  useChannelDetailsNavigationItems,
18
19
  } from '../hooks/useChannelDetailsNavigationItems';
19
20
 
20
- /**
21
- * @experimental This component is experimental and is subject to change.
22
- */
23
- export const ChannelDetailsNavigationSection = () => {
21
+ export type ChannelDetailsNavigationSectionProps = {
22
+ /**
23
+ * Customize the navigation rows rendered in the channel details navigation section.
24
+ *
25
+ * Receives the built-in `defaultItems` (and a `context`) and returns the rows to render.
26
+ * Map over `defaultItems` to override a row's `onPress` (e.g. to push your own screen) or
27
+ * to add/remove rows. Any row whose `onPress` you leave untouched keeps its built-in
28
+ * behavior (opening the built-in modal), including sections added in future SDK versions.
29
+ */
30
+ getNavigationItems?: GetChannelDetailsNavigationItems;
31
+ };
32
+
33
+ export const ChannelDetailsNavigationSection = ({
34
+ getNavigationItems,
35
+ }: ChannelDetailsNavigationSectionProps) => {
24
36
  const {
25
37
  theme: {
26
38
  channelDetails: { sectionCard: sectionCardOverride },
@@ -29,7 +41,7 @@ export const ChannelDetailsNavigationSection = () => {
29
41
  } = useTheme();
30
42
  const styles = useStyles();
31
43
  const { FileAttachmentList, MediaList, PinnedMessageList } = useComponentsContext();
32
- const items = useChannelDetailsNavigationItems();
44
+ const items = useChannelDetailsNavigationItems({ getNavigationItems });
33
45
  const [activeSection, setActiveSection] = useState<ChannelDetailsNavigationSectionType | null>(
34
46
  null,
35
47
  );
@@ -119,6 +131,7 @@ const useStyles = () => {
119
131
  borderRadius: primitives.radiusLg,
120
132
  overflow: 'hidden',
121
133
  paddingVertical: primitives.spacingXs,
134
+ paddingHorizontal: primitives.spacingXxs,
122
135
  },
123
136
  }),
124
137
  [],
@@ -12,9 +12,6 @@ import { useChannelPreviewDisplayName } from '../../ChannelPreview/hooks/useChan
12
12
  import { ChannelAvatar } from '../../ui/Avatar/ChannelAvatar';
13
13
  import { useChannelDetailsMemberStatusText } from '../hooks/useChannelDetailsMemberStatusText';
14
14
 
15
- /**
16
- * @experimental This component is experimental and is subject to change.
17
- */
18
15
  export const ChannelDetailsProfile = () => {
19
16
  const { channel } = useChannelDetailsContext();
20
17
  const { t } = useTranslationContext();