stream-chat-react-native-core 5.1.0-beta.1 → 5.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/lib/commonjs/components/ChannelList/ChannelListMessenger.js +32 -15
  2. package/lib/commonjs/components/ChannelList/ChannelListMessenger.js.map +1 -1
  3. package/lib/commonjs/components/Chat/Chat.js +17 -5
  4. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  5. package/lib/commonjs/components/ImageGallery/ImageGallery.js +106 -100
  6. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  7. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js +14 -16
  8. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
  9. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +13 -16
  10. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  11. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js +6 -6
  12. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  13. package/lib/commonjs/components/MessageList/MessageList.js +39 -26
  14. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  15. package/lib/commonjs/components/ProgressControl/ProgressControl.js +6 -6
  16. package/lib/commonjs/components/ProgressControl/ProgressControl.js.map +1 -1
  17. package/lib/commonjs/contexts/debugContext/DebugContext.js +63 -0
  18. package/lib/commonjs/contexts/debugContext/DebugContext.js.map +1 -0
  19. package/lib/commonjs/contexts/index.js +13 -0
  20. package/lib/commonjs/contexts/index.js.map +1 -1
  21. package/lib/commonjs/native.js.map +1 -1
  22. package/lib/commonjs/version.json +1 -1
  23. package/lib/module/components/ChannelList/ChannelListMessenger.js +32 -15
  24. package/lib/module/components/ChannelList/ChannelListMessenger.js.map +1 -1
  25. package/lib/module/components/Chat/Chat.js +17 -5
  26. package/lib/module/components/Chat/Chat.js.map +1 -1
  27. package/lib/module/components/ImageGallery/ImageGallery.js +106 -100
  28. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  29. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js +14 -16
  30. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
  31. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +13 -16
  32. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  33. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js +6 -6
  34. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  35. package/lib/module/components/MessageList/MessageList.js +39 -26
  36. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  37. package/lib/module/components/ProgressControl/ProgressControl.js +6 -6
  38. package/lib/module/components/ProgressControl/ProgressControl.js.map +1 -1
  39. package/lib/module/contexts/debugContext/DebugContext.js +63 -0
  40. package/lib/module/contexts/debugContext/DebugContext.js.map +1 -0
  41. package/lib/module/contexts/index.js +13 -0
  42. package/lib/module/contexts/index.js.map +1 -1
  43. package/lib/module/native.js.map +1 -1
  44. package/lib/module/version.json +1 -1
  45. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts +3 -0
  46. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts +5 -3
  47. package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts +1 -3
  48. package/lib/typescript/components/ProgressControl/ProgressControl.d.ts +1 -1
  49. package/lib/typescript/contexts/debugContext/DebugContext.d.ts +27 -0
  50. package/lib/typescript/contexts/index.d.ts +1 -0
  51. package/lib/typescript/native.d.ts +3 -2
  52. package/package.json +2 -2
  53. package/src/components/ChannelList/ChannelListMessenger.tsx +17 -0
  54. package/src/components/Chat/Chat.tsx +13 -0
  55. package/src/components/ImageGallery/ImageGallery.tsx +87 -65
  56. package/src/components/ImageGallery/__tests__/AnimatedVideoGallery.test.tsx +2 -2
  57. package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +40 -28
  58. package/src/components/ImageGallery/components/AnimatedGalleryVideo.tsx +16 -9
  59. package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +1 -6
  60. package/src/components/ImageGallery/components/ImageGalleryVideoControl.tsx +5 -6
  61. package/src/components/MessageList/MessageList.tsx +15 -0
  62. package/src/components/ProgressControl/ProgressControl.tsx +8 -4
  63. package/src/contexts/debugContext/DebugContext.tsx +77 -0
  64. package/src/contexts/index.ts +1 -0
  65. package/src/native.ts +3 -2
  66. package/src/version.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["ImageGallery.tsx"],"names":["isAndroid","Platform","OS","fullScreenHeight","Dimensions","get","height","measuredScreenHeight","screenWidth","halfScreenWidth","MARGIN","HasPinched","IsSwiping","ImageGallery","props","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","paused","setPaused","progress","setProgress","duration","setDuration","theme","white_snow","colors","imageGallery","backgroundColor","pager","slide","gridPhotos","setGridPhotos","overlay","translucentStatusBar","messages","selectedMessage","setSelectedMessage","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetModalRef","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","screenTranslateY","showScreen","value","easing","Easing","out","ease","Keyboard","dismiss","currentImageHeight","setCurrentImageHeight","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","attachmentImages","attachments","filter","attachment","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","reverse","attachmentPhotos","map","a","imageUrl","giphyURL","channelId","cid","created_at","id","messageId","mime_type","original_height","original_width","uri","width","user","user_id","photoLength","length","stripQueryFromUrl","split","updatePosition","newIndex","findIndex","photo","uriForCurrentImage","imageHeight","Math","floor","Image","getSize","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","pagerStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","current","close","openGridView","present","videoRef","handleEnd","handleLoad","payload","handleProgress","data","currentTime","seekableDuration","handlePlayPause","status","undefined","seek","replayAsync","state","onProgressDrag","setPositionAsync","StyleSheet","absoluteFillObject","absoluteFill","styles","animatedContainer","i","abs","marginRight","header","footer","gridHandle","grid","clamp","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"mappings":"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","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 {\n isVideoPackageAvailable,\n VideoPayloadData,\n VideoProgressData,\n VideoType,\n} from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { vh, vw } from '../../utils/utils';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\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 >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\n giphyVersion = 'fixed_height',\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n } = props;\n const [paused, setPaused] = useState<boolean>(false);\n const [progress, setProgress] = useState<number>(0);\n const [duration, setDuration] = useState<number>(0);\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 /**\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\n return {\n channelId: cur.cid,\n created_at: cur.created_at,\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 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 /**\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 if (photoLength > 1) {\n setPaused(true);\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 = photos[selectedIndex]?.uri;\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n const photo = photos[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(photos);\n }\n };\n\n const videoRef = useRef<VideoType>(null);\n\n const handleEnd = () => {\n setPaused(true);\n setProgress(1);\n };\n\n const handleLoad = (payload: VideoPayloadData) => {\n if (payload.duration) setDuration(payload.duration);\n };\n\n const handleProgress = (data: VideoProgressData) => {\n if (data.currentTime && data.seekableDuration) {\n setProgress(data.currentTime / data.seekableDuration);\n }\n };\n\n const handlePlayPause = (status?: boolean) => {\n if (status === undefined) {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (progress === 1 && videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(0);\n }\n // Expo AV for Expo has replayAsync as an API to move to a starting of the video\n if (progress === 1 && videoRef.current && videoRef.current.replayAsync) {\n videoRef.current.replayAsync();\n }\n\n setPaused((state) => !state);\n } else {\n setPaused(status);\n }\n };\n\n const onProgressDrag = (progress: number) => {\n // React Native Video for RN CLI has seek as an API to move to a particular location in the video\n if (videoRef.current && videoRef.current.seek) {\n videoRef.current.seek(progress);\n }\n\n // Expo AV for Expo has setPositionAsync as an API to move to a particular location of the video\n if (videoRef.current && videoRef.current.setPositionAsync) {\n videoRef.current.setPositionAsync(progress * 1000);\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\n style={[\n styles.animatedContainer,\n pagerStyle,\n pager,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\n {photos.map((photo, i) =>\n photo.type === 'video' ? (\n <AnimatedGalleryVideo\n handleEnd={handleEnd}\n handleLoad={handleLoad}\n handleProgress={handleProgress}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n paused={paused}\n previous={selectedIndex > i}\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={photos[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n <ImageGalleryFooter<StreamChatGenerics>\n accessibilityLabel={'Image Gallery Footer'}\n duration={duration}\n onPlayPause={handlePlayPause}\n onProgressDrag={onProgressDrag}\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n paused={paused}\n photo={photos[selectedIndex]}\n photoLength={photoLength}\n progress={progress}\n selectedIndex={selectedIndex}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\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 messageId?: string;\n mime_type?: string;\n original_height?: number;\n original_width?: number;\n type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"]}
1
+ {"version":3,"sources":["ImageGallery.tsx"],"names":["isAndroid","Platform","OS","fullScreenHeight","Dimensions","get","height","measuredScreenHeight","screenWidth","halfScreenWidth","MARGIN","HasPinched","IsSwiping","ImageGallery","props","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","imageGalleryAttachments","setImageGalleryAttachments","theme","white_snow","colors","imageGallery","backgroundColor","pager","slide","gridPhotos","setGridPhotos","overlay","translucentStatusBar","messages","selectedMessage","setSelectedMessage","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetModalRef","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","screenTranslateY","showScreen","value","duration","easing","Easing","out","ease","Keyboard","dismiss","currentImageHeight","setCurrentImageHeight","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","attachmentImages","attachments","filter","attachment","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","reverse","attachmentPhotos","map","a","imageUrl","giphyURL","channelId","cid","created_at","id","messageId","mime_type","original_height","original_width","paused","progress","uri","width","user","user_id","photoLength","length","stripQueryFromUrl","split","updatePosition","newIndex","findIndex","photo","uriForCurrentImage","imageHeight","Math","floor","Image","getSize","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","pagerStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","current","close","openGridView","present","handleEnd","handlePlayPause","handleProgress","videoRef","handleLoad","prevImageGalleryAttachment","imageGalleryAttachment","hasEnd","prevImageGalleryAttachments","pausedStatus","onPlayPause","status","undefined","StyleSheet","absoluteFillObject","absoluteFill","styles","animatedContainer","i","abs","marginRight","header","footer","gridHandle","grid","clamp","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"mappings":"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","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 { isVideoPackageAvailable, VideoType } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { vh, vw } from '../../utils/utils';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\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 >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\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 /**\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\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: true,\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\n style={[\n styles.animatedContainer,\n pagerStyle,\n pager,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\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 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"]}
@@ -48,13 +48,15 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
48
48
  opacity = _useState2[0],
49
49
  setOpacity = _useState2[1];
50
50
 
51
- var handleEnd = props.handleEnd,
51
+ var attachmentId = props.attachmentId,
52
+ handleEnd = props.handleEnd,
52
53
  handleLoad = props.handleLoad,
53
54
  handleProgress = props.handleProgress,
54
55
  index = props.index,
55
56
  offsetScale = props.offsetScale,
56
57
  paused = props.paused,
57
58
  previous = props.previous,
59
+ repeat = props.repeat,
58
60
  scale = props.scale,
59
61
  screenHeight = props.screenHeight,
60
62
  selected = props.selected,
@@ -71,7 +73,7 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
71
73
 
72
74
  var onLoad = function onLoad(payload) {
73
75
  setOpacity(0);
74
- handleLoad(payload);
76
+ handleLoad(attachmentId, payload.duration);
75
77
  };
76
78
 
77
79
  var onEnd = function onEnd() {
@@ -79,7 +81,7 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
79
81
  };
80
82
 
81
83
  var onProgress = function onProgress(data) {
82
- handleProgress(data);
84
+ handleProgress(attachmentId, data.currentTime / data.seekableDuration);
83
85
  };
84
86
 
85
87
  var onBuffer = function onBuffer(_ref) {
@@ -96,15 +98,10 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
96
98
  }
97
99
  } else {
98
100
  setOpacity(0);
99
- handleLoad({
100
- duration: playbackStatus.durationMillis / 1000
101
- });
101
+ handleLoad(attachmentId, playbackStatus.durationMillis / 1000);
102
102
 
103
103
  if (playbackStatus.isPlaying) {
104
- handleProgress({
105
- currentTime: playbackStatus.positionMillis / 1000,
106
- seekableDuration: playbackStatus.durationMillis / 1000
107
- });
104
+ handleProgress(attachmentId, playbackStatus.positionMillis / 1000 / (playbackStatus.durationMillis / 1000));
108
105
  }
109
106
 
110
107
  if (playbackStatus.isBuffering) {
@@ -144,7 +141,7 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
144
141
  __self: _this,
145
142
  __source: {
146
143
  fileName: _jsxFileName,
147
- lineNumber: 158,
144
+ lineNumber: 163,
148
145
  columnNumber: 9
149
146
  }
150
147
  });
@@ -166,7 +163,7 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
166
163
  __self: _this,
167
164
  __source: {
168
165
  fileName: _jsxFileName,
169
- lineNumber: 166,
166
+ lineNumber: 171,
170
167
  columnNumber: 7
171
168
  }
172
169
  }, (0, _native.isVideoPackageAvailable)() && _react["default"].createElement(_native.Video, {
@@ -177,6 +174,7 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
177
174
  onPlaybackStatusUpdate: onPlayBackStatusUpdate,
178
175
  onProgress: onProgress,
179
176
  paused: paused,
177
+ repeat: repeat,
180
178
  resizeMode: "contain",
181
179
  style: style,
182
180
  testID: "video-player",
@@ -185,7 +183,7 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
185
183
  __self: _this,
186
184
  __source: {
187
185
  fileName: _jsxFileName,
188
- lineNumber: 184,
186
+ lineNumber: 189,
189
187
  columnNumber: 11
190
188
  }
191
189
  }), _react["default"].createElement(_reactNativeReanimated["default"].View, {
@@ -203,7 +201,7 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
203
201
  __self: _this,
204
202
  __source: {
205
203
  fileName: _jsxFileName,
206
- lineNumber: 199,
204
+ lineNumber: 205,
207
205
  columnNumber: 9
208
206
  }
209
207
  }, _react["default"].createElement(_Spinner.Spinner, {
@@ -212,12 +210,12 @@ var AnimatedGalleryVideo = _react["default"].memo(function (props) {
212
210
  __self: _this,
213
211
  __source: {
214
212
  fileName: _jsxFileName,
215
- lineNumber: 213,
213
+ lineNumber: 219,
216
214
  columnNumber: 11
217
215
  }
218
216
  })));
219
217
  }, function (prevProps, nextProps) {
220
- if (prevProps.paused === nextProps.paused && prevProps.shouldRender === nextProps.shouldRender && prevProps.source.uri === nextProps.source.uri && prevProps.screenHeight === nextProps.screenHeight && prevProps.selected === nextProps.selected && prevProps.previous === nextProps.previous && prevProps.index === nextProps.index) {
218
+ if (prevProps.paused === nextProps.paused && prevProps.repeat === nextProps.repeat && prevProps.shouldRender === nextProps.shouldRender && prevProps.source.uri === nextProps.source.uri && prevProps.screenHeight === nextProps.screenHeight && prevProps.selected === nextProps.selected && prevProps.previous === nextProps.previous && prevProps.index === nextProps.index) {
221
219
  return true;
222
220
  }
223
221
 
@@ -1 +1 @@
1
- {"version":3,"sources":["AnimatedGalleryVideo.tsx"],"names":["screenWidth","halfScreenWidth","oneEighth","styles","StyleSheet","create","activityIndicator","alignSelf","videoPlayer","height","width","AnimatedGalleryVideo","React","memo","props","opacity","setOpacity","handleEnd","handleLoad","handleProgress","index","offsetScale","paused","previous","scale","screenHeight","selected","shouldRender","source","style","translateX","translateY","videoRef","onLoadStart","onLoad","payload","onEnd","onProgress","data","onBuffer","isBuffering","onPlayBackStatusUpdate","playbackStatus","isLoaded","error","console","duration","durationMillis","isPlaying","currentTime","positionMillis","seekableDuration","didJustFinish","isLooping","animatedViewStyles","xScaleOffset","yScaleOffset","transform","value","scaleX","uri","prevProps","nextProps","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { StyleSheet, View, ViewStyle } from 'react-native';\nimport type { StyleProp } from 'react-native';\nimport Animated, { useAnimatedStyle } from 'react-native-reanimated';\n\nimport {\n isVideoPackageAvailable,\n PlaybackStatus,\n Video,\n VideoPayloadData,\n VideoProgressData,\n VideoType,\n} from '../../../native';\n\nimport { vw } from '../../../utils/utils';\nimport { Spinner } from '../../Spinner/Spinner';\n\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\nconst oneEighth = 1 / 8;\n\nexport type AnimatedGalleryVideoType = {\n handleEnd: () => void;\n handleLoad: (payload: VideoPayloadData) => void;\n handleProgress: (data: VideoProgressData) => void;\n index: number;\n offsetScale: Animated.SharedValue<number>;\n paused: boolean;\n previous: boolean;\n scale: Animated.SharedValue<number>;\n screenHeight: number;\n selected: boolean;\n shouldRender: boolean;\n source: { uri: string };\n translateX: Animated.SharedValue<number>;\n translateY: Animated.SharedValue<number>;\n videoRef: React.RefObject<VideoType>;\n style?: StyleProp<ViewStyle>;\n};\n\nconst styles = StyleSheet.create({\n activityIndicator: {\n alignSelf: 'center',\n },\n videoPlayer: {\n height: '100%',\n width: '100%',\n },\n});\n\nexport const AnimatedGalleryVideo: React.FC<AnimatedGalleryVideoType> = React.memo(\n (props) => {\n const [opacity, setOpacity] = useState<number>(1);\n const {\n handleEnd,\n handleLoad,\n handleProgress,\n index,\n offsetScale,\n paused,\n previous,\n scale,\n screenHeight,\n selected,\n shouldRender,\n source,\n style,\n translateX,\n translateY,\n videoRef,\n } = props;\n\n const onLoadStart = () => {\n setOpacity(1);\n };\n\n const onLoad = (payload: VideoPayloadData) => {\n setOpacity(0);\n handleLoad(payload);\n };\n\n const onEnd = () => {\n handleEnd();\n };\n\n const onProgress = (data: VideoProgressData) => {\n handleProgress(data);\n };\n\n const onBuffer = ({ isBuffering }: { isBuffering: boolean }) => {\n if (isBuffering) setOpacity(1);\n else setOpacity(0);\n };\n\n const onPlayBackStatusUpdate = (playbackStatus: PlaybackStatus) => {\n if (!playbackStatus.isLoaded) {\n // Update your UI for the unloaded state\n setOpacity(1);\n if (playbackStatus.error) {\n console.error(`Encountered a fatal error during playback: ${playbackStatus.error}`);\n }\n } else {\n // Update your UI for the loaded state\n setOpacity(0);\n handleLoad({ duration: playbackStatus.durationMillis / 1000 });\n if (playbackStatus.isPlaying) {\n // Update your UI for the playing state\n handleProgress({\n currentTime: playbackStatus.positionMillis / 1000,\n seekableDuration: playbackStatus.durationMillis / 1000,\n });\n }\n\n if (playbackStatus.isBuffering) {\n // Update your UI for the buffering state\n setOpacity(1);\n }\n\n if (playbackStatus.didJustFinish && !playbackStatus.isLooping) {\n // The player has just finished playing and will stop. Maybe you want to play something else?\n handleEnd();\n }\n }\n };\n\n const animatedViewStyles = useAnimatedStyle<ViewStyle>(() => {\n const xScaleOffset = -7 * screenWidth * (0.5 + index);\n const yScaleOffset = -screenHeight * 3.5;\n return {\n transform: [\n {\n translateX: selected\n ? translateX.value + xScaleOffset\n : scale.value < 1 || scale.value !== offsetScale.value\n ? xScaleOffset\n : previous\n ? translateX.value - halfScreenWidth * (scale.value - 1) + xScaleOffset\n : translateX.value + halfScreenWidth * (scale.value - 1) + xScaleOffset,\n },\n {\n translateY: selected ? translateY.value + yScaleOffset : yScaleOffset,\n },\n {\n scale: selected ? scale.value / 8 : oneEighth,\n },\n { scaleX: -1 },\n ],\n };\n }, [previous, selected]);\n\n /**\n * An empty view is rendered for images not close to the currently\n * selected in order to maintain spacing while reducing the image\n * load on memory.\n */\n if (!shouldRender) {\n return (\n <View\n accessibilityLabel='Empty View Image Gallery'\n style={[style, { transform: [{ scale: oneEighth }] }]}\n />\n );\n }\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery Video'\n style={[\n style,\n animatedViewStyles,\n {\n transform: [\n { scaleX: -1 },\n { translateY: -screenHeight * 3.5 },\n {\n translateX: -translateX.value + 7 * screenWidth * (0.5 + index),\n },\n { scale: oneEighth },\n ],\n },\n ]}\n >\n {isVideoPackageAvailable() && (\n <Video\n onBuffer={onBuffer}\n onEnd={onEnd}\n onLoad={onLoad}\n onLoadStart={onLoadStart}\n onPlaybackStatusUpdate={onPlayBackStatusUpdate}\n onProgress={onProgress}\n paused={paused}\n resizeMode='contain'\n style={style}\n testID='video-player'\n uri={source.uri}\n videoRef={videoRef}\n />\n )}\n <Animated.View\n accessibilityLabel='Spinner'\n style={[\n styles.activityIndicator,\n {\n opacity,\n transform: [\n { scaleX: -1 },\n { translateY: -screenHeight * 4 },\n { scale: 1 / oneEighth },\n ],\n },\n ]}\n >\n <Spinner height={40} width={40} />\n </Animated.View>\n </Animated.View>\n );\n },\n\n (prevProps, nextProps) => {\n if (\n prevProps.paused === nextProps.paused &&\n prevProps.shouldRender === nextProps.shouldRender &&\n prevProps.source.uri === nextProps.source.uri &&\n prevProps.screenHeight === nextProps.screenHeight &&\n prevProps.selected === nextProps.selected &&\n prevProps.previous === nextProps.previous &&\n prevProps.index === nextProps.index\n ) {\n return true;\n }\n return false;\n },\n);\n\nAnimatedGalleryVideo.displayName = 'AnimatedGalleryVideo';\n"]}
1
+ {"version":3,"sources":["AnimatedGalleryVideo.tsx"],"names":["screenWidth","halfScreenWidth","oneEighth","styles","StyleSheet","create","activityIndicator","alignSelf","videoPlayer","height","width","AnimatedGalleryVideo","React","memo","props","opacity","setOpacity","attachmentId","handleEnd","handleLoad","handleProgress","index","offsetScale","paused","previous","repeat","scale","screenHeight","selected","shouldRender","source","style","translateX","translateY","videoRef","onLoadStart","onLoad","payload","duration","onEnd","onProgress","data","currentTime","seekableDuration","onBuffer","isBuffering","onPlayBackStatusUpdate","playbackStatus","isLoaded","error","console","durationMillis","isPlaying","positionMillis","didJustFinish","isLooping","animatedViewStyles","xScaleOffset","yScaleOffset","transform","value","scaleX","uri","prevProps","nextProps","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { StyleSheet, View, ViewStyle } from 'react-native';\nimport type { StyleProp } from 'react-native';\nimport Animated, { useAnimatedStyle } from 'react-native-reanimated';\n\nimport {\n isVideoPackageAvailable,\n PlaybackStatus,\n Video,\n VideoPayloadData,\n VideoProgressData,\n VideoType,\n} from '../../../native';\n\nimport { vw } from '../../../utils/utils';\nimport { Spinner } from '../../Spinner/Spinner';\n\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\nconst oneEighth = 1 / 8;\n\nexport type AnimatedGalleryVideoType = {\n attachmentId: string;\n handleEnd: () => void;\n handleLoad: (index: string, duration: number) => void;\n handleProgress: (index: string, progress: number, hasEnd?: boolean) => void;\n index: number;\n offsetScale: Animated.SharedValue<number>;\n paused: boolean;\n previous: boolean;\n scale: Animated.SharedValue<number>;\n screenHeight: number;\n selected: boolean;\n shouldRender: boolean;\n source: { uri: string };\n translateX: Animated.SharedValue<number>;\n translateY: Animated.SharedValue<number>;\n videoRef: React.RefObject<VideoType>;\n repeat?: boolean;\n style?: StyleProp<ViewStyle>;\n};\n\nconst styles = StyleSheet.create({\n activityIndicator: {\n alignSelf: 'center',\n },\n videoPlayer: {\n height: '100%',\n width: '100%',\n },\n});\n\nexport const AnimatedGalleryVideo: React.FC<AnimatedGalleryVideoType> = React.memo(\n (props) => {\n const [opacity, setOpacity] = useState<number>(1);\n\n const {\n attachmentId,\n handleEnd,\n handleLoad,\n handleProgress,\n index,\n offsetScale,\n paused,\n previous,\n repeat,\n scale,\n screenHeight,\n selected,\n shouldRender,\n source,\n style,\n translateX,\n translateY,\n videoRef,\n } = props;\n\n const onLoadStart = () => {\n setOpacity(1);\n };\n\n const onLoad = (payload: VideoPayloadData) => {\n setOpacity(0);\n handleLoad(attachmentId, payload.duration);\n };\n\n const onEnd = () => {\n handleEnd();\n };\n\n const onProgress = (data: VideoProgressData) => {\n handleProgress(attachmentId, data.currentTime / data.seekableDuration);\n };\n\n const onBuffer = ({ isBuffering }: { isBuffering: boolean }) => {\n if (isBuffering) setOpacity(1);\n else setOpacity(0);\n };\n\n const onPlayBackStatusUpdate = (playbackStatus: PlaybackStatus) => {\n if (!playbackStatus.isLoaded) {\n // Update your UI for the unloaded state\n setOpacity(1);\n if (playbackStatus.error) {\n console.error(`Encountered a fatal error during playback: ${playbackStatus.error}`);\n }\n } else {\n // Update your UI for the loaded state\n setOpacity(0);\n handleLoad(attachmentId, playbackStatus.durationMillis / 1000);\n if (playbackStatus.isPlaying) {\n // Update your UI for the playing state\n handleProgress(\n attachmentId,\n playbackStatus.positionMillis / 1000 / (playbackStatus.durationMillis / 1000),\n );\n }\n\n if (playbackStatus.isBuffering) {\n // Update your UI for the buffering state\n setOpacity(1);\n }\n\n if (playbackStatus.didJustFinish && !playbackStatus.isLooping) {\n // The player has just finished playing and will stop. Maybe you want to play something else?\n handleEnd();\n }\n }\n };\n\n const animatedViewStyles = useAnimatedStyle<ViewStyle>(() => {\n const xScaleOffset = -7 * screenWidth * (0.5 + index);\n const yScaleOffset = -screenHeight * 3.5;\n return {\n transform: [\n {\n translateX: selected\n ? translateX.value + xScaleOffset\n : scale.value < 1 || scale.value !== offsetScale.value\n ? xScaleOffset\n : previous\n ? translateX.value - halfScreenWidth * (scale.value - 1) + xScaleOffset\n : translateX.value + halfScreenWidth * (scale.value - 1) + xScaleOffset,\n },\n {\n translateY: selected ? translateY.value + yScaleOffset : yScaleOffset,\n },\n {\n scale: selected ? scale.value / 8 : oneEighth,\n },\n { scaleX: -1 },\n ],\n };\n }, [previous, selected]);\n\n /**\n * An empty view is rendered for images not close to the currently\n * selected in order to maintain spacing while reducing the image\n * load on memory.\n */\n if (!shouldRender) {\n return (\n <View\n accessibilityLabel='Empty View Image Gallery'\n style={[style, { transform: [{ scale: oneEighth }] }]}\n />\n );\n }\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery Video'\n style={[\n style,\n animatedViewStyles,\n {\n transform: [\n { scaleX: -1 },\n { translateY: -screenHeight * 3.5 },\n {\n translateX: -translateX.value + 7 * screenWidth * (0.5 + index),\n },\n { scale: oneEighth },\n ],\n },\n ]}\n >\n {isVideoPackageAvailable() && (\n <Video\n onBuffer={onBuffer}\n onEnd={onEnd}\n onLoad={onLoad}\n onLoadStart={onLoadStart}\n onPlaybackStatusUpdate={onPlayBackStatusUpdate}\n onProgress={onProgress}\n paused={paused}\n repeat={repeat}\n resizeMode='contain'\n style={style}\n testID='video-player'\n uri={source.uri}\n videoRef={videoRef}\n />\n )}\n <Animated.View\n accessibilityLabel='Spinner'\n style={[\n styles.activityIndicator,\n {\n opacity,\n transform: [\n { scaleX: -1 },\n { translateY: -screenHeight * 4 },\n { scale: 1 / oneEighth },\n ],\n },\n ]}\n >\n <Spinner height={40} width={40} />\n </Animated.View>\n </Animated.View>\n );\n },\n\n (prevProps, nextProps) => {\n if (\n prevProps.paused === nextProps.paused &&\n prevProps.repeat === nextProps.repeat &&\n prevProps.shouldRender === nextProps.shouldRender &&\n prevProps.source.uri === nextProps.source.uri &&\n prevProps.screenHeight === nextProps.screenHeight &&\n prevProps.selected === nextProps.selected &&\n prevProps.previous === nextProps.previous &&\n prevProps.index === nextProps.index\n ) {\n return true;\n }\n return false;\n },\n);\n\nAnimatedGalleryVideo.displayName = 'AnimatedGalleryVideo';\n"]}
@@ -79,7 +79,6 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
79
79
  GridIcon = props.GridIcon,
80
80
  leftElement = props.leftElement,
81
81
  onPlayPause = props.onPlayPause,
82
- onProgressDrag = props.onProgressDrag,
83
82
  opacity = props.opacity,
84
83
  openGridView = props.openGridView,
85
84
  paused = props.paused,
@@ -193,7 +192,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
193
192
  __self: _this,
194
193
  __source: {
195
194
  fileName: _jsxFileName,
196
- lineNumber: 186,
195
+ lineNumber: 182,
197
196
  columnNumber: 5
198
197
  }
199
198
  }, _react["default"].createElement(ReanimatedSafeAreaView, {
@@ -203,25 +202,23 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
203
202
  __self: _this,
204
203
  __source: {
205
204
  fileName: _jsxFileName,
206
- lineNumber: 192,
205
+ lineNumber: 188,
207
206
  columnNumber: 7
208
207
  }
209
208
  }, photo.type === 'video' ? videoControlElement ? videoControlElement({
210
209
  duration: duration,
211
210
  onPlayPause: onPlayPause,
212
- onProgressDrag: onProgressDrag,
213
211
  paused: paused,
214
212
  progress: progress
215
213
  }) : _react["default"].createElement(_ImageGalleryVideoControl.ImageGalleryVideoControl, {
216
214
  duration: duration,
217
215
  onPlayPause: onPlayPause,
218
- onProgressDrag: onProgressDrag,
219
216
  paused: paused,
220
217
  progress: progress,
221
218
  __self: _this,
222
219
  __source: {
223
220
  fileName: _jsxFileName,
224
- lineNumber: 197,
221
+ lineNumber: 193,
225
222
  columnNumber: 13
226
223
  }
227
224
  }) : null, _react["default"].createElement(_reactNative.View, {
@@ -231,7 +228,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
231
228
  __self: _this,
232
229
  __source: {
233
230
  fileName: _jsxFileName,
234
- lineNumber: 206,
231
+ lineNumber: 201,
235
232
  columnNumber: 9
236
233
  }
237
234
  }, leftElement ? leftElement({
@@ -246,7 +243,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
246
243
  __self: _this,
247
244
  __source: {
248
245
  fileName: _jsxFileName,
249
- lineNumber: 210,
246
+ lineNumber: 205,
250
247
  columnNumber: 13
251
248
  }
252
249
  }, _react["default"].createElement(_reactNative.View, {
@@ -254,7 +251,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
254
251
  __self: _this,
255
252
  __source: {
256
253
  fileName: _jsxFileName,
257
- lineNumber: 215,
254
+ lineNumber: 210,
258
255
  columnNumber: 15
259
256
  }
260
257
  }, ShareIcon ? ShareIcon : _react["default"].createElement(_icons.Share, {
@@ -262,7 +259,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
262
259
  __self: _this,
263
260
  __source: {
264
261
  fileName: _jsxFileName,
265
- lineNumber: 216,
262
+ lineNumber: 211,
266
263
  columnNumber: 42
267
264
  }
268
265
  }))), centerElement ? centerElement({
@@ -275,7 +272,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
275
272
  __self: _this,
276
273
  __source: {
277
274
  fileName: _jsxFileName,
278
- lineNumber: 223,
275
+ lineNumber: 218,
279
276
  columnNumber: 13
280
277
  }
281
278
  }, _react["default"].createElement(_reactNative.Text, {
@@ -285,7 +282,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
285
282
  __self: _this,
286
283
  __source: {
287
284
  fileName: _jsxFileName,
288
- lineNumber: 224,
285
+ lineNumber: 219,
289
286
  columnNumber: 15
290
287
  }
291
288
  }, t('{{ index }} of {{ photoLength }}', {
@@ -301,7 +298,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
301
298
  __self: _this,
302
299
  __source: {
303
300
  fileName: _jsxFileName,
304
- lineNumber: 235,
301
+ lineNumber: 230,
305
302
  columnNumber: 13
306
303
  }
307
304
  }, _react["default"].createElement(_reactNative.View, {
@@ -309,14 +306,14 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
309
306
  __self: _this,
310
307
  __source: {
311
308
  fileName: _jsxFileName,
312
- lineNumber: 236,
309
+ lineNumber: 231,
313
310
  columnNumber: 15
314
311
  }
315
312
  }, GridIcon ? GridIcon : _react["default"].createElement(_icons.Grid, {
316
313
  __self: _this,
317
314
  __source: {
318
315
  fileName: _jsxFileName,
319
- lineNumber: 237,
316
+ lineNumber: 232,
320
317
  columnNumber: 40
321
318
  }
322
319
  }))))));
@@ -351,7 +348,7 @@ var ImageGalleryFooter = function ImageGalleryFooter(props) {
351
348
  __self: _this,
352
349
  __source: {
353
350
  fileName: _jsxFileName,
354
- lineNumber: 292,
351
+ lineNumber: 287,
355
352
  columnNumber: 6
356
353
  }
357
354
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["ImageGalleryFooter.tsx"],"names":["ReanimatedSafeAreaView","Animated","createAnimatedComponent","SafeAreaView","styles","StyleSheet","create","centerContainer","alignItems","flex","justifyContent","imageCountText","fontSize","fontWeight","innerContainer","flexDirection","height","leftContainer","marginLeft","rightContainer","marginRight","wrapper","bottom","left","position","right","ImageGalleryFooterWithContext","props","accessibilityLabel","centerElement","duration","GridIcon","leftElement","onPlayPause","onProgressDrag","opacity","openGridView","paused","photo","photoLength","progress","rightElement","selectedIndex","ShareIcon","videoControlElement","visible","setHeight","shareMenuOpen","setShareMenuOpen","theme","colors","black","white","imageGallery","footer","container","t","footerStyle","value","transform","translateY","Extrapolate","CLAMP","share","extension","mime_type","split","fileName","user","id","messageId","fromUrl","uri","localFile","type","url","console","log","event","nativeEvent","layout","backgroundColor","color","index","areEqual","prevProps","nextProps","prevDuration","prevPaused","prevProgress","prevSelectedIndex","nextDuration","nextPaused","nextProgress","nextSelectedIndex","isDurationEqual","isPausedEqual","isProgressEqual","isSelectedIndexEqual","MemoizedImageGalleryFooter","React","memo","ImageGalleryFooter","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { SafeAreaView, StyleSheet, Text, TouchableOpacity, View, ViewStyle } from 'react-native';\nimport Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-native-reanimated';\n\nimport { ImageGalleryVideoControl } from './ImageGalleryVideoControl';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { Grid as GridIconDefault, Share as ShareIconDefault } from '../../../icons';\nimport { deleteFile, saveFile, shareImage } from '../../../native';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { Photo } from '../ImageGallery';\n\nconst ReanimatedSafeAreaView = Animated.createAnimatedComponent\n ? Animated.createAnimatedComponent(SafeAreaView)\n : SafeAreaView;\n\nconst styles = StyleSheet.create({\n centerContainer: {\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n },\n imageCountText: {\n fontSize: 16,\n fontWeight: '600',\n },\n innerContainer: {\n flexDirection: 'row',\n height: 56,\n },\n leftContainer: {\n flex: 1,\n justifyContent: 'center',\n marginLeft: 8,\n },\n rightContainer: {\n flex: 1,\n justifyContent: 'center',\n marginRight: 8,\n },\n wrapper: {\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n },\n});\n\nexport type ImageGalleryFooterCustomComponent<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ({\n openGridView,\n photo,\n share,\n shareMenuOpen,\n}: {\n openGridView: () => void;\n share: () => Promise<void>;\n shareMenuOpen: boolean;\n photo?: Photo<StreamChatGenerics>;\n}) => React.ReactElement | null;\n\nexport type ImageGalleryFooterVideoControlProps = {\n duration: number;\n onPlayPause: (status?: boolean) => void;\n onProgressDrag: (progress: number) => void;\n paused: boolean;\n progress: number;\n};\n\nexport type ImageGalleryFooterVideoControlComponent = ({\n duration,\n onPlayPause,\n onProgressDrag,\n paused,\n progress,\n}: ImageGalleryFooterVideoControlProps) => React.ReactElement | null;\n\nexport type ImageGalleryFooterCustomComponentProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n centerElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n GridIcon?: React.ReactElement;\n leftElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n rightElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n ShareIcon?: React.ReactElement;\n videoControlElement?: ImageGalleryFooterVideoControlComponent;\n};\n\ntype ImageGalleryFooterPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterCustomComponentProps<StreamChatGenerics> & {\n accessibilityLabel: string;\n duration: number;\n onPlayPause: () => void;\n onProgressDrag: (progress: number) => void;\n opacity: Animated.SharedValue<number>;\n openGridView: () => void;\n paused: boolean;\n photo: Photo<StreamChatGenerics>;\n photoLength: number;\n progress: number;\n selectedIndex: number;\n visible: Animated.SharedValue<number>;\n};\n\nexport const ImageGalleryFooterWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n accessibilityLabel,\n centerElement,\n duration,\n GridIcon,\n leftElement,\n onPlayPause,\n onProgressDrag,\n opacity,\n openGridView,\n paused,\n photo,\n photoLength,\n progress,\n rightElement,\n selectedIndex,\n ShareIcon,\n videoControlElement,\n visible,\n } = props;\n\n const [height, setHeight] = useState(200);\n const [shareMenuOpen, setShareMenuOpen] = useState(false);\n const {\n theme: {\n colors: { black, white },\n imageGallery: {\n footer: {\n centerContainer,\n container,\n imageCountText,\n innerContainer,\n leftContainer,\n rightContainer,\n },\n },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n const footerStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n opacity: opacity.value,\n transform: [\n {\n translateY: interpolate(visible.value, [0, 1], [height, 0], Extrapolate.CLAMP),\n },\n ],\n }),\n [height],\n );\n\n const share = async () => {\n setShareMenuOpen(true);\n try {\n const extension = photo.mime_type?.split('/')[1] || 'jpg';\n const localFile = await saveFile({\n fileName: `${photo.user?.id || 'ChatPhoto'}-${\n photo.messageId\n }-${selectedIndex}.${extension}`,\n fromUrl: photo.uri,\n });\n // `image/jpeg` is added for the case where the mime_type isn't available for a file/image\n await shareImage({ type: photo.mime_type || 'image/jpeg', url: localFile });\n await deleteFile({ uri: localFile });\n } catch (error) {\n console.log(error);\n }\n setShareMenuOpen(false);\n };\n\n return (\n <Animated.View\n accessibilityLabel={accessibilityLabel}\n onLayout={(event) => setHeight(event.nativeEvent.layout.height)}\n pointerEvents={'box-none'}\n style={styles.wrapper}\n >\n <ReanimatedSafeAreaView style={[container, footerStyle, { backgroundColor: white }]}>\n {photo.type === 'video' ? (\n videoControlElement ? (\n videoControlElement({ duration, onPlayPause, onProgressDrag, paused, progress })\n ) : (\n <ImageGalleryVideoControl\n duration={duration}\n onPlayPause={onPlayPause}\n onProgressDrag={onProgressDrag}\n paused={paused}\n progress={progress}\n />\n )\n ) : null}\n <View style={[styles.innerContainer, innerContainer, { backgroundColor: white }]}>\n {leftElement ? (\n leftElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity\n accessibilityLabel='Share Button'\n disabled={shareMenuOpen}\n onPress={share}\n >\n <View style={[styles.leftContainer, leftContainer]}>\n {ShareIcon ? ShareIcon : <ShareIconDefault pathFill={black} />}\n </View>\n </TouchableOpacity>\n )}\n {centerElement ? (\n centerElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <View style={[styles.centerContainer, centerContainer]}>\n <Text style={[styles.imageCountText, { color: black }, imageCountText]}>\n {t('{{ index }} of {{ photoLength }}', {\n index: photoLength - selectedIndex,\n photoLength,\n })}\n </Text>\n </View>\n )}\n {rightElement ? (\n rightElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity onPress={openGridView}>\n <View style={[styles.rightContainer, rightContainer]}>\n {GridIcon ? GridIcon : <GridIconDefault />}\n </View>\n </TouchableOpacity>\n )}\n </View>\n </ReanimatedSafeAreaView>\n </Animated.View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n nextProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n duration: prevDuration,\n paused: prevPaused,\n progress: prevProgress,\n selectedIndex: prevSelectedIndex,\n } = prevProps;\n const {\n duration: nextDuration,\n paused: nextPaused,\n progress: nextProgress,\n selectedIndex: nextSelectedIndex,\n } = nextProps;\n\n const isDurationEqual = prevDuration === nextDuration;\n if (!isDurationEqual) return false;\n\n const isPausedEqual = prevPaused === nextPaused;\n if (!isPausedEqual) return false;\n\n const isProgressEqual = prevProgress === nextProgress;\n if (!isProgressEqual) return false;\n\n const isSelectedIndexEqual = prevSelectedIndex === nextSelectedIndex;\n if (!isSelectedIndexEqual) return false;\n\n return true;\n};\n\nconst MemoizedImageGalleryFooter = React.memo(\n ImageGalleryFooterWithContext,\n areEqual,\n) as typeof ImageGalleryFooterWithContext;\n\nexport type ImageGalleryFooterProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterPropsWithContext<StreamChatGenerics>;\n\nexport const ImageGalleryFooter = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterProps<StreamChatGenerics>,\n) => <MemoizedImageGalleryFooter {...props} />;\n\nImageGalleryFooter.displayName = 'ImageGalleryFooter{imageGallery{footer}}';\n"]}
1
+ {"version":3,"sources":["ImageGalleryFooter.tsx"],"names":["ReanimatedSafeAreaView","Animated","createAnimatedComponent","SafeAreaView","styles","StyleSheet","create","centerContainer","alignItems","flex","justifyContent","imageCountText","fontSize","fontWeight","innerContainer","flexDirection","height","leftContainer","marginLeft","rightContainer","marginRight","wrapper","bottom","left","position","right","ImageGalleryFooterWithContext","props","accessibilityLabel","centerElement","duration","GridIcon","leftElement","onPlayPause","opacity","openGridView","paused","photo","photoLength","progress","rightElement","selectedIndex","ShareIcon","videoControlElement","visible","setHeight","shareMenuOpen","setShareMenuOpen","theme","colors","black","white","imageGallery","footer","container","t","footerStyle","value","transform","translateY","Extrapolate","CLAMP","share","extension","mime_type","split","fileName","user","id","messageId","fromUrl","uri","localFile","type","url","console","log","event","nativeEvent","layout","backgroundColor","color","index","areEqual","prevProps","nextProps","prevDuration","prevPaused","prevProgress","prevSelectedIndex","nextDuration","nextPaused","nextProgress","nextSelectedIndex","isDurationEqual","isPausedEqual","isProgressEqual","isSelectedIndexEqual","MemoizedImageGalleryFooter","React","memo","ImageGalleryFooter","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { SafeAreaView, StyleSheet, Text, TouchableOpacity, View, ViewStyle } from 'react-native';\nimport Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-native-reanimated';\n\nimport { ImageGalleryVideoControl } from './ImageGalleryVideoControl';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { Grid as GridIconDefault, Share as ShareIconDefault } from '../../../icons';\nimport { deleteFile, saveFile, shareImage } from '../../../native';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { Photo } from '../ImageGallery';\n\nconst ReanimatedSafeAreaView = Animated.createAnimatedComponent\n ? Animated.createAnimatedComponent(SafeAreaView)\n : SafeAreaView;\n\nconst styles = StyleSheet.create({\n centerContainer: {\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n },\n imageCountText: {\n fontSize: 16,\n fontWeight: '600',\n },\n innerContainer: {\n flexDirection: 'row',\n height: 56,\n },\n leftContainer: {\n flex: 1,\n justifyContent: 'center',\n marginLeft: 8,\n },\n rightContainer: {\n flex: 1,\n justifyContent: 'center',\n marginRight: 8,\n },\n wrapper: {\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n },\n});\n\nexport type ImageGalleryFooterCustomComponent<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ({\n openGridView,\n photo,\n share,\n shareMenuOpen,\n}: {\n openGridView: () => void;\n share: () => Promise<void>;\n shareMenuOpen: boolean;\n photo?: Photo<StreamChatGenerics>;\n}) => React.ReactElement | null;\n\nexport type ImageGalleryFooterVideoControlProps = {\n duration: number;\n onPlayPause: (status?: boolean) => void;\n paused: boolean;\n progress: number;\n};\n\nexport type ImageGalleryFooterVideoControlComponent = ({\n duration,\n onPlayPause,\n paused,\n progress,\n}: ImageGalleryFooterVideoControlProps) => React.ReactElement | null;\n\nexport type ImageGalleryFooterCustomComponentProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n centerElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n GridIcon?: React.ReactElement;\n leftElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n rightElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n ShareIcon?: React.ReactElement;\n videoControlElement?: ImageGalleryFooterVideoControlComponent;\n};\n\ntype ImageGalleryFooterPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterCustomComponentProps<StreamChatGenerics> & {\n accessibilityLabel: string;\n duration: number;\n onPlayPause: () => void;\n opacity: Animated.SharedValue<number>;\n openGridView: () => void;\n paused: boolean;\n photo: Photo<StreamChatGenerics>;\n photoLength: number;\n progress: number;\n selectedIndex: number;\n visible: Animated.SharedValue<number>;\n};\n\nexport const ImageGalleryFooterWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n accessibilityLabel,\n centerElement,\n duration,\n GridIcon,\n leftElement,\n onPlayPause,\n opacity,\n openGridView,\n paused,\n photo,\n photoLength,\n progress,\n rightElement,\n selectedIndex,\n ShareIcon,\n videoControlElement,\n visible,\n } = props;\n\n const [height, setHeight] = useState(200);\n const [shareMenuOpen, setShareMenuOpen] = useState(false);\n const {\n theme: {\n colors: { black, white },\n imageGallery: {\n footer: {\n centerContainer,\n container,\n imageCountText,\n innerContainer,\n leftContainer,\n rightContainer,\n },\n },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n const footerStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n opacity: opacity.value,\n transform: [\n {\n translateY: interpolate(visible.value, [0, 1], [height, 0], Extrapolate.CLAMP),\n },\n ],\n }),\n [height],\n );\n\n const share = async () => {\n setShareMenuOpen(true);\n try {\n const extension = photo.mime_type?.split('/')[1] || 'jpg';\n const localFile = await saveFile({\n fileName: `${photo.user?.id || 'ChatPhoto'}-${\n photo.messageId\n }-${selectedIndex}.${extension}`,\n fromUrl: photo.uri,\n });\n // `image/jpeg` is added for the case where the mime_type isn't available for a file/image\n await shareImage({ type: photo.mime_type || 'image/jpeg', url: localFile });\n await deleteFile({ uri: localFile });\n } catch (error) {\n console.log(error);\n }\n setShareMenuOpen(false);\n };\n\n return (\n <Animated.View\n accessibilityLabel={accessibilityLabel}\n onLayout={(event) => setHeight(event.nativeEvent.layout.height)}\n pointerEvents={'box-none'}\n style={styles.wrapper}\n >\n <ReanimatedSafeAreaView style={[container, footerStyle, { backgroundColor: white }]}>\n {photo.type === 'video' ? (\n videoControlElement ? (\n videoControlElement({ duration, onPlayPause, paused, progress })\n ) : (\n <ImageGalleryVideoControl\n duration={duration}\n onPlayPause={onPlayPause}\n paused={paused}\n progress={progress}\n />\n )\n ) : null}\n <View style={[styles.innerContainer, innerContainer, { backgroundColor: white }]}>\n {leftElement ? (\n leftElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity\n accessibilityLabel='Share Button'\n disabled={shareMenuOpen}\n onPress={share}\n >\n <View style={[styles.leftContainer, leftContainer]}>\n {ShareIcon ? ShareIcon : <ShareIconDefault pathFill={black} />}\n </View>\n </TouchableOpacity>\n )}\n {centerElement ? (\n centerElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <View style={[styles.centerContainer, centerContainer]}>\n <Text style={[styles.imageCountText, { color: black }, imageCountText]}>\n {t('{{ index }} of {{ photoLength }}', {\n index: photoLength - selectedIndex,\n photoLength,\n })}\n </Text>\n </View>\n )}\n {rightElement ? (\n rightElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity onPress={openGridView}>\n <View style={[styles.rightContainer, rightContainer]}>\n {GridIcon ? GridIcon : <GridIconDefault />}\n </View>\n </TouchableOpacity>\n )}\n </View>\n </ReanimatedSafeAreaView>\n </Animated.View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n nextProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n duration: prevDuration,\n paused: prevPaused,\n progress: prevProgress,\n selectedIndex: prevSelectedIndex,\n } = prevProps;\n const {\n duration: nextDuration,\n paused: nextPaused,\n progress: nextProgress,\n selectedIndex: nextSelectedIndex,\n } = nextProps;\n\n const isDurationEqual = prevDuration === nextDuration;\n if (!isDurationEqual) return false;\n\n const isPausedEqual = prevPaused === nextPaused;\n if (!isPausedEqual) return false;\n\n const isProgressEqual = prevProgress === nextProgress;\n if (!isProgressEqual) return false;\n\n const isSelectedIndexEqual = prevSelectedIndex === nextSelectedIndex;\n if (!isSelectedIndexEqual) return false;\n\n return true;\n};\n\nconst MemoizedImageGalleryFooter = React.memo(\n ImageGalleryFooterWithContext,\n areEqual,\n) as typeof ImageGalleryFooterWithContext;\n\nexport type ImageGalleryFooterProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterPropsWithContext<StreamChatGenerics>;\n\nexport const ImageGalleryFooter = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterProps<StreamChatGenerics>,\n) => <MemoizedImageGalleryFooter {...props} />;\n\nImageGalleryFooter.displayName = 'ImageGalleryFooter{imageGallery{footer}}';\n"]}