stream-chat-react-native-core 5.22.2-beta.6 → 5.22.2-beta.7

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.
@@ -3,7 +3,7 @@
3
3
  "1 Thread Reply": "",
4
4
  "Allow access to your Gallery": "Geef toegang tot uw galerij",
5
5
  "Allow camera access in device settings": "Sta cameratoegang toe in de apparaatinstellingen",
6
- "Also send to channel": "Stuur ook naar kanaal",
6
+ "Also send to channel": "",
7
7
  "Are you sure you want to permanently delete this message?": "",
8
8
  "Block User": "",
9
9
  "Cancel": "",
@@ -14,49 +14,49 @@
14
14
  "Device camera is used to take photos or videos.": "De camera van het apparaat wordt gebruikt om foto's of video's te maken.",
15
15
  "Do you want to send a copy of this message to a moderator for further investigation?": "",
16
16
  "Edit Message": "",
17
- "Editing Message": "Bericht aanpassen",
17
+ "Editing Message": "",
18
18
  "Emoji matching": "",
19
19
  "Empty message...": "",
20
20
  "Error loading": "",
21
21
  "Error loading channel list...": "",
22
22
  "Error loading messages for this channel...": "",
23
23
  "Error while loading, please reload/refresh": "",
24
- "File type not supported": "Bestandstype niet ondersteund",
24
+ "File type not supported": "",
25
25
  "Flag": "",
26
26
  "Flag Message": "",
27
27
  "Flag action failed either due to a network issue or the message is already flagged": "",
28
28
  "How about sending your first message to a friend?": "",
29
29
  "Instant Commands": "",
30
30
  "Let's start chatting!": "",
31
- "Links are disabled": "Het versturen van links staat uit",
32
- "Loading channels...": "Kanalen aan het laden...",
33
- "Loading messages...": "Berichten aan het laden...",
34
- "Loading...": "Aan het laden...",
35
- "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "Maximale uploadlimiet voor bestandsgrootte bereikt. Upload een bestand van minder dan {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.",
31
+ "Links are disabled": "",
32
+ "Loading channels...": "",
33
+ "Loading messages...": "",
34
+ "Loading...": "",
35
+ "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "",
36
36
  "Message Reactions": "",
37
37
  "Message deleted": "",
38
38
  "Message flagged": "",
39
39
  "Mute User": "",
40
- "Not supported": "niet ondersteund",
40
+ "Not supported": "",
41
41
  "Nothing yet...": "",
42
42
  "Ok": "",
43
- "Only visible to you": "Alleen zichtbaar voor jou",
43
+ "Only visible to you": "",
44
44
  "Open Settings": "Open instellingen",
45
- "Photo": "",
45
+ "Photo": "Foto",
46
46
  "Photos and Videos": "Foto's en video's",
47
47
  "Pin to Conversation": "",
48
- "Pinned by": "Vastgemaakt door",
48
+ "Pinned by": "",
49
49
  "Please enable access to your photos and videos so you can share them.": "Schakel toegang tot uw foto's en video's in zodat u ze kunt delen.",
50
50
  "Please select a channel first": "Selecteer eerst een kanaal",
51
51
  "Reconnecting...": "",
52
52
  "Reply": "",
53
- "Reply to Message": "",
53
+ "Reply to Message": "Beantwoord bericht",
54
54
  "Resend": "",
55
- "Search GIFs": "",
55
+ "Search GIFs": "Zoek GIF's",
56
56
  "Select More Photos": "Selecteer Meer foto's",
57
- "Send a message": "",
58
- "Sending links is not allowed in this conversation": "In dit gesprek is het niet toegestaan links te versturen",
59
- "Slow mode ON": "",
57
+ "Send a message": "Stuur een bericht",
58
+ "Sending links is not allowed in this conversation": "",
59
+ "Slow mode ON": "Langzame modus aan",
60
60
  "The message has been reported to a moderator.": "",
61
61
  "Thread Reply": "",
62
62
  "Unblock User": "",
@@ -64,13 +64,13 @@
64
64
  "Unmute User": "",
65
65
  "Unpin from Conversation": "",
66
66
  "Unread Messages": "",
67
- "Video": "",
67
+ "Video": "Video",
68
68
  "You": "",
69
- "You can't send messages in this channel": "Je kan geen berichten sturen in dit kanaal",
70
- "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "{{ firstUser }} en {{ nonSelfUserLength }} anderen zijn aan het typen",
69
+ "You can't send messages in this channel": "",
70
+ "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "",
71
71
  "{{ index }} of {{ photoLength }}": "{{ index }} van {{ photoLength }}",
72
72
  "{{ replyCount }} Replies": "{{ replyCount }} Antwoorden",
73
73
  "{{ replyCount }} Thread Replies": "",
74
- "{{ user }} is typing": "{{ user }} is aan het typen",
74
+ "{{ user }} is typing": "",
75
75
  "🏙 Attachment...": ""
76
76
  }
@@ -3,7 +3,7 @@
3
3
  "1 Thread Reply": "",
4
4
  "Allow access to your Gallery": "Разрешить доступ к вашей галерее",
5
5
  "Allow camera access in device settings": "Разрешите доступ к камере в настройках устройства.",
6
- "Also send to channel": "Также отправить на канал",
6
+ "Also send to channel": "",
7
7
  "Are you sure you want to permanently delete this message?": "",
8
8
  "Block User": "",
9
9
  "Cancel": "",
@@ -14,49 +14,49 @@
14
14
  "Device camera is used to take photos or videos.": "Камера устройства используется для съемки фотографий или видео.",
15
15
  "Do you want to send a copy of this message to a moderator for further investigation?": "",
16
16
  "Edit Message": "",
17
- "Editing Message": "Редактирование сообщения",
17
+ "Editing Message": "",
18
18
  "Emoji matching": "",
19
19
  "Empty message...": "",
20
20
  "Error loading": "",
21
21
  "Error loading channel list...": "",
22
22
  "Error loading messages for this channel...": "",
23
23
  "Error while loading, please reload/refresh": "",
24
- "File type not supported": "Тип файла не поддерживается",
24
+ "File type not supported": "",
25
25
  "Flag": "",
26
26
  "Flag Message": "",
27
27
  "Flag action failed either due to a network issue or the message is already flagged": "",
28
28
  "How about sending your first message to a friend?": "",
29
29
  "Instant Commands": "",
30
30
  "Let's start chatting!": "",
31
- "Links are disabled": "Ссылки отключены",
32
- "Loading channels...": "Загружаю каналы...",
33
- "Loading messages...": "Загружаю сообщения...",
34
- "Loading...": "Загружаю...",
35
- "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "Достигнут предел максимального размера файла для загрузки. Загрузите файл размером менее {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} МБ.",
31
+ "Links are disabled": "",
32
+ "Loading channels...": "",
33
+ "Loading messages...": "",
34
+ "Loading...": "",
35
+ "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "",
36
36
  "Message Reactions": "",
37
37
  "Message deleted": "",
38
38
  "Message flagged": "",
39
39
  "Mute User": "",
40
- "Not supported": "не поддерживается",
40
+ "Not supported": "",
41
41
  "Nothing yet...": "",
42
42
  "Ok": "",
43
- "Only visible to you": "Видно только вам",
43
+ "Only visible to you": "",
44
44
  "Open Settings": "Открыть настройки",
45
- "Photo": "",
45
+ "Photo": "Фото",
46
46
  "Photos and Videos": "Фото и видео",
47
47
  "Pin to Conversation": "",
48
- "Pinned by": "Закреплено пользователем",
48
+ "Pinned by": "",
49
49
  "Please enable access to your photos and videos so you can share them.": "Разрешите доступ к своим фотографиям и видео, чтобы вы могли ими поделиться.",
50
50
  "Please select a channel first": "Пожалуйста, сначала выберите канал",
51
51
  "Reconnecting...": "",
52
52
  "Reply": "",
53
- "Reply to Message": "",
53
+ "Reply to Message": "Ответить на сообщение",
54
54
  "Resend": "",
55
- "Search GIFs": "",
55
+ "Search GIFs": "Поиск GIF",
56
56
  "Select More Photos": "Выбрать больше фотографий",
57
- "Send a message": "",
58
- "Sending links is not allowed in this conversation": "Отправка ссылок недоступна в этом чате",
59
- "Slow mode ON": "",
57
+ "Send a message": "Отправить сообщение",
58
+ "Sending links is not allowed in this conversation": "",
59
+ "Slow mode ON": "Медленный режим включен",
60
60
  "The message has been reported to a moderator.": "",
61
61
  "Thread Reply": "",
62
62
  "Unblock User": "",
@@ -64,13 +64,13 @@
64
64
  "Unmute User": "",
65
65
  "Unpin from Conversation": "",
66
66
  "Unread Messages": "",
67
- "Video": "",
67
+ "Video": "видео",
68
68
  "You": "",
69
- "You can't send messages in this channel": "Вы не можете отправлять сообщения в этот канал",
70
- "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "{{ firstUser }} и еще {{ nonSelfUserLength }} пишут",
69
+ "You can't send messages in this channel": "",
70
+ "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "",
71
71
  "{{ index }} of {{ photoLength }}": "{{ index }} из {{ photoLength }}",
72
72
  "{{ replyCount }} Replies": "{{ replyCount }} Ответов",
73
73
  "{{ replyCount }} Thread Replies": "",
74
- "{{ user }} is typing": "{{ user }} пишет",
74
+ "{{ user }} is typing": "",
75
75
  "🏙 Attachment...": ""
76
76
  }
@@ -3,7 +3,7 @@
3
3
  "1 Thread Reply": "",
4
4
  "Allow access to your Gallery": "Galerinize erişime izin verin",
5
5
  "Allow camera access in device settings": "Cihaz ayarlarında kamera erişimine izin ver",
6
- "Also send to channel": "Kanala da gönder",
6
+ "Also send to channel": "",
7
7
  "Are you sure you want to permanently delete this message?": "",
8
8
  "Block User": "",
9
9
  "Cancel": "",
@@ -14,49 +14,49 @@
14
14
  "Device camera is used to take photos or videos.": "Cihaz kamerası fotoğraf veya video çekmek için kullanılır.",
15
15
  "Do you want to send a copy of this message to a moderator for further investigation?": "",
16
16
  "Edit Message": "",
17
- "Editing Message": "Mesaj Düzenleniyor",
17
+ "Editing Message": "",
18
18
  "Emoji matching": "",
19
19
  "Empty message...": "",
20
20
  "Error loading": "",
21
21
  "Error loading channel list...": "",
22
22
  "Error loading messages for this channel...": "",
23
23
  "Error while loading, please reload/refresh": "",
24
- "File type not supported": "Dosya türü desteklenmiyor",
24
+ "File type not supported": "",
25
25
  "Flag": "",
26
26
  "Flag Message": "",
27
27
  "Flag action failed either due to a network issue or the message is already flagged": "",
28
28
  "How about sending your first message to a friend?": "",
29
29
  "Instant Commands": "",
30
30
  "Let's start chatting!": "",
31
- "Links are disabled": "Bağlantılar devre dışı",
32
- "Loading channels...": "Kanallar yükleniyor...",
33
- "Loading messages...": "Mesajlar yükleniyor...",
34
- "Loading...": "Yükleniyor...",
35
- "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "Maksimum dosya boyutu yükleme sınırına ulaşıldı. Lütfen {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB'ın altında bir dosya yükleyin.",
31
+ "Links are disabled": "",
32
+ "Loading channels...": "",
33
+ "Loading messages...": "",
34
+ "Loading...": "",
35
+ "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "",
36
36
  "Message Reactions": "",
37
37
  "Message deleted": "",
38
38
  "Message flagged": "",
39
39
  "Mute User": "",
40
- "Not supported": "Desteklenmiyor",
40
+ "Not supported": "",
41
41
  "Nothing yet...": "",
42
42
  "Ok": "",
43
- "Only visible to you": "Sadece siz görebilirsiniz",
43
+ "Only visible to you": "",
44
44
  "Open Settings": "Ayarları aç",
45
- "Photo": "",
45
+ "Photo": "Fotoğraf",
46
46
  "Photos and Videos": "Fotoğraflar ve Videolar",
47
47
  "Pin to Conversation": "",
48
- "Pinned by": "Tarafından sabitlendi",
48
+ "Pinned by": "",
49
49
  "Please enable access to your photos and videos so you can share them.": "Paylaşım yapabilmek için lutfen fotoğraflarınıza ve videolarınıza erişimi etkinleştirin.",
50
50
  "Please select a channel first": "Lütfen önce bir kanal seçiniz",
51
51
  "Reconnecting...": "",
52
52
  "Reply": "",
53
- "Reply to Message": "",
53
+ "Reply to Message": "Mesajı Yanıtla",
54
54
  "Resend": "",
55
- "Search GIFs": "",
55
+ "Search GIFs": "GIF Ara",
56
56
  "Select More Photos": "Daha Fazla Fotoğraf Seçin",
57
- "Send a message": "",
58
- "Sending links is not allowed in this conversation": "Bu konuşmada bağlantı göndermek desteklenmiyor",
59
- "Slow mode ON": "",
57
+ "Send a message": "Mesaj gönder",
58
+ "Sending links is not allowed in this conversation": "",
59
+ "Slow mode ON": "Yavaş Mod Açık",
60
60
  "The message has been reported to a moderator.": "",
61
61
  "Thread Reply": "",
62
62
  "Unblock User": "",
@@ -64,13 +64,13 @@
64
64
  "Unmute User": "",
65
65
  "Unpin from Conversation": "",
66
66
  "Unread Messages": "",
67
- "Video": "",
67
+ "Video": "Video",
68
68
  "You": "",
69
- "You can't send messages in this channel": "Bu konuşmaya mesaj gönderemezsiniz",
70
- "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "{{ firstUser }} ve {{ nonSelfUserLength }} kişi daha yazıyor",
69
+ "You can't send messages in this channel": "",
70
+ "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "",
71
71
  "{{ index }} of {{ photoLength }}": "{{ index }} / {{ photoLength }}",
72
72
  "{{ replyCount }} Replies": "{{ replyCount }} Cevap",
73
73
  "{{ replyCount }} Thread Replies": "",
74
- "{{ user }} is typing": "{{ user }} yazıyor",
74
+ "{{ user }} is typing": "",
75
75
  "🏙 Attachment...": ""
76
76
  }
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.22.2-beta.6"
2
+ "version": "5.22.2-beta.7"
3
3
  }
@@ -497,7 +497,7 @@ var ImageGallery = function ImageGallery(props) {
497
497
  lineNumber: 643,
498
498
  columnNumber: 7
499
499
  }
500
- })), imageGalleryAttachments.length > 0 && _react["default"].createElement(_ImageGalleryFooter.ImageGalleryFooter, (0, _extends2["default"])({
500
+ })), imageGalleryAttachments[selectedIndex] && _react["default"].createElement(_ImageGalleryFooter.ImageGalleryFooter, (0, _extends2["default"])({
501
501
  accessibilityLabel: 'Image Gallery Footer',
502
502
  duration: imageGalleryAttachments[selectedIndex].duration || 0,
503
503
  onPlayPause: onPlayPause,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_bottomSheet","_AnimatedGalleryImage","_AnimatedGalleryVideo","_ImageGalleryFooter","_ImageGalleryHeader","_ImageGalleryOverlay","_ImageGrid","_ImageGridHandle","_useImageGalleryGestures","_ImageGalleryContext","_OverlayContext","_ThemeContext","_useViewport2","_native","_getResizedImageUrl","_getUrlOfImageAttachment","_getGiphyMimeType","_this","_jsxFileName","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","isAndroid","Platform","OS","fullScreenHeight","Dimensions","height","MARGIN","HasPinched","exports","IsSwiping","ImageGallery","props","_StatusBar$currentHei","_imageGalleryAttachme","_props$autoPlayVideo","autoPlayVideo","_props$giphyVersion","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","_useState","useState","_useState2","_slicedToArray2","imageGalleryAttachments","setImageGalleryAttachments","_useTheme","useTheme","_useTheme$theme","theme","white_snow","colors","_useTheme$theme$image","imageGallery","backgroundColor","pager","slide","_useState3","_useState4","gridPhotos","setGridPhotos","_useOverlayContext","useOverlayContext","overlay","translucentStatusBar","_useImageGalleryConte","useImageGalleryContext","messages","selectedMessage","setSelectedMessage","_useViewport","useViewport","vh","vw","measuredScreenHeight","screenWidth","halfScreenWidth","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetModalRef","useRef","_useState5","_useState6","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","useSharedValue","screenTranslateY","showScreen","value","withTiming","duration","easing","Easing","out","ease","useEffect","Keyboard","dismiss","_useState7","_useState8","currentImageHeight","setCurrentImageHeight","_useState9","_useState10","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","_cur$attachments","attachmentImages","attachments","filter","attachment","_attachment$giphy","_attachment$giphy$gip","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","getUrlOfImageAttachment","isVideoPackageAvailable","reverse","attachmentPhotos","map","a","_a$giphy","_a$giphy$giphyVersion","imageUrl","giphyURL","isInitiallyPaused","channelId","cid","created_at","id","messageId","mime_type","getGiphyMimeType","original_height","original_width","paused","progress","uri","getResizedImageUrl","width","user","user_id","concat","_toConsumableArray2","photoLength","length","stripQueryFromUrl","split","updatePosition","newIndex","runOnJS","findIndex","photo","runOnUI","uriForCurrentImage","imageHeight","Math","floor","Image","getSize","_useImageGalleryGestu","useImageGalleryGestures","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","useDerivedValue","pagerStyle","useAnimatedStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","_bottomSheetModalRef$","current","close","openGridView","_bottomSheetModalRef$2","present","handleEnd","handlePlayPause","handleProgress","videoRef","handleLoad","prevImageGalleryAttachment","imageGalleryAttachment","_extends2","hasEnd","prevImageGalleryAttachments","pausedStatus","onPlayPause","status","undefined","createElement","View","accessibilityLabel","pointerEvents","style","StyleSheet","absoluteFillObject","__self","__source","fileName","lineNumber","columnNumber","TapGestureHandler","minPointers","numberOfTaps","onGestureEvent","ref","waitFor","maxDeltaX","maxDeltaY","maxDist","PinchGestureHandler","simultaneousHandlers","absoluteFill","PanGestureHandler","enabled","maxPointers","minDist","styles","animatedContainer","i","AnimatedGalleryVideo","attachmentId","previous","repeat","selected","shouldRender","abs","source","marginRight","AnimatedGalleryImage","ImageGalleryHeader","visible","header","ImageGalleryFooter","footer","ImageGalleryOverlay","BottomSheetModalProvider","BottomSheetModal","animatedIndex","enablePanDownToClose","handleComponent","ImageGridHandle","gridHandle","handleHeight","onChange","ImageGrid","grid","clamp","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"sources":["ImageGallery.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\n\nimport {\n PanGestureHandler,\n PinchGestureHandler,\n TapGestureHandler,\n} from 'react-native-gesture-handler';\n\nimport Animated, {\n Easing,\n runOnJS,\n runOnUI,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport { AnimatedGalleryVideo } from './components/AnimatedGalleryVideo';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryGestures } from './hooks/useImageGalleryGestures';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n OverlayProviderProps,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { useViewport } from '../../hooks/useViewport';\nimport { isVideoPackageAvailable, VideoType } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\n\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<StreamChatGenerics>;\n grid?: ImageGalleryGridImageComponents<StreamChatGenerics>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<StreamChatGenerics>;\n };\n};\n\ntype Props<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n ImageGalleryCustomComponents<StreamChatGenerics> & {\n overlayOpacity: Animated.SharedValue<number>;\n } & Pick<\n OverlayProviderProps<StreamChatGenerics>,\n | 'giphyVersion'\n | 'imageGalleryGridSnapPoints'\n | 'imageGalleryGridHandleHeight'\n | 'numberOfImageGalleryGridColumns'\n | 'autoPlayVideo'\n >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\n autoPlayVideo = false,\n giphyVersion = 'fixed_height',\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n } = props;\n const [imageGalleryAttachments, setImageGalleryAttachments] = useState<\n Photo<StreamChatGenerics>[]\n >([]);\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor, pager, slide },\n },\n } = useTheme();\n const [gridPhotos, setGridPhotos] = useState<Photo<StreamChatGenerics>[]>([]);\n const { overlay, translucentStatusBar } = useOverlayContext();\n const { messages, selectedMessage, setSelectedMessage } =\n useImageGalleryContext<StreamChatGenerics>();\n\n const { vh, vw } = useViewport();\n\n const measuredScreenHeight = vh(100);\n const screenWidth = vw(100);\n const halfScreenWidth = vw(50);\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(\n () => [(screenHeight * 3) / 4, screenHeight - (imageGalleryGridHandleHeight ?? 40)],\n [],\n );\n\n /**\n * BottomSheetModal ref\n */\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n\n /**\n * BottomSheetModal state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const screenTranslateY = useSharedValue(screenHeight);\n const showScreen = () => {\n 'worklet';\n screenTranslateY.value = withTiming(0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n Keyboard.dismiss();\n showScreen();\n }, []);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n\n const photos = messages.reduce((acc: Photo<StreamChatGenerics>[], cur) => {\n const attachmentImages =\n cur.attachments\n ?.filter(\n (attachment) =>\n (attachment.type === 'giphy' &&\n (attachment.giphy?.[giphyVersion]?.url ||\n attachment.thumb_url ||\n attachment.image_url)) ||\n (attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n getUrlOfImageAttachment(attachment)) ||\n (isVideoPackageAvailable() && attachment.type === 'video'),\n )\n .reverse() || [];\n\n const attachmentPhotos = attachmentImages.map((a) => {\n const imageUrl = getUrlOfImageAttachment(a) as string;\n const giphyURL = a.giphy?.[giphyVersion]?.url || a.thumb_url || a.image_url;\n const isInitiallyPaused = !autoPlayVideo;\n\n return {\n channelId: cur.cid,\n created_at: cur.created_at,\n duration: 0,\n id: `photoId-${cur.id}-${imageUrl}`,\n messageId: cur.id,\n mime_type: a.type === 'giphy' ? getGiphyMimeType(giphyURL ?? '') : a.mime_type,\n original_height: a.original_height,\n original_width: a.original_width,\n paused: isInitiallyPaused,\n progress: 0,\n type: a.type,\n uri:\n a.type === 'giphy'\n ? giphyURL\n : getResizedImageUrl({\n height: screenHeight,\n url: imageUrl,\n width: screenWidth,\n }),\n user: cur.user,\n user_id: cur.user_id,\n };\n });\n\n return [...attachmentPhotos, ...acc] as Photo<StreamChatGenerics>[];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n useEffect(() => {\n setImageGalleryAttachments(photos);\n }, []);\n\n /**\n * The URL for the images may differ because of dimensions passed as\n * part of the query.\n */\n const stripQueryFromUrl = (url: string) => url.split('?')[0];\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) =>\n photo.messageId === selectedMessage?.messageId &&\n stripQueryFromUrl(photo.uri) === stripQueryFromUrl(selectedMessage?.url || ''),\n );\n\n runOnUI(updatePosition)(newIndex);\n }, [selectedMessage, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = imageGalleryAttachments[selectedIndex]?.uri;\n\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n const photo = imageGalleryAttachments[index.value];\n const height = photo?.original_height;\n const width = photo?.original_width;\n\n if (height && width) {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n } else if (photo?.uri) {\n if (photo.type === 'image') {\n Image.getSize(photo.uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }\n }, [uriForCurrentImage]);\n\n const { onDoubleTap, onPan, onPinch, onSingleTap } = useImageGalleryGestures({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n selectedIndex,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n transform: [\n {\n translateY: screenTranslateY.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions toclose BottomSheetModal with image grid\n */\n const closeGridView = () => {\n if (bottomSheetModalRef.current?.close) {\n bottomSheetModalRef.current.close();\n setGridPhotos([]);\n }\n };\n\n /**\n * Function to open BottomSheetModal with image grid\n */\n const openGridView = () => {\n if (bottomSheetModalRef.current?.present) {\n bottomSheetModalRef.current.present();\n setGridPhotos(imageGalleryAttachments);\n }\n };\n\n const handleEnd = () => {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, true);\n handleProgress(imageGalleryAttachments[selectedIndex].id, 1, true);\n };\n\n const videoRef = useRef<VideoType>(null);\n\n const handleLoad = (index: string, duration: number) => {\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n duration: imageGalleryAttachment.id === index ? duration : imageGalleryAttachment.duration,\n })),\n );\n };\n\n const handleProgress = (index: string, progress: number, hasEnd?: boolean) => {\n setImageGalleryAttachments((prevImageGalleryAttachments) =>\n prevImageGalleryAttachments.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n progress:\n imageGalleryAttachment.id === index\n ? hasEnd\n ? 1\n : progress\n : imageGalleryAttachment.progress,\n })),\n );\n };\n\n const handlePlayPause = (index: string, pausedStatus?: boolean) => {\n if (pausedStatus === false) {\n // If the status is false we set the audio with the index as playing and the others as paused.\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n paused: imageGalleryAttachment.id === index ? false : true,\n })),\n );\n } else {\n // If the status is true we simply set all the audio's paused state as true.\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n paused: true,\n })),\n );\n }\n };\n\n const onPlayPause = (status?: boolean) => {\n if (status === undefined) {\n if (imageGalleryAttachments[selectedIndex].paused) {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, false);\n } else {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, true);\n }\n } else {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, status);\n }\n };\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery'\n pointerEvents={'auto'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View style={[styles.animatedContainer, pagerStyle, pager]}>\n {imageGalleryAttachments.map((photo, i) =>\n photo.type === 'video' ? (\n <AnimatedGalleryVideo\n attachmentId={photo.id}\n handleEnd={handleEnd}\n handleLoad={handleLoad}\n handleProgress={handleProgress}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n paused={photo.paused || false}\n previous={selectedIndex > i}\n repeat={true}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n source={{ uri: photo.uri }}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n videoRef={videoRef}\n />\n ) : (\n <AnimatedGalleryImage\n accessibilityLabel={'Image Item'}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n />\n ),\n )}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<StreamChatGenerics>\n opacity={headerFooterOpacity}\n photo={imageGalleryAttachments[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n\n {imageGalleryAttachments.length > 0 && (\n <ImageGalleryFooter<StreamChatGenerics>\n accessibilityLabel={'Image Gallery Footer'}\n duration={imageGalleryAttachments[selectedIndex].duration || 0}\n onPlayPause={onPlayPause}\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n paused={imageGalleryAttachments[selectedIndex].paused || false}\n photo={imageGalleryAttachments[selectedIndex]}\n photoLength={imageGalleryAttachments.length}\n progress={imageGalleryAttachments[selectedIndex].progress || 0}\n selectedIndex={selectedIndex}\n videoRef={videoRef}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n )}\n\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheetModalProvider>\n <BottomSheetModal\n animatedIndex={animatedBottomSheetIndex}\n enablePanDownToClose={true}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetModalRef}\n snapPoints={imageGalleryGridSnapPoints || snapPoints}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={gridPhotos}\n setSelectedMessage={setSelectedMessage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheetModal>\n </BottomSheetModalProvider>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n id: string;\n uri: string;\n channelId?: string;\n created_at?: string | Date;\n duration?: number;\n messageId?: string;\n mime_type?: string;\n original_height?: number;\n original_width?: number;\n paused?: boolean;\n progress?: number;\n type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_bottomSheet","_AnimatedGalleryImage","_AnimatedGalleryVideo","_ImageGalleryFooter","_ImageGalleryHeader","_ImageGalleryOverlay","_ImageGrid","_ImageGridHandle","_useImageGalleryGestures","_ImageGalleryContext","_OverlayContext","_ThemeContext","_useViewport2","_native","_getResizedImageUrl","_getUrlOfImageAttachment","_getGiphyMimeType","_this","_jsxFileName","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","isAndroid","Platform","OS","fullScreenHeight","Dimensions","height","MARGIN","HasPinched","exports","IsSwiping","ImageGallery","props","_StatusBar$currentHei","_imageGalleryAttachme","_props$autoPlayVideo","autoPlayVideo","_props$giphyVersion","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","_useState","useState","_useState2","_slicedToArray2","imageGalleryAttachments","setImageGalleryAttachments","_useTheme","useTheme","_useTheme$theme","theme","white_snow","colors","_useTheme$theme$image","imageGallery","backgroundColor","pager","slide","_useState3","_useState4","gridPhotos","setGridPhotos","_useOverlayContext","useOverlayContext","overlay","translucentStatusBar","_useImageGalleryConte","useImageGalleryContext","messages","selectedMessage","setSelectedMessage","_useViewport","useViewport","vh","vw","measuredScreenHeight","screenWidth","halfScreenWidth","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetModalRef","useRef","_useState5","_useState6","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","useSharedValue","screenTranslateY","showScreen","value","withTiming","duration","easing","Easing","out","ease","useEffect","Keyboard","dismiss","_useState7","_useState8","currentImageHeight","setCurrentImageHeight","_useState9","_useState10","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","_cur$attachments","attachmentImages","attachments","filter","attachment","_attachment$giphy","_attachment$giphy$gip","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","getUrlOfImageAttachment","isVideoPackageAvailable","reverse","attachmentPhotos","map","a","_a$giphy","_a$giphy$giphyVersion","imageUrl","giphyURL","isInitiallyPaused","channelId","cid","created_at","id","messageId","mime_type","getGiphyMimeType","original_height","original_width","paused","progress","uri","getResizedImageUrl","width","user","user_id","concat","_toConsumableArray2","photoLength","length","stripQueryFromUrl","split","updatePosition","newIndex","runOnJS","findIndex","photo","runOnUI","uriForCurrentImage","imageHeight","Math","floor","Image","getSize","_useImageGalleryGestu","useImageGalleryGestures","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","useDerivedValue","pagerStyle","useAnimatedStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","_bottomSheetModalRef$","current","close","openGridView","_bottomSheetModalRef$2","present","handleEnd","handlePlayPause","handleProgress","videoRef","handleLoad","prevImageGalleryAttachment","imageGalleryAttachment","_extends2","hasEnd","prevImageGalleryAttachments","pausedStatus","onPlayPause","status","undefined","createElement","View","accessibilityLabel","pointerEvents","style","StyleSheet","absoluteFillObject","__self","__source","fileName","lineNumber","columnNumber","TapGestureHandler","minPointers","numberOfTaps","onGestureEvent","ref","waitFor","maxDeltaX","maxDeltaY","maxDist","PinchGestureHandler","simultaneousHandlers","absoluteFill","PanGestureHandler","enabled","maxPointers","minDist","styles","animatedContainer","i","AnimatedGalleryVideo","attachmentId","previous","repeat","selected","shouldRender","abs","source","marginRight","AnimatedGalleryImage","ImageGalleryHeader","visible","header","ImageGalleryFooter","footer","ImageGalleryOverlay","BottomSheetModalProvider","BottomSheetModal","animatedIndex","enablePanDownToClose","handleComponent","ImageGridHandle","gridHandle","handleHeight","onChange","ImageGrid","grid","clamp","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"sources":["ImageGallery.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\n\nimport {\n PanGestureHandler,\n PinchGestureHandler,\n TapGestureHandler,\n} from 'react-native-gesture-handler';\n\nimport Animated, {\n Easing,\n runOnJS,\n runOnUI,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport { AnimatedGalleryVideo } from './components/AnimatedGalleryVideo';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryGestures } from './hooks/useImageGalleryGestures';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n OverlayProviderProps,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { useViewport } from '../../hooks/useViewport';\nimport { isVideoPackageAvailable, VideoType } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\n\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<StreamChatGenerics>;\n grid?: ImageGalleryGridImageComponents<StreamChatGenerics>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<StreamChatGenerics>;\n };\n};\n\ntype Props<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n ImageGalleryCustomComponents<StreamChatGenerics> & {\n overlayOpacity: Animated.SharedValue<number>;\n } & Pick<\n OverlayProviderProps<StreamChatGenerics>,\n | 'giphyVersion'\n | 'imageGalleryGridSnapPoints'\n | 'imageGalleryGridHandleHeight'\n | 'numberOfImageGalleryGridColumns'\n | 'autoPlayVideo'\n >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\n autoPlayVideo = false,\n giphyVersion = 'fixed_height',\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n } = props;\n const [imageGalleryAttachments, setImageGalleryAttachments] = useState<\n Photo<StreamChatGenerics>[]\n >([]);\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor, pager, slide },\n },\n } = useTheme();\n const [gridPhotos, setGridPhotos] = useState<Photo<StreamChatGenerics>[]>([]);\n const { overlay, translucentStatusBar } = useOverlayContext();\n const { messages, selectedMessage, setSelectedMessage } =\n useImageGalleryContext<StreamChatGenerics>();\n\n const { vh, vw } = useViewport();\n\n const measuredScreenHeight = vh(100);\n const screenWidth = vw(100);\n const halfScreenWidth = vw(50);\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(\n () => [(screenHeight * 3) / 4, screenHeight - (imageGalleryGridHandleHeight ?? 40)],\n [],\n );\n\n /**\n * BottomSheetModal ref\n */\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n\n /**\n * BottomSheetModal state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const screenTranslateY = useSharedValue(screenHeight);\n const showScreen = () => {\n 'worklet';\n screenTranslateY.value = withTiming(0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n Keyboard.dismiss();\n showScreen();\n }, []);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n\n const photos = messages.reduce((acc: Photo<StreamChatGenerics>[], cur) => {\n const attachmentImages =\n cur.attachments\n ?.filter(\n (attachment) =>\n (attachment.type === 'giphy' &&\n (attachment.giphy?.[giphyVersion]?.url ||\n attachment.thumb_url ||\n attachment.image_url)) ||\n (attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n getUrlOfImageAttachment(attachment)) ||\n (isVideoPackageAvailable() && attachment.type === 'video'),\n )\n .reverse() || [];\n\n const attachmentPhotos = attachmentImages.map((a) => {\n const imageUrl = getUrlOfImageAttachment(a) as string;\n const giphyURL = a.giphy?.[giphyVersion]?.url || a.thumb_url || a.image_url;\n const isInitiallyPaused = !autoPlayVideo;\n\n return {\n channelId: cur.cid,\n created_at: cur.created_at,\n duration: 0,\n id: `photoId-${cur.id}-${imageUrl}`,\n messageId: cur.id,\n mime_type: a.type === 'giphy' ? getGiphyMimeType(giphyURL ?? '') : a.mime_type,\n original_height: a.original_height,\n original_width: a.original_width,\n paused: isInitiallyPaused,\n progress: 0,\n type: a.type,\n uri:\n a.type === 'giphy'\n ? giphyURL\n : getResizedImageUrl({\n height: screenHeight,\n url: imageUrl,\n width: screenWidth,\n }),\n user: cur.user,\n user_id: cur.user_id,\n };\n });\n\n return [...attachmentPhotos, ...acc] as Photo<StreamChatGenerics>[];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n useEffect(() => {\n setImageGalleryAttachments(photos);\n }, []);\n\n /**\n * The URL for the images may differ because of dimensions passed as\n * part of the query.\n */\n const stripQueryFromUrl = (url: string) => url.split('?')[0];\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) =>\n photo.messageId === selectedMessage?.messageId &&\n stripQueryFromUrl(photo.uri) === stripQueryFromUrl(selectedMessage?.url || ''),\n );\n\n runOnUI(updatePosition)(newIndex);\n }, [selectedMessage, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = imageGalleryAttachments[selectedIndex]?.uri;\n\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n const photo = imageGalleryAttachments[index.value];\n const height = photo?.original_height;\n const width = photo?.original_width;\n\n if (height && width) {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n } else if (photo?.uri) {\n if (photo.type === 'image') {\n Image.getSize(photo.uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }\n }, [uriForCurrentImage]);\n\n const { onDoubleTap, onPan, onPinch, onSingleTap } = useImageGalleryGestures({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n selectedIndex,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n transform: [\n {\n translateY: screenTranslateY.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions toclose BottomSheetModal with image grid\n */\n const closeGridView = () => {\n if (bottomSheetModalRef.current?.close) {\n bottomSheetModalRef.current.close();\n setGridPhotos([]);\n }\n };\n\n /**\n * Function to open BottomSheetModal with image grid\n */\n const openGridView = () => {\n if (bottomSheetModalRef.current?.present) {\n bottomSheetModalRef.current.present();\n setGridPhotos(imageGalleryAttachments);\n }\n };\n\n const handleEnd = () => {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, true);\n handleProgress(imageGalleryAttachments[selectedIndex].id, 1, true);\n };\n\n const videoRef = useRef<VideoType>(null);\n\n const handleLoad = (index: string, duration: number) => {\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n duration: imageGalleryAttachment.id === index ? duration : imageGalleryAttachment.duration,\n })),\n );\n };\n\n const handleProgress = (index: string, progress: number, hasEnd?: boolean) => {\n setImageGalleryAttachments((prevImageGalleryAttachments) =>\n prevImageGalleryAttachments.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n progress:\n imageGalleryAttachment.id === index\n ? hasEnd\n ? 1\n : progress\n : imageGalleryAttachment.progress,\n })),\n );\n };\n\n const handlePlayPause = (index: string, pausedStatus?: boolean) => {\n if (pausedStatus === false) {\n // If the status is false we set the audio with the index as playing and the others as paused.\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n paused: imageGalleryAttachment.id === index ? false : true,\n })),\n );\n } else {\n // If the status is true we simply set all the audio's paused state as true.\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n paused: true,\n })),\n );\n }\n };\n\n const onPlayPause = (status?: boolean) => {\n if (status === undefined) {\n if (imageGalleryAttachments[selectedIndex].paused) {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, false);\n } else {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, true);\n }\n } else {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, status);\n }\n };\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery'\n pointerEvents={'auto'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View style={[styles.animatedContainer, pagerStyle, pager]}>\n {imageGalleryAttachments.map((photo, i) =>\n photo.type === 'video' ? (\n <AnimatedGalleryVideo\n attachmentId={photo.id}\n handleEnd={handleEnd}\n handleLoad={handleLoad}\n handleProgress={handleProgress}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n paused={photo.paused || false}\n previous={selectedIndex > i}\n repeat={true}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n source={{ uri: photo.uri }}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n videoRef={videoRef}\n />\n ) : (\n <AnimatedGalleryImage\n accessibilityLabel={'Image Item'}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n />\n ),\n )}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<StreamChatGenerics>\n opacity={headerFooterOpacity}\n photo={imageGalleryAttachments[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n\n {imageGalleryAttachments[selectedIndex] && (\n <ImageGalleryFooter<StreamChatGenerics>\n accessibilityLabel={'Image Gallery Footer'}\n duration={imageGalleryAttachments[selectedIndex].duration || 0}\n onPlayPause={onPlayPause}\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n paused={imageGalleryAttachments[selectedIndex].paused || false}\n photo={imageGalleryAttachments[selectedIndex]}\n photoLength={imageGalleryAttachments.length}\n progress={imageGalleryAttachments[selectedIndex].progress || 0}\n selectedIndex={selectedIndex}\n videoRef={videoRef}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n )}\n\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheetModalProvider>\n <BottomSheetModal\n animatedIndex={animatedBottomSheetIndex}\n enablePanDownToClose={true}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetModalRef}\n snapPoints={imageGalleryGridSnapPoints || snapPoints}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={gridPhotos}\n setSelectedMessage={setSelectedMessage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheetModal>\n </BottomSheetModalProvider>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n id: string;\n uri: string;\n channelId?: string;\n created_at?: string | Date;\n duration?: number;\n messageId?: string;\n mime_type?: string;\n original_height?: number;\n original_width?: number;\n paused?: boolean;\n progress?: number;\n type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"],"mappings":"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"}