stream-chat-react-native-core 4.8.0 → 4.9.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.
- package/lib/commonjs/components/Attachment/GallaryImage.js +41 -0
- package/lib/commonjs/components/Attachment/GallaryImage.js.map +1 -0
- package/lib/commonjs/components/Attachment/Gallery.js +101 -36
- package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
- package/lib/commonjs/components/Attachment/Giphy.js +118 -25
- package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
- package/lib/commonjs/components/Attachment/ImageLoadingFailedIndicator.js +105 -0
- package/lib/commonjs/components/Attachment/ImageLoadingFailedIndicator.js.map +1 -0
- package/lib/commonjs/components/Attachment/ImageLoadingIndicator.js +58 -0
- package/lib/commonjs/components/Attachment/ImageLoadingIndicator.js.map +1 -0
- package/lib/commonjs/components/Attachment/hooks/useLoadingImage.js +32 -0
- package/lib/commonjs/components/Attachment/hooks/useLoadingImage.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +3 -2
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +1 -1
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -1
- package/lib/commonjs/components/Channel/Channel.js +23 -13
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +4 -0
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +43 -19
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js +28 -21
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/commonjs/components/MessageInput/ImageUploadPreview.js +16 -17
- package/lib/commonjs/components/MessageInput/ImageUploadPreview.js.map +1 -1
- package/lib/commonjs/components/RTLComponents/WritingDirectionAwareText.js +43 -0
- package/lib/commonjs/components/RTLComponents/WritingDirectionAwareText.js.map +1 -0
- package/lib/commonjs/components/Reply/Reply.js +7 -2
- package/lib/commonjs/components/Reply/Reply.js.map +1 -1
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js +2 -2
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/commonjs/contexts/themeContext/utils/theme.js +4 -0
- package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/commonjs/mock-builders/api/channelMocks.js +299 -0
- package/lib/commonjs/mock-builders/api/channelMocks.js.map +1 -0
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Attachment/GallaryImage.js +41 -0
- package/lib/module/components/Attachment/GallaryImage.js.map +1 -0
- package/lib/module/components/Attachment/Gallery.js +101 -36
- package/lib/module/components/Attachment/Gallery.js.map +1 -1
- package/lib/module/components/Attachment/Giphy.js +118 -25
- package/lib/module/components/Attachment/Giphy.js.map +1 -1
- package/lib/module/components/Attachment/ImageLoadingFailedIndicator.js +105 -0
- package/lib/module/components/Attachment/ImageLoadingFailedIndicator.js.map +1 -0
- package/lib/module/components/Attachment/ImageLoadingIndicator.js +58 -0
- package/lib/module/components/Attachment/ImageLoadingIndicator.js.map +1 -0
- package/lib/module/components/Attachment/hooks/useLoadingImage.js +32 -0
- package/lib/module/components/Attachment/hooks/useLoadingImage.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +3 -2
- package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -1
- package/lib/module/components/Channel/Channel.js +23 -13
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +4 -0
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +43 -19
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/module/components/MessageInput/FileUploadPreview.js +28 -21
- package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/module/components/MessageInput/ImageUploadPreview.js +16 -17
- package/lib/module/components/MessageInput/ImageUploadPreview.js.map +1 -1
- package/lib/module/components/RTLComponents/WritingDirectionAwareText.js +43 -0
- package/lib/module/components/RTLComponents/WritingDirectionAwareText.js.map +1 -0
- package/lib/module/components/Reply/Reply.js +7 -2
- package/lib/module/components/Reply/Reply.js.map +1 -1
- package/lib/module/contexts/messagesContext/MessagesContext.js +2 -2
- package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/module/contexts/themeContext/utils/theme.js +4 -0
- package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/module/mock-builders/api/channelMocks.js +299 -0
- package/lib/module/mock-builders/api/channelMocks.js.map +1 -0
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Attachment/GallaryImage.d.ts +5 -0
- package/lib/typescript/components/Attachment/Gallery.d.ts +1 -1
- package/lib/typescript/components/Attachment/Giphy.d.ts +1 -1
- package/lib/typescript/components/Attachment/ImageLoadingFailedIndicator.d.ts +3 -0
- package/lib/typescript/components/Attachment/ImageLoadingIndicator.d.ts +3 -0
- package/lib/typescript/components/Attachment/hooks/useLoadingImage.d.ts +7 -0
- package/lib/typescript/components/Channel/Channel.d.ts +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
- package/lib/typescript/components/ChannelPreview/hooks/__tests__/useLatestMessagePreview.test.d.ts +1 -0
- package/lib/typescript/components/RTLComponents/WritingDirectionAwareText.d.ts +4 -0
- package/lib/typescript/components/Reply/__tests__/Reply.test.d.ts +1 -0
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +10 -0
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts +4 -0
- package/lib/typescript/mock-builders/api/channelMocks.d.ts +14 -0
- package/lib/typescript/mock-builders/api/getOrCreateChannel.d.ts +7 -0
- package/lib/typescript/mock-builders/api/useMockedApis.d.ts +1 -0
- package/lib/typescript/mock-builders/generator/channel.d.ts +116 -0
- package/package.json +3 -2
- package/src/components/Attachment/GallaryImage.tsx +22 -0
- package/src/components/Attachment/Gallery.tsx +68 -35
- package/src/components/Attachment/Giphy.tsx +68 -1
- package/src/components/Attachment/ImageLoadingFailedIndicator.tsx +56 -0
- package/src/components/Attachment/ImageLoadingIndicator.tsx +31 -0
- package/src/components/Attachment/__tests__/Attachment.test.js +9 -3
- package/src/components/Attachment/__tests__/Gallery.test.js +36 -1
- package/src/components/Attachment/__tests__/Giphy.test.js +110 -90
- package/src/components/Attachment/hooks/useLoadingImage.tsx +8 -0
- package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +2 -1
- package/src/components/AutoCompleteInput/AutoCompleteSuggestionItem.tsx +1 -1
- package/src/components/Channel/Channel.tsx +8 -0
- package/src/components/Channel/hooks/useCreateMessagesContext.ts +4 -0
- package/src/components/ChannelPreview/__tests__/ChannelPreviewMessenger.test.js +0 -1
- package/src/components/ChannelPreview/hooks/__tests__/useLatestMessagePreview.test.tsx +145 -0
- package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +50 -24
- package/src/components/MessageInput/FileUploadPreview.tsx +11 -8
- package/src/components/MessageInput/ImageUploadPreview.tsx +4 -5
- package/src/components/MessageInput/__tests__/__snapshots__/MessageInput.test.js.snap +1 -0
- package/src/components/RTLComponents/WritingDirectionAwareText.tsx +17 -0
- package/src/components/Reply/Reply.tsx +19 -3
- package/src/components/Reply/__tests__/Reply.test.tsx +48 -0
- package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +1 -0
- package/src/contexts/messagesContext/MessagesContext.tsx +15 -0
- package/src/contexts/themeContext/utils/theme.ts +8 -0
- package/src/mock-builders/api/channelMocks.tsx +272 -0
- package/src/version.json +1 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.GalleryImage = 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 _utils = require("../../utils/utils");
|
|
17
|
+
|
|
18
|
+
var _excluded = ["uri"];
|
|
19
|
+
|
|
20
|
+
var _this = this,
|
|
21
|
+
_jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Attachment/GallaryImage.tsx";
|
|
22
|
+
|
|
23
|
+
var GalleryImage = function GalleryImage(props) {
|
|
24
|
+
var uri = props.uri,
|
|
25
|
+
rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
26
|
+
return _react["default"].createElement(_reactNative.ImageBackground, (0, _extends2["default"])({}, rest, {
|
|
27
|
+
accessibilityLabel: "gallery-image",
|
|
28
|
+
source: {
|
|
29
|
+
uri: (0, _utils.makeImageCompatibleUrl)(uri)
|
|
30
|
+
},
|
|
31
|
+
__self: _this,
|
|
32
|
+
__source: {
|
|
33
|
+
fileName: _jsxFileName,
|
|
34
|
+
lineNumber: 14,
|
|
35
|
+
columnNumber: 5
|
|
36
|
+
}
|
|
37
|
+
}));
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
exports.GalleryImage = GalleryImage;
|
|
41
|
+
//# sourceMappingURL=GallaryImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["GallaryImage.tsx"],"names":["GalleryImage","props","uri","rest"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;;;;;;AAEO,IAAMA,YAIZ,GAAG,SAJSA,YAIT,CAACC,KAAD,EAAW;AACb,MAAQC,GAAR,GAAyBD,KAAzB,CAAQC,GAAR;AAAA,MAAgBC,IAAhB,6CAAyBF,KAAzB;AAEA,SACE,gCAAC,4BAAD,gCACME,IADN;AAEE,IAAA,kBAAkB,EAAC,eAFrB;AAGE,IAAA,MAAM,EAAE;AACND,MAAAA,GAAG,EAAE,mCAAuBA,GAAvB;AADC,KAHV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KADF;AASD,CAhBM","sourcesContent":["import React from 'react';\nimport { ImageBackground, ImageProps } from 'react-native';\n\nimport { makeImageCompatibleUrl } from '../../utils/utils';\n\nexport const GalleryImage: React.FC<\n Omit<ImageProps, 'height' | 'source'> & {\n uri: string;\n }\n> = (props) => {\n const { uri, ...rest } = props;\n\n return (\n <ImageBackground\n {...rest}\n accessibilityLabel='gallery-image'\n source={{\n uri: makeImageCompatibleUrl(uri),\n }}\n />\n );\n};\n"]}
|
|
@@ -7,16 +7,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.Gallery = void 0;
|
|
9
9
|
|
|
10
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
|
|
12
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
11
|
|
|
14
|
-
var
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
13
|
|
|
16
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
17
15
|
|
|
18
16
|
var _reactNative = require("react-native");
|
|
19
17
|
|
|
18
|
+
var _GallaryImage = require("./GallaryImage");
|
|
19
|
+
|
|
20
|
+
var _useLoadingImage2 = require("./hooks/useLoadingImage");
|
|
21
|
+
|
|
20
22
|
var _buildGallery = require("./utils/buildGallery/buildGallery");
|
|
21
23
|
|
|
22
24
|
var _getGalleryImageBorderRadius = require("./utils/getGalleryImageBorderRadius");
|
|
@@ -37,8 +39,6 @@ var _native = require("../../native");
|
|
|
37
39
|
|
|
38
40
|
var _utils = require("../../utils/utils");
|
|
39
41
|
|
|
40
|
-
var _excluded = ["uri"];
|
|
41
|
-
|
|
42
42
|
var _this = this,
|
|
43
43
|
_jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Attachment/Gallery.tsx";
|
|
44
44
|
|
|
@@ -46,30 +46,13 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
46
46
|
|
|
47
47
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
48
48
|
|
|
49
|
-
var
|
|
50
|
-
var uri = props.uri,
|
|
51
|
-
rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
52
|
-
return _react["default"].createElement(_reactNative.Image, (0, _extends2["default"])({}, rest, {
|
|
53
|
-
source: {
|
|
54
|
-
uri: (0, _utils.makeImageCompatibleUrl)(uri)
|
|
55
|
-
},
|
|
56
|
-
testID: "image-attachment-single",
|
|
57
|
-
__self: _this,
|
|
58
|
-
__source: {
|
|
59
|
-
fileName: _jsxFileName,
|
|
60
|
-
lineNumber: 40,
|
|
61
|
-
columnNumber: 5
|
|
62
|
-
}
|
|
63
|
-
}));
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
var MemoizedGalleryImage = _react["default"].memo(GalleryImage, function (prevProps, nextProps) {
|
|
49
|
+
var MemoizedGalleryImage = _react["default"].memo(_GallaryImage.GalleryImage, function (prevProps, nextProps) {
|
|
67
50
|
return (0, _utils.getUrlWithoutParams)(prevProps.uri) === (0, _utils.getUrlWithoutParams)(nextProps.uri);
|
|
68
51
|
});
|
|
69
52
|
|
|
70
53
|
var styles = _reactNative.StyleSheet.create({
|
|
71
|
-
|
|
72
|
-
|
|
54
|
+
errorTextSize: {
|
|
55
|
+
fontSize: 10
|
|
73
56
|
},
|
|
74
57
|
galleryContainer: {
|
|
75
58
|
borderTopLeftRadius: 13,
|
|
@@ -79,11 +62,22 @@ var styles = _reactNative.StyleSheet.create({
|
|
|
79
62
|
overflow: 'hidden'
|
|
80
63
|
},
|
|
81
64
|
imageContainer: {
|
|
65
|
+
alignItems: 'center',
|
|
82
66
|
display: 'flex',
|
|
83
67
|
flexDirection: 'row',
|
|
84
68
|
justifyContent: 'center',
|
|
85
69
|
padding: 1
|
|
86
70
|
},
|
|
71
|
+
imageContainerStyle: {
|
|
72
|
+
alignItems: 'center',
|
|
73
|
+
flex: 1,
|
|
74
|
+
justifyContent: 'center'
|
|
75
|
+
},
|
|
76
|
+
imageLoadingIndicatorStyle: {
|
|
77
|
+
alignItems: 'center',
|
|
78
|
+
justifyContent: 'center',
|
|
79
|
+
position: 'absolute'
|
|
80
|
+
},
|
|
87
81
|
moreImagesContainer: {
|
|
88
82
|
alignItems: 'center',
|
|
89
83
|
justifyContent: 'center',
|
|
@@ -101,6 +95,8 @@ var GalleryWithContext = function GalleryWithContext(props) {
|
|
|
101
95
|
alignment = props.alignment,
|
|
102
96
|
groupStyles = props.groupStyles,
|
|
103
97
|
hasThreadReplies = props.hasThreadReplies,
|
|
98
|
+
ImageLoadingFailedIndicator = props.ImageLoadingFailedIndicator,
|
|
99
|
+
ImageLoadingIndicator = props.ImageLoadingIndicator,
|
|
104
100
|
images = props.images,
|
|
105
101
|
legacyImageViewerSwipeBehaviour = props.legacyImageViewerSwipeBehaviour,
|
|
106
102
|
message = props.message,
|
|
@@ -115,6 +111,12 @@ var GalleryWithContext = function GalleryWithContext(props) {
|
|
|
115
111
|
videos = props.videos,
|
|
116
112
|
VideoThumbnail = props.VideoThumbnail;
|
|
117
113
|
|
|
114
|
+
var _useLoadingImage = (0, _useLoadingImage2.useLoadingImage)(),
|
|
115
|
+
isLoadingImage = _useLoadingImage.isLoadingImage,
|
|
116
|
+
isLoadingImageError = _useLoadingImage.isLoadingImageError,
|
|
117
|
+
setLoadingImage = _useLoadingImage.setLoadingImage,
|
|
118
|
+
setLoadingImageError = _useLoadingImage.setLoadingImageError;
|
|
119
|
+
|
|
118
120
|
var _useTheme = (0, _ThemeContext.useTheme)(),
|
|
119
121
|
_useTheme$theme = _useTheme.theme,
|
|
120
122
|
overlay = _useTheme$theme.colors.overlay,
|
|
@@ -168,7 +170,7 @@ var GalleryWithContext = function GalleryWithContext(props) {
|
|
|
168
170
|
__self: _this,
|
|
169
171
|
__source: {
|
|
170
172
|
fileName: _jsxFileName,
|
|
171
|
-
lineNumber:
|
|
173
|
+
lineNumber: 188,
|
|
172
174
|
columnNumber: 5
|
|
173
175
|
}
|
|
174
176
|
}, thumbnailGrid.map(function (rows, colIndex) {
|
|
@@ -182,7 +184,7 @@ var GalleryWithContext = function GalleryWithContext(props) {
|
|
|
182
184
|
__self: _this,
|
|
183
185
|
__source: {
|
|
184
186
|
fileName: _jsxFileName,
|
|
185
|
-
lineNumber:
|
|
187
|
+
lineNumber: 205,
|
|
186
188
|
columnNumber: 11
|
|
187
189
|
}
|
|
188
190
|
}, rows.map(function (_ref, rowIndex) {
|
|
@@ -271,7 +273,7 @@ var GalleryWithContext = function GalleryWithContext(props) {
|
|
|
271
273
|
__self: _this,
|
|
272
274
|
__source: {
|
|
273
275
|
fileName: _jsxFileName,
|
|
274
|
-
lineNumber:
|
|
276
|
+
lineNumber: 257,
|
|
275
277
|
columnNumber: 17
|
|
276
278
|
}
|
|
277
279
|
}), type === 'video' ? _react["default"].createElement(VideoThumbnail, {
|
|
@@ -282,10 +284,29 @@ var GalleryWithContext = function GalleryWithContext(props) {
|
|
|
282
284
|
__self: _this,
|
|
283
285
|
__source: {
|
|
284
286
|
fileName: _jsxFileName,
|
|
285
|
-
lineNumber:
|
|
287
|
+
lineNumber: 301,
|
|
286
288
|
columnNumber: 21
|
|
287
289
|
}
|
|
288
|
-
}) : _react["default"].createElement(
|
|
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
|
+
},
|
|
289
310
|
resizeMode: resizeMode,
|
|
290
311
|
style: [borderRadius, image, {
|
|
291
312
|
height: height - 1,
|
|
@@ -295,17 +316,53 @@ var GalleryWithContext = function GalleryWithContext(props) {
|
|
|
295
316
|
__self: _this,
|
|
296
317
|
__source: {
|
|
297
318
|
fileName: _jsxFileName,
|
|
298
|
-
lineNumber:
|
|
299
|
-
columnNumber:
|
|
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
|
|
300
357
|
}
|
|
301
|
-
}), colIndex === numOfColumns - 1 && rowIndex === numOfRows - 1 && imagesAndVideos.length > 4 ? _react["default"].createElement(_reactNative.View, {
|
|
358
|
+
}))), colIndex === numOfColumns - 1 && rowIndex === numOfRows - 1 && imagesAndVideos.length > 4 ? _react["default"].createElement(_reactNative.View, {
|
|
302
359
|
style: [_reactNative.StyleSheet.absoluteFillObject, styles.moreImagesContainer, {
|
|
303
360
|
backgroundColor: overlay
|
|
304
361
|
}, moreImagesContainer],
|
|
305
362
|
__self: _this,
|
|
306
363
|
__source: {
|
|
307
364
|
fileName: _jsxFileName,
|
|
308
|
-
lineNumber:
|
|
365
|
+
lineNumber: 347,
|
|
309
366
|
columnNumber: 21
|
|
310
367
|
}
|
|
311
368
|
}, _react["default"].createElement(_reactNative.Text, {
|
|
@@ -313,7 +370,7 @@ var GalleryWithContext = function GalleryWithContext(props) {
|
|
|
313
370
|
__self: _this,
|
|
314
371
|
__source: {
|
|
315
372
|
fileName: _jsxFileName,
|
|
316
|
-
lineNumber:
|
|
373
|
+
lineNumber: 355,
|
|
317
374
|
columnNumber: 23
|
|
318
375
|
}
|
|
319
376
|
}, "+" + (imagesAndVideos.length - 4))) : null);
|
|
@@ -356,6 +413,8 @@ var Gallery = function Gallery(props) {
|
|
|
356
413
|
propAlignment = props.alignment,
|
|
357
414
|
propGroupStyles = props.groupStyles,
|
|
358
415
|
hasThreadReplies = props.hasThreadReplies,
|
|
416
|
+
PropImageLoadingFailedIndicator = props.ImageLoadingFailedIndicator,
|
|
417
|
+
PropImageLoadingIndicator = props.ImageLoadingIndicator,
|
|
359
418
|
propImages = props.images,
|
|
360
419
|
propOnLongPress = props.onLongPress,
|
|
361
420
|
propOnPress = props.onPress,
|
|
@@ -385,6 +444,8 @@ var Gallery = function Gallery(props) {
|
|
|
385
444
|
|
|
386
445
|
var _useMessagesContext = (0, _MessagesContext.useMessagesContext)(),
|
|
387
446
|
contextAdditionalTouchableProps = _useMessagesContext.additionalTouchableProps,
|
|
447
|
+
ContextImageLoadingFailedIndicator = _useMessagesContext.ImageLoadingFailedIndicator,
|
|
448
|
+
ContextImageLoadingIndicator = _useMessagesContext.ImageLoadingIndicator,
|
|
388
449
|
legacyImageViewerSwipeBehaviour = _useMessagesContext.legacyImageViewerSwipeBehaviour,
|
|
389
450
|
ContextVideoThumnbnail = _useMessagesContext.VideoThumbnail;
|
|
390
451
|
|
|
@@ -405,12 +466,16 @@ var Gallery = function Gallery(props) {
|
|
|
405
466
|
var setOverlay = propSetOverlay || contextSetOverlay;
|
|
406
467
|
var threadList = propThreadList || contextThreadList;
|
|
407
468
|
var VideoThumbnail = PropVideoThumbnail || ContextVideoThumnbnail;
|
|
469
|
+
var ImageLoadingFailedIndicator = PropImageLoadingFailedIndicator || ContextImageLoadingFailedIndicator;
|
|
470
|
+
var ImageLoadingIndicator = PropImageLoadingIndicator || ContextImageLoadingIndicator;
|
|
408
471
|
return _react["default"].createElement(MemoizedGallery, {
|
|
409
472
|
additionalTouchableProps: additionalTouchableProps,
|
|
410
473
|
alignment: alignment,
|
|
411
474
|
channelId: message == null ? void 0 : message.cid,
|
|
412
475
|
groupStyles: groupStyles,
|
|
413
476
|
hasThreadReplies: hasThreadReplies || !!(message != null && message.reply_count),
|
|
477
|
+
ImageLoadingFailedIndicator: ImageLoadingFailedIndicator,
|
|
478
|
+
ImageLoadingIndicator: ImageLoadingIndicator,
|
|
414
479
|
images: images,
|
|
415
480
|
legacyImageViewerSwipeBehaviour: legacyImageViewerSwipeBehaviour,
|
|
416
481
|
message: message,
|
|
@@ -427,7 +492,7 @@ var Gallery = function Gallery(props) {
|
|
|
427
492
|
__self: _this,
|
|
428
493
|
__source: {
|
|
429
494
|
fileName: _jsxFileName,
|
|
430
|
-
lineNumber:
|
|
495
|
+
lineNumber: 497,
|
|
431
496
|
columnNumber: 5
|
|
432
497
|
}
|
|
433
498
|
});
|
|
@@ -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","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","openImageViewer","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 { openUrlSafely } from './utils/openUrlSafely';\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 { isVideoPackageAvailable } from '../../native';\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 openImageViewer = () => {\n if (!legacyImageViewerSwipeBehaviour && message) {\n // Added if-else to keep the logic readable, instead of DRY.\n // if - legacyImageViewerSwipeBehaviour is disabled\n // else - legacyImageViewerSwipeBehaviour is enabled\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 defaultOnPress = () => {\n if (type === 'video' && !isVideoPackageAvailable()) {\n // This condition is kinda unreachable, since we render videos as file attachment if the video\n // library is not installed. But doesn't hurt to have extra safeguard, in case of some customizations.\n openUrlSafely(url);\n } else {\n openImageViewer();\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"]}
|
|
1
|
+
{"version":3,"sources":["Gallery.tsx"],"names":["MemoizedGalleryImage","React","memo","GalleryImage","prevProps","nextProps","uri","styles","StyleSheet","create","errorTextSize","fontSize","galleryContainer","borderTopLeftRadius","borderTopRightRadius","flexDirection","flexWrap","overflow","imageContainer","alignItems","display","justifyContent","padding","imageContainerStyle","flex","imageLoadingIndicatorStyle","position","moreImagesContainer","margin","moreImagesText","color","fontWeight","GalleryWithContext","props","additionalTouchableProps","alignment","groupStyles","hasThreadReplies","ImageLoadingFailedIndicator","ImageLoadingIndicator","images","legacyImageViewerSwipeBehaviour","message","onLongPress","onPress","onPressIn","preventPress","setImage","setImages","setOverlay","threadList","videos","VideoThumbnail","isLoadingImage","isLoadingImageError","setLoadingImage","setLoadingImageError","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","openImageViewer","defaultOnPress","borderRadius","event","emitter","defaultHandler","error","console","warn","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","PropImageLoadingFailedIndicator","PropImageLoadingIndicator","propImages","propOnLongPress","propOnPress","propOnPressIn","propPreventPress","propSetImage","propSetOverlay","propThreadList","propVideos","PropVideoThumbnail","contextSetImage","contextAlignment","contextGroupStyles","contextImages","contextOnLongPress","contextOnPress","contextOnPressIn","contextPreventPress","contextThreadList","contextVideos","contextAdditionalTouchableProps","ContextImageLoadingFailedIndicator","ContextImageLoadingIndicator","ContextVideoThumnbnail","contextSetOverlay","channelId","cid","reply_count","displayName"],"mappings":"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","sourcesContent":["import React, { useMemo } from 'react';\nimport { StyleSheet, Text, TouchableOpacity, View } from 'react-native';\n\nimport { GalleryImage } from './GallaryImage';\nimport { useLoadingImage } from './hooks/useLoadingImage';\nimport { buildGallery } from './utils/buildGallery/buildGallery';\n\nimport { getGalleryImageBorderRadius } from './utils/getGalleryImageBorderRadius';\n\nimport { openUrlSafely } from './utils/openUrlSafely';\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 { isVideoPackageAvailable } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getUrlWithoutParams } from '../../utils/utils';\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 errorTextSize: { fontSize: 10 },\n galleryContainer: {\n borderTopLeftRadius: 13,\n borderTopRightRadius: 13,\n flexDirection: 'row',\n flexWrap: 'wrap',\n overflow: 'hidden',\n },\n imageContainer: {\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n padding: 1,\n },\n imageContainerStyle: { alignItems: 'center', flex: 1, justifyContent: 'center' },\n imageLoadingIndicatorStyle: {\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n },\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'\n | 'legacyImageViewerSwipeBehaviour'\n | 'VideoThumbnail'\n | 'ImageLoadingIndicator'\n | 'ImageLoadingFailedIndicator'\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 ImageLoadingFailedIndicator,\n ImageLoadingIndicator,\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 { isLoadingImage, isLoadingImageError, setLoadingImage, setLoadingImageError } =\n useLoadingImage();\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 openImageViewer = () => {\n if (!legacyImageViewerSwipeBehaviour && message) {\n // Added if-else to keep the logic readable, instead of DRY.\n // if - legacyImageViewerSwipeBehaviour is disabled\n // else - legacyImageViewerSwipeBehaviour is enabled\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 defaultOnPress = () => {\n if (type === 'video' && !isVideoPackageAvailable()) {\n // This condition is kinda unreachable, since we render videos as file attachment if the video\n // library is not installed. But doesn't hurt to have extra safeguard, in case of some customizations.\n openUrlSafely(url);\n } else {\n openImageViewer();\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 <View style={styles.imageContainerStyle}>\n <MemoizedGalleryImage\n onError={(error) => {\n console.warn(error);\n setLoadingImage(false);\n setLoadingImageError(true);\n }}\n onLoadEnd={() => setLoadingImage(false)}\n onLoadStart={() => setLoadingImage(true)}\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 {isLoadingImage && (\n <View style={{ position: 'absolute' }}>\n <ImageLoadingIndicator style={styles.imageLoadingIndicatorStyle} />\n </View>\n )}\n {isLoadingImageError && (\n <View style={{ position: 'absolute' }}>\n <ImageLoadingFailedIndicator style={styles.imageLoadingIndicatorStyle} />\n </View>\n )}\n </View>\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 ImageLoadingFailedIndicator: PropImageLoadingFailedIndicator,\n ImageLoadingIndicator: PropImageLoadingIndicator,\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 ImageLoadingFailedIndicator: ContextImageLoadingFailedIndicator,\n ImageLoadingIndicator: ContextImageLoadingIndicator,\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 const ImageLoadingFailedIndicator =\n PropImageLoadingFailedIndicator || ContextImageLoadingFailedIndicator;\n const ImageLoadingIndicator = PropImageLoadingIndicator || ContextImageLoadingIndicator;\n\n return (\n <MemoizedGallery\n {...{\n additionalTouchableProps,\n alignment,\n channelId: message?.cid,\n groupStyles,\n hasThreadReplies: hasThreadReplies || !!message?.reply_count,\n ImageLoadingFailedIndicator,\n ImageLoadingIndicator,\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"]}
|