stream-chat-react-native-core 4.9.0-beta.3 → 4.10.0-beta.1

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 (150) hide show
  1. package/lib/commonjs/components/Attachment/Gallery.js +246 -190
  2. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/VideoThumbnail.js +11 -5
  4. package/lib/commonjs/components/Attachment/VideoThumbnail.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js +1 -0
  6. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  7. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js +7 -3
  8. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js.map +1 -1
  9. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +2 -1
  10. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  11. package/lib/commonjs/components/Chat/Chat.js +9 -5
  12. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  13. package/lib/commonjs/components/ImageGallery/ImageGallery.js +25 -22
  14. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  15. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +15 -15
  16. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  17. package/lib/commonjs/components/Message/Message.js +13 -8
  18. package/lib/commonjs/components/Message/Message.js.map +1 -1
  19. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +7 -4
  20. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  21. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +34 -35
  22. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  23. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  24. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  25. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +15 -13
  26. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  27. package/lib/commonjs/contexts/translationContext/TranslationContext.js +8 -4
  28. package/lib/commonjs/contexts/translationContext/TranslationContext.js.map +1 -1
  29. package/lib/commonjs/hooks/useStreami18n.js.map +1 -1
  30. package/lib/commonjs/hooks/useTranslatedMessage.js +34 -0
  31. package/lib/commonjs/hooks/useTranslatedMessage.js.map +1 -0
  32. package/lib/commonjs/mock-builders/api/getOrCreateChannel.js.map +1 -1
  33. package/lib/commonjs/mock-builders/generator/attachment.js +3 -2
  34. package/lib/commonjs/mock-builders/generator/attachment.js.map +1 -1
  35. package/lib/commonjs/mock-builders/generator/channel.js +8 -4
  36. package/lib/commonjs/mock-builders/generator/channel.js.map +1 -1
  37. package/lib/commonjs/utils/getUrlOfImageAttachment.js +1 -1
  38. package/lib/commonjs/utils/getUrlOfImageAttachment.js.map +1 -1
  39. package/lib/commonjs/version.json +1 -1
  40. package/lib/module/components/Attachment/Gallery.js +246 -190
  41. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  42. package/lib/module/components/Attachment/VideoThumbnail.js +11 -5
  43. package/lib/module/components/Attachment/VideoThumbnail.js.map +1 -1
  44. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js +1 -0
  45. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  46. package/lib/module/components/ChannelPreview/ChannelPreview.js +7 -3
  47. package/lib/module/components/ChannelPreview/ChannelPreview.js.map +1 -1
  48. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +2 -1
  49. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  50. package/lib/module/components/Chat/Chat.js +9 -5
  51. package/lib/module/components/Chat/Chat.js.map +1 -1
  52. package/lib/module/components/ImageGallery/ImageGallery.js +25 -22
  53. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  54. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +15 -15
  55. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  56. package/lib/module/components/Message/Message.js +13 -8
  57. package/lib/module/components/Message/Message.js.map +1 -1
  58. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +7 -4
  59. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  60. package/lib/module/contexts/messageInputContext/MessageInputContext.js +34 -35
  61. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  62. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  63. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  64. package/lib/module/contexts/overlayContext/OverlayProvider.js +15 -13
  65. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  66. package/lib/module/contexts/translationContext/TranslationContext.js +8 -4
  67. package/lib/module/contexts/translationContext/TranslationContext.js.map +1 -1
  68. package/lib/module/hooks/useStreami18n.js.map +1 -1
  69. package/lib/module/hooks/useTranslatedMessage.js +34 -0
  70. package/lib/module/hooks/useTranslatedMessage.js.map +1 -0
  71. package/lib/module/mock-builders/api/getOrCreateChannel.js.map +1 -1
  72. package/lib/module/mock-builders/generator/attachment.js +3 -2
  73. package/lib/module/mock-builders/generator/attachment.js.map +1 -1
  74. package/lib/module/mock-builders/generator/channel.js +8 -4
  75. package/lib/module/mock-builders/generator/channel.js.map +1 -1
  76. package/lib/module/utils/getUrlOfImageAttachment.js +1 -1
  77. package/lib/module/utils/getUrlOfImageAttachment.js.map +1 -1
  78. package/lib/module/version.json +1 -1
  79. package/lib/typescript/components/Attachment/VideoThumbnail.d.ts +3 -1
  80. package/lib/typescript/components/Attachment/utils/buildGallery/types.d.ts +1 -0
  81. package/lib/typescript/components/ChannelPreview/__tests__/ChannelPreview.test.d.ts +1 -0
  82. package/lib/typescript/components/Message/MessageSimple/__tests__/MessageTextContainer.test.d.ts +1 -0
  83. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +1 -0
  84. package/lib/typescript/contexts/messageInputContext/__tests__/MessageInputContext.test.d.ts +1 -0
  85. package/lib/typescript/contexts/messageInputContext/__tests__/isValidMessage.test.d.ts +1 -0
  86. package/lib/typescript/contexts/messageInputContext/__tests__/pickFile.test.d.ts +1 -0
  87. package/lib/typescript/contexts/messageInputContext/__tests__/removeFile.test.d.ts +1 -0
  88. package/lib/typescript/contexts/messageInputContext/__tests__/removeImage.test.d.ts +1 -0
  89. package/lib/typescript/contexts/messageInputContext/__tests__/sendMessage.test.d.ts +1 -0
  90. package/lib/typescript/contexts/messageInputContext/__tests__/sendMessageAsync.test.d.ts +1 -0
  91. package/lib/typescript/contexts/messageInputContext/__tests__/updateMessage.test.d.ts +1 -0
  92. package/lib/typescript/contexts/messageInputContext/__tests__/uploadFile.test.d.ts +1 -0
  93. package/lib/typescript/contexts/messageInputContext/__tests__/uploadImage.test.d.ts +1 -0
  94. package/lib/typescript/contexts/messageInputContext/__tests__/useMessageDetailsForState.test.d.ts +1 -0
  95. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +2 -1
  96. package/lib/typescript/contexts/translationContext/TranslationContext.d.ts +7 -2
  97. package/lib/typescript/hooks/__tests__/useTranslatedMessage.test.d.ts +1 -0
  98. package/lib/typescript/hooks/useStreami18n.d.ts +2 -2
  99. package/lib/typescript/hooks/useTranslatedMessage.d.ts +3 -0
  100. package/lib/typescript/mock-builders/api/getOrCreateChannel.d.ts +13 -1
  101. package/lib/typescript/mock-builders/event/messageNew.d.ts +2 -0
  102. package/lib/typescript/mock-builders/event/messageRead.d.ts +8 -0
  103. package/lib/typescript/mock-builders/generator/attachment.d.ts +10 -0
  104. package/lib/typescript/mock-builders/generator/channel.d.ts +27 -23
  105. package/lib/typescript/mock-builders/generator/message.d.ts +38 -0
  106. package/lib/typescript/mock-builders/generator/user.d.ts +9 -9
  107. package/package.json +7 -6
  108. package/src/components/Attachment/Gallery.tsx +231 -140
  109. package/src/components/Attachment/VideoThumbnail.tsx +12 -5
  110. package/src/components/Attachment/__tests__/Attachment.test.js +12 -0
  111. package/src/components/Attachment/__tests__/Gallery.test.js +23 -1
  112. package/src/components/Attachment/utils/buildGallery/buildThumbnail.ts +1 -0
  113. package/src/components/Attachment/utils/buildGallery/types.ts +1 -0
  114. package/src/components/ChannelPreview/ChannelPreview.tsx +7 -1
  115. package/src/components/ChannelPreview/__tests__/{ChannelPreview.test.js → ChannelPreview.test.tsx} +79 -41
  116. package/src/components/ChannelPreview/hooks/__tests__/useLatestMessagePreview.test.tsx +56 -21
  117. package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +4 -1
  118. package/src/components/Chat/Chat.tsx +6 -3
  119. package/src/components/ImageGallery/ImageGallery.tsx +10 -6
  120. package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +2 -1
  121. package/src/components/Message/Message.tsx +8 -1
  122. package/src/components/Message/MessageSimple/MessageTextContainer.tsx +7 -1
  123. package/src/components/Message/MessageSimple/__tests__/MessageTextContainer.test.tsx +108 -0
  124. package/src/components/Message/MessageSimple/__tests__/__snapshots__/{MessageTextContainer.test.js.snap → MessageTextContainer.test.tsx.snap} +0 -0
  125. package/src/contexts/messageInputContext/MessageInputContext.tsx +10 -4
  126. package/src/contexts/messageInputContext/__tests__/MessageInputContext.test.tsx +208 -0
  127. package/src/contexts/messageInputContext/__tests__/__snapshots__/sendMessage.test.tsx.snap +113 -0
  128. package/src/contexts/messageInputContext/__tests__/__snapshots__/sendMessageAsync.test.tsx.snap +33 -0
  129. package/src/contexts/messageInputContext/__tests__/isValidMessage.test.tsx +71 -0
  130. package/src/contexts/messageInputContext/__tests__/pickFile.test.tsx +67 -0
  131. package/src/contexts/messageInputContext/__tests__/removeFile.test.tsx +82 -0
  132. package/src/contexts/messageInputContext/__tests__/removeImage.test.tsx +80 -0
  133. package/src/contexts/messageInputContext/__tests__/sendMessage.test.tsx +286 -0
  134. package/src/contexts/messageInputContext/__tests__/sendMessageAsync.test.tsx +124 -0
  135. package/src/contexts/messageInputContext/__tests__/updateMessage.test.tsx +92 -0
  136. package/src/contexts/messageInputContext/__tests__/uploadFile.test.tsx +76 -0
  137. package/src/contexts/messageInputContext/__tests__/uploadImage.test.tsx +55 -0
  138. package/src/contexts/messageInputContext/__tests__/useMessageDetailsForState.test.tsx +62 -0
  139. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +2 -1
  140. package/src/contexts/overlayContext/OverlayProvider.tsx +4 -3
  141. package/src/contexts/translationContext/TranslationContext.tsx +10 -1
  142. package/src/hooks/__tests__/useTranslatedMessage.test.tsx +106 -0
  143. package/src/hooks/useStreami18n.ts +2 -2
  144. package/src/hooks/useTranslatedMessage.ts +30 -0
  145. package/src/mock-builders/api/{getOrCreateChannel.js → getOrCreateChannel.ts} +8 -1
  146. package/src/mock-builders/generator/attachment.js +4 -2
  147. package/src/mock-builders/generator/{channel.js → channel.ts} +19 -10
  148. package/src/utils/getUrlOfImageAttachment.ts +1 -1
  149. package/src/version.json +1 -1
  150. package/src/components/Message/MessageSimple/__tests__/MessageTextContainer.test.js +0 -65
@@ -100,9 +100,9 @@ var GalleryWithContext = function GalleryWithContext(props) {
100
100
  images = props.images,
101
101
  legacyImageViewerSwipeBehaviour = props.legacyImageViewerSwipeBehaviour,
102
102
  message = props.message,
103
- _onLongPress = props.onLongPress,
104
- _onPress = props.onPress,
105
- _onPressIn = props.onPressIn,
103
+ onLongPress = props.onLongPress,
104
+ onPress = props.onPress,
105
+ onPressIn = props.onPressIn,
106
106
  preventPress = props.preventPress,
107
107
  setImage = props.setImage,
108
108
  setImages = props.setImages,
@@ -111,28 +111,16 @@ var GalleryWithContext = function GalleryWithContext(props) {
111
111
  videos = props.videos,
112
112
  VideoThumbnail = props.VideoThumbnail;
113
113
 
114
- var _useLoadingImage = (0, _useLoadingImage2.useLoadingImage)(),
115
- isLoadingImage = _useLoadingImage.isLoadingImage,
116
- isLoadingImageError = _useLoadingImage.isLoadingImageError,
117
- setLoadingImage = _useLoadingImage.setLoadingImage,
118
- setLoadingImageError = _useLoadingImage.setLoadingImageError;
119
-
120
114
  var _useTheme = (0, _ThemeContext.useTheme)(),
121
- _useTheme$theme = _useTheme.theme,
122
- overlay = _useTheme$theme.colors.overlay,
123
- _useTheme$theme$messa = _useTheme$theme.messageSimple.gallery,
115
+ _useTheme$theme$messa = _useTheme.theme.messageSimple.gallery,
124
116
  galleryContainer = _useTheme$theme$messa.galleryContainer,
125
117
  galleryItemColumn = _useTheme$theme$messa.galleryItemColumn,
126
118
  gridHeight = _useTheme$theme$messa.gridHeight,
127
119
  gridWidth = _useTheme$theme$messa.gridWidth,
128
- image = _useTheme$theme$messa.image,
129
- imageContainer = _useTheme$theme$messa.imageContainer,
130
120
  maxHeight = _useTheme$theme$messa.maxHeight,
131
121
  maxWidth = _useTheme$theme$messa.maxWidth,
132
122
  minHeight = _useTheme$theme$messa.minHeight,
133
- minWidth = _useTheme$theme$messa.minWidth,
134
- moreImagesContainer = _useTheme$theme$messa.moreImagesContainer,
135
- moreImagesText = _useTheme$theme$messa.moreImagesText;
123
+ minWidth = _useTheme$theme$messa.minWidth;
136
124
 
137
125
  var sizeConfig = {
138
126
  gridHeight: gridHeight,
@@ -156,8 +144,6 @@ var GalleryWithContext = function GalleryWithContext(props) {
156
144
  width = _useMemo.width;
157
145
 
158
146
  if (!(imagesAndVideos != null && imagesAndVideos.length)) return null;
159
- var messageText = message == null ? void 0 : message.text;
160
- var messageId = message == null ? void 0 : message.id;
161
147
  var numOfColumns = thumbnailGrid.length;
162
148
  return _react["default"].createElement(_reactNative.View, {
163
149
  style: [styles.galleryContainer, {
@@ -170,7 +156,7 @@ var GalleryWithContext = function GalleryWithContext(props) {
170
156
  __self: _this,
171
157
  __source: {
172
158
  fileName: _jsxFileName,
173
- lineNumber: 188,
159
+ lineNumber: 181,
174
160
  columnNumber: 5
175
161
  }
176
162
  }, thumbnailGrid.map(function (rows, colIndex) {
@@ -184,41 +170,10 @@ var GalleryWithContext = function GalleryWithContext(props) {
184
170
  __self: _this,
185
171
  __source: {
186
172
  fileName: _jsxFileName,
187
- lineNumber: 205,
173
+ lineNumber: 198,
188
174
  columnNumber: 11
189
175
  }
190
- }, rows.map(function (_ref, rowIndex) {
191
- var height = _ref.height,
192
- resizeMode = _ref.resizeMode,
193
- type = _ref.type,
194
- url = _ref.url,
195
- width = _ref.width;
196
-
197
- var openImageViewer = function openImageViewer() {
198
- if (!legacyImageViewerSwipeBehaviour && message) {
199
- setImages([message]);
200
- setImage({
201
- messageId: message.id,
202
- url: url
203
- });
204
- setOverlay('gallery');
205
- } else if (legacyImageViewerSwipeBehaviour) {
206
- setImage({
207
- messageId: message == null ? void 0 : message.id,
208
- url: url
209
- });
210
- setOverlay('gallery');
211
- }
212
- };
213
-
214
- var defaultOnPress = function defaultOnPress() {
215
- if (type === 'video' && !(0, _native.isVideoPackageAvailable)()) {
216
- (0, _openUrlSafely.openUrlSafely)(url);
217
- } else {
218
- openImageViewer();
219
- }
220
- };
221
-
176
+ }, rows.map(function (thumbnail, rowIndex) {
222
177
  var borderRadius = (0, _getGalleryImageBorderRadius.getGalleryImageBorderRadius)({
223
178
  alignment: alignment,
224
179
  colIndex: colIndex,
@@ -226,7 +181,7 @@ var GalleryWithContext = function GalleryWithContext(props) {
226
181
  hasThreadReplies: hasThreadReplies,
227
182
  height: height,
228
183
  invertedDirections: invertedDirections,
229
- messageText: messageText,
184
+ messageText: message == null ? void 0 : message.text,
230
185
  numOfColumns: numOfColumns,
231
186
  numOfRows: numOfRows,
232
187
  rowIndex: rowIndex,
@@ -234,150 +189,251 @@ var GalleryWithContext = function GalleryWithContext(props) {
234
189
  threadList: threadList,
235
190
  width: width
236
191
  });
237
- return _react["default"].createElement(_reactNative.TouchableOpacity, (0, _extends2["default"])({
238
- activeOpacity: 0.8,
239
- disabled: preventPress,
240
- key: "gallery-item-" + messageId + "/" + colIndex + "/" + rowIndex + "/" + imagesAndVideos.length,
241
- onLongPress: function onLongPress(event) {
242
- if (_onLongPress) {
243
- _onLongPress({
244
- emitter: 'gallery',
245
- event: event
246
- });
247
- }
248
- },
249
- onPress: function onPress(event) {
250
- if (_onPress) {
251
- _onPress({
252
- defaultHandler: defaultOnPress,
253
- emitter: 'gallery',
254
- event: event
255
- });
256
- }
257
- },
258
- onPressIn: function onPressIn(event) {
259
- if (_onPressIn) {
260
- _onPressIn({
261
- defaultHandler: defaultOnPress,
262
- emitter: 'gallery',
263
- event: event
264
- });
265
- }
266
- },
267
- style: [styles.imageContainer, {
268
- height: height,
269
- width: width
270
- }, imageContainer],
271
- testID: "gallery-" + (invertedDirections ? 'row' : 'column') + "-" + colIndex + "-item-" + rowIndex
272
- }, additionalTouchableProps, {
192
+
193
+ if (message === undefined) {
194
+ return null;
195
+ }
196
+
197
+ return _react["default"].createElement(GalleryThumbnail, {
198
+ additionalTouchableProps: additionalTouchableProps,
199
+ borderRadius: borderRadius,
200
+ colIndex: colIndex,
201
+ ImageLoadingFailedIndicator: ImageLoadingFailedIndicator,
202
+ ImageLoadingIndicator: ImageLoadingIndicator,
203
+ imagesAndVideos: imagesAndVideos,
204
+ invertedDirections: invertedDirections || false,
205
+ key: rowIndex,
206
+ legacyImageViewerSwipeBehaviour: legacyImageViewerSwipeBehaviour,
207
+ message: message,
208
+ numOfColumns: numOfColumns,
209
+ numOfRows: numOfRows,
210
+ onLongPress: onLongPress,
211
+ onPress: onPress,
212
+ onPressIn: onPressIn,
213
+ preventPress: preventPress,
214
+ rowIndex: rowIndex,
215
+ setImage: setImage,
216
+ setImages: setImages,
217
+ setOverlay: setOverlay,
218
+ thumbnail: thumbnail,
219
+ VideoThumbnail: VideoThumbnail,
273
220
  __self: _this,
274
221
  __source: {
275
222
  fileName: _jsxFileName,
276
- lineNumber: 257,
223
+ lineNumber: 230,
277
224
  columnNumber: 17
278
225
  }
279
- }), type === 'video' ? _react["default"].createElement(VideoThumbnail, {
280
- style: [borderRadius, image, {
281
- height: height - 1,
282
- width: width - 1
283
- }],
284
- __self: _this,
285
- __source: {
286
- fileName: _jsxFileName,
287
- lineNumber: 301,
288
- columnNumber: 21
289
- }
290
- }) : _react["default"].createElement(_reactNative.View, {
291
- style: styles.imageContainerStyle,
292
- __self: _this,
293
- __source: {
294
- fileName: _jsxFileName,
295
- lineNumber: 312,
296
- columnNumber: 21
297
- }
298
- }, _react["default"].createElement(MemoizedGalleryImage, {
299
- onError: function onError(error) {
300
- console.warn(error);
301
- setLoadingImage(false);
302
- setLoadingImageError(true);
303
- },
304
- onLoadEnd: function onLoadEnd() {
305
- return setLoadingImage(false);
306
- },
307
- onLoadStart: function onLoadStart() {
308
- return setLoadingImage(true);
309
- },
310
- resizeMode: resizeMode,
311
- style: [borderRadius, image, {
312
- height: height - 1,
313
- width: width - 1
314
- }],
315
- uri: url,
316
- __self: _this,
317
- __source: {
318
- fileName: _jsxFileName,
319
- lineNumber: 313,
320
- columnNumber: 23
321
- }
322
- }), isLoadingImage && _react["default"].createElement(_reactNative.View, {
323
- style: {
324
- position: 'absolute'
325
- },
326
- __self: _this,
327
- __source: {
328
- fileName: _jsxFileName,
329
- lineNumber: 333,
330
- columnNumber: 25
331
- }
332
- }, _react["default"].createElement(ImageLoadingIndicator, {
333
- style: styles.imageLoadingIndicatorStyle,
334
- __self: _this,
335
- __source: {
336
- fileName: _jsxFileName,
337
- lineNumber: 334,
338
- columnNumber: 27
339
- }
340
- })), isLoadingImageError && _react["default"].createElement(_reactNative.View, {
341
- style: {
342
- position: 'absolute'
343
- },
344
- __self: _this,
345
- __source: {
346
- fileName: _jsxFileName,
347
- lineNumber: 338,
348
- columnNumber: 25
349
- }
350
- }, _react["default"].createElement(ImageLoadingFailedIndicator, {
351
- style: styles.imageLoadingIndicatorStyle,
352
- __self: _this,
353
- __source: {
354
- fileName: _jsxFileName,
355
- lineNumber: 339,
356
- columnNumber: 27
357
- }
358
- }))), colIndex === numOfColumns - 1 && rowIndex === numOfRows - 1 && imagesAndVideos.length > 4 ? _react["default"].createElement(_reactNative.View, {
359
- style: [_reactNative.StyleSheet.absoluteFillObject, styles.moreImagesContainer, {
360
- backgroundColor: overlay
361
- }, moreImagesContainer],
362
- __self: _this,
363
- __source: {
364
- fileName: _jsxFileName,
365
- lineNumber: 347,
366
- columnNumber: 21
367
- }
368
- }, _react["default"].createElement(_reactNative.Text, {
369
- style: [styles.moreImagesText, moreImagesText],
370
- __self: _this,
371
- __source: {
372
- fileName: _jsxFileName,
373
- lineNumber: 355,
374
- columnNumber: 23
375
- }
376
- }, "+" + (imagesAndVideos.length - 4))) : null);
226
+ });
377
227
  }));
378
228
  }));
379
229
  };
380
230
 
231
+ var GalleryThumbnail = function GalleryThumbnail(_ref) {
232
+ var additionalTouchableProps = _ref.additionalTouchableProps,
233
+ borderRadius = _ref.borderRadius,
234
+ colIndex = _ref.colIndex,
235
+ ImageLoadingFailedIndicator = _ref.ImageLoadingFailedIndicator,
236
+ ImageLoadingIndicator = _ref.ImageLoadingIndicator,
237
+ imagesAndVideos = _ref.imagesAndVideos,
238
+ invertedDirections = _ref.invertedDirections,
239
+ legacyImageViewerSwipeBehaviour = _ref.legacyImageViewerSwipeBehaviour,
240
+ message = _ref.message,
241
+ numOfColumns = _ref.numOfColumns,
242
+ numOfRows = _ref.numOfRows,
243
+ _onLongPress = _ref.onLongPress,
244
+ _onPress = _ref.onPress,
245
+ _onPressIn = _ref.onPressIn,
246
+ preventPress = _ref.preventPress,
247
+ rowIndex = _ref.rowIndex,
248
+ setImage = _ref.setImage,
249
+ setImages = _ref.setImages,
250
+ setOverlay = _ref.setOverlay,
251
+ thumbnail = _ref.thumbnail,
252
+ VideoThumbnail = _ref.VideoThumbnail;
253
+
254
+ var _useLoadingImage = (0, _useLoadingImage2.useLoadingImage)(),
255
+ isLoadingImage = _useLoadingImage.isLoadingImage,
256
+ isLoadingImageError = _useLoadingImage.isLoadingImageError,
257
+ setLoadingImage = _useLoadingImage.setLoadingImage,
258
+ setLoadingImageError = _useLoadingImage.setLoadingImageError;
259
+
260
+ var _useTheme2 = (0, _ThemeContext.useTheme)(),
261
+ _useTheme2$theme = _useTheme2.theme,
262
+ overlay = _useTheme2$theme.colors.overlay,
263
+ _useTheme2$theme$mess = _useTheme2$theme.messageSimple.gallery,
264
+ image = _useTheme2$theme$mess.image,
265
+ imageContainer = _useTheme2$theme$mess.imageContainer,
266
+ moreImagesContainer = _useTheme2$theme$mess.moreImagesContainer,
267
+ moreImagesText = _useTheme2$theme$mess.moreImagesText;
268
+
269
+ var openImageViewer = function openImageViewer() {
270
+ if (!legacyImageViewerSwipeBehaviour && message) {
271
+ setImages([message]);
272
+ setImage({
273
+ messageId: message.id,
274
+ url: thumbnail.url
275
+ });
276
+ setOverlay('gallery');
277
+ } else if (legacyImageViewerSwipeBehaviour) {
278
+ setImage({
279
+ messageId: message == null ? void 0 : message.id,
280
+ url: thumbnail.url
281
+ });
282
+ setOverlay('gallery');
283
+ }
284
+ };
285
+
286
+ var defaultOnPress = function defaultOnPress() {
287
+ if (thumbnail.type === 'video' && !(0, _native.isVideoPackageAvailable)()) {
288
+ (0, _openUrlSafely.openUrlSafely)(thumbnail.url);
289
+ } else {
290
+ openImageViewer();
291
+ }
292
+ };
293
+
294
+ return _react["default"].createElement(_reactNative.TouchableOpacity, (0, _extends2["default"])({
295
+ activeOpacity: 0.8,
296
+ disabled: preventPress,
297
+ key: "gallery-item-" + message.id + "/" + colIndex + "/" + rowIndex + "/" + imagesAndVideos.length,
298
+ onLongPress: function onLongPress(event) {
299
+ if (_onLongPress) {
300
+ _onLongPress({
301
+ emitter: 'gallery',
302
+ event: event
303
+ });
304
+ }
305
+ },
306
+ onPress: function onPress(event) {
307
+ if (_onPress) {
308
+ _onPress({
309
+ defaultHandler: defaultOnPress,
310
+ emitter: 'gallery',
311
+ event: event
312
+ });
313
+ }
314
+ },
315
+ onPressIn: function onPressIn(event) {
316
+ if (_onPressIn) {
317
+ _onPressIn({
318
+ defaultHandler: defaultOnPress,
319
+ emitter: 'gallery',
320
+ event: event
321
+ });
322
+ }
323
+ },
324
+ style: [styles.imageContainer, {
325
+ height: thumbnail.height,
326
+ width: thumbnail.width
327
+ }, imageContainer],
328
+ testID: "gallery-" + (invertedDirections ? 'row' : 'column') + "-" + colIndex + "-item-" + rowIndex
329
+ }, additionalTouchableProps, {
330
+ __self: _this,
331
+ __source: {
332
+ fileName: _jsxFileName,
333
+ lineNumber: 357,
334
+ columnNumber: 5
335
+ }
336
+ }), thumbnail.type === 'video' ? _react["default"].createElement(VideoThumbnail, {
337
+ style: [borderRadius, image, {
338
+ height: thumbnail.height - 1,
339
+ width: thumbnail.width - 1
340
+ }],
341
+ thumb_url: thumbnail.thumb_url,
342
+ __self: _this,
343
+ __source: {
344
+ fileName: _jsxFileName,
345
+ lineNumber: 399,
346
+ columnNumber: 9
347
+ }
348
+ }) : _react["default"].createElement(_reactNative.View, {
349
+ style: styles.imageContainerStyle,
350
+ __self: _this,
351
+ __source: {
352
+ fileName: _jsxFileName,
353
+ lineNumber: 411,
354
+ columnNumber: 9
355
+ }
356
+ }, _react["default"].createElement(MemoizedGalleryImage, {
357
+ onError: function onError(error) {
358
+ console.warn(error);
359
+ setLoadingImage(false);
360
+ setLoadingImageError(true);
361
+ },
362
+ onLoadEnd: function onLoadEnd() {
363
+ return setLoadingImage(false);
364
+ },
365
+ onLoadStart: function onLoadStart() {
366
+ return setLoadingImage(true);
367
+ },
368
+ resizeMode: thumbnail.resizeMode,
369
+ style: [borderRadius, image, {
370
+ height: thumbnail.height - 1,
371
+ width: thumbnail.width - 1
372
+ }],
373
+ uri: thumbnail.url,
374
+ __self: _this,
375
+ __source: {
376
+ fileName: _jsxFileName,
377
+ lineNumber: 412,
378
+ columnNumber: 11
379
+ }
380
+ }), isLoadingImage && _react["default"].createElement(_reactNative.View, {
381
+ style: {
382
+ position: 'absolute'
383
+ },
384
+ __self: _this,
385
+ __source: {
386
+ fileName: _jsxFileName,
387
+ lineNumber: 432,
388
+ columnNumber: 13
389
+ }
390
+ }, _react["default"].createElement(ImageLoadingIndicator, {
391
+ style: styles.imageLoadingIndicatorStyle,
392
+ __self: _this,
393
+ __source: {
394
+ fileName: _jsxFileName,
395
+ lineNumber: 433,
396
+ columnNumber: 15
397
+ }
398
+ })), isLoadingImageError && _react["default"].createElement(_reactNative.View, {
399
+ style: {
400
+ position: 'absolute'
401
+ },
402
+ __self: _this,
403
+ __source: {
404
+ fileName: _jsxFileName,
405
+ lineNumber: 437,
406
+ columnNumber: 13
407
+ }
408
+ }, _react["default"].createElement(ImageLoadingFailedIndicator, {
409
+ style: styles.imageLoadingIndicatorStyle,
410
+ __self: _this,
411
+ __source: {
412
+ fileName: _jsxFileName,
413
+ lineNumber: 438,
414
+ columnNumber: 15
415
+ }
416
+ }))), colIndex === numOfColumns - 1 && rowIndex === numOfRows - 1 && imagesAndVideos.length > 4 ? _react["default"].createElement(_reactNative.View, {
417
+ style: [_reactNative.StyleSheet.absoluteFillObject, styles.moreImagesContainer, {
418
+ backgroundColor: overlay
419
+ }, moreImagesContainer],
420
+ __self: _this,
421
+ __source: {
422
+ fileName: _jsxFileName,
423
+ lineNumber: 444,
424
+ columnNumber: 9
425
+ }
426
+ }, _react["default"].createElement(_reactNative.Text, {
427
+ style: [styles.moreImagesText, moreImagesText],
428
+ __self: _this,
429
+ __source: {
430
+ fileName: _jsxFileName,
431
+ lineNumber: 452,
432
+ columnNumber: 11
433
+ }
434
+ }, "+" + (imagesAndVideos.length - 4))) : null);
435
+ };
436
+
381
437
  var areEqual = function areEqual(prevProps, nextProps) {
382
438
  var prevGroupStyles = prevProps.groupStyles,
383
439
  prevHasThreadReplies = prevProps.hasThreadReplies,
@@ -492,7 +548,7 @@ var Gallery = function Gallery(props) {
492
548
  __self: _this,
493
549
  __source: {
494
550
  fileName: _jsxFileName,
495
- lineNumber: 497,
551
+ lineNumber: 588,
496
552
  columnNumber: 5
497
553
  }
498
554
  });