stream-chat-react-native-core 9.4.0-beta.11 → 9.4.0-beta.12

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 (331) hide show
  1. package/lib/commonjs/components/ChannelDetails/ChannelDetails.js +8 -3
  2. package/lib/commonjs/components/ChannelDetails/ChannelDetails.js.map +1 -1
  3. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsActionItem.js +2 -1
  4. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsActionItem.js.map +1 -1
  5. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsEditButton.js +57 -0
  6. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsEditButton.js.map +1 -0
  7. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavHeader.js +3 -32
  8. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavHeader.js.map +1 -1
  9. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavigationSection.js +64 -25
  10. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsNavigationSection.js.map +1 -1
  11. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsProfile.js +3 -2
  12. package/lib/commonjs/components/ChannelDetails/components/ChannelDetailsProfile.js.map +1 -1
  13. package/lib/commonjs/components/ChannelDetails/components/ChannelEditImageSheet.js +2 -2
  14. package/lib/commonjs/components/ChannelDetails/components/ChannelEditImageSheet.js.map +1 -1
  15. package/lib/commonjs/components/ChannelDetails/components/index.js +22 -0
  16. package/lib/commonjs/components/ChannelDetails/components/index.js.map +1 -1
  17. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberItem.js +2 -1
  18. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberItem.js.map +1 -1
  19. package/lib/commonjs/components/ChannelDetails/components/modal/Modal.js +22 -23
  20. package/lib/commonjs/components/ChannelDetails/components/modal/Modal.js.map +1 -1
  21. package/lib/commonjs/components/ChannelDetails/components/modal/ModalHeader.js +6 -4
  22. package/lib/commonjs/components/ChannelDetails/components/modal/ModalHeader.js.map +1 -1
  23. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentItem.js +65 -0
  24. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentItem.js.map +1 -0
  25. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentList.js +174 -0
  26. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentList.js.map +1 -0
  27. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.js +21 -0
  28. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.js.map +1 -0
  29. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.js +45 -0
  30. package/lib/commonjs/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.js.map +1 -0
  31. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaItem.js +120 -0
  32. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaItem.js.map +1 -0
  33. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaList.js +206 -0
  34. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaList.js.map +1 -0
  35. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.js +63 -0
  36. package/lib/commonjs/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.js.map +1 -0
  37. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageItem.js +84 -0
  38. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageItem.js.map +1 -0
  39. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageList.js +177 -0
  40. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageList.js.map +1 -0
  41. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.js +21 -0
  42. package/lib/commonjs/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.js.map +1 -0
  43. package/lib/commonjs/components/ChannelDetails/components/navigation-section/index.js +114 -0
  44. package/lib/commonjs/components/ChannelDetails/components/navigation-section/index.js.map +1 -0
  45. package/lib/commonjs/components/ChannelDetails/hooks/index.js +33 -0
  46. package/lib/commonjs/components/ChannelDetails/hooks/index.js.map +1 -1
  47. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js +55 -0
  48. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js.map +1 -0
  49. package/lib/commonjs/components/ChannelDetails/hooks/useFileAttachmentListSections.js +52 -0
  50. package/lib/commonjs/components/ChannelDetails/hooks/useFileAttachmentListSections.js.map +1 -0
  51. package/lib/commonjs/components/ChannelDetails/hooks/useMediaList.js +30 -0
  52. package/lib/commonjs/components/ChannelDetails/hooks/useMediaList.js.map +1 -0
  53. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js +23 -15
  54. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  55. package/lib/commonjs/components/UIComponents/EmptyList.js +78 -0
  56. package/lib/commonjs/components/UIComponents/EmptyList.js.map +1 -0
  57. package/lib/commonjs/components/UIComponents/index.js +11 -0
  58. package/lib/commonjs/components/UIComponents/index.js.map +1 -1
  59. package/lib/commonjs/components/ui/Avatar/AvatarGroup.js +3 -3
  60. package/lib/commonjs/components/ui/Avatar/constants.js +2 -2
  61. package/lib/commonjs/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js +64 -0
  62. package/lib/commonjs/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js.map +1 -0
  63. package/lib/commonjs/contexts/channelMediaListContext/ChannelMediaListContext.js +63 -0
  64. package/lib/commonjs/contexts/channelMediaListContext/ChannelMediaListContext.js.map +1 -0
  65. package/lib/commonjs/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js +73 -0
  66. package/lib/commonjs/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js.map +1 -0
  67. package/lib/commonjs/contexts/componentsContext/defaultComponents.js +8 -0
  68. package/lib/commonjs/contexts/componentsContext/defaultComponents.js.map +1 -1
  69. package/lib/commonjs/contexts/index.js +33 -0
  70. package/lib/commonjs/contexts/index.js.map +1 -1
  71. package/lib/commonjs/contexts/themeContext/utils/theme.js +57 -2
  72. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  73. package/lib/commonjs/i18n/ar.json +11 -0
  74. package/lib/commonjs/i18n/en.json +11 -0
  75. package/lib/commonjs/i18n/es.json +11 -0
  76. package/lib/commonjs/i18n/fr.json +11 -0
  77. package/lib/commonjs/i18n/he.json +11 -0
  78. package/lib/commonjs/i18n/hi.json +11 -0
  79. package/lib/commonjs/i18n/it.json +11 -0
  80. package/lib/commonjs/i18n/ja.json +11 -0
  81. package/lib/commonjs/i18n/ko.json +11 -0
  82. package/lib/commonjs/i18n/nl.json +11 -0
  83. package/lib/commonjs/i18n/pt-br.json +11 -0
  84. package/lib/commonjs/i18n/ru.json +11 -0
  85. package/lib/commonjs/i18n/tr.json +11 -0
  86. package/lib/commonjs/icons/folder.js +37 -0
  87. package/lib/commonjs/icons/folder.js.map +1 -0
  88. package/lib/commonjs/icons/index.js +12 -0
  89. package/lib/commonjs/icons/index.js.map +1 -1
  90. package/lib/commonjs/version.json +1 -1
  91. package/lib/module/components/ChannelDetails/ChannelDetails.js +8 -3
  92. package/lib/module/components/ChannelDetails/ChannelDetails.js.map +1 -1
  93. package/lib/module/components/ChannelDetails/components/ChannelDetailsActionItem.js +2 -1
  94. package/lib/module/components/ChannelDetails/components/ChannelDetailsActionItem.js.map +1 -1
  95. package/lib/module/components/ChannelDetails/components/ChannelDetailsEditButton.js +57 -0
  96. package/lib/module/components/ChannelDetails/components/ChannelDetailsEditButton.js.map +1 -0
  97. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavHeader.js +3 -32
  98. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavHeader.js.map +1 -1
  99. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavigationSection.js +64 -25
  100. package/lib/module/components/ChannelDetails/components/ChannelDetailsNavigationSection.js.map +1 -1
  101. package/lib/module/components/ChannelDetails/components/ChannelDetailsProfile.js +3 -2
  102. package/lib/module/components/ChannelDetails/components/ChannelDetailsProfile.js.map +1 -1
  103. package/lib/module/components/ChannelDetails/components/ChannelEditImageSheet.js +2 -2
  104. package/lib/module/components/ChannelDetails/components/ChannelEditImageSheet.js.map +1 -1
  105. package/lib/module/components/ChannelDetails/components/index.js +22 -0
  106. package/lib/module/components/ChannelDetails/components/index.js.map +1 -1
  107. package/lib/module/components/ChannelDetails/components/members/ChannelMemberItem.js +2 -1
  108. package/lib/module/components/ChannelDetails/components/members/ChannelMemberItem.js.map +1 -1
  109. package/lib/module/components/ChannelDetails/components/modal/Modal.js +22 -23
  110. package/lib/module/components/ChannelDetails/components/modal/Modal.js.map +1 -1
  111. package/lib/module/components/ChannelDetails/components/modal/ModalHeader.js +6 -4
  112. package/lib/module/components/ChannelDetails/components/modal/ModalHeader.js.map +1 -1
  113. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentItem.js +65 -0
  114. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentItem.js.map +1 -0
  115. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentList.js +174 -0
  116. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentList.js.map +1 -0
  117. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.js +21 -0
  118. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.js.map +1 -0
  119. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.js +45 -0
  120. package/lib/module/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.js.map +1 -0
  121. package/lib/module/components/ChannelDetails/components/navigation-section/MediaItem.js +120 -0
  122. package/lib/module/components/ChannelDetails/components/navigation-section/MediaItem.js.map +1 -0
  123. package/lib/module/components/ChannelDetails/components/navigation-section/MediaList.js +206 -0
  124. package/lib/module/components/ChannelDetails/components/navigation-section/MediaList.js.map +1 -0
  125. package/lib/module/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.js +63 -0
  126. package/lib/module/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.js.map +1 -0
  127. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageItem.js +84 -0
  128. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageItem.js.map +1 -0
  129. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageList.js +177 -0
  130. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageList.js.map +1 -0
  131. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.js +21 -0
  132. package/lib/module/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.js.map +1 -0
  133. package/lib/module/components/ChannelDetails/components/navigation-section/index.js +114 -0
  134. package/lib/module/components/ChannelDetails/components/navigation-section/index.js.map +1 -0
  135. package/lib/module/components/ChannelDetails/hooks/index.js +33 -0
  136. package/lib/module/components/ChannelDetails/hooks/index.js.map +1 -1
  137. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js +55 -0
  138. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.js.map +1 -0
  139. package/lib/module/components/ChannelDetails/hooks/useFileAttachmentListSections.js +52 -0
  140. package/lib/module/components/ChannelDetails/hooks/useFileAttachmentListSections.js.map +1 -0
  141. package/lib/module/components/ChannelDetails/hooks/useMediaList.js +30 -0
  142. package/lib/module/components/ChannelDetails/hooks/useMediaList.js.map +1 -0
  143. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js +23 -15
  144. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  145. package/lib/module/components/UIComponents/EmptyList.js +78 -0
  146. package/lib/module/components/UIComponents/EmptyList.js.map +1 -0
  147. package/lib/module/components/UIComponents/index.js +11 -0
  148. package/lib/module/components/UIComponents/index.js.map +1 -1
  149. package/lib/module/components/ui/Avatar/AvatarGroup.js +3 -3
  150. package/lib/module/components/ui/Avatar/constants.js +2 -2
  151. package/lib/module/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js +64 -0
  152. package/lib/module/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.js.map +1 -0
  153. package/lib/module/contexts/channelMediaListContext/ChannelMediaListContext.js +63 -0
  154. package/lib/module/contexts/channelMediaListContext/ChannelMediaListContext.js.map +1 -0
  155. package/lib/module/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js +73 -0
  156. package/lib/module/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js.map +1 -0
  157. package/lib/module/contexts/componentsContext/defaultComponents.js +8 -0
  158. package/lib/module/contexts/componentsContext/defaultComponents.js.map +1 -1
  159. package/lib/module/contexts/index.js +33 -0
  160. package/lib/module/contexts/index.js.map +1 -1
  161. package/lib/module/contexts/themeContext/utils/theme.js +57 -2
  162. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  163. package/lib/module/i18n/ar.json +11 -0
  164. package/lib/module/i18n/en.json +11 -0
  165. package/lib/module/i18n/es.json +11 -0
  166. package/lib/module/i18n/fr.json +11 -0
  167. package/lib/module/i18n/he.json +11 -0
  168. package/lib/module/i18n/hi.json +11 -0
  169. package/lib/module/i18n/it.json +11 -0
  170. package/lib/module/i18n/ja.json +11 -0
  171. package/lib/module/i18n/ko.json +11 -0
  172. package/lib/module/i18n/nl.json +11 -0
  173. package/lib/module/i18n/pt-br.json +11 -0
  174. package/lib/module/i18n/ru.json +11 -0
  175. package/lib/module/i18n/tr.json +11 -0
  176. package/lib/module/icons/folder.js +37 -0
  177. package/lib/module/icons/folder.js.map +1 -0
  178. package/lib/module/icons/index.js +12 -0
  179. package/lib/module/icons/index.js.map +1 -1
  180. package/lib/module/version.json +1 -1
  181. package/lib/typescript/components/ChannelDetails/ChannelDetails.d.ts +11 -1
  182. package/lib/typescript/components/ChannelDetails/ChannelDetails.d.ts.map +1 -1
  183. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsActionItem.d.ts.map +1 -1
  184. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsEditButton.d.ts +6 -0
  185. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsEditButton.d.ts.map +1 -0
  186. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavHeader.d.ts +3 -1
  187. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavHeader.d.ts.map +1 -1
  188. package/lib/typescript/components/ChannelDetails/components/ChannelDetailsNavigationSection.d.ts.map +1 -1
  189. package/lib/typescript/components/ChannelDetails/components/index.d.ts +3 -0
  190. package/lib/typescript/components/ChannelDetails/components/index.d.ts.map +1 -1
  191. package/lib/typescript/components/ChannelDetails/components/members/ChannelMemberItem.d.ts.map +1 -1
  192. package/lib/typescript/components/ChannelDetails/components/modal/Modal.d.ts +2 -1
  193. package/lib/typescript/components/ChannelDetails/components/modal/Modal.d.ts.map +1 -1
  194. package/lib/typescript/components/ChannelDetails/components/modal/ModalHeader.d.ts +3 -1
  195. package/lib/typescript/components/ChannelDetails/components/modal/ModalHeader.d.ts.map +1 -1
  196. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentItem.d.ts +31 -0
  197. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentItem.d.ts.map +1 -0
  198. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentList.d.ts +17 -0
  199. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentList.d.ts.map +1 -0
  200. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.d.ts +9 -0
  201. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.d.ts.map +1 -0
  202. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.d.ts +13 -0
  203. package/lib/typescript/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.d.ts.map +1 -0
  204. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaItem.d.ts +35 -0
  205. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaItem.d.ts.map +1 -0
  206. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaList.d.ts +17 -0
  207. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaList.d.ts.map +1 -0
  208. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.d.ts +11 -0
  209. package/lib/typescript/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.d.ts.map +1 -0
  210. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageItem.d.ts +19 -0
  211. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageItem.d.ts.map +1 -0
  212. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageList.d.ts +19 -0
  213. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageList.d.ts.map +1 -0
  214. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.d.ts +9 -0
  215. package/lib/typescript/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.d.ts.map +1 -0
  216. package/lib/typescript/components/ChannelDetails/components/navigation-section/index.d.ts +11 -0
  217. package/lib/typescript/components/ChannelDetails/components/navigation-section/index.d.ts.map +1 -0
  218. package/lib/typescript/components/ChannelDetails/hooks/index.d.ts +3 -0
  219. package/lib/typescript/components/ChannelDetails/hooks/index.d.ts.map +1 -1
  220. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.d.ts +56 -0
  221. package/lib/typescript/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.d.ts.map +1 -0
  222. package/lib/typescript/components/ChannelDetails/hooks/useFileAttachmentListSections.d.ts +28 -0
  223. package/lib/typescript/components/ChannelDetails/hooks/useFileAttachmentListSections.d.ts.map +1 -0
  224. package/lib/typescript/components/ChannelDetails/hooks/useMediaList.d.ts +20 -0
  225. package/lib/typescript/components/ChannelDetails/hooks/useMediaList.d.ts.map +1 -0
  226. package/lib/typescript/components/ImageGallery/components/ImageGalleryHeader.d.ts.map +1 -1
  227. package/lib/typescript/components/UIComponents/EmptyList.d.ts +24 -0
  228. package/lib/typescript/components/UIComponents/EmptyList.d.ts.map +1 -0
  229. package/lib/typescript/components/UIComponents/index.d.ts +1 -0
  230. package/lib/typescript/components/UIComponents/index.d.ts.map +1 -1
  231. package/lib/typescript/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.d.ts +21 -0
  232. package/lib/typescript/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.d.ts.map +1 -0
  233. package/lib/typescript/contexts/channelMediaListContext/ChannelMediaListContext.d.ts +21 -0
  234. package/lib/typescript/contexts/channelMediaListContext/ChannelMediaListContext.d.ts.map +1 -0
  235. package/lib/typescript/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.d.ts +21 -0
  236. package/lib/typescript/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.d.ts.map +1 -0
  237. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts +18 -2
  238. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts.map +1 -1
  239. package/lib/typescript/contexts/index.d.ts +3 -0
  240. package/lib/typescript/contexts/index.d.ts.map +1 -1
  241. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts +56 -1
  242. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts.map +1 -1
  243. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +56 -1
  244. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  245. package/lib/typescript/i18n/ar.json +11 -0
  246. package/lib/typescript/i18n/en.json +11 -0
  247. package/lib/typescript/i18n/es.json +11 -0
  248. package/lib/typescript/i18n/fr.json +11 -0
  249. package/lib/typescript/i18n/he.json +11 -0
  250. package/lib/typescript/i18n/hi.json +11 -0
  251. package/lib/typescript/i18n/it.json +11 -0
  252. package/lib/typescript/i18n/ja.json +11 -0
  253. package/lib/typescript/i18n/ko.json +11 -0
  254. package/lib/typescript/i18n/nl.json +11 -0
  255. package/lib/typescript/i18n/pt-br.json +11 -0
  256. package/lib/typescript/i18n/ru.json +11 -0
  257. package/lib/typescript/i18n/tr.json +11 -0
  258. package/lib/typescript/icons/folder.d.ts +4 -0
  259. package/lib/typescript/icons/folder.d.ts.map +1 -0
  260. package/lib/typescript/icons/index.d.ts +1 -0
  261. package/lib/typescript/icons/index.d.ts.map +1 -1
  262. package/lib/typescript/utils/i18n/Streami18n.d.ts +11 -0
  263. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  264. package/package.json +1 -1
  265. package/src/components/ChannelDetails/ChannelDetails.tsx +17 -2
  266. package/src/components/ChannelDetails/__tests__/ChannelDetails.test.tsx +29 -0
  267. package/src/components/ChannelDetails/__tests__/ChannelDetailsEditButton.test.tsx +127 -0
  268. package/src/components/ChannelDetails/__tests__/ChannelDetailsNavHeader.test.tsx +21 -56
  269. package/src/components/ChannelDetails/__tests__/ChannelDetailsNavigationSection.test.tsx +225 -6
  270. package/src/components/ChannelDetails/__tests__/useFileAttachmentListSections.test.tsx +159 -0
  271. package/src/components/ChannelDetails/__tests__/useMediaList.test.tsx +53 -0
  272. package/src/components/ChannelDetails/components/ChannelDetailsActionItem.tsx +6 -1
  273. package/src/components/ChannelDetails/components/ChannelDetailsEditButton.tsx +50 -0
  274. package/src/components/ChannelDetails/components/ChannelDetailsNavHeader.tsx +6 -33
  275. package/src/components/ChannelDetails/components/ChannelDetailsNavigationSection.tsx +80 -32
  276. package/src/components/ChannelDetails/components/ChannelDetailsProfile.tsx +2 -1
  277. package/src/components/ChannelDetails/components/ChannelEditImageSheet.tsx +2 -2
  278. package/src/components/ChannelDetails/components/__tests__/navigation-section/FileAttachmentItem.test.tsx +80 -0
  279. package/src/components/ChannelDetails/components/__tests__/navigation-section/FileAttachmentList.test.tsx +334 -0
  280. package/src/components/ChannelDetails/components/__tests__/navigation-section/FileAttachmentListSectionHeader.test.tsx +19 -0
  281. package/src/components/ChannelDetails/components/__tests__/navigation-section/MediaItem.test.tsx +97 -0
  282. package/src/components/ChannelDetails/components/__tests__/navigation-section/MediaList.test.tsx +351 -0
  283. package/src/components/ChannelDetails/components/__tests__/navigation-section/PinnedMessageItem.test.tsx +112 -0
  284. package/src/components/ChannelDetails/components/__tests__/navigation-section/PinnedMessageList.test.tsx +324 -0
  285. package/src/components/ChannelDetails/components/index.ts +3 -0
  286. package/src/components/ChannelDetails/components/members/ChannelMemberItem.tsx +6 -1
  287. package/src/components/ChannelDetails/components/modal/Modal.tsx +37 -24
  288. package/src/components/ChannelDetails/components/modal/ModalHeader.tsx +11 -4
  289. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentItem.tsx +92 -0
  290. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentList.tsx +204 -0
  291. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentListLoadingSkeleton.tsx +23 -0
  292. package/src/components/ChannelDetails/components/navigation-section/FileAttachmentListSectionHeader.tsx +56 -0
  293. package/src/components/ChannelDetails/components/navigation-section/MediaItem.tsx +160 -0
  294. package/src/components/ChannelDetails/components/navigation-section/MediaList.tsx +244 -0
  295. package/src/components/ChannelDetails/components/navigation-section/MediaListLoadingSkeleton.tsx +66 -0
  296. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageItem.tsx +94 -0
  297. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageList.tsx +198 -0
  298. package/src/components/ChannelDetails/components/navigation-section/PinnedMessageListLoadingSkeleton.tsx +23 -0
  299. package/src/components/ChannelDetails/components/navigation-section/index.ts +10 -0
  300. package/src/components/ChannelDetails/hooks/index.ts +3 -0
  301. package/src/components/ChannelDetails/hooks/useChannelDetailsNavigationItems.ts +108 -0
  302. package/src/components/ChannelDetails/hooks/useFileAttachmentListSections.ts +79 -0
  303. package/src/components/ChannelDetails/hooks/useMediaList.ts +51 -0
  304. package/src/components/ImageGallery/components/ImageGalleryHeader.tsx +21 -18
  305. package/src/components/UIComponents/EmptyList.tsx +80 -0
  306. package/src/components/UIComponents/__tests__/EmptyList.test.tsx +90 -0
  307. package/src/components/UIComponents/index.ts +1 -0
  308. package/src/components/ui/Avatar/AvatarGroup.tsx +3 -3
  309. package/src/components/ui/Avatar/constants.ts +2 -2
  310. package/src/contexts/channelFileAttachmentListContext/ChannelFileAttachmentListContext.tsx +67 -0
  311. package/src/contexts/channelMediaListContext/ChannelMediaListContext.tsx +68 -0
  312. package/src/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.tsx +72 -0
  313. package/src/contexts/componentsContext/defaultComponents.ts +16 -1
  314. package/src/contexts/index.ts +3 -0
  315. package/src/contexts/themeContext/utils/theme.ts +112 -2
  316. package/src/i18n/ar.json +11 -0
  317. package/src/i18n/en.json +11 -0
  318. package/src/i18n/es.json +11 -0
  319. package/src/i18n/fr.json +11 -0
  320. package/src/i18n/he.json +11 -0
  321. package/src/i18n/hi.json +11 -0
  322. package/src/i18n/it.json +11 -0
  323. package/src/i18n/ja.json +11 -0
  324. package/src/i18n/ko.json +11 -0
  325. package/src/i18n/nl.json +11 -0
  326. package/src/i18n/pt-br.json +11 -0
  327. package/src/i18n/ru.json +11 -0
  328. package/src/i18n/tr.json +11 -0
  329. package/src/icons/folder.tsx +28 -0
  330. package/src/icons/index.ts +1 -0
  331. package/src/version.json +1 -1
@@ -1,8 +1,9 @@
1
- import React, { useEffect, useMemo, useState } from 'react';
1
+ import React, { useContext, useEffect, useMemo, useState } from 'react';
2
2
 
3
3
  import { StyleSheet, Text, View, ViewStyle } from 'react-native';
4
4
 
5
5
  import Animated, { Extrapolation, interpolate, useAnimatedStyle } from 'react-native-reanimated';
6
+ import { SafeAreaInsetsContext } from 'react-native-safe-area-context';
6
7
 
7
8
  import type { ImageGalleryHeaderProps } from './types';
8
9
 
@@ -17,11 +18,6 @@ import { ImageGalleryState } from '../../../state-store/image-gallery-state-stor
17
18
  import { primitives } from '../../../theme';
18
19
  import { getDateString } from '../../../utils/i18n/getDateString';
19
20
  import { Button } from '../../ui/Button/Button';
20
- import { SafeAreaView } from '../../UIComponents/SafeAreaViewWrapper';
21
-
22
- const ReanimatedSafeAreaView = Animated.createAnimatedComponent
23
- ? Animated.createAnimatedComponent(SafeAreaView)
24
- : SafeAreaView;
25
21
 
26
22
  const imageGallerySelector = (state: ImageGalleryState) => ({
27
23
  asset: state.assets[state.currentIndex],
@@ -35,6 +31,7 @@ export const ImageGalleryHeader = (props: ImageGalleryHeaderProps) => {
35
31
  const { imageGalleryStateStore } = useImageGalleryContext();
36
32
  const { asset } = useStateStore(imageGalleryStateStore.state, imageGallerySelector);
37
33
  const { setOverlay } = useOverlayContext();
34
+ const topInset = useContext(SafeAreaInsetsContext)?.top ?? 0;
38
35
 
39
36
  const date = useMemo(
40
37
  () =>
@@ -71,17 +68,19 @@ export const ImageGalleryHeader = (props: ImageGalleryHeaderProps) => {
71
68
  onLayout={(event) => setHeight(event.nativeEvent.layout.height)}
72
69
  pointerEvents={'box-none'}
73
70
  >
74
- <ReanimatedSafeAreaView edges={['top']} style={[styles.container, headerStyle]}>
71
+ <Animated.View style={[styles.container, { paddingTop: topInset }, headerStyle]}>
75
72
  <View style={styles.innerContainer}>
76
- <Button
77
- accessibilityLabelKey='a11y/Hide Overlay'
78
- variant='secondary'
79
- type='ghost'
80
- size='md'
81
- onPress={hideOverlay}
82
- LeadingIcon={ChevronLeft}
83
- iconOnly
84
- />
73
+ <View style={styles.leftContainer}>
74
+ <Button
75
+ accessibilityLabelKey='a11y/Hide Overlay'
76
+ variant='secondary'
77
+ type='ghost'
78
+ size='md'
79
+ onPress={hideOverlay}
80
+ LeadingIcon={ChevronLeft}
81
+ iconOnly
82
+ />
83
+ </View>
85
84
  <View style={styles.centerContainer} accessibilityLabel='Center element'>
86
85
  <Text style={styles.userName}>
87
86
  {asset?.user?.name || asset?.user?.id || t('Unknown User')}
@@ -90,7 +89,7 @@ export const ImageGalleryHeader = (props: ImageGalleryHeaderProps) => {
90
89
  </View>
91
90
  <View style={styles.rightContainer} accessibilityLabel='Right element' />
92
91
  </View>
93
- </ReanimatedSafeAreaView>
92
+ </Animated.View>
94
93
  </View>
95
94
  );
96
95
  };
@@ -114,7 +113,7 @@ const useStyles = () => {
114
113
  },
115
114
  centerContainer: {
116
115
  alignItems: 'center',
117
- flex: 1,
116
+ flex: 2,
118
117
  justifyContent: 'center',
119
118
  gap: primitives.spacingXxs,
120
119
  ...header.centerContainer,
@@ -134,9 +133,13 @@ const useStyles = () => {
134
133
  borderBottomColor: semantics.borderCoreSubtle,
135
134
  ...header.innerContainer,
136
135
  },
136
+ leftContainer: {
137
+ flex: 1,
138
+ },
137
139
  rightContainer: {
138
140
  width: 24,
139
141
  height: 24,
142
+ flex: 1,
140
143
  },
141
144
  userName: {
142
145
  color: semantics.textPrimary,
@@ -0,0 +1,80 @@
1
+ import React from 'react';
2
+ import { I18nManager, StyleSheet, Text, View } from 'react-native';
3
+
4
+ import { useTheme } from '../../contexts/themeContext/ThemeContext';
5
+ import { IconProps } from '../../icons/utils/base';
6
+ import { primitives } from '../../theme';
7
+
8
+ export type EmptyListProps = {
9
+ /**
10
+ * Icon component to render. Its size and color are set by `EmptyList`.
11
+ */
12
+ icon: React.ComponentType<IconProps>;
13
+ /**
14
+ * Title text shown below the icon.
15
+ */
16
+ title: string;
17
+ /**
18
+ * Optional supporting text shown below the title.
19
+ */
20
+ subtitle?: string;
21
+ };
22
+
23
+ /**
24
+ * @experimental This component is experimental and is subject to change.
25
+ */
26
+ export const EmptyList = ({ icon: Icon, subtitle, title }: EmptyListProps) => {
27
+ const {
28
+ theme: {
29
+ emptyList: { container, subtitle: subtitleStyle, title: titleStyle },
30
+ semantics,
31
+ },
32
+ } = useTheme();
33
+
34
+ return (
35
+ <View style={[styles.container, container]} testID='empty-list'>
36
+ <Icon stroke={semantics.textTertiary} size={32} />
37
+ <View style={styles.content}>
38
+ <Text style={[styles.title, { color: semantics.textPrimary }, titleStyle]}>{title}</Text>
39
+ {subtitle ? (
40
+ <Text style={[styles.subtitle, { color: semantics.textSecondary }, subtitleStyle]}>
41
+ {subtitle}
42
+ </Text>
43
+ ) : null}
44
+ </View>
45
+ </View>
46
+ );
47
+ };
48
+
49
+ EmptyList.displayName = 'EmptyList{emptyList}';
50
+
51
+ const styles = StyleSheet.create({
52
+ container: {
53
+ alignItems: 'center',
54
+ gap: primitives.spacingSm,
55
+ height: '100%',
56
+ justifyContent: 'center',
57
+ paddingHorizontal: primitives.spacingMd,
58
+ paddingVertical: primitives.spacing3xl,
59
+ width: '100%',
60
+ },
61
+ content: {
62
+ alignItems: 'center',
63
+ gap: primitives.spacingXs,
64
+ width: '100%',
65
+ },
66
+ subtitle: {
67
+ fontSize: primitives.typographyFontSizeMd,
68
+ fontWeight: primitives.typographyFontWeightRegular,
69
+ lineHeight: primitives.typographyLineHeightNormal,
70
+ textAlign: 'center',
71
+ writingDirection: I18nManager.isRTL ? 'rtl' : 'ltr',
72
+ },
73
+ title: {
74
+ fontSize: primitives.typographyFontSizeMd,
75
+ fontWeight: primitives.typographyFontWeightSemiBold,
76
+ lineHeight: primitives.typographyLineHeightNormal,
77
+ textAlign: 'center',
78
+ writingDirection: I18nManager.isRTL ? 'rtl' : 'ltr',
79
+ },
80
+ });
@@ -0,0 +1,90 @@
1
+ import React from 'react';
2
+
3
+ import { render, screen } from '@testing-library/react-native';
4
+
5
+ import { ThemeProvider } from '../../../contexts/themeContext/ThemeContext';
6
+ import { defaultTheme } from '../../../contexts/themeContext/utils/theme';
7
+ import { Pin } from '../../../icons/pin';
8
+ import { EmptyList } from '../EmptyList';
9
+
10
+ type EmptyListProps = React.ComponentProps<typeof EmptyList>;
11
+
12
+ const renderComponent = (props: Partial<EmptyListProps> = {}) =>
13
+ render(
14
+ <ThemeProvider theme={defaultTheme}>
15
+ <EmptyList icon={Pin} title='No pinned messages' {...props} />
16
+ </ThemeProvider>,
17
+ );
18
+
19
+ describe('EmptyList', () => {
20
+ it('renders the empty-list testID', () => {
21
+ renderComponent();
22
+ expect(screen.getByTestId('empty-list')).toBeTruthy();
23
+ });
24
+
25
+ it('renders the title text', () => {
26
+ renderComponent({ title: 'Nothing here' });
27
+ expect(screen.getByText('Nothing here')).toBeTruthy();
28
+ });
29
+
30
+ it('renders the subtitle when provided', () => {
31
+ renderComponent({ subtitle: 'Long-press a message to pin it to the chat' });
32
+ expect(screen.getByText('Long-press a message to pin it to the chat')).toBeTruthy();
33
+ });
34
+
35
+ it('does not render a subtitle when omitted', () => {
36
+ renderComponent({ subtitle: undefined });
37
+ expect(screen.queryByText('Long-press a message to pin it to the chat')).toBeNull();
38
+ });
39
+
40
+ it('honors a custom container style override from the theme', () => {
41
+ const customTheme = {
42
+ ...defaultTheme,
43
+ emptyList: {
44
+ container: { backgroundColor: 'rgb(255, 0, 0)' },
45
+ subtitle: {},
46
+ title: {},
47
+ },
48
+ };
49
+
50
+ render(
51
+ <ThemeProvider theme={customTheme}>
52
+ <EmptyList icon={Pin} title='Empty' />
53
+ </ThemeProvider>,
54
+ );
55
+
56
+ const container = screen.getByTestId('empty-list');
57
+ const flattened = Array.isArray(container.props.style)
58
+ ? Object.assign({}, ...container.props.style.flat(Infinity).filter(Boolean))
59
+ : container.props.style;
60
+ expect(flattened.backgroundColor).toBe('rgb(255, 0, 0)');
61
+ });
62
+
63
+ it('honors custom title and subtitle style overrides from the theme', () => {
64
+ const customTheme = {
65
+ ...defaultTheme,
66
+ emptyList: {
67
+ container: {},
68
+ subtitle: { color: 'rgb(0, 0, 255)' },
69
+ title: { color: 'rgb(0, 255, 0)' },
70
+ },
71
+ };
72
+
73
+ render(
74
+ <ThemeProvider theme={customTheme}>
75
+ <EmptyList icon={Pin} subtitle='Subtitle' title='Title' />
76
+ </ThemeProvider>,
77
+ );
78
+
79
+ const flatten = (node: { props: { style: unknown } }) =>
80
+ Array.isArray(node.props.style)
81
+ ? Object.assign({}, ...(node.props.style as unknown[]).flat(Infinity).filter(Boolean))
82
+ : node.props.style;
83
+
84
+ const title = screen.getByText('Title') as unknown as { props: { style: unknown } };
85
+ const subtitle = screen.getByText('Subtitle') as unknown as { props: { style: unknown } };
86
+
87
+ expect((flatten(title) as { color?: string }).color).toBe('rgb(0, 255, 0)');
88
+ expect((flatten(subtitle) as { color?: string }).color).toBe('rgb(0, 0, 255)');
89
+ });
90
+ });
@@ -1,6 +1,7 @@
1
1
  export * from './BottomSheetModal';
2
2
  export * from './ClippingFadeBottom';
3
3
  export * from './StreamBottomSheetModalFlatList';
4
+ export * from './EmptyList';
4
5
  export * from './EmptySearchResult';
5
6
  export * from './ImageBackground';
6
7
  export * from './SearchInput';
@@ -28,8 +28,8 @@ export type AvatarGroupProps = {
28
28
  // Sizes accounts for the border width as well
29
29
  const sizes = {
30
30
  '2xl': {
31
- width: 64,
32
- height: 64,
31
+ width: 80,
32
+ height: 80,
33
33
  },
34
34
  xl: {
35
35
  width: 48,
@@ -165,7 +165,7 @@ export type UserAvatarGroupProps = Pick<AvatarGroupProps, 'size'> & {
165
165
  };
166
166
 
167
167
  const userAvatarSize: Record<UserAvatarGroupProps['size'], UserAvatarProps['size']> = {
168
- '2xl': 'lg',
168
+ '2xl': 'xl',
169
169
  xl: 'md',
170
170
  lg: 'sm',
171
171
  };
@@ -7,8 +7,8 @@ import { OnlineIndicatorProps } from '../Badge';
7
7
 
8
8
  const avatarSizes = {
9
9
  '2xl': {
10
- height: 64,
11
- width: 64,
10
+ height: 80,
11
+ width: 80,
12
12
  },
13
13
  xl: {
14
14
  height: 48,
@@ -0,0 +1,67 @@
1
+ import React, { PropsWithChildren, useContext, useState } from 'react';
2
+
3
+ import { Channel, MessageSearchSource } from 'stream-chat';
4
+
5
+ import { useChatContext } from '..';
6
+ import { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';
7
+ import { isTestEnvironment } from '../utils/isTestEnvironment';
8
+
9
+ /**
10
+ * @experimental This API is experimental and is subject to change.
11
+ */
12
+ export type ChannelFileAttachmentListContextValue = {
13
+ channel: Channel;
14
+ searchSource: MessageSearchSource;
15
+ };
16
+
17
+ export const ChannelFileAttachmentListContext = React.createContext(
18
+ DEFAULT_BASE_CONTEXT_VALUE as ChannelFileAttachmentListContextValue,
19
+ );
20
+
21
+ /**
22
+ * @experimental This API is experimental and is subject to change.
23
+ */
24
+ export const ChannelFileAttachmentListProvider = ({
25
+ channel,
26
+ children,
27
+ }: PropsWithChildren<{ channel: Channel }>) => {
28
+ const { client } = useChatContext();
29
+ const [searchSource] = useState(() => {
30
+ const source = new MessageSearchSource(client, {
31
+ allowEmptySearchString: true,
32
+ pageSize: 25,
33
+ resetOnNewSearchQuery: false,
34
+ });
35
+ source.messageSearchChannelFilters = { cid: channel.cid, members: undefined };
36
+ source.messageSearchFilters = {
37
+ $or: [{ 'attachments.type': 'file' }, { 'attachments.type': 'audio' }],
38
+ };
39
+ // Newest first so the list groups cleanly under month section headers.
40
+ source.messageSearchSort = { created_at: -1 };
41
+ source.activate();
42
+ return source;
43
+ });
44
+
45
+ return (
46
+ <ChannelFileAttachmentListContext.Provider value={{ channel, searchSource }}>
47
+ {children}
48
+ </ChannelFileAttachmentListContext.Provider>
49
+ );
50
+ };
51
+
52
+ /**
53
+ * @experimental This API is experimental and is subject to change.
54
+ */
55
+ export const useChannelFileAttachmentListContext = () => {
56
+ const contextValue = useContext(
57
+ ChannelFileAttachmentListContext,
58
+ ) as unknown as ChannelFileAttachmentListContextValue;
59
+
60
+ if (contextValue === DEFAULT_BASE_CONTEXT_VALUE && !isTestEnvironment()) {
61
+ throw new Error(
62
+ 'The useChannelFileAttachmentListContext hook was called outside of the ChannelFileAttachmentListContext provider. Render the file attachment list UI inside a ChannelFileAttachmentListProvider.',
63
+ );
64
+ }
65
+
66
+ return contextValue;
67
+ };
@@ -0,0 +1,68 @@
1
+ import React, { PropsWithChildren, useContext, useState } from 'react';
2
+
3
+ import { Channel, MessageSearchSource } from 'stream-chat';
4
+
5
+ import { useChatContext } from '..';
6
+ import { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';
7
+ import { isTestEnvironment } from '../utils/isTestEnvironment';
8
+
9
+ /**
10
+ * @experimental This API is experimental and is subject to change.
11
+ */
12
+ export type ChannelMediaListContextValue = {
13
+ channel: Channel;
14
+ searchSource: MessageSearchSource;
15
+ };
16
+
17
+ export const ChannelMediaListContext = React.createContext(
18
+ DEFAULT_BASE_CONTEXT_VALUE as ChannelMediaListContextValue,
19
+ );
20
+
21
+ /**
22
+ * @experimental This API is experimental and is subject to change.
23
+ */
24
+ export const ChannelMediaListProvider = ({
25
+ channel,
26
+ children,
27
+ }: PropsWithChildren<{ channel: Channel }>) => {
28
+ const { client } = useChatContext();
29
+ const [searchSource] = useState(() => {
30
+ const source = new MessageSearchSource(client, {
31
+ allowEmptySearchString: true,
32
+ pageSize: 25,
33
+ resetOnNewSearchQuery: false,
34
+ });
35
+ source.messageSearchChannelFilters = { cid: channel.cid, members: undefined };
36
+ source.messageSearchFilters = {
37
+ 'attachments.type': { $in: ['image', 'video'] },
38
+ type: undefined,
39
+ };
40
+ // Newest media first so the grid reads top-to-bottom from most recent.
41
+ source.messageSearchSort = { created_at: -1 };
42
+ source.activate();
43
+ return source;
44
+ });
45
+
46
+ return (
47
+ <ChannelMediaListContext.Provider value={{ channel, searchSource }}>
48
+ {children}
49
+ </ChannelMediaListContext.Provider>
50
+ );
51
+ };
52
+
53
+ /**
54
+ * @experimental This API is experimental and is subject to change.
55
+ */
56
+ export const useChannelMediaListContext = () => {
57
+ const contextValue = useContext(
58
+ ChannelMediaListContext,
59
+ ) as unknown as ChannelMediaListContextValue;
60
+
61
+ if (contextValue === DEFAULT_BASE_CONTEXT_VALUE && !isTestEnvironment()) {
62
+ throw new Error(
63
+ 'The useChannelMediaListContext hook was called outside of the ChannelMediaListContext provider. Render the media list UI inside a ChannelMediaListProvider.',
64
+ );
65
+ }
66
+
67
+ return contextValue;
68
+ };
@@ -0,0 +1,72 @@
1
+ import React, { PropsWithChildren, useContext, useState } from 'react';
2
+
3
+ import { Channel, MessageSearchSource } from 'stream-chat';
4
+
5
+ import { useChatContext } from '..';
6
+ import { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';
7
+ import { isTestEnvironment } from '../utils/isTestEnvironment';
8
+
9
+ /**
10
+ * @experimental This API is experimental and is subject to change.
11
+ */
12
+ export type ChannelPinnedMessageListContextValue = {
13
+ channel: Channel;
14
+ searchSource: MessageSearchSource;
15
+ };
16
+
17
+ export const ChannelPinnedMessageListContext = React.createContext(
18
+ DEFAULT_BASE_CONTEXT_VALUE as ChannelPinnedMessageListContextValue,
19
+ );
20
+
21
+ /**
22
+ * @experimental This API is experimental and is subject to change.
23
+ */
24
+ export const ChannelPinnedMessageListProvider = ({
25
+ channel,
26
+ children,
27
+ }: PropsWithChildren<{ channel: Channel }>) => {
28
+ const { client } = useChatContext();
29
+ const [searchSource] = useState(() => {
30
+ const source = new MessageSearchSource(
31
+ client,
32
+ { pageSize: 25, allowEmptySearchString: true, resetOnNewSearchQuery: false },
33
+ {
34
+ messageSearch: {
35
+ initialFilterConfig: {
36
+ $or: {
37
+ enabled: true,
38
+ generate: ({ searchQuery }) => (searchQuery ? { text: { $q: searchQuery } } : {}),
39
+ },
40
+ },
41
+ },
42
+ },
43
+ );
44
+ source.messageSearchChannelFilters = { cid: channel.cid, members: undefined };
45
+ source.messageSearchFilters = { pinned: true, type: undefined };
46
+ source.activate();
47
+ return source;
48
+ });
49
+
50
+ return (
51
+ <ChannelPinnedMessageListContext.Provider value={{ channel, searchSource }}>
52
+ {children}
53
+ </ChannelPinnedMessageListContext.Provider>
54
+ );
55
+ };
56
+
57
+ /**
58
+ * @experimental This API is experimental and is subject to change.
59
+ */
60
+ export const useChannelPinnedMessageListContext = () => {
61
+ const contextValue = useContext(
62
+ ChannelPinnedMessageListContext,
63
+ ) as unknown as ChannelPinnedMessageListContextValue;
64
+
65
+ if (contextValue === DEFAULT_BASE_CONTEXT_VALUE && !isTestEnvironment()) {
66
+ throw new Error(
67
+ 'The useChannelPinnedMessageListContext hook was called outside of the ChannelPinnedMessageListContext provider. Render the pinned message list UI inside a ChannelPinnedMessageListProvider.',
68
+ );
69
+ }
70
+
71
+ return contextValue;
72
+ };
@@ -36,7 +36,9 @@ import {
36
36
  ChannelDetailsActionsSection,
37
37
  ChannelDetailsActionItem,
38
38
  ChannelDetailsMemberSection,
39
+ ChannelDetailsNavigationSection,
39
40
  ChannelDetailsProfile,
41
+ ChannelDetailsEditButton,
40
42
  ChannelDetailsNavHeader,
41
43
  ChannelEditDetails,
42
44
  ChannelEditImageSheet,
@@ -44,6 +46,12 @@ import {
44
46
  ChannelMemberActionsSheet,
45
47
  ChannelMemberItem,
46
48
  ChannelMemberList,
49
+ FileAttachmentItem,
50
+ FileAttachmentList,
51
+ MediaItem,
52
+ MediaList,
53
+ PinnedMessageItem,
54
+ PinnedMessageList,
47
55
  } from '../../components/ChannelDetails/components';
48
56
  import { ChannelListFooterLoadingIndicator } from '../../components/ChannelList/ChannelListFooterLoadingIndicator';
49
57
  import { ChannelListHeaderErrorIndicator } from '../../components/ChannelList/ChannelListHeaderErrorIndicator';
@@ -315,8 +323,10 @@ const components = {
315
323
  ChannelDetailsActionsSection,
316
324
  ChannelDetailsActionItem,
317
325
  ChannelDetailsMemberSection,
326
+ ChannelDetailsNavigationSection,
318
327
  ChannelDetailsProfile,
319
328
  ChannelDetailsContent,
329
+ ChannelDetailsEditButton,
320
330
  ChannelDetailsNavHeader,
321
331
  ChannelEditDetails,
322
332
  ChannelEditImageSheet,
@@ -324,6 +334,12 @@ const components = {
324
334
  ChannelMemberActionsSheet,
325
335
  ChannelMemberItem,
326
336
  ChannelMemberList,
337
+ FileAttachmentItem,
338
+ FileAttachmentList,
339
+ MediaItem,
340
+ MediaList,
341
+ PinnedMessageItem,
342
+ PinnedMessageList,
327
343
 
328
344
  // Thread
329
345
  ThreadMessageComposer: MessageComposer,
@@ -363,7 +379,6 @@ const components = {
363
379
  */
364
380
  export interface OptionalComponentOverrides {
365
381
  AttachmentPickerIOSSelectMorePhotos?: React.ComponentType;
366
- ChannelDetailsNavigationSection?: React.ComponentType;
367
382
  ChatLoadingIndicator?: React.ComponentType | null;
368
383
  CreatePollContent?: React.ComponentType;
369
384
  Input?: React.ComponentType<{
@@ -32,6 +32,9 @@ export * from './utils/getDisplayName';
32
32
  export * from './channelDetailsContext';
33
33
  export * from './channelAddMembersContext/ChannelAddMembersContext';
34
34
  export * from './channelEditDetailsContext';
35
+ export * from './channelFileAttachmentListContext/ChannelFileAttachmentListContext';
36
+ export * from './channelPinnedMessageListContext/ChannelPinnedMessageListContext';
37
+ export * from './channelMediaListContext/ChannelMediaListContext';
35
38
  export * from './pollContext';
36
39
  export * from './liveLocationManagerContext';
37
40
  export * from './audioPlayerContext/AudioPlayerContext';