stream-chat-react-native-core 4.6.1 → 4.7.0-beta.3

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 (222) hide show
  1. package/lib/commonjs/components/Attachment/Attachment.js +22 -13
  2. package/lib/commonjs/components/Attachment/Attachment.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/Card.js +23 -14
  4. package/lib/commonjs/components/Attachment/Card.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/Gallery.js +72 -37
  6. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  7. package/lib/commonjs/components/Attachment/VideoThumbnail.js +83 -0
  8. package/lib/commonjs/components/Attachment/VideoThumbnail.js.map +1 -0
  9. package/lib/commonjs/components/Attachment/hooks/useGoToURL.js +1 -1
  10. package/lib/commonjs/components/Attachment/hooks/useGoToURL.js.map +1 -1
  11. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js +1 -0
  12. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  13. package/lib/commonjs/components/Attachment/utils/getAspectRatio.js +5 -5
  14. package/lib/commonjs/components/Attachment/utils/getAspectRatio.js.map +1 -1
  15. package/lib/commonjs/components/Channel/Channel.js +19 -14
  16. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  17. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +4 -2
  18. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  19. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js +43 -28
  20. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js.map +1 -1
  21. package/lib/commonjs/components/Chat/hooks/useIsOnline.js +6 -6
  22. package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
  23. package/lib/commonjs/components/ImageGallery/ImageGallery.js +167 -345
  24. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  25. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js +4 -4
  26. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
  27. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js +225 -0
  28. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -0
  29. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +102 -40
  30. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  31. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js +145 -0
  32. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -0
  33. package/lib/commonjs/components/ImageGallery/components/ImageGrid.js +31 -34
  34. package/lib/commonjs/components/ImageGallery/components/ImageGrid.js.map +1 -1
  35. package/lib/commonjs/components/ImageGallery/components/ProgressControl.js +153 -0
  36. package/lib/commonjs/components/ImageGallery/components/ProgressControl.js.map +1 -0
  37. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js +373 -0
  38. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -0
  39. package/lib/commonjs/components/Message/Message.js +23 -13
  40. package/lib/commonjs/components/Message/Message.js.map +1 -1
  41. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js +22 -15
  42. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  43. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +4 -2
  44. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  45. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +25 -23
  46. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
  47. package/lib/commonjs/components/Reply/Reply.js +32 -12
  48. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  49. package/lib/commonjs/components/Spinner/Spinner.js +12 -4
  50. package/lib/commonjs/components/Spinner/Spinner.js.map +1 -1
  51. package/lib/commonjs/components/index.js +26 -0
  52. package/lib/commonjs/components/index.js.map +1 -1
  53. package/lib/commonjs/contexts/messageContext/MessageContext.js +2 -2
  54. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  55. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +15 -4
  56. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  57. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  58. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  59. package/lib/commonjs/contexts/messagesContext/MessagesContext.js +2 -2
  60. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  61. package/lib/commonjs/contexts/themeContext/utils/theme.js +10 -1
  62. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  63. package/lib/commonjs/icons/Pause.js +61 -0
  64. package/lib/commonjs/icons/Pause.js.map +1 -0
  65. package/lib/commonjs/icons/Play.js +42 -0
  66. package/lib/commonjs/icons/Play.js.map +1 -0
  67. package/lib/commonjs/icons/index.js +26 -0
  68. package/lib/commonjs/icons/index.js.map +1 -1
  69. package/lib/commonjs/mock-builders/api/queryMembers.js +98 -1
  70. package/lib/commonjs/mock-builders/api/queryMembers.js.map +1 -1
  71. package/lib/commonjs/native.js +7 -1
  72. package/lib/commonjs/native.js.map +1 -1
  73. package/lib/commonjs/utils/getUrlOfImageAttachment.js +1 -1
  74. package/lib/commonjs/utils/getUrlOfImageAttachment.js.map +1 -1
  75. package/lib/commonjs/version.json +1 -1
  76. package/lib/module/components/Attachment/Attachment.js +22 -13
  77. package/lib/module/components/Attachment/Attachment.js.map +1 -1
  78. package/lib/module/components/Attachment/Card.js +23 -14
  79. package/lib/module/components/Attachment/Card.js.map +1 -1
  80. package/lib/module/components/Attachment/Gallery.js +72 -37
  81. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  82. package/lib/module/components/Attachment/VideoThumbnail.js +83 -0
  83. package/lib/module/components/Attachment/VideoThumbnail.js.map +1 -0
  84. package/lib/module/components/Attachment/hooks/useGoToURL.js +1 -1
  85. package/lib/module/components/Attachment/hooks/useGoToURL.js.map +1 -1
  86. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js +1 -0
  87. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  88. package/lib/module/components/Attachment/utils/getAspectRatio.js +5 -5
  89. package/lib/module/components/Attachment/utils/getAspectRatio.js.map +1 -1
  90. package/lib/module/components/Channel/Channel.js +19 -14
  91. package/lib/module/components/Channel/Channel.js.map +1 -1
  92. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +4 -2
  93. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  94. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js +43 -28
  95. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js.map +1 -1
  96. package/lib/module/components/Chat/hooks/useIsOnline.js +6 -6
  97. package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
  98. package/lib/module/components/ImageGallery/ImageGallery.js +167 -345
  99. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  100. package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js +4 -4
  101. package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
  102. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js +225 -0
  103. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -0
  104. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +102 -40
  105. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  106. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js +145 -0
  107. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -0
  108. package/lib/module/components/ImageGallery/components/ImageGrid.js +31 -34
  109. package/lib/module/components/ImageGallery/components/ImageGrid.js.map +1 -1
  110. package/lib/module/components/ImageGallery/components/ProgressControl.js +153 -0
  111. package/lib/module/components/ImageGallery/components/ProgressControl.js.map +1 -0
  112. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js +373 -0
  113. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -0
  114. package/lib/module/components/Message/Message.js +23 -13
  115. package/lib/module/components/Message/Message.js.map +1 -1
  116. package/lib/module/components/Message/MessageSimple/utils/renderText.js +22 -15
  117. package/lib/module/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  118. package/lib/module/components/Message/hooks/useCreateMessageContext.js +4 -2
  119. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  120. package/lib/module/components/MessageOverlay/MessageOverlay.js +25 -23
  121. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
  122. package/lib/module/components/Reply/Reply.js +32 -12
  123. package/lib/module/components/Reply/Reply.js.map +1 -1
  124. package/lib/module/components/Spinner/Spinner.js +12 -4
  125. package/lib/module/components/Spinner/Spinner.js.map +1 -1
  126. package/lib/module/components/index.js +26 -0
  127. package/lib/module/components/index.js.map +1 -1
  128. package/lib/module/contexts/messageContext/MessageContext.js +2 -2
  129. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  130. package/lib/module/contexts/messageInputContext/MessageInputContext.js +15 -4
  131. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  132. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  133. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  134. package/lib/module/contexts/messagesContext/MessagesContext.js +2 -2
  135. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  136. package/lib/module/contexts/themeContext/utils/theme.js +10 -1
  137. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  138. package/lib/module/icons/Pause.js +61 -0
  139. package/lib/module/icons/Pause.js.map +1 -0
  140. package/lib/module/icons/Play.js +42 -0
  141. package/lib/module/icons/Play.js.map +1 -0
  142. package/lib/module/icons/index.js +26 -0
  143. package/lib/module/icons/index.js.map +1 -1
  144. package/lib/module/mock-builders/api/queryMembers.js +98 -1
  145. package/lib/module/mock-builders/api/queryMembers.js.map +1 -1
  146. package/lib/module/native.js +7 -1
  147. package/lib/module/native.js.map +1 -1
  148. package/lib/module/utils/getUrlOfImageAttachment.js +1 -1
  149. package/lib/module/utils/getUrlOfImageAttachment.js.map +1 -1
  150. package/lib/module/version.json +1 -1
  151. package/lib/typescript/components/Attachment/Gallery.d.ts +1 -1
  152. package/lib/typescript/components/Attachment/VideoThumbnail.d.ts +4 -0
  153. package/lib/typescript/components/Attachment/utils/buildGallery/types.d.ts +1 -0
  154. package/lib/typescript/components/Attachment/utils/getAspectRatio.d.ts +1 -1
  155. package/lib/typescript/components/Channel/Channel.d.ts +1 -1
  156. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
  157. package/lib/typescript/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayName.test.d.ts +1 -0
  158. package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewDisplayName.d.ts +4 -4
  159. package/lib/typescript/components/Chat/hooks/useIsOnline.d.ts +1 -1
  160. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts +2 -0
  161. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts +27 -0
  162. package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts +18 -2
  163. package/lib/typescript/components/ImageGallery/components/ImageGalleryVideoControl.d.ts +3 -0
  164. package/lib/typescript/components/ImageGallery/components/ProgressControl.d.ts +5 -0
  165. package/lib/typescript/components/ImageGallery/hooks/useImageGalleryGestures.d.ts +36 -0
  166. package/lib/typescript/components/Message/Message.d.ts +9 -3
  167. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
  168. package/lib/typescript/components/Spinner/Spinner.d.ts +7 -1
  169. package/lib/typescript/components/index.d.ts +2 -0
  170. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +3 -1
  171. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +1 -0
  172. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +2 -0
  173. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +9 -0
  174. package/lib/typescript/icons/Pause.d.ts +3 -0
  175. package/lib/typescript/icons/Play.d.ts +3 -0
  176. package/lib/typescript/icons/index.d.ts +2 -0
  177. package/lib/typescript/mock-builders/api/queryMembers.d.ts +161 -0
  178. package/lib/typescript/mock-builders/api/utils.d.ts +7 -0
  179. package/lib/typescript/mock-builders/generator/user.d.ts +30 -0
  180. package/lib/typescript/mock-builders/mock.d.ts +3 -0
  181. package/lib/typescript/native.d.ts +66 -1
  182. package/package.json +1 -1
  183. package/src/components/Attachment/Attachment.tsx +11 -7
  184. package/src/components/Attachment/Card.tsx +3 -0
  185. package/src/components/Attachment/Gallery.tsx +75 -36
  186. package/src/components/Attachment/VideoThumbnail.tsx +45 -0
  187. package/src/components/Attachment/hooks/useGoToURL.ts +1 -1
  188. package/src/components/Attachment/utils/buildGallery/buildThumbnail.ts +1 -0
  189. package/src/components/Attachment/utils/buildGallery/types.ts +1 -0
  190. package/src/components/Attachment/utils/getAspectRatio.ts +7 -5
  191. package/src/components/Channel/Channel.tsx +4 -0
  192. package/src/components/Channel/hooks/useCreateMessagesContext.ts +2 -0
  193. package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayName.test.tsx +83 -0
  194. package/src/components/ChannelPreview/hooks/useChannelPreviewDisplayName.ts +43 -26
  195. package/src/components/Chat/hooks/useIsOnline.ts +7 -7
  196. package/src/components/ImageGallery/ImageGallery.tsx +145 -667
  197. package/src/components/ImageGallery/components/AnimatedGalleryImage.tsx +4 -4
  198. package/src/components/ImageGallery/components/AnimatedGalleryVideo.tsx +224 -0
  199. package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +114 -19
  200. package/src/components/ImageGallery/components/ImageGalleryVideoControl.tsx +103 -0
  201. package/src/components/ImageGallery/components/ImageGrid.tsx +12 -25
  202. package/src/components/ImageGallery/components/ProgressControl.tsx +107 -0
  203. package/src/components/ImageGallery/hooks/useImageGalleryGestures.tsx +722 -0
  204. package/src/components/Message/Message.tsx +18 -7
  205. package/src/components/Message/MessageSimple/utils/renderText.tsx +6 -1
  206. package/src/components/Message/hooks/useCreateMessageContext.ts +2 -0
  207. package/src/components/MessageOverlay/MessageOverlay.tsx +2 -0
  208. package/src/components/Reply/Reply.tsx +36 -23
  209. package/src/components/Spinner/Spinner.tsx +11 -4
  210. package/src/components/index.ts +2 -0
  211. package/src/contexts/messageContext/MessageContext.tsx +2 -0
  212. package/src/contexts/messageInputContext/MessageInputContext.tsx +11 -0
  213. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +1 -0
  214. package/src/contexts/messagesContext/MessagesContext.tsx +2 -0
  215. package/src/contexts/themeContext/utils/theme.ts +18 -0
  216. package/src/icons/Pause.tsx +14 -0
  217. package/src/icons/Play.tsx +17 -0
  218. package/src/icons/index.ts +2 -0
  219. package/src/mock-builders/api/queryMembers.js +98 -0
  220. package/src/native.ts +59 -1
  221. package/src/utils/getUrlOfImageAttachment.ts +1 -1
  222. package/src/version.json +1 -1
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.Gallery = void 0;
9
9
 
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
10
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
13
 
12
14
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -73,6 +75,9 @@ var styles = _reactNative.StyleSheet.create({
73
75
  overflow: 'hidden'
74
76
  },
75
77
  imageContainer: {
78
+ display: 'flex',
79
+ flexDirection: 'row',
80
+ justifyContent: 'center',
76
81
  padding: 1
77
82
  },
78
83
  moreImagesContainer: {
@@ -102,7 +107,9 @@ var GalleryWithContext = function GalleryWithContext(props) {
102
107
  setImage = props.setImage,
103
108
  setImages = props.setImages,
104
109
  setOverlay = props.setOverlay,
105
- threadList = props.threadList;
110
+ threadList = props.threadList,
111
+ videos = props.videos,
112
+ VideoThumbnail = props.VideoThumbnail;
106
113
 
107
114
  var _useTheme = (0, _ThemeContext.useTheme)(),
108
115
  _useTheme$theme = _useTheme.theme,
@@ -129,19 +136,20 @@ var GalleryWithContext = function GalleryWithContext(props) {
129
136
  minHeight: minHeight,
130
137
  minWidth: minWidth
131
138
  };
139
+ var imagesAndVideos = [].concat((0, _toConsumableArray2["default"])(images || []), (0, _toConsumableArray2["default"])(videos || []));
132
140
 
133
141
  var _useMemo = (0, _react.useMemo)(function () {
134
142
  return (0, _buildGallery.buildGallery)({
135
- images: images,
143
+ images: imagesAndVideos,
136
144
  sizeConfig: sizeConfig
137
145
  });
138
- }, [images.length]),
146
+ }, [imagesAndVideos.length]),
139
147
  height = _useMemo.height,
140
148
  invertedDirections = _useMemo.invertedDirections,
141
149
  thumbnailGrid = _useMemo.thumbnailGrid,
142
150
  width = _useMemo.width;
143
151
 
144
- if (!(images != null && images.length)) return null;
152
+ if (!(imagesAndVideos != null && imagesAndVideos.length)) return null;
145
153
  var messageText = message == null ? void 0 : message.text;
146
154
  var messageId = message == null ? void 0 : message.id;
147
155
  var numOfColumns = thumbnailGrid.length;
@@ -156,7 +164,7 @@ var GalleryWithContext = function GalleryWithContext(props) {
156
164
  __self: _this,
157
165
  __source: {
158
166
  fileName: _jsxFileName,
159
- lineNumber: 176,
167
+ lineNumber: 180,
160
168
  columnNumber: 5
161
169
  }
162
170
  }, thumbnailGrid.map(function (rows, colIndex) {
@@ -170,12 +178,13 @@ var GalleryWithContext = function GalleryWithContext(props) {
170
178
  __self: _this,
171
179
  __source: {
172
180
  fileName: _jsxFileName,
173
- lineNumber: 193,
181
+ lineNumber: 197,
174
182
  columnNumber: 11
175
183
  }
176
184
  }, rows.map(function (_ref, rowIndex) {
177
185
  var height = _ref.height,
178
186
  resizeMode = _ref.resizeMode,
187
+ type = _ref.type,
179
188
  url = _ref.url,
180
189
  width = _ref.width;
181
190
 
@@ -196,10 +205,25 @@ var GalleryWithContext = function GalleryWithContext(props) {
196
205
  }
197
206
  };
198
207
 
208
+ var borderRadius = (0, _getGalleryImageBorderRadius.getGalleryImageBorderRadius)({
209
+ alignment: alignment,
210
+ colIndex: colIndex,
211
+ groupStyles: groupStyles,
212
+ hasThreadReplies: hasThreadReplies,
213
+ height: height,
214
+ invertedDirections: invertedDirections,
215
+ messageText: messageText,
216
+ numOfColumns: numOfColumns,
217
+ numOfRows: numOfRows,
218
+ rowIndex: rowIndex,
219
+ sizeConfig: sizeConfig,
220
+ threadList: threadList,
221
+ width: width
222
+ });
199
223
  return _react["default"].createElement(_reactNative.TouchableOpacity, (0, _extends2["default"])({
200
224
  activeOpacity: 0.8,
201
225
  disabled: preventPress,
202
- key: "gallery-item-" + messageId + "/" + colIndex + "/" + rowIndex + "/" + images.length,
226
+ key: "gallery-item-" + messageId + "/" + colIndex + "/" + rowIndex + "/" + imagesAndVideos.length,
203
227
  onLongPress: function onLongPress(event) {
204
228
  if (_onLongPress) {
205
229
  _onLongPress({
@@ -235,26 +259,23 @@ var GalleryWithContext = function GalleryWithContext(props) {
235
259
  __self: _this,
236
260
  __source: {
237
261
  fileName: _jsxFileName,
238
- lineNumber: 218,
262
+ lineNumber: 239,
239
263
  columnNumber: 17
240
264
  }
241
- }), _react["default"].createElement(MemoizedGalleryImage, {
265
+ }), type === 'video' ? _react["default"].createElement(VideoThumbnail, {
266
+ style: [borderRadius, image, {
267
+ height: height - 1,
268
+ width: width - 1
269
+ }],
270
+ __self: _this,
271
+ __source: {
272
+ fileName: _jsxFileName,
273
+ lineNumber: 283,
274
+ columnNumber: 21
275
+ }
276
+ }) : _react["default"].createElement(MemoizedGalleryImage, {
242
277
  resizeMode: resizeMode,
243
- style: [(0, _getGalleryImageBorderRadius.getGalleryImageBorderRadius)({
244
- alignment: alignment,
245
- colIndex: colIndex,
246
- groupStyles: groupStyles,
247
- hasThreadReplies: hasThreadReplies,
248
- height: height,
249
- invertedDirections: invertedDirections,
250
- messageText: messageText,
251
- numOfColumns: numOfColumns,
252
- numOfRows: numOfRows,
253
- rowIndex: rowIndex,
254
- sizeConfig: sizeConfig,
255
- threadList: threadList,
256
- width: width
257
- }), image, {
278
+ style: [borderRadius, image, {
258
279
  height: height - 1,
259
280
  width: width - 1
260
281
  }],
@@ -262,17 +283,17 @@ var GalleryWithContext = function GalleryWithContext(props) {
262
283
  __self: _this,
263
284
  __source: {
264
285
  fileName: _jsxFileName,
265
- lineNumber: 261,
266
- columnNumber: 19
286
+ lineNumber: 294,
287
+ columnNumber: 21
267
288
  }
268
- }), colIndex === numOfColumns - 1 && rowIndex === numOfRows - 1 && images.length > 4 ? _react["default"].createElement(_reactNative.View, {
289
+ }), colIndex === numOfColumns - 1 && rowIndex === numOfRows - 1 && imagesAndVideos.length > 4 ? _react["default"].createElement(_reactNative.View, {
269
290
  style: [_reactNative.StyleSheet.absoluteFillObject, styles.moreImagesContainer, {
270
291
  backgroundColor: overlay
271
292
  }, moreImagesContainer],
272
293
  __self: _this,
273
294
  __source: {
274
295
  fileName: _jsxFileName,
275
- lineNumber: 290,
296
+ lineNumber: 310,
276
297
  columnNumber: 21
277
298
  }
278
299
  }, _react["default"].createElement(_reactNative.Text, {
@@ -280,10 +301,10 @@ var GalleryWithContext = function GalleryWithContext(props) {
280
301
  __self: _this,
281
302
  __source: {
282
303
  fileName: _jsxFileName,
283
- lineNumber: 298,
304
+ lineNumber: 318,
284
305
  columnNumber: 23
285
306
  }
286
- }, "+" + (images.length - 4))) : null);
307
+ }, "+" + (imagesAndVideos.length - 4))) : null);
287
308
  }));
288
309
  }));
289
310
  };
@@ -292,11 +313,13 @@ var areEqual = function areEqual(prevProps, nextProps) {
292
313
  var prevGroupStyles = prevProps.groupStyles,
293
314
  prevHasThreadReplies = prevProps.hasThreadReplies,
294
315
  prevImages = prevProps.images,
295
- prevMessage = prevProps.message;
316
+ prevMessage = prevProps.message,
317
+ prevVideos = prevProps.videos;
296
318
  var nextGroupStyles = nextProps.groupStyles,
297
319
  nextHasThreadReplies = nextProps.hasThreadReplies,
298
320
  nextImages = nextProps.images,
299
- nextMessage = nextProps.message;
321
+ nextMessage = nextProps.message,
322
+ nextVideos = nextProps.videos;
300
323
  var messageEqual = (prevMessage == null ? void 0 : prevMessage.id) === (nextMessage == null ? void 0 : nextMessage.id);
301
324
  if (!messageEqual) return false;
302
325
  var groupStylesEqual = prevGroupStyles.length === nextGroupStyles.length && prevGroupStyles[0] === nextGroupStyles[0];
@@ -307,6 +330,10 @@ var areEqual = function areEqual(prevProps, nextProps) {
307
330
  return (0, _utils.getUrlWithoutParams)(image.image_url) === (0, _utils.getUrlWithoutParams)(nextImages[index].image_url) && (0, _utils.getUrlWithoutParams)(image.thumb_url) === (0, _utils.getUrlWithoutParams)(nextImages[index].thumb_url);
308
331
  });
309
332
  if (!imagesEqual) return false;
333
+ var videosEqual = prevVideos.length === nextVideos.length && prevVideos.every(function (image, index) {
334
+ return (0, _utils.getUrlWithoutParams)(image.image_url) === (0, _utils.getUrlWithoutParams)(nextVideos[index].image_url) && (0, _utils.getUrlWithoutParams)(image.thumb_url) === (0, _utils.getUrlWithoutParams)(nextVideos[index].thumb_url);
335
+ });
336
+ if (!videosEqual) return false;
310
337
  return true;
311
338
  };
312
339
 
@@ -324,7 +351,9 @@ var Gallery = function Gallery(props) {
324
351
  propPreventPress = props.preventPress,
325
352
  propSetImage = props.setImage,
326
353
  propSetOverlay = props.setOverlay,
327
- propThreadList = props.threadList;
354
+ propThreadList = props.threadList,
355
+ propVideos = props.videos,
356
+ PropVideoThumbnail = props.VideoThumbnail;
328
357
 
329
358
  var _useImageGalleryConte = (0, _ImageGalleryContext.useImageGalleryContext)(),
330
359
  contextSetImage = _useImageGalleryConte.setImage,
@@ -339,17 +368,20 @@ var Gallery = function Gallery(props) {
339
368
  contextOnPress = _useMessageContext.onPress,
340
369
  contextOnPressIn = _useMessageContext.onPressIn,
341
370
  contextPreventPress = _useMessageContext.preventPress,
342
- contextThreadList = _useMessageContext.threadList;
371
+ contextThreadList = _useMessageContext.threadList,
372
+ contextVideos = _useMessageContext.videos;
343
373
 
344
374
  var _useMessagesContext = (0, _MessagesContext.useMessagesContext)(),
345
375
  contextAdditionalTouchableProps = _useMessagesContext.additionalTouchableProps,
346
- legacyImageViewerSwipeBehaviour = _useMessagesContext.legacyImageViewerSwipeBehaviour;
376
+ legacyImageViewerSwipeBehaviour = _useMessagesContext.legacyImageViewerSwipeBehaviour,
377
+ ContextVideoThumnbnail = _useMessagesContext.VideoThumbnail;
347
378
 
348
379
  var _useOverlayContext = (0, _OverlayContext.useOverlayContext)(),
349
380
  contextSetOverlay = _useOverlayContext.setOverlay;
350
381
 
351
382
  var images = propImages || contextImages;
352
- if (!images.length) return null;
383
+ var videos = propVideos || contextVideos;
384
+ if (!images.length && !videos.length) return null;
353
385
  var additionalTouchableProps = propAdditionalTouchableProps || contextAdditionalTouchableProps;
354
386
  var alignment = propAlignment || contextAlignment;
355
387
  var groupStyles = propGroupStyles || contextGroupStyles;
@@ -360,6 +392,7 @@ var Gallery = function Gallery(props) {
360
392
  var setImage = propSetImage || contextSetImage;
361
393
  var setOverlay = propSetOverlay || contextSetOverlay;
362
394
  var threadList = propThreadList || contextThreadList;
395
+ var VideoThumbnail = PropVideoThumbnail || ContextVideoThumnbnail;
363
396
  return _react["default"].createElement(MemoizedGallery, {
364
397
  additionalTouchableProps: additionalTouchableProps,
365
398
  alignment: alignment,
@@ -377,10 +410,12 @@ var Gallery = function Gallery(props) {
377
410
  setImages: setImages,
378
411
  setOverlay: setOverlay,
379
412
  threadList: threadList,
413
+ videos: videos,
414
+ VideoThumbnail: VideoThumbnail,
380
415
  __self: _this,
381
416
  __source: {
382
417
  fileName: _jsxFileName,
383
- lineNumber: 416,
418
+ lineNumber: 453,
384
419
  columnNumber: 5
385
420
  }
386
421
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["Gallery.tsx"],"names":["GalleryImage","props","uri","rest","MemoizedGalleryImage","React","memo","prevProps","nextProps","styles","StyleSheet","create","flex","galleryContainer","borderTopLeftRadius","borderTopRightRadius","flexDirection","flexWrap","overflow","imageContainer","padding","moreImagesContainer","alignItems","justifyContent","margin","moreImagesText","color","fontSize","fontWeight","GalleryWithContext","additionalTouchableProps","alignment","groupStyles","hasThreadReplies","images","legacyImageViewerSwipeBehaviour","message","onLongPress","onPress","onPressIn","preventPress","setImage","setImages","setOverlay","threadList","theme","overlay","colors","messageSimple","gallery","galleryItemColumn","gridHeight","gridWidth","image","maxHeight","maxWidth","minHeight","minWidth","sizeConfig","length","height","invertedDirections","thumbnailGrid","width","messageText","text","messageId","id","numOfColumns","map","rows","colIndex","numOfRows","rowIndex","resizeMode","url","defaultOnPress","event","emitter","defaultHandler","absoluteFillObject","backgroundColor","areEqual","prevGroupStyles","prevHasThreadReplies","prevImages","prevMessage","nextGroupStyles","nextHasThreadReplies","nextImages","nextMessage","messageEqual","groupStylesEqual","hasThreadRepliesEqual","imagesEqual","every","index","image_url","thumb_url","MemoizedGallery","Gallery","propAdditionalTouchableProps","propAlignment","propGroupStyles","propImages","propOnLongPress","propOnPress","propOnPressIn","propPreventPress","propSetImage","propSetOverlay","propThreadList","contextSetImage","contextAlignment","contextGroupStyles","contextImages","contextOnLongPress","contextOnPress","contextOnPressIn","contextPreventPress","contextThreadList","contextAdditionalTouchableProps","contextSetOverlay","channelId","cid","reply_count","displayName"],"mappings":"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","sourcesContent":["import React, { useMemo } from 'react';\nimport { Image, ImageProps, StyleSheet, Text, TouchableOpacity, View } from 'react-native';\n\nimport { buildGallery } from './utils/buildGallery/buildGallery';\n\nimport { getGalleryImageBorderRadius } from './utils/getGalleryImageBorderRadius';\n\nimport type { MessageType } from '../../components/MessageList/hooks/useMessageList';\nimport {\n ImageGalleryContextValue,\n useImageGalleryContext,\n} from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport {\n OverlayContextValue,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getUrlWithoutParams, makeImageCompatibleUrl } from '../../utils/utils';\n\nconst GalleryImage: React.FC<\n Omit<ImageProps, 'height' | 'source'> & {\n uri: string;\n }\n> = (props) => {\n const { uri, ...rest } = props;\n\n return (\n <Image\n {...rest}\n source={{\n uri: makeImageCompatibleUrl(uri),\n }}\n testID='image-attachment-single'\n />\n );\n};\n\nconst MemoizedGalleryImage = React.memo(\n GalleryImage,\n (prevProps, nextProps) =>\n getUrlWithoutParams(prevProps.uri) === getUrlWithoutParams(nextProps.uri),\n) as typeof GalleryImage;\n\nconst styles = StyleSheet.create({\n flex: { flex: 1 },\n galleryContainer: {\n borderTopLeftRadius: 13,\n borderTopRightRadius: 13,\n flexDirection: 'row',\n flexWrap: 'wrap',\n overflow: 'hidden',\n },\n imageContainer: { padding: 1 },\n moreImagesContainer: {\n alignItems: 'center',\n justifyContent: 'center',\n margin: 1,\n },\n moreImagesText: { color: '#FFFFFF', fontSize: 26, fontWeight: '700' },\n});\n\nexport type GalleryPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ImageGalleryContextValue<StreamChatGenerics>, 'setImage' | 'setImages'> &\n Pick<\n MessageContextValue<StreamChatGenerics>,\n | 'alignment'\n | 'groupStyles'\n | 'images'\n | 'onLongPress'\n | 'onPress'\n | 'onPressIn'\n | 'preventPress'\n | 'threadList'\n > &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n 'additionalTouchableProps' | 'legacyImageViewerSwipeBehaviour'\n > &\n Pick<OverlayContextValue, 'setOverlay'> & {\n channelId: string | undefined;\n hasThreadReplies?: boolean;\n /**\n * `message` prop has been introduced here as part of `legacyImageViewerSwipeBehaviour` prop.\n * https://github.com/GetStream/stream-chat-react-native/commit/d5eac6193047916f140efe8e396a671675c9a63f\n * messageId and messageText may seem redundant now, but to avoid breaking change as part\n * of minor release, we are keeping those props.\n *\n * Also `message` type should ideally be imported from MessageContextValue and not be explicitely mentioned\n * here, but due to some circular dependencies within the SDK, it causes \"exccesive deep nesting\" issue with\n * typescript within Channel component. We should take it as a mini-project and resolve all these circular imports.\n *\n * TODO: Fix circular dependencies of imports\n */\n message?: MessageType<StreamChatGenerics>;\n };\n\nconst GalleryWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: GalleryPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps,\n alignment,\n groupStyles,\n hasThreadReplies,\n images,\n legacyImageViewerSwipeBehaviour,\n message,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n setImage,\n setImages,\n setOverlay,\n threadList,\n } = props;\n\n const {\n theme: {\n colors: { overlay },\n messageSimple: {\n gallery: {\n galleryContainer,\n galleryItemColumn,\n gridHeight,\n gridWidth,\n image,\n imageContainer,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n moreImagesContainer,\n moreImagesText,\n },\n },\n },\n } = useTheme();\n\n const sizeConfig = {\n gridHeight,\n gridWidth,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n };\n\n const { height, invertedDirections, thumbnailGrid, width } = useMemo(\n () =>\n buildGallery({\n images,\n sizeConfig,\n }),\n [images.length],\n );\n\n if (!images?.length) return null;\n const messageText = message?.text;\n const messageId = message?.id;\n const numOfColumns = thumbnailGrid.length;\n\n return (\n <View\n style={[\n styles.galleryContainer,\n {\n height,\n width,\n },\n galleryContainer,\n {\n flexDirection: invertedDirections ? 'column' : 'row',\n },\n ]}\n testID='gallery-container'\n >\n {thumbnailGrid.map((rows, colIndex) => {\n const numOfRows = rows.length;\n return (\n <View\n key={`gallery-${invertedDirections ? 'row' : 'column'}-${colIndex}`}\n style={[\n {\n flexDirection: invertedDirections ? 'row' : 'column',\n },\n galleryItemColumn,\n ]}\n testID={`gallery-${invertedDirections ? 'row' : 'column'}-${colIndex}`}\n >\n {rows.map(({ height, resizeMode, url, width }, rowIndex) => {\n const defaultOnPress = () => {\n // Added if-else to keep the logic readable, instead of DRY.\n // if - legacyImageViewerSwipeBehaviour is disabled\n // else - legacyImageViewerSwipeBehaviour is enabled\n if (!legacyImageViewerSwipeBehaviour && message) {\n setImages([message]);\n setImage({ messageId: message.id, url });\n setOverlay('gallery');\n } else if (legacyImageViewerSwipeBehaviour) {\n setImage({ messageId: message?.id, url });\n setOverlay('gallery');\n }\n };\n return (\n <TouchableOpacity\n activeOpacity={0.8}\n disabled={preventPress}\n key={`gallery-item-${messageId}/${colIndex}/${rowIndex}/${images.length}`}\n onLongPress={(event) => {\n if (onLongPress) {\n onLongPress({\n emitter: 'gallery',\n event,\n });\n }\n }}\n onPress={(event) => {\n if (onPress) {\n onPress({\n defaultHandler: defaultOnPress,\n emitter: 'gallery',\n event,\n });\n }\n }}\n onPressIn={(event) => {\n if (onPressIn) {\n onPressIn({\n defaultHandler: defaultOnPress,\n emitter: 'gallery',\n event,\n });\n }\n }}\n style={[\n styles.imageContainer,\n {\n height,\n width,\n },\n imageContainer,\n ]}\n testID={`gallery-${\n invertedDirections ? 'row' : 'column'\n }-${colIndex}-item-${rowIndex}`}\n {...additionalTouchableProps}\n >\n <MemoizedGalleryImage\n resizeMode={resizeMode}\n style={[\n getGalleryImageBorderRadius({\n alignment,\n colIndex,\n groupStyles,\n hasThreadReplies,\n height,\n invertedDirections,\n messageText,\n numOfColumns,\n numOfRows,\n rowIndex,\n sizeConfig,\n threadList,\n width,\n }),\n image,\n {\n height: height - 1,\n width: width - 1,\n },\n ]}\n uri={url}\n />\n {colIndex === numOfColumns - 1 &&\n rowIndex === numOfRows - 1 &&\n images.length > 4 ? (\n <View\n style={[\n StyleSheet.absoluteFillObject,\n styles.moreImagesContainer,\n { backgroundColor: overlay },\n moreImagesContainer,\n ]}\n >\n <Text style={[styles.moreImagesText, moreImagesText]}>\n {`+${images.length - 4}`}\n </Text>\n </View>\n ) : null}\n </TouchableOpacity>\n );\n })}\n </View>\n );\n })}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: GalleryPropsWithContext<StreamChatGenerics>,\n nextProps: GalleryPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n groupStyles: prevGroupStyles,\n hasThreadReplies: prevHasThreadReplies,\n images: prevImages,\n message: prevMessage,\n } = prevProps;\n const {\n groupStyles: nextGroupStyles,\n hasThreadReplies: nextHasThreadReplies,\n images: nextImages,\n message: nextMessage,\n } = nextProps;\n\n const messageEqual = prevMessage?.id === nextMessage?.id;\n if (!messageEqual) return false;\n\n const groupStylesEqual =\n prevGroupStyles.length === nextGroupStyles.length && prevGroupStyles[0] === nextGroupStyles[0];\n if (!groupStylesEqual) return false;\n\n const hasThreadRepliesEqual = prevHasThreadReplies === nextHasThreadReplies;\n if (!hasThreadRepliesEqual) return false;\n\n const imagesEqual =\n prevImages.length === nextImages.length &&\n prevImages.every(\n (image, index) =>\n getUrlWithoutParams(image.image_url) === getUrlWithoutParams(nextImages[index].image_url) &&\n getUrlWithoutParams(image.thumb_url) === getUrlWithoutParams(nextImages[index].thumb_url),\n );\n if (!imagesEqual) return false;\n\n return true;\n};\n\nconst MemoizedGallery = React.memo(GalleryWithContext, areEqual) as typeof GalleryWithContext;\n\nexport type GalleryProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<GalleryPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI component for card in attachments.\n */\nexport const Gallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: GalleryProps<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps: propAdditionalTouchableProps,\n alignment: propAlignment,\n groupStyles: propGroupStyles,\n hasThreadReplies,\n images: propImages,\n onLongPress: propOnLongPress,\n onPress: propOnPress,\n onPressIn: propOnPressIn,\n preventPress: propPreventPress,\n setImage: propSetImage,\n setOverlay: propSetOverlay,\n threadList: propThreadList,\n } = props;\n\n const { setImage: contextSetImage, setImages } = useImageGalleryContext<StreamChatGenerics>();\n const {\n alignment: contextAlignment,\n groupStyles: contextGroupStyles,\n images: contextImages,\n message,\n onLongPress: contextOnLongPress,\n onPress: contextOnPress,\n onPressIn: contextOnPressIn,\n preventPress: contextPreventPress,\n threadList: contextThreadList,\n } = useMessageContext<StreamChatGenerics>();\n const {\n additionalTouchableProps: contextAdditionalTouchableProps,\n legacyImageViewerSwipeBehaviour,\n } = useMessagesContext<StreamChatGenerics>();\n const { setOverlay: contextSetOverlay } = useOverlayContext();\n\n const images = propImages || contextImages;\n\n if (!images.length) return null;\n\n const additionalTouchableProps = propAdditionalTouchableProps || contextAdditionalTouchableProps;\n const alignment = propAlignment || contextAlignment;\n const groupStyles = propGroupStyles || contextGroupStyles;\n const onLongPress = propOnLongPress || contextOnLongPress;\n const onPressIn = propOnPressIn || contextOnPressIn;\n const onPress = propOnPress || contextOnPress;\n const preventPress =\n typeof propPreventPress === 'boolean' ? propPreventPress : contextPreventPress;\n const setImage = propSetImage || contextSetImage;\n const setOverlay = propSetOverlay || contextSetOverlay;\n const threadList = propThreadList || contextThreadList;\n\n return (\n <MemoizedGallery\n {...{\n additionalTouchableProps,\n alignment,\n channelId: message?.cid,\n groupStyles,\n hasThreadReplies: hasThreadReplies || !!message?.reply_count,\n images,\n legacyImageViewerSwipeBehaviour,\n message,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n setImage,\n setImages,\n setOverlay,\n threadList,\n }}\n />\n );\n};\n\nGallery.displayName = 'Gallery{messageSimple{gallery}}';\n"]}
1
+ {"version":3,"sources":["Gallery.tsx"],"names":["GalleryImage","props","uri","rest","MemoizedGalleryImage","React","memo","prevProps","nextProps","styles","StyleSheet","create","flex","galleryContainer","borderTopLeftRadius","borderTopRightRadius","flexDirection","flexWrap","overflow","imageContainer","display","justifyContent","padding","moreImagesContainer","alignItems","margin","moreImagesText","color","fontSize","fontWeight","GalleryWithContext","additionalTouchableProps","alignment","groupStyles","hasThreadReplies","images","legacyImageViewerSwipeBehaviour","message","onLongPress","onPress","onPressIn","preventPress","setImage","setImages","setOverlay","threadList","videos","VideoThumbnail","theme","overlay","colors","messageSimple","gallery","galleryItemColumn","gridHeight","gridWidth","image","maxHeight","maxWidth","minHeight","minWidth","sizeConfig","imagesAndVideos","length","height","invertedDirections","thumbnailGrid","width","messageText","text","messageId","id","numOfColumns","map","rows","colIndex","numOfRows","rowIndex","resizeMode","type","url","defaultOnPress","borderRadius","event","emitter","defaultHandler","absoluteFillObject","backgroundColor","areEqual","prevGroupStyles","prevHasThreadReplies","prevImages","prevMessage","prevVideos","nextGroupStyles","nextHasThreadReplies","nextImages","nextMessage","nextVideos","messageEqual","groupStylesEqual","hasThreadRepliesEqual","imagesEqual","every","index","image_url","thumb_url","videosEqual","MemoizedGallery","Gallery","propAdditionalTouchableProps","propAlignment","propGroupStyles","propImages","propOnLongPress","propOnPress","propOnPressIn","propPreventPress","propSetImage","propSetOverlay","propThreadList","propVideos","PropVideoThumbnail","contextSetImage","contextAlignment","contextGroupStyles","contextImages","contextOnLongPress","contextOnPress","contextOnPressIn","contextPreventPress","contextThreadList","contextVideos","contextAdditionalTouchableProps","ContextVideoThumnbnail","contextSetOverlay","channelId","cid","reply_count","displayName"],"mappings":"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","sourcesContent":["import React, { useMemo } from 'react';\nimport { Image, ImageProps, StyleSheet, Text, TouchableOpacity, View } from 'react-native';\n\nimport { buildGallery } from './utils/buildGallery/buildGallery';\n\nimport { getGalleryImageBorderRadius } from './utils/getGalleryImageBorderRadius';\n\nimport type { MessageType } from '../../components/MessageList/hooks/useMessageList';\nimport {\n ImageGalleryContextValue,\n useImageGalleryContext,\n} from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport {\n OverlayContextValue,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getUrlWithoutParams, makeImageCompatibleUrl } from '../../utils/utils';\n\nconst GalleryImage: React.FC<\n Omit<ImageProps, 'height' | 'source'> & {\n uri: string;\n }\n> = (props) => {\n const { uri, ...rest } = props;\n\n return (\n <Image\n {...rest}\n source={{\n uri: makeImageCompatibleUrl(uri),\n }}\n testID='image-attachment-single'\n />\n );\n};\n\nconst MemoizedGalleryImage = React.memo(\n GalleryImage,\n (prevProps, nextProps) =>\n getUrlWithoutParams(prevProps.uri) === getUrlWithoutParams(nextProps.uri),\n) as typeof GalleryImage;\n\nconst styles = StyleSheet.create({\n flex: { flex: 1 },\n galleryContainer: {\n borderTopLeftRadius: 13,\n borderTopRightRadius: 13,\n flexDirection: 'row',\n flexWrap: 'wrap',\n overflow: 'hidden',\n },\n imageContainer: { display: 'flex', flexDirection: 'row', justifyContent: 'center', padding: 1 },\n moreImagesContainer: {\n alignItems: 'center',\n justifyContent: 'center',\n margin: 1,\n },\n moreImagesText: { color: '#FFFFFF', fontSize: 26, fontWeight: '700' },\n});\n\nexport type GalleryPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ImageGalleryContextValue<StreamChatGenerics>, 'setImage' | 'setImages'> &\n Pick<\n MessageContextValue<StreamChatGenerics>,\n | 'alignment'\n | 'groupStyles'\n | 'images'\n | 'videos'\n | 'onLongPress'\n | 'onPress'\n | 'onPressIn'\n | 'preventPress'\n | 'threadList'\n > &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n 'additionalTouchableProps' | 'legacyImageViewerSwipeBehaviour' | 'VideoThumbnail'\n > &\n Pick<OverlayContextValue, 'setOverlay'> & {\n channelId: string | undefined;\n hasThreadReplies?: boolean;\n /**\n * `message` prop has been introduced here as part of `legacyImageViewerSwipeBehaviour` prop.\n * https://github.com/GetStream/stream-chat-react-native/commit/d5eac6193047916f140efe8e396a671675c9a63f\n * messageId and messageText may seem redundant now, but to avoid breaking change as part\n * of minor release, we are keeping those props.\n *\n * Also `message` type should ideally be imported from MessageContextValue and not be explicitely mentioned\n * here, but due to some circular dependencies within the SDK, it causes \"exccesive deep nesting\" issue with\n * typescript within Channel component. We should take it as a mini-project and resolve all these circular imports.\n *\n * TODO: Fix circular dependencies of imports\n */\n message?: MessageType<StreamChatGenerics>;\n };\n\nconst GalleryWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: GalleryPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps,\n alignment,\n groupStyles,\n hasThreadReplies,\n images,\n legacyImageViewerSwipeBehaviour,\n message,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n setImage,\n setImages,\n setOverlay,\n threadList,\n videos,\n VideoThumbnail,\n } = props;\n\n const {\n theme: {\n colors: { overlay },\n messageSimple: {\n gallery: {\n galleryContainer,\n galleryItemColumn,\n gridHeight,\n gridWidth,\n image,\n imageContainer,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n moreImagesContainer,\n moreImagesText,\n },\n },\n },\n } = useTheme();\n\n const sizeConfig = {\n gridHeight,\n gridWidth,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n };\n\n const imagesAndVideos = [...(images || []), ...(videos || [])];\n const { height, invertedDirections, thumbnailGrid, width } = useMemo(\n () =>\n buildGallery({\n images: imagesAndVideos,\n sizeConfig,\n }),\n [imagesAndVideos.length],\n );\n\n if (!imagesAndVideos?.length) return null;\n const messageText = message?.text;\n const messageId = message?.id;\n const numOfColumns = thumbnailGrid.length;\n\n return (\n <View\n style={[\n styles.galleryContainer,\n {\n height,\n width,\n },\n galleryContainer,\n {\n flexDirection: invertedDirections ? 'column' : 'row',\n },\n ]}\n testID='gallery-container'\n >\n {thumbnailGrid.map((rows, colIndex) => {\n const numOfRows = rows.length;\n return (\n <View\n key={`gallery-${invertedDirections ? 'row' : 'column'}-${colIndex}`}\n style={[\n {\n flexDirection: invertedDirections ? 'row' : 'column',\n },\n galleryItemColumn,\n ]}\n testID={`gallery-${invertedDirections ? 'row' : 'column'}-${colIndex}`}\n >\n {rows.map(({ height, resizeMode, type, url, width }, rowIndex) => {\n const defaultOnPress = () => {\n // Added if-else to keep the logic readable, instead of DRY.\n // if - legacyImageViewerSwipeBehaviour is disabled\n // else - legacyImageViewerSwipeBehaviour is enabled\n if (!legacyImageViewerSwipeBehaviour && message) {\n setImages([message]);\n setImage({ messageId: message.id, url });\n setOverlay('gallery');\n } else if (legacyImageViewerSwipeBehaviour) {\n setImage({ messageId: message?.id, url });\n setOverlay('gallery');\n }\n };\n\n const borderRadius = getGalleryImageBorderRadius({\n alignment,\n colIndex,\n groupStyles,\n hasThreadReplies,\n height,\n invertedDirections,\n messageText,\n numOfColumns,\n numOfRows,\n rowIndex,\n sizeConfig,\n threadList,\n width,\n });\n\n return (\n <TouchableOpacity\n activeOpacity={0.8}\n disabled={preventPress}\n key={`gallery-item-${messageId}/${colIndex}/${rowIndex}/${imagesAndVideos.length}`}\n onLongPress={(event) => {\n if (onLongPress) {\n onLongPress({\n emitter: 'gallery',\n event,\n });\n }\n }}\n onPress={(event) => {\n if (onPress) {\n onPress({\n defaultHandler: defaultOnPress,\n emitter: 'gallery',\n event,\n });\n }\n }}\n onPressIn={(event) => {\n if (onPressIn) {\n onPressIn({\n defaultHandler: defaultOnPress,\n emitter: 'gallery',\n event,\n });\n }\n }}\n style={[\n styles.imageContainer,\n {\n height,\n width,\n },\n imageContainer,\n ]}\n testID={`gallery-${\n invertedDirections ? 'row' : 'column'\n }-${colIndex}-item-${rowIndex}`}\n {...additionalTouchableProps}\n >\n {type === 'video' ? (\n <VideoThumbnail\n style={[\n borderRadius,\n image,\n {\n height: height - 1,\n width: width - 1,\n },\n ]}\n />\n ) : (\n <MemoizedGalleryImage\n resizeMode={resizeMode}\n style={[\n borderRadius,\n image,\n {\n height: height - 1,\n width: width - 1,\n },\n ]}\n uri={url}\n />\n )}\n {colIndex === numOfColumns - 1 &&\n rowIndex === numOfRows - 1 &&\n imagesAndVideos.length > 4 ? (\n <View\n style={[\n StyleSheet.absoluteFillObject,\n styles.moreImagesContainer,\n { backgroundColor: overlay },\n moreImagesContainer,\n ]}\n >\n <Text style={[styles.moreImagesText, moreImagesText]}>\n {`+${imagesAndVideos.length - 4}`}\n </Text>\n </View>\n ) : null}\n </TouchableOpacity>\n );\n })}\n </View>\n );\n })}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: GalleryPropsWithContext<StreamChatGenerics>,\n nextProps: GalleryPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n groupStyles: prevGroupStyles,\n hasThreadReplies: prevHasThreadReplies,\n images: prevImages,\n message: prevMessage,\n videos: prevVideos,\n } = prevProps;\n const {\n groupStyles: nextGroupStyles,\n hasThreadReplies: nextHasThreadReplies,\n images: nextImages,\n message: nextMessage,\n videos: nextVideos,\n } = nextProps;\n\n const messageEqual = prevMessage?.id === nextMessage?.id;\n if (!messageEqual) return false;\n\n const groupStylesEqual =\n prevGroupStyles.length === nextGroupStyles.length && prevGroupStyles[0] === nextGroupStyles[0];\n if (!groupStylesEqual) return false;\n\n const hasThreadRepliesEqual = prevHasThreadReplies === nextHasThreadReplies;\n if (!hasThreadRepliesEqual) return false;\n\n const imagesEqual =\n prevImages.length === nextImages.length &&\n prevImages.every(\n (image, index) =>\n getUrlWithoutParams(image.image_url) === getUrlWithoutParams(nextImages[index].image_url) &&\n getUrlWithoutParams(image.thumb_url) === getUrlWithoutParams(nextImages[index].thumb_url),\n );\n if (!imagesEqual) return false;\n\n const videosEqual =\n prevVideos.length === nextVideos.length &&\n prevVideos.every(\n (image, index) =>\n getUrlWithoutParams(image.image_url) === getUrlWithoutParams(nextVideos[index].image_url) &&\n getUrlWithoutParams(image.thumb_url) === getUrlWithoutParams(nextVideos[index].thumb_url),\n );\n if (!videosEqual) return false;\n\n return true;\n};\n\nconst MemoizedGallery = React.memo(GalleryWithContext, areEqual) as typeof GalleryWithContext;\n\nexport type GalleryProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<GalleryPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI component for card in attachments.\n */\nexport const Gallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: GalleryProps<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps: propAdditionalTouchableProps,\n alignment: propAlignment,\n groupStyles: propGroupStyles,\n hasThreadReplies,\n images: propImages,\n onLongPress: propOnLongPress,\n onPress: propOnPress,\n onPressIn: propOnPressIn,\n preventPress: propPreventPress,\n setImage: propSetImage,\n setOverlay: propSetOverlay,\n threadList: propThreadList,\n videos: propVideos,\n VideoThumbnail: PropVideoThumbnail,\n } = props;\n\n const { setImage: contextSetImage, setImages } = useImageGalleryContext<StreamChatGenerics>();\n const {\n alignment: contextAlignment,\n groupStyles: contextGroupStyles,\n images: contextImages,\n message,\n onLongPress: contextOnLongPress,\n onPress: contextOnPress,\n onPressIn: contextOnPressIn,\n preventPress: contextPreventPress,\n threadList: contextThreadList,\n videos: contextVideos,\n } = useMessageContext<StreamChatGenerics>();\n const {\n additionalTouchableProps: contextAdditionalTouchableProps,\n legacyImageViewerSwipeBehaviour,\n VideoThumbnail: ContextVideoThumnbnail,\n } = useMessagesContext<StreamChatGenerics>();\n const { setOverlay: contextSetOverlay } = useOverlayContext();\n\n const images = propImages || contextImages;\n const videos = propVideos || contextVideos;\n\n if (!images.length && !videos.length) return null;\n\n const additionalTouchableProps = propAdditionalTouchableProps || contextAdditionalTouchableProps;\n const alignment = propAlignment || contextAlignment;\n const groupStyles = propGroupStyles || contextGroupStyles;\n const onLongPress = propOnLongPress || contextOnLongPress;\n const onPressIn = propOnPressIn || contextOnPressIn;\n const onPress = propOnPress || contextOnPress;\n const preventPress =\n typeof propPreventPress === 'boolean' ? propPreventPress : contextPreventPress;\n const setImage = propSetImage || contextSetImage;\n const setOverlay = propSetOverlay || contextSetOverlay;\n const threadList = propThreadList || contextThreadList;\n const VideoThumbnail = PropVideoThumbnail || ContextVideoThumnbnail;\n\n return (\n <MemoizedGallery\n {...{\n additionalTouchableProps,\n alignment,\n channelId: message?.cid,\n groupStyles,\n hasThreadReplies: hasThreadReplies || !!message?.reply_count,\n images,\n legacyImageViewerSwipeBehaviour,\n message,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n setImage,\n setImages,\n setOverlay,\n threadList,\n videos,\n VideoThumbnail,\n }}\n />\n );\n};\n\nGallery.displayName = 'Gallery{messageSimple{gallery}}';\n"]}
@@ -0,0 +1,83 @@
1
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VideoThumbnail = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _reactNative = require("react-native");
15
+
16
+ var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
17
+
18
+ var _icons = require("../../icons");
19
+
20
+ var _excluded = ["style"];
21
+
22
+ var _this = this,
23
+ _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Attachment/VideoThumbnail.tsx";
24
+
25
+ var styles = _reactNative.StyleSheet.create({
26
+ container: {
27
+ alignItems: 'center',
28
+ backgroundColor: 'black',
29
+ display: 'flex',
30
+ height: '100%',
31
+ justifyContent: 'center',
32
+ width: '100%'
33
+ },
34
+ roundedView: {
35
+ alignItems: 'center',
36
+ backgroundColor: '#fff',
37
+ borderRadius: 50,
38
+ display: 'flex',
39
+ height: 36,
40
+ justifyContent: 'center',
41
+ width: 36
42
+ }
43
+ });
44
+
45
+ var VideoThumbnail = function VideoThumbnail(props) {
46
+ var _useTheme = (0, _ThemeContext.useTheme)(),
47
+ _useTheme$theme$messa = _useTheme.theme.messageSimple.videoThumbnail,
48
+ container = _useTheme$theme$messa.container,
49
+ roundedView = _useTheme$theme$messa.roundedView;
50
+
51
+ var style = props.style,
52
+ rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
53
+ return _react["default"].createElement(_reactNative.View, (0, _extends2["default"])({}, rest, {
54
+ style: [styles.container, container, style],
55
+ __self: _this,
56
+ __source: {
57
+ fileName: _jsxFileName,
58
+ lineNumber: 39,
59
+ columnNumber: 5
60
+ }
61
+ }), _react["default"].createElement(_reactNative.View, {
62
+ style: [styles.roundedView, roundedView],
63
+ __self: _this,
64
+ __source: {
65
+ fileName: _jsxFileName,
66
+ lineNumber: 40,
67
+ columnNumber: 7
68
+ }
69
+ }, _react["default"].createElement(_icons.Play, {
70
+ height: 24,
71
+ pathFill: '#000',
72
+ width: 24,
73
+ __self: _this,
74
+ __source: {
75
+ fileName: _jsxFileName,
76
+ lineNumber: 41,
77
+ columnNumber: 9
78
+ }
79
+ })));
80
+ };
81
+
82
+ exports.VideoThumbnail = VideoThumbnail;
83
+ //# sourceMappingURL=VideoThumbnail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["VideoThumbnail.tsx"],"names":["styles","StyleSheet","create","container","alignItems","backgroundColor","display","height","justifyContent","width","roundedView","borderRadius","VideoThumbnail","props","theme","messageSimple","videoThumbnail","style","rest"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;;;;AAEA,IAAMA,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,SAAS,EAAE;AACTC,IAAAA,UAAU,EAAE,QADH;AAETC,IAAAA,eAAe,EAAE,OAFR;AAGTC,IAAAA,OAAO,EAAE,MAHA;AAITC,IAAAA,MAAM,EAAE,MAJC;AAKTC,IAAAA,cAAc,EAAE,QALP;AAMTC,IAAAA,KAAK,EAAE;AANE,GADoB;AAS/BC,EAAAA,WAAW,EAAE;AACXN,IAAAA,UAAU,EAAE,QADD;AAEXC,IAAAA,eAAe,EAAE,MAFN;AAGXM,IAAAA,YAAY,EAAE,EAHH;AAIXL,IAAAA,OAAO,EAAE,MAJE;AAKXC,IAAAA,MAAM,EAAE,EALG;AAMXC,IAAAA,cAAc,EAAE,QANL;AAOXC,IAAAA,KAAK,EAAE;AAPI;AATkB,CAAlB,CAAf;;AAsBO,IAAMG,cAA6C,GAAG,SAAhDA,cAAgD,CAACC,KAAD,EAAW;AACtE,kBAMI,6BANJ;AAAA,wCACEC,KADF,CAEIC,aAFJ,CAGMC,cAHN;AAAA,MAGwBb,SAHxB,yBAGwBA,SAHxB;AAAA,MAGmCO,WAHnC,yBAGmCA,WAHnC;;AAOA,MAAQO,KAAR,GAA2BJ,KAA3B,CAAQI,KAAR;AAAA,MAAkBC,IAAlB,6CAA2BL,KAA3B;AACA,SACE,gCAAC,iBAAD,gCAAUK,IAAV;AAAgB,IAAA,KAAK,EAAE,CAAClB,MAAM,CAACG,SAAR,EAAmBA,SAAnB,EAA8Bc,KAA9B,CAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAACjB,MAAM,CAACU,WAAR,EAAqBA,WAArB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,WAAD;AAAM,IAAA,MAAM,EAAE,EAAd;AAAkB,IAAA,QAAQ,EAAE,MAA5B;AAAoC,IAAA,KAAK,EAAE,EAA3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADF,CADF,CADF;AAOD,CAhBM","sourcesContent":["import React from 'react';\nimport { StyleSheet, View, ViewProps } from 'react-native';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Play } from '../../icons';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n backgroundColor: 'black',\n display: 'flex',\n height: '100%',\n justifyContent: 'center',\n width: '100%',\n },\n roundedView: {\n alignItems: 'center',\n backgroundColor: '#fff',\n borderRadius: 50,\n display: 'flex',\n height: 36,\n justifyContent: 'center',\n width: 36,\n },\n});\n\nexport type VideoThumbnailProps = ViewProps;\n\nexport const VideoThumbnail: React.FC<VideoThumbnailProps> = (props) => {\n const {\n theme: {\n messageSimple: {\n videoThumbnail: { container, roundedView },\n },\n },\n } = useTheme();\n const { style, ...rest } = props;\n return (\n <View {...rest} style={[styles.container, container, style]}>\n <View style={[styles.roundedView, roundedView]}>\n <Play height={24} pathFill={'#000'} width={24} />\n </View>\n </View>\n );\n};\n"]}
@@ -30,7 +30,7 @@ var useGoToURL = function useGoToURL(url) {
30
30
  _reactNative.Linking.openURL(finalUrl);
31
31
  } else {
32
32
  setError(true);
33
- console.log("Don't know how to open URI: " + finalUrl);
33
+ console.warn("Don't know how to open URI: " + finalUrl);
34
34
  }
35
35
  });
36
36
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["useGoToURL.ts"],"names":["useGoToURL","url","error","setError","finalUrl","pattern","RegExp","test","openURL","Linking","canOpenURL","then","supported","console","log"],"mappings":";;;;;;;;;AAAA;;AACA;;AAIO,IAAMA,UAA0B,GAAG,SAA7BA,UAA6B,CAACC,GAAD,EAAkB;AAC1D,kBAA0B,qBAAkB,KAAlB,CAA1B;AAAA;AAAA,MAAOC,KAAP;AAAA,MAAcC,QAAd;;AAEA,MAAIC,QAAQ,GAAGH,GAAf;AACA,MAAMI,OAAO,GAAG,IAAIC,MAAJ,CAAW,WAAX,CAAhB;;AAEA,MAAI,CAACD,OAAO,CAACE,IAAR,CAAaH,QAAb,CAAL,EAA6B;AAC3BA,IAAAA,QAAQ,GAAG,YAAYH,GAAvB;AACD;;AAED,MAAMO,OAAO,GAAG,SAAVA,OAAU;AAAA,WACdC,qBAAQC,UAAR,CAAmBN,QAAnB,EAA6BO,IAA7B,CAAkC,UAACC,SAAD,EAAe;AAC/C,UAAIA,SAAJ,EAAe;AACbH,6BAAQD,OAAR,CAAgBJ,QAAhB;AACD,OAFD,MAEO;AACLD,QAAAA,QAAQ,CAAC,IAAD,CAAR;AACAU,QAAAA,OAAO,CAACC,GAAR,kCAA2CV,QAA3C;AACD;AACF,KAPD,CADc;AAAA,GAAhB;;AAUA,SAAO,CAACF,KAAD,EAAQM,OAAR,CAAP;AACD,CArBM","sourcesContent":["import { useState } from 'react';\nimport { Linking } from 'react-native';\n\nexport type UseGoToURLType = (url?: string) => [boolean, () => Promise<void>];\n\nexport const useGoToURL: UseGoToURLType = (url?: string) => {\n const [error, setError] = useState<boolean>(false);\n\n let finalUrl = url as string;\n const pattern = new RegExp(/^\\S+:\\/\\//);\n\n if (!pattern.test(finalUrl)) {\n finalUrl = 'http://' + url;\n }\n\n const openURL = () =>\n Linking.canOpenURL(finalUrl).then((supported) => {\n if (supported) {\n Linking.openURL(finalUrl);\n } else {\n setError(true);\n console.log(`Don't know how to open URI: ${finalUrl}`);\n }\n });\n\n return [error, openURL];\n};\n"]}
1
+ {"version":3,"sources":["useGoToURL.ts"],"names":["useGoToURL","url","error","setError","finalUrl","pattern","RegExp","test","openURL","Linking","canOpenURL","then","supported","console","warn"],"mappings":";;;;;;;;;AAAA;;AACA;;AAIO,IAAMA,UAA0B,GAAG,SAA7BA,UAA6B,CAACC,GAAD,EAAkB;AAC1D,kBAA0B,qBAAkB,KAAlB,CAA1B;AAAA;AAAA,MAAOC,KAAP;AAAA,MAAcC,QAAd;;AAEA,MAAIC,QAAQ,GAAGH,GAAf;AACA,MAAMI,OAAO,GAAG,IAAIC,MAAJ,CAAW,WAAX,CAAhB;;AAEA,MAAI,CAACD,OAAO,CAACE,IAAR,CAAaH,QAAb,CAAL,EAA6B;AAC3BA,IAAAA,QAAQ,GAAG,YAAYH,GAAvB;AACD;;AAED,MAAMO,OAAO,GAAG,SAAVA,OAAU;AAAA,WACdC,qBAAQC,UAAR,CAAmBN,QAAnB,EAA6BO,IAA7B,CAAkC,UAACC,SAAD,EAAe;AAC/C,UAAIA,SAAJ,EAAe;AACbH,6BAAQD,OAAR,CAAgBJ,QAAhB;AACD,OAFD,MAEO;AACLD,QAAAA,QAAQ,CAAC,IAAD,CAAR;AACAU,QAAAA,OAAO,CAACC,IAAR,kCAA4CV,QAA5C;AACD;AACF,KAPD,CADc;AAAA,GAAhB;;AAUA,SAAO,CAACF,KAAD,EAAQM,OAAR,CAAP;AACD,CArBM","sourcesContent":["import { useState } from 'react';\nimport { Linking } from 'react-native';\n\nexport type UseGoToURLType = (url?: string) => [boolean, () => Promise<void>];\n\nexport const useGoToURL: UseGoToURLType = (url?: string) => {\n const [error, setError] = useState<boolean>(false);\n\n let finalUrl = url as string;\n const pattern = new RegExp(/^\\S+:\\/\\//);\n\n if (!pattern.test(finalUrl)) {\n finalUrl = 'http://' + url;\n }\n\n const openURL = () =>\n Linking.canOpenURL(finalUrl).then((supported) => {\n if (supported) {\n Linking.openURL(finalUrl);\n } else {\n setError(true);\n console.warn(`Don't know how to open URI: ${finalUrl}`);\n }\n });\n\n return [error, openURL];\n};\n"]}
@@ -19,6 +19,7 @@ function buildThumbnail(_ref) {
19
19
  return {
20
20
  height: height,
21
21
  resizeMode: resizeMode ? resizeMode : image.original_height && image.original_width ? 'contain' : 'cover',
22
+ type: image.type,
22
23
  url: shouldResize ? (0, _getResizedImageUrl.getResizedImageUrl)({
23
24
  height: height,
24
25
  url: imageUrl,
@@ -1 +1 @@
1
- {"version":3,"sources":["buildThumbnail.ts"],"names":["buildThumbnail","height","image","resizeMode","width","originalImageHeight","original_height","originalImageWidth","original_width","shouldResize","imageUrl","url"],"mappings":";;;;;AAQA;;AACA;;AAEO,SAASA,cAAT,OAYO;AAAA,MATZC,MASY,QATZA,MASY;AAAA,MARZC,KAQY,QARZA,KAQY;AAAA,MAPZC,UAOY,QAPZA,UAOY;AAAA,MANZC,KAMY,QANZA,KAMY;AACZ,MAAyBC,mBAAzB,GAAqFH,KAArF,CAAQI,eAAR;AAAA,MAA8DC,kBAA9D,GAAqFL,KAArF,CAA8CM,cAA9C;AAGA,MAAMC,YAAY,GAChBJ,mBAAmB,IAAIE,kBAAvB,GACIF,mBAAmB,GAAGE,kBAAtB,GAA2CN,MAAM,GAAGG,KADxD,GAEI,IAHN;AAIA,MAAMM,QAAQ,GAAG,sDAAwBR,KAAxB,CAAjB;AAEA,SAAO;AACLD,IAAAA,MAAM,EAANA,MADK;AAELE,IAAAA,UAAU,EAAEA,UAAU,GAClBA,UADkB,GAEhBD,KAAK,CAACI,eAAN,IAAyBJ,KAAK,CAACM,cAA/B,GAAgD,SAAhD,GAA4D,OAJ7D;AAKLG,IAAAA,GAAG,EAAEF,YAAY,GACb,4CAAmB;AACjBR,MAAAA,MAAM,EAANA,MADiB;AAEjBU,MAAAA,GAAG,EAAED,QAFY;AAGjBN,MAAAA,KAAK,EAALA;AAHiB,KAAnB,CADa,GAMbM,QAXC;AAYLN,IAAAA,KAAK,EAALA;AAZK,GAAP;AAcD","sourcesContent":["import type { ImageResizeMode } from 'react-native';\n\nimport type { Attachment } from 'stream-chat';\n\nimport type { Thumbnail } from './types';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nimport { getResizedImageUrl } from '../../../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../../../utils/getUrlOfImageAttachment';\n\nexport function buildThumbnail<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n height,\n image,\n resizeMode,\n width,\n}: {\n height: number;\n image: Attachment<StreamChatGenerics>;\n width: number;\n resizeMode?: ImageResizeMode;\n}): Thumbnail {\n const { original_height: originalImageHeight, original_width: originalImageWidth } = image;\n\n // Only resize if the original image is larger than the thumbnail container size.\n const shouldResize =\n originalImageHeight && originalImageWidth\n ? originalImageHeight + originalImageWidth > height + width\n : true;\n const imageUrl = getUrlOfImageAttachment(image) as string;\n\n return {\n height,\n resizeMode: resizeMode\n ? resizeMode\n : ((image.original_height && image.original_width ? 'contain' : 'cover') as ImageResizeMode),\n url: shouldResize\n ? getResizedImageUrl({\n height,\n url: imageUrl,\n width,\n })\n : imageUrl,\n width,\n };\n}\n"]}
1
+ {"version":3,"sources":["buildThumbnail.ts"],"names":["buildThumbnail","height","image","resizeMode","width","originalImageHeight","original_height","originalImageWidth","original_width","shouldResize","imageUrl","type","url"],"mappings":";;;;;AAQA;;AACA;;AAEO,SAASA,cAAT,OAYO;AAAA,MATZC,MASY,QATZA,MASY;AAAA,MARZC,KAQY,QARZA,KAQY;AAAA,MAPZC,UAOY,QAPZA,UAOY;AAAA,MANZC,KAMY,QANZA,KAMY;AACZ,MAAyBC,mBAAzB,GAAqFH,KAArF,CAAQI,eAAR;AAAA,MAA8DC,kBAA9D,GAAqFL,KAArF,CAA8CM,cAA9C;AAGA,MAAMC,YAAY,GAChBJ,mBAAmB,IAAIE,kBAAvB,GACIF,mBAAmB,GAAGE,kBAAtB,GAA2CN,MAAM,GAAGG,KADxD,GAEI,IAHN;AAIA,MAAMM,QAAQ,GAAG,sDAAwBR,KAAxB,CAAjB;AAEA,SAAO;AACLD,IAAAA,MAAM,EAANA,MADK;AAELE,IAAAA,UAAU,EAAEA,UAAU,GAClBA,UADkB,GAEhBD,KAAK,CAACI,eAAN,IAAyBJ,KAAK,CAACM,cAA/B,GAAgD,SAAhD,GAA4D,OAJ7D;AAKLG,IAAAA,IAAI,EAAET,KAAK,CAACS,IALP;AAMLC,IAAAA,GAAG,EAAEH,YAAY,GACb,4CAAmB;AACjBR,MAAAA,MAAM,EAANA,MADiB;AAEjBW,MAAAA,GAAG,EAAEF,QAFY;AAGjBN,MAAAA,KAAK,EAALA;AAHiB,KAAnB,CADa,GAMbM,QAZC;AAaLN,IAAAA,KAAK,EAALA;AAbK,GAAP;AAeD","sourcesContent":["import type { ImageResizeMode } from 'react-native';\n\nimport type { Attachment } from 'stream-chat';\n\nimport type { Thumbnail } from './types';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nimport { getResizedImageUrl } from '../../../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../../../utils/getUrlOfImageAttachment';\n\nexport function buildThumbnail<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n height,\n image,\n resizeMode,\n width,\n}: {\n height: number;\n image: Attachment<StreamChatGenerics>;\n width: number;\n resizeMode?: ImageResizeMode;\n}): Thumbnail {\n const { original_height: originalImageHeight, original_width: originalImageWidth } = image;\n\n // Only resize if the original image is larger than the thumbnail container size.\n const shouldResize =\n originalImageHeight && originalImageWidth\n ? originalImageHeight + originalImageWidth > height + width\n : true;\n const imageUrl = getUrlOfImageAttachment(image) as string;\n\n return {\n height,\n resizeMode: resizeMode\n ? resizeMode\n : ((image.original_height && image.original_width ? 'contain' : 'cover') as ImageResizeMode),\n type: image.type,\n url: shouldResize\n ? getResizedImageUrl({\n height,\n url: imageUrl,\n width,\n })\n : imageUrl,\n width,\n };\n}\n"]}
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", {
3
3
  });
4
4
  exports.getAspectRatio = getAspectRatio;
5
5
 
6
- function getAspectRatio(image) {
7
- if (image.type !== 'image') {
8
- throw new Error('getAspectRatio() can only be called on an image attachment');
6
+ function getAspectRatio(attachment) {
7
+ if (!(attachment.type === 'image' || attachment.type === 'video')) {
8
+ throw new Error('getAspectRatio() can only be called on an image attachment or video thumbnail');
9
9
  }
10
10
 
11
- if (!image.original_width || !image.original_height) return 1;
12
- return image.original_width / image.original_height;
11
+ if (!attachment.original_width || !attachment.original_height) return 1;
12
+ return attachment.original_width / attachment.original_height;
13
13
  }
14
14
  //# sourceMappingURL=getAspectRatio.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["getAspectRatio.ts"],"names":["getAspectRatio","image","type","Error","original_width","original_height"],"mappings":";;;;;AAUO,SAASA,cAAT,CAELC,KAFK,EAEkC;AACvC,MAAIA,KAAK,CAACC,IAAN,KAAe,OAAnB,EAA4B;AAC1B,UAAM,IAAIC,KAAJ,CAAU,4DAAV,CAAN;AACD;;AAED,MAAI,CAACF,KAAK,CAACG,cAAP,IAAyB,CAACH,KAAK,CAACI,eAApC,EAAqD,OAAO,CAAP;AAErD,SAAOJ,KAAK,CAACG,cAAN,GAAuBH,KAAK,CAACI,eAApC;AACD","sourcesContent":["import type { Attachment } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\n/**\n * Returns the aspect ratio of an image attachment.\n *\n * @param image Image attachment.\n * @returns {number}\n */\nexport function getAspectRatio<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(image: Attachment<StreamChatGenerics>) {\n if (image.type !== 'image') {\n throw new Error('getAspectRatio() can only be called on an image attachment');\n }\n\n if (!image.original_width || !image.original_height) return 1;\n\n return image.original_width / image.original_height;\n}\n"]}
1
+ {"version":3,"sources":["getAspectRatio.ts"],"names":["getAspectRatio","attachment","type","Error","original_width","original_height"],"mappings":";;;;;AAUO,SAASA,cAAT,CAELC,UAFK,EAEuC;AAC5C,MAAI,EAAEA,UAAU,CAACC,IAAX,KAAoB,OAApB,IAA+BD,UAAU,CAACC,IAAX,KAAoB,OAArD,CAAJ,EAAmE;AACjE,UAAM,IAAIC,KAAJ,CACJ,+EADI,CAAN;AAGD;;AAED,MAAI,CAACF,UAAU,CAACG,cAAZ,IAA8B,CAACH,UAAU,CAACI,eAA9C,EAA+D,OAAO,CAAP;AAE/D,SAAOJ,UAAU,CAACG,cAAX,GAA4BH,UAAU,CAACI,eAA9C;AACD","sourcesContent":["import type { Attachment } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\n/**\n * Returns the aspect ratio of an image attachment.\n *\n * @param image Image attachment.\n * @returns {number}\n */\nexport function getAspectRatio<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(attachment: Attachment<StreamChatGenerics>) {\n if (!(attachment.type === 'image' || attachment.type === 'video')) {\n throw new Error(\n 'getAspectRatio() can only be called on an image attachment or video thumbnail',\n );\n }\n\n if (!attachment.original_width || !attachment.original_height) return 1;\n\n return attachment.original_width / attachment.original_height;\n}\n"]}