stream-chat-react-native-core 5.4.2-beta.1 → 5.4.2-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +122 -433
  2. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  3. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js +358 -0
  4. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -0
  5. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +1 -1
  6. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  7. package/lib/commonjs/components/MessageList/NetworkDownIndicator.js +14 -6
  8. package/lib/commonjs/components/MessageList/NetworkDownIndicator.js.map +1 -1
  9. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +134 -85
  10. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  11. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +39 -17
  12. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  13. package/lib/commonjs/hooks/useAppStateListener.js +9 -15
  14. package/lib/commonjs/hooks/useAppStateListener.js.map +1 -1
  15. package/lib/commonjs/version.json +1 -1
  16. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +122 -433
  17. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  18. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js +358 -0
  19. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -0
  20. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +1 -1
  21. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  22. package/lib/module/components/MessageList/NetworkDownIndicator.js +14 -6
  23. package/lib/module/components/MessageList/NetworkDownIndicator.js.map +1 -1
  24. package/lib/module/contexts/messageInputContext/MessageInputContext.js +134 -85
  25. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  26. package/lib/module/contexts/overlayContext/OverlayProvider.js +39 -17
  27. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  28. package/lib/module/hooks/useAppStateListener.js +9 -15
  29. package/lib/module/hooks/useAppStateListener.js.map +1 -1
  30. package/lib/module/version.json +1 -1
  31. package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts +0 -11
  32. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerItem.d.ts +16 -0
  33. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +1 -1
  34. package/lib/typescript/hooks/__tests__/useAppStateListener.test.d.ts +1 -0
  35. package/package.json +2 -2
  36. package/src/components/AttachmentPicker/AttachmentPicker.tsx +79 -322
  37. package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx +245 -0
  38. package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +1 -1
  39. package/src/components/MessageInput/__tests__/__snapshots__/MessageInput.test.js.snap +1 -1
  40. package/src/components/MessageList/NetworkDownIndicator.tsx +13 -10
  41. package/src/contexts/messageInputContext/MessageInputContext.tsx +27 -25
  42. package/src/contexts/overlayContext/OverlayProvider.tsx +28 -4
  43. package/src/hooks/__tests__/useAppStateListener.test.tsx +41 -0
  44. package/src/hooks/useAppStateListener.ts +9 -12
  45. package/src/version.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["AttachmentPicker.tsx"],"names":["dayjs","extend","duration","styles","StyleSheet","create","container","flexGrow","durationText","fontWeight","overlay","alignItems","flex","videoView","bottom","display","flexDirection","justifyContent","paddingHorizontal","position","width","screenHeight","fullScreenHeight","Dimensions","get","height","AttachmentVideo","props","asset","ImageOverlaySelectedComponent","maxNumberOfFiles","numberOfAttachmentPickerImageColumns","numberOfUploads","selected","setSelectedFiles","theme","attachmentPicker","image","imageOverlay","colors","white","playableDuration","uri","videoDuration","ONE_HOUR_IN_SECONDS","durationLabel","isDurationLongerThanHour","formattedDurationParam","formattedVideoDuration","format","size","onPressVideo","id","localAssetURI","files","filter","file","Alert","alert","name","filename","fileSize","type","margin","backgroundColor","color","AttachmentImage","setSelectedImages","onPressImage","images","renderItem","item","contentType","fileType","startsWith","AttachmentPicker","React","forwardRef","ref","AttachmentPickerBottomSheetHandle","attachmentPickerBottomSheetHandleHeight","attachmentPickerBottomSheetHeight","AttachmentPickerError","attachmentPickerErrorButtonText","AttachmentPickerErrorImage","attachmentPickerErrorText","numberOfAttachmentImagesToLoadPerCall","translucentStatusBar","bottomSheetContentContainer","closePicker","selectedFiles","selectedImages","selectedPicker","setSelectedPicker","topInset","currentIndex","setCurrentIndex","endCursor","setEndCursor","photoError","setPhotoError","hasNextPage","setHasNextPage","loadingPhotos","setLoadingPhotos","photos","setPhotos","bottomSheetCloseOnKeyboardShowTimeout","getMorePhotos","after","first","results","assets","console","log","backAction","undefined","backHandler","BackHandler","addEventListener","remove","hideAttachmentPicker","current","clearTimeout","setTimeout","close","keyboardSubscription","Platform","OS","Keyboard","addListener","removeListener","selectedPhotos","map","length","some","handleHeight","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidBottomBarHeightAdjustment","initialSnapPoint","finalSnapPoint","snapPoints","opacity","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Alert,\n BackHandler,\n Dimensions,\n ImageBackground,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n Text,\n View,\n} from 'react-native';\n\nimport BottomSheet, {\n BottomSheetFlatList,\n BottomSheetHandleProps,\n TouchableOpacity,\n} from '@gorhom/bottom-sheet';\nimport dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\nimport { lookup } from 'mime-types';\n\nimport type { AttachmentPickerErrorProps } from './components/AttachmentPickerError';\n\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Recorder } from '../../icons';\nimport { getLocalAssetUri, getPhotos } from '../../native';\nimport type { Asset, File } from '../../types/types';\nimport { vh, vw } from '../../utils/utils';\n\ndayjs.extend(duration);\n\nconst styles = StyleSheet.create({\n container: {\n flexGrow: 1,\n },\n durationText: {\n fontWeight: 'bold',\n },\n overlay: {\n alignItems: 'flex-end',\n flex: 1,\n },\n videoView: {\n bottom: 5,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingHorizontal: 5,\n position: 'absolute',\n width: '100%',\n },\n});\n\nconst screenHeight = vh(100);\nconst fullScreenHeight = Dimensions.get('window').height;\n\nexport type AttachmentPickerItemType = {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n numberOfUploads: number;\n selected: boolean;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\ntype AttachmentImageProps = Omit<AttachmentPickerItemType, 'setSelectedFiles'>;\n\ntype AttachmentVideoProps = Omit<AttachmentPickerItemType, 'setSelectedImages'>;\n\nconst AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { durationText, image, imageOverlay },\n colors: { overlay, white },\n },\n } = useTheme();\n\n const { duration, playableDuration, uri } = asset;\n\n const videoDuration = duration ? duration : playableDuration;\n\n const ONE_HOUR_IN_SECONDS = 3600;\n\n let durationLabel = '00:00';\n\n if (videoDuration) {\n const isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;\n const formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';\n const formattedVideoDuration = dayjs\n .duration(videoDuration, 'second')\n .format(formattedDurationParam);\n durationLabel = formattedVideoDuration;\n }\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const onPressVideo = async () => {\n // For the case of expo messaging app where you need to fetch the asset uri from asset id\n const localAssetURI = asset.id && (await getLocalAssetUri(asset.id));\n if (selected) {\n setSelectedFiles((files) => files.filter((file) => file.uri !== asset.uri));\n } else {\n setSelectedFiles((files) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return files;\n }\n return [\n ...files,\n {\n duration: durationLabel,\n name: asset.filename,\n size: asset.fileSize,\n type: 'video',\n uri: localAssetURI || asset.uri,\n },\n ];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressVideo}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n <View style={styles.videoView}>\n <Recorder height={20} pathFill={white} width={25} />\n {videoDuration ? (\n <Text style={[styles.durationText, durationText, { color: white }]}>\n {durationLabel}\n </Text>\n ) : null}\n </View>\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst AttachmentImage: React.FC<AttachmentImageProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedImages,\n } = props;\n const {\n theme: {\n attachmentPicker: { image, imageOverlay },\n colors: { overlay },\n },\n } = useTheme();\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const { uri } = asset;\n\n const onPressImage = () => {\n if (selected) {\n setSelectedImages((images) => images.filter((image) => image.uri !== asset.uri));\n } else {\n setSelectedImages((images) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return images;\n }\n return [...images, asset];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressImage}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst renderItem = ({ item }: { item: AttachmentPickerItemType }) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n setSelectedImages,\n } = item;\n\n const contentType = lookup(asset.filename) || 'multipart/form-data';\n\n const fileType = asset.filename\n ? contentType.startsWith('image/')\n ? 'image'\n : 'video'\n : asset.type === 'video'\n ? 'video'\n : 'image';\n\n return fileType === 'image' ? (\n <AttachmentImage\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedImages={setSelectedImages}\n />\n ) : (\n <AttachmentVideo\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedFiles={setSelectedFiles}\n />\n );\n};\n\nexport type AttachmentPickerProps = {\n /**\n * Custom UI component to render [draggable handle](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png) of attachment picker.\n *\n * **Default** [AttachmentPickerBottomSheetHandle](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx)\n */\n AttachmentPickerBottomSheetHandle: React.FC<BottomSheetHandleProps>;\n /**\n * Custom UI component to render error component while opening attachment picker.\n *\n * **Default** [AttachmentPickerError](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx)\n */\n AttachmentPickerError: React.ComponentType<AttachmentPickerErrorProps>;\n /**\n * Custom UI component to render error image for attachment picker\n *\n * **Default** [AttachmentPickerErrorImage](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerErrorImage.tsx)\n */\n AttachmentPickerErrorImage: React.ComponentType;\n /**\n * Custom UI component to render overlay component, that shows up on top of [selected image](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png) (with tick mark)\n *\n * **Default** [ImageOverlaySelectedComponent](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/ImageOverlaySelectedComponent.tsx)\n */\n ImageOverlaySelectedComponent: React.ComponentType;\n attachmentPickerBottomSheetHandleHeight?: number;\n attachmentPickerBottomSheetHeight?: number;\n attachmentPickerErrorButtonText?: string;\n attachmentPickerErrorText?: string;\n numberOfAttachmentImagesToLoadPerCall?: number;\n numberOfAttachmentPickerImageColumns?: number;\n translucentStatusBar?: boolean;\n};\n\nexport const AttachmentPicker = React.forwardRef(\n (props: AttachmentPickerProps, ref: React.ForwardedRef<BottomSheet>) => {\n const {\n AttachmentPickerBottomSheetHandle,\n attachmentPickerBottomSheetHandleHeight,\n attachmentPickerBottomSheetHeight,\n AttachmentPickerError,\n attachmentPickerErrorButtonText,\n AttachmentPickerErrorImage,\n attachmentPickerErrorText,\n ImageOverlaySelectedComponent,\n numberOfAttachmentImagesToLoadPerCall,\n numberOfAttachmentPickerImageColumns,\n translucentStatusBar,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { bottomSheetContentContainer },\n colors: { white },\n },\n } = useTheme();\n const {\n closePicker,\n maxNumberOfFiles,\n selectedFiles,\n selectedImages,\n selectedPicker,\n setSelectedFiles,\n setSelectedImages,\n setSelectedPicker,\n topInset,\n } = useAttachmentPickerContext();\n\n const [currentIndex, setCurrentIndex] = useState(-1);\n const [endCursor, setEndCursor] = useState<string>();\n const [photoError, setPhotoError] = useState(false);\n const [hasNextPage, setHasNextPage] = useState(true);\n const [loadingPhotos, setLoadingPhotos] = useState(false);\n const [photos, setPhotos] = useState<Asset[]>([]);\n const bottomSheetCloseOnKeyboardShowTimeout = useRef<NodeJS.Timeout>();\n\n const getMorePhotos = async () => {\n if (hasNextPage && !loadingPhotos && currentIndex > -1 && selectedPicker === 'images') {\n setLoadingPhotos(true);\n try {\n const results = await getPhotos({\n after: endCursor,\n first: numberOfAttachmentImagesToLoadPerCall ?? 60,\n });\n if (endCursor) {\n setPhotos([...photos, ...results.assets]);\n } else {\n setPhotos(results.assets);\n }\n setEndCursor(results.endCursor);\n setHasNextPage(results.hasNextPage || false);\n } catch (error) {\n console.log(error);\n setPhotoError(true);\n }\n setLoadingPhotos(false);\n }\n };\n\n useEffect(() => {\n const backAction = () => {\n if (selectedPicker) {\n setSelectedPicker(undefined);\n closePicker();\n return true;\n }\n\n return false;\n };\n\n const backHandler = BackHandler.addEventListener('hardwareBackPress', backAction);\n\n return () => backHandler.remove();\n }, [selectedPicker]);\n\n useEffect(() => {\n const hideAttachmentPicker = () => {\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n setSelectedPicker(undefined);\n // This short timeout is to prevent a race condition\n // where the close function is called during the point when a internal container layout happens within the bottomsheet due to keyboard affecting the layout\n // If the container layout measures a shorter height than previous but if the close snapped to the previous height's position, the bottom sheet will show up\n // this short delay ensures that close function is always called after a container layout due to keyboard change\n bottomSheetCloseOnKeyboardShowTimeout.current = setTimeout(\n () => (ref as React.MutableRefObject<BottomSheet | undefined>).current?.close(),\n 150,\n );\n };\n const keyboardSubscription =\n Platform.OS === 'ios'\n ? Keyboard.addListener('keyboardWillShow', hideAttachmentPicker)\n : Keyboard.addListener('keyboardDidShow', hideAttachmentPicker);\n\n return () => {\n if (keyboardSubscription?.remove) {\n keyboardSubscription.remove();\n return;\n }\n\n // To keep compatibility with older versions of React Native, where `remove()` is not available\n if (Platform.OS === 'ios') {\n Keyboard.removeListener('keyboardWillShow', hideAttachmentPicker);\n } else {\n Keyboard.removeListener('keyboardDidShow', hideAttachmentPicker);\n }\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (currentIndex < 0) {\n setSelectedPicker(undefined);\n if (!loadingPhotos) {\n setEndCursor(undefined);\n setHasNextPage(true);\n }\n }\n }, [currentIndex]);\n\n useEffect(() => {\n if (\n selectedPicker === 'images' &&\n endCursor === undefined &&\n currentIndex > -1 &&\n !loadingPhotos\n ) {\n setPhotoError(false);\n getMorePhotos();\n }\n }, [currentIndex, selectedPicker]);\n\n const selectedPhotos = photos.map((asset) => ({\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads: selectedFiles.length + selectedImages.length,\n selected:\n selectedImages.some((image) => image.uri === asset.uri) ||\n selectedFiles.some((file) => file.uri === asset.uri),\n setSelectedFiles,\n setSelectedImages,\n }));\n\n const handleHeight = attachmentPickerBottomSheetHandleHeight || 20;\n\n /**\n * This is to handle issues with Android measurements coming back incorrect.\n * If the StatusBar height is perfectly 1/2 of the difference between the two\n * dimensions for screen and window, it is incorrect and we need to account for\n * this. If you use a translucent header bar more adjustments are needed.\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - screenHeight - statusBarHeight;\n const androidBottomBarHeightAdjustment =\n Platform.OS === 'android'\n ? bottomBarHeight === statusBarHeight\n ? translucentStatusBar\n ? 0\n : StatusBar.currentHeight ?? 0\n : translucentStatusBar\n ? bottomBarHeight > statusBarHeight\n ? -bottomBarHeight + statusBarHeight\n : bottomBarHeight > 0\n ? -statusBarHeight\n : 0\n : bottomBarHeight > 0\n ? 0\n : statusBarHeight\n : 0;\n\n const initialSnapPoint =\n attachmentPickerBottomSheetHeight ?? Platform.OS === 'android'\n ? 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment) - handleHeight\n : 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment);\n\n const finalSnapPoint =\n Platform.OS === 'android'\n ? fullScreenHeight - topInset - handleHeight\n : fullScreenHeight - topInset;\n\n /**\n * Snap points changing cause a rerender of the position,\n * this is an issue if you are calling close on the bottom sheet.\n */\n const snapPoints = useMemo(\n () => [initialSnapPoint, finalSnapPoint],\n [initialSnapPoint, finalSnapPoint],\n );\n\n return (\n <>\n <BottomSheet\n containerHeight={fullScreenHeight}\n enablePanDownToClose={true}\n handleComponent={\n /**\n * using `null` here instead of `style={{ opacity: photoError ? 0 : 1 }}`\n * as opacity is not an allowed style\n */\n photoError ? null : AttachmentPickerBottomSheetHandle\n }\n handleHeight={handleHeight}\n index={-1}\n onChange={setCurrentIndex}\n ref={ref}\n snapPoints={snapPoints}\n >\n <BottomSheetFlatList\n contentContainerStyle={[\n styles.container,\n { backgroundColor: white },\n bottomSheetContentContainer,\n { opacity: photoError ? 0 : 1 },\n ]}\n data={selectedPhotos}\n keyExtractor={(item) => item.asset.uri}\n numColumns={numberOfAttachmentPickerImageColumns ?? 3}\n onEndReached={getMorePhotos}\n renderItem={renderItem}\n />\n </BottomSheet>\n {selectedPicker === 'images' && photoError && (\n <AttachmentPickerError\n attachmentPickerBottomSheetHeight={attachmentPickerBottomSheetHeight}\n attachmentPickerErrorButtonText={attachmentPickerErrorButtonText}\n AttachmentPickerErrorImage={AttachmentPickerErrorImage}\n attachmentPickerErrorText={attachmentPickerErrorText}\n />\n )}\n </>\n );\n },\n);\n\nAttachmentPicker.displayName = 'AttachmentPicker';\n"]}
1
+ {"version":3,"sources":["AttachmentPicker.tsx"],"names":["dayjs","extend","duration","styles","StyleSheet","create","container","flexGrow","screenHeight","fullScreenHeight","Dimensions","get","height","AttachmentPicker","React","forwardRef","props","ref","AttachmentPickerBottomSheetHandle","attachmentPickerBottomSheetHandleHeight","attachmentPickerBottomSheetHeight","AttachmentPickerError","attachmentPickerErrorButtonText","AttachmentPickerErrorImage","attachmentPickerErrorText","ImageOverlaySelectedComponent","numberOfAttachmentImagesToLoadPerCall","numberOfAttachmentPickerImageColumns","translucentStatusBar","theme","bottomSheetContentContainer","attachmentPicker","white","colors","closePicker","maxNumberOfFiles","selectedFiles","selectedImages","selectedPicker","setSelectedFiles","setSelectedImages","setSelectedPicker","topInset","currentIndex","setCurrentIndex","endCursorRef","photoError","setPhotoError","hasNextPageRef","loadingPhotos","setLoadingPhotos","photos","setPhotos","attemptedToLoadPhotosOnOpenRef","getMorePhotos","current","endCursor","after","first","results","prevPhotos","assets","hasNextPage","backAction","undefined","backHandler","BackHandler","addEventListener","remove","keyboardShowEvent","Platform","OS","keyboardSubscription","Keyboard","addListener","removeListener","selectedPhotos","map","asset","numberOfUploads","length","selected","some","image","uri","file","handleHeight","getAndroidBottomBarHeightAdjustment","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","getInitialSnapPoint","initialSnapPoint","finalSnapPoint","snapPoints","backgroundColor","opacity","item","renderAttachmentPickerItem","displayName"],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { BackHandler, Dimensions, Keyboard, Platform, StatusBar, StyleSheet } from 'react-native';\n\nimport BottomSheet, { BottomSheetFlatList, BottomSheetHandleProps } from '@gorhom/bottom-sheet';\nimport dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\n\nimport type { AttachmentPickerErrorProps } from './components/AttachmentPickerError';\n\nimport { renderAttachmentPickerItem } from './components/AttachmentPickerItem';\n\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { getPhotos } from '../../native';\nimport type { Asset } from '../../types/types';\nimport { vh } from '../../utils/utils';\n\ndayjs.extend(duration);\n\nconst styles = StyleSheet.create({\n container: {\n flexGrow: 1,\n },\n});\n\nconst screenHeight = vh(100);\nconst fullScreenHeight = Dimensions.get('window').height;\n\nexport type AttachmentPickerProps = {\n /**\n * Custom UI component to render [draggable handle](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png) of attachment picker.\n *\n * **Default** [AttachmentPickerBottomSheetHandle](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx)\n */\n AttachmentPickerBottomSheetHandle: React.FC<BottomSheetHandleProps>;\n /**\n * Custom UI component to render error component while opening attachment picker.\n *\n * **Default** [AttachmentPickerError](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx)\n */\n AttachmentPickerError: React.ComponentType<AttachmentPickerErrorProps>;\n /**\n * Custom UI component to render error image for attachment picker\n *\n * **Default** [AttachmentPickerErrorImage](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerErrorImage.tsx)\n */\n AttachmentPickerErrorImage: React.ComponentType;\n /**\n * Custom UI component to render overlay component, that shows up on top of [selected image](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png) (with tick mark)\n *\n * **Default** [ImageOverlaySelectedComponent](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/ImageOverlaySelectedComponent.tsx)\n */\n ImageOverlaySelectedComponent: React.ComponentType;\n attachmentPickerBottomSheetHandleHeight?: number;\n attachmentPickerBottomSheetHeight?: number;\n attachmentPickerErrorButtonText?: string;\n attachmentPickerErrorText?: string;\n numberOfAttachmentImagesToLoadPerCall?: number;\n numberOfAttachmentPickerImageColumns?: number;\n translucentStatusBar?: boolean;\n};\n\nexport const AttachmentPicker = React.forwardRef(\n (props: AttachmentPickerProps, ref: React.ForwardedRef<BottomSheet>) => {\n const {\n AttachmentPickerBottomSheetHandle,\n attachmentPickerBottomSheetHandleHeight,\n attachmentPickerBottomSheetHeight,\n AttachmentPickerError,\n attachmentPickerErrorButtonText,\n AttachmentPickerErrorImage,\n attachmentPickerErrorText,\n ImageOverlaySelectedComponent,\n numberOfAttachmentImagesToLoadPerCall,\n numberOfAttachmentPickerImageColumns,\n translucentStatusBar,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { bottomSheetContentContainer },\n colors: { white },\n },\n } = useTheme();\n const {\n closePicker,\n maxNumberOfFiles,\n selectedFiles,\n selectedImages,\n selectedPicker,\n setSelectedFiles,\n setSelectedImages,\n setSelectedPicker,\n topInset,\n } = useAttachmentPickerContext();\n\n const [currentIndex, setCurrentIndex] = useState(-1);\n const endCursorRef = useRef<string>();\n const [photoError, setPhotoError] = useState(false);\n const hasNextPageRef = useRef(true);\n const [loadingPhotos, setLoadingPhotos] = useState(false);\n const [photos, setPhotos] = useState<Asset[]>([]);\n const attemptedToLoadPhotosOnOpenRef = useRef(false);\n\n const getMorePhotos = useCallback(async () => {\n if (\n hasNextPageRef.current &&\n !loadingPhotos &&\n currentIndex > -1 &&\n selectedPicker === 'images'\n ) {\n setPhotoError(false);\n setLoadingPhotos(true);\n const endCursor = endCursorRef.current;\n try {\n const results = await getPhotos({\n after: endCursor,\n first: numberOfAttachmentImagesToLoadPerCall ?? 60,\n });\n endCursorRef.current = results.endCursor;\n setPhotos((prevPhotos) =>\n endCursor ? [...prevPhotos, ...results.assets] : results.assets,\n );\n hasNextPageRef.current = !!results.hasNextPage;\n } catch (error) {\n setPhotoError(true);\n }\n setLoadingPhotos(false);\n }\n }, [currentIndex, selectedPicker, loadingPhotos]);\n\n useEffect(() => {\n const backAction = () => {\n if (selectedPicker) {\n setSelectedPicker(undefined);\n closePicker();\n return true;\n }\n\n return false;\n };\n\n const backHandler = BackHandler.addEventListener('hardwareBackPress', backAction);\n\n return () => backHandler.remove();\n }, [selectedPicker, closePicker]);\n\n useEffect(() => {\n const keyboardShowEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';\n const keyboardSubscription = Keyboard.addListener(keyboardShowEvent, closePicker);\n\n return () => {\n if (keyboardSubscription?.remove) {\n keyboardSubscription.remove();\n return;\n }\n\n // To keep compatibility with older versions of React Native, where `remove()` is not available\n Keyboard.removeListener(keyboardShowEvent, closePicker);\n };\n }, [closePicker]);\n\n useEffect(() => {\n if (currentIndex < 0) {\n setSelectedPicker(undefined);\n if (!loadingPhotos) {\n endCursorRef.current = undefined;\n hasNextPageRef.current = true;\n attemptedToLoadPhotosOnOpenRef.current = false;\n setPhotoError(false);\n }\n }\n }, [currentIndex, loadingPhotos]);\n\n useEffect(() => {\n if (\n !attemptedToLoadPhotosOnOpenRef.current &&\n selectedPicker === 'images' &&\n endCursorRef.current === undefined &&\n currentIndex > -1 &&\n !loadingPhotos\n ) {\n getMorePhotos();\n // we do this only once on open for avoiding to request permissions in rationale dialog again and again on Android\n attemptedToLoadPhotosOnOpenRef.current = true;\n }\n }, [currentIndex, selectedPicker, getMorePhotos, loadingPhotos]);\n\n const selectedPhotos = photos.map((asset) => ({\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads: selectedFiles.length + selectedImages.length,\n selected:\n selectedImages.some((image) => image.uri === asset.uri) ||\n selectedFiles.some((file) => file.uri === asset.uri),\n setSelectedFiles,\n setSelectedImages,\n }));\n\n const handleHeight = attachmentPickerBottomSheetHandleHeight || 20;\n\n /**\n * This is to handle issues with Android measurements coming back incorrect.\n * If the StatusBar height is perfectly 1/2 of the difference between the two\n * dimensions for screen and window, it is incorrect and we need to account for\n * this. If you use a translucent header bar more adjustments are needed.\n */\n const getAndroidBottomBarHeightAdjustment = (): number => {\n if (Platform.OS === 'android') {\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - screenHeight - statusBarHeight;\n if (bottomBarHeight === statusBarHeight) {\n return translucentStatusBar ? 0 : statusBarHeight;\n } else {\n if (translucentStatusBar) {\n if (bottomBarHeight > statusBarHeight) {\n return -bottomBarHeight + statusBarHeight;\n } else {\n return bottomBarHeight > 0 ? -statusBarHeight : 0;\n }\n } else {\n return bottomBarHeight > 0 ? 0 : statusBarHeight;\n }\n }\n }\n return 0;\n };\n\n const getInitialSnapPoint = (): number => {\n if (attachmentPickerBottomSheetHeight !== undefined) {\n return attachmentPickerBottomSheetHeight;\n }\n if (Platform.OS === 'android') {\n return (\n 308 +\n (fullScreenHeight - screenHeight + getAndroidBottomBarHeightAdjustment()) -\n handleHeight\n );\n } else {\n return 308 + (fullScreenHeight - screenHeight);\n }\n };\n\n const initialSnapPoint = getInitialSnapPoint();\n\n const finalSnapPoint =\n Platform.OS === 'android'\n ? fullScreenHeight - topInset - handleHeight\n : fullScreenHeight - topInset;\n\n /**\n * Snap points changing cause a rerender of the position,\n * this is an issue if you are calling close on the bottom sheet.\n */\n const snapPoints = useMemo(\n () => [initialSnapPoint, finalSnapPoint],\n [initialSnapPoint, finalSnapPoint],\n );\n\n return (\n <>\n <BottomSheet\n containerHeight={fullScreenHeight}\n enablePanDownToClose={true}\n handleComponent={\n /**\n * using `null` here instead of `style={{ opacity: photoError ? 0 : 1 }}`\n * as opacity is not an allowed style\n */\n photoError ? null : AttachmentPickerBottomSheetHandle\n }\n handleHeight={handleHeight}\n index={-1}\n onChange={setCurrentIndex}\n ref={ref}\n snapPoints={snapPoints}\n >\n <BottomSheetFlatList\n contentContainerStyle={[\n styles.container,\n { backgroundColor: white },\n bottomSheetContentContainer,\n { opacity: photoError ? 0 : 1 },\n ]}\n data={selectedPhotos}\n keyExtractor={(item) => item.asset.uri}\n numColumns={numberOfAttachmentPickerImageColumns ?? 3}\n onEndReached={getMorePhotos}\n renderItem={renderAttachmentPickerItem}\n />\n </BottomSheet>\n {selectedPicker === 'images' && photoError && (\n <AttachmentPickerError\n attachmentPickerBottomSheetHeight={initialSnapPoint}\n attachmentPickerErrorButtonText={attachmentPickerErrorButtonText}\n AttachmentPickerErrorImage={AttachmentPickerErrorImage}\n attachmentPickerErrorText={attachmentPickerErrorText}\n />\n )}\n </>\n );\n },\n);\n\nAttachmentPicker.displayName = 'AttachmentPicker';\n"]}
@@ -0,0 +1,358 @@
1
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.renderAttachmentPickerItem = void 0;
7
+
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var _react = _interopRequireDefault(require("react"));
15
+
16
+ var _reactNative = require("react-native");
17
+
18
+ var _bottomSheet = require("@gorhom/bottom-sheet");
19
+
20
+ var _dayjs = _interopRequireDefault(require("dayjs"));
21
+
22
+ var _mimeTypes = require("mime-types");
23
+
24
+ var _ThemeContext = require("../../../contexts/themeContext/ThemeContext");
25
+
26
+ var _icons = require("../../../icons");
27
+
28
+ var _native = require("../../../native");
29
+
30
+ var _utils = require("../../../utils/utils");
31
+
32
+ var _this = this,
33
+ _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx";
34
+
35
+ var AttachmentVideo = function AttachmentVideo(props) {
36
+ var asset = props.asset,
37
+ ImageOverlaySelectedComponent = props.ImageOverlaySelectedComponent,
38
+ maxNumberOfFiles = props.maxNumberOfFiles,
39
+ numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
40
+ numberOfUploads = props.numberOfUploads,
41
+ selected = props.selected,
42
+ setSelectedFiles = props.setSelectedFiles;
43
+
44
+ var _useTheme = (0, _ThemeContext.useTheme)(),
45
+ _useTheme$theme = _useTheme.theme,
46
+ _useTheme$theme$attac = _useTheme$theme.attachmentPicker,
47
+ durationText = _useTheme$theme$attac.durationText,
48
+ image = _useTheme$theme$attac.image,
49
+ imageOverlay = _useTheme$theme$attac.imageOverlay,
50
+ _useTheme$theme$color = _useTheme$theme.colors,
51
+ overlay = _useTheme$theme$color.overlay,
52
+ white = _useTheme$theme$color.white;
53
+
54
+ var duration = asset.duration,
55
+ playableDuration = asset.playableDuration,
56
+ uri = asset.uri;
57
+ var videoDuration = duration ? duration : playableDuration;
58
+ var ONE_HOUR_IN_SECONDS = 3600;
59
+ var durationLabel = '00:00';
60
+
61
+ if (videoDuration) {
62
+ var isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;
63
+ var formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';
64
+
65
+ var formattedVideoDuration = _dayjs["default"].duration(videoDuration, 'second').format(formattedDurationParam);
66
+
67
+ durationLabel = formattedVideoDuration;
68
+ }
69
+
70
+ var size = (0, _utils.vw)(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;
71
+
72
+ var onPressVideo = function () {
73
+ var _ref = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
74
+ var localAssetURI;
75
+ return _regenerator["default"].wrap(function _callee$(_context) {
76
+ while (1) {
77
+ switch (_context.prev = _context.next) {
78
+ case 0:
79
+ _context.t0 = asset.id;
80
+
81
+ if (!_context.t0) {
82
+ _context.next = 5;
83
+ break;
84
+ }
85
+
86
+ _context.next = 4;
87
+ return (0, _native.getLocalAssetUri)(asset.id);
88
+
89
+ case 4:
90
+ _context.t0 = _context.sent;
91
+
92
+ case 5:
93
+ localAssetURI = _context.t0;
94
+
95
+ if (selected) {
96
+ setSelectedFiles(function (files) {
97
+ return files.filter(function (file) {
98
+ return file.uri !== asset.uri;
99
+ });
100
+ });
101
+ } else {
102
+ setSelectedFiles(function (files) {
103
+ if (numberOfUploads >= maxNumberOfFiles) {
104
+ _reactNative.Alert.alert('Maximum number of files reached');
105
+
106
+ return files;
107
+ }
108
+
109
+ return [].concat((0, _toConsumableArray2["default"])(files), [{
110
+ duration: durationLabel,
111
+ name: asset.filename,
112
+ size: asset.fileSize,
113
+ type: 'video',
114
+ uri: localAssetURI || asset.uri
115
+ }]);
116
+ });
117
+ }
118
+
119
+ case 7:
120
+ case "end":
121
+ return _context.stop();
122
+ }
123
+ }
124
+ }, _callee);
125
+ }));
126
+
127
+ return function onPressVideo() {
128
+ return _ref.apply(this, arguments);
129
+ };
130
+ }();
131
+
132
+ return _react["default"].createElement(_bottomSheet.TouchableOpacity, {
133
+ onPress: onPressVideo,
134
+ __self: _this,
135
+ __source: {
136
+ fileName: _jsxFileName,
137
+ lineNumber: 93,
138
+ columnNumber: 5
139
+ }
140
+ }, _react["default"].createElement(_reactNative.ImageBackground, {
141
+ source: {
142
+ uri: uri
143
+ },
144
+ style: [{
145
+ height: size,
146
+ margin: 1,
147
+ width: size
148
+ }, image],
149
+ __self: _this,
150
+ __source: {
151
+ fileName: _jsxFileName,
152
+ lineNumber: 94,
153
+ columnNumber: 7
154
+ }
155
+ }, selected && _react["default"].createElement(_reactNative.View, {
156
+ style: [styles.overlay, {
157
+ backgroundColor: overlay
158
+ }, imageOverlay],
159
+ __self: _this,
160
+ __source: {
161
+ fileName: _jsxFileName,
162
+ lineNumber: 106,
163
+ columnNumber: 11
164
+ }
165
+ }, _react["default"].createElement(ImageOverlaySelectedComponent, {
166
+ __self: _this,
167
+ __source: {
168
+ fileName: _jsxFileName,
169
+ lineNumber: 107,
170
+ columnNumber: 13
171
+ }
172
+ })), _react["default"].createElement(_reactNative.View, {
173
+ style: styles.videoView,
174
+ __self: _this,
175
+ __source: {
176
+ fileName: _jsxFileName,
177
+ lineNumber: 110,
178
+ columnNumber: 9
179
+ }
180
+ }, _react["default"].createElement(_icons.Recorder, {
181
+ height: 20,
182
+ pathFill: white,
183
+ width: 25,
184
+ __self: _this,
185
+ __source: {
186
+ fileName: _jsxFileName,
187
+ lineNumber: 111,
188
+ columnNumber: 11
189
+ }
190
+ }), videoDuration ? _react["default"].createElement(_reactNative.Text, {
191
+ style: [styles.durationText, durationText, {
192
+ color: white
193
+ }],
194
+ __self: _this,
195
+ __source: {
196
+ fileName: _jsxFileName,
197
+ lineNumber: 113,
198
+ columnNumber: 13
199
+ }
200
+ }, durationLabel) : null)));
201
+ };
202
+
203
+ var AttachmentImage = function AttachmentImage(props) {
204
+ var asset = props.asset,
205
+ ImageOverlaySelectedComponent = props.ImageOverlaySelectedComponent,
206
+ maxNumberOfFiles = props.maxNumberOfFiles,
207
+ numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
208
+ numberOfUploads = props.numberOfUploads,
209
+ selected = props.selected,
210
+ setSelectedImages = props.setSelectedImages;
211
+
212
+ var _useTheme2 = (0, _ThemeContext.useTheme)(),
213
+ _useTheme2$theme = _useTheme2.theme,
214
+ _useTheme2$theme$atta = _useTheme2$theme.attachmentPicker,
215
+ image = _useTheme2$theme$atta.image,
216
+ imageOverlay = _useTheme2$theme$atta.imageOverlay,
217
+ overlay = _useTheme2$theme.colors.overlay;
218
+
219
+ var size = (0, _utils.vw)(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;
220
+ var uri = asset.uri;
221
+
222
+ var onPressImage = function onPressImage() {
223
+ if (selected) {
224
+ setSelectedImages(function (images) {
225
+ return images.filter(function (image) {
226
+ return image.uri !== asset.uri;
227
+ });
228
+ });
229
+ } else {
230
+ setSelectedImages(function (images) {
231
+ if (numberOfUploads >= maxNumberOfFiles) {
232
+ _reactNative.Alert.alert('Maximum number of files reached');
233
+
234
+ return images;
235
+ }
236
+
237
+ return [].concat((0, _toConsumableArray2["default"])(images), [asset]);
238
+ });
239
+ }
240
+ };
241
+
242
+ return _react["default"].createElement(_bottomSheet.TouchableOpacity, {
243
+ onPress: onPressImage,
244
+ __self: _this,
245
+ __source: {
246
+ fileName: _jsxFileName,
247
+ lineNumber: 159,
248
+ columnNumber: 5
249
+ }
250
+ }, _react["default"].createElement(_reactNative.ImageBackground, {
251
+ source: {
252
+ uri: uri
253
+ },
254
+ style: [{
255
+ height: size,
256
+ margin: 1,
257
+ width: size
258
+ }, image],
259
+ __self: _this,
260
+ __source: {
261
+ fileName: _jsxFileName,
262
+ lineNumber: 160,
263
+ columnNumber: 7
264
+ }
265
+ }, selected && _react["default"].createElement(_reactNative.View, {
266
+ style: [styles.overlay, {
267
+ backgroundColor: overlay
268
+ }, imageOverlay],
269
+ __self: _this,
270
+ __source: {
271
+ fileName: _jsxFileName,
272
+ lineNumber: 172,
273
+ columnNumber: 11
274
+ }
275
+ }, _react["default"].createElement(ImageOverlaySelectedComponent, {
276
+ __self: _this,
277
+ __source: {
278
+ fileName: _jsxFileName,
279
+ lineNumber: 173,
280
+ columnNumber: 13
281
+ }
282
+ }))));
283
+ };
284
+
285
+ var getFileType = function getFileType(asset) {
286
+ var filename = asset.filename;
287
+
288
+ if (filename) {
289
+ var contentType = (0, _mimeTypes.lookup)(filename) || 'multipart/form-data';
290
+ return contentType.startsWith('image/') ? 'image' : 'video';
291
+ } else {
292
+ return asset.type === 'video' ? 'video' : 'image';
293
+ }
294
+ };
295
+
296
+ var renderAttachmentPickerItem = function renderAttachmentPickerItem(_ref2) {
297
+ var item = _ref2.item;
298
+ var asset = item.asset,
299
+ ImageOverlaySelectedComponent = item.ImageOverlaySelectedComponent,
300
+ maxNumberOfFiles = item.maxNumberOfFiles,
301
+ numberOfAttachmentPickerImageColumns = item.numberOfAttachmentPickerImageColumns,
302
+ numberOfUploads = item.numberOfUploads,
303
+ selected = item.selected,
304
+ setSelectedFiles = item.setSelectedFiles,
305
+ setSelectedImages = item.setSelectedImages;
306
+ var fileType = getFileType(asset);
307
+ return fileType === 'image' ? _react["default"].createElement(AttachmentImage, {
308
+ asset: asset,
309
+ ImageOverlaySelectedComponent: ImageOverlaySelectedComponent,
310
+ maxNumberOfFiles: maxNumberOfFiles,
311
+ numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
312
+ numberOfUploads: numberOfUploads,
313
+ selected: selected,
314
+ setSelectedImages: setSelectedImages,
315
+ __self: _this,
316
+ __source: {
317
+ fileName: _jsxFileName,
318
+ lineNumber: 206,
319
+ columnNumber: 5
320
+ }
321
+ }) : _react["default"].createElement(AttachmentVideo, {
322
+ asset: asset,
323
+ ImageOverlaySelectedComponent: ImageOverlaySelectedComponent,
324
+ maxNumberOfFiles: maxNumberOfFiles,
325
+ numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
326
+ numberOfUploads: numberOfUploads,
327
+ selected: selected,
328
+ setSelectedFiles: setSelectedFiles,
329
+ __self: _this,
330
+ __source: {
331
+ fileName: _jsxFileName,
332
+ lineNumber: 216,
333
+ columnNumber: 5
334
+ }
335
+ });
336
+ };
337
+
338
+ exports.renderAttachmentPickerItem = renderAttachmentPickerItem;
339
+
340
+ var styles = _reactNative.StyleSheet.create({
341
+ durationText: {
342
+ fontWeight: 'bold'
343
+ },
344
+ overlay: {
345
+ alignItems: 'flex-end',
346
+ flex: 1
347
+ },
348
+ videoView: {
349
+ bottom: 5,
350
+ display: 'flex',
351
+ flexDirection: 'row',
352
+ justifyContent: 'space-between',
353
+ paddingHorizontal: 5,
354
+ position: 'absolute',
355
+ width: '100%'
356
+ }
357
+ });
358
+ //# sourceMappingURL=AttachmentPickerItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["AttachmentPickerItem.tsx"],"names":["AttachmentVideo","props","asset","ImageOverlaySelectedComponent","maxNumberOfFiles","numberOfAttachmentPickerImageColumns","numberOfUploads","selected","setSelectedFiles","theme","attachmentPicker","durationText","image","imageOverlay","colors","overlay","white","duration","playableDuration","uri","videoDuration","ONE_HOUR_IN_SECONDS","durationLabel","isDurationLongerThanHour","formattedDurationParam","formattedVideoDuration","dayjs","format","size","onPressVideo","id","localAssetURI","files","filter","file","Alert","alert","name","filename","fileSize","type","height","margin","width","styles","backgroundColor","videoView","color","AttachmentImage","setSelectedImages","onPressImage","images","getFileType","contentType","startsWith","renderAttachmentPickerItem","item","fileType","StyleSheet","create","fontWeight","alignItems","flex","bottom","display","flexDirection","justifyContent","paddingHorizontal","position"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Alert, ImageBackground, StyleSheet, Text, View } from 'react-native';\n\nimport { TouchableOpacity } from '@gorhom/bottom-sheet';\nimport dayjs from 'dayjs';\nimport { lookup } from 'mime-types';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { Recorder } from '../../../icons';\nimport { getLocalAssetUri } from '../../../native';\nimport type { Asset, File } from '../../../types/types';\nimport { vw } from '../../../utils/utils';\n\ntype AttachmentPickerItemType = {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n numberOfUploads: number;\n selected: boolean;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\ntype AttachmentImageProps = Omit<AttachmentPickerItemType, 'setSelectedFiles'>;\n\ntype AttachmentVideoProps = Omit<AttachmentPickerItemType, 'setSelectedImages'>;\n\nconst AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { durationText, image, imageOverlay },\n colors: { overlay, white },\n },\n } = useTheme();\n\n const { duration, playableDuration, uri } = asset;\n\n const videoDuration = duration ? duration : playableDuration;\n\n const ONE_HOUR_IN_SECONDS = 3600;\n\n let durationLabel = '00:00';\n\n if (videoDuration) {\n const isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;\n const formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';\n const formattedVideoDuration = dayjs\n .duration(videoDuration, 'second')\n .format(formattedDurationParam);\n durationLabel = formattedVideoDuration;\n }\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const onPressVideo = async () => {\n // For the case of expo messaging app where you need to fetch the asset uri from asset id\n const localAssetURI = asset.id && (await getLocalAssetUri(asset.id));\n if (selected) {\n setSelectedFiles((files) => files.filter((file) => file.uri !== asset.uri));\n } else {\n setSelectedFiles((files) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return files;\n }\n return [\n ...files,\n {\n duration: durationLabel,\n name: asset.filename,\n size: asset.fileSize,\n type: 'video',\n uri: localAssetURI || asset.uri,\n },\n ];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressVideo}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n <View style={styles.videoView}>\n <Recorder height={20} pathFill={white} width={25} />\n {videoDuration ? (\n <Text style={[styles.durationText, durationText, { color: white }]}>\n {durationLabel}\n </Text>\n ) : null}\n </View>\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst AttachmentImage: React.FC<AttachmentImageProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedImages,\n } = props;\n const {\n theme: {\n attachmentPicker: { image, imageOverlay },\n colors: { overlay },\n },\n } = useTheme();\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const { uri } = asset;\n\n const onPressImage = () => {\n if (selected) {\n setSelectedImages((images) => images.filter((image) => image.uri !== asset.uri));\n } else {\n setSelectedImages((images) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return images;\n }\n return [...images, asset];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressImage}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst getFileType = (asset: Asset) => {\n const { filename } = asset;\n if (filename) {\n const contentType = lookup(filename) || 'multipart/form-data';\n return contentType.startsWith('image/') ? 'image' : 'video';\n } else {\n return asset.type === 'video' ? 'video' : 'image';\n }\n};\n\nexport const renderAttachmentPickerItem = ({ item }: { item: AttachmentPickerItemType }) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n setSelectedImages,\n } = item;\n\n const fileType = getFileType(asset);\n\n return fileType === 'image' ? (\n <AttachmentImage\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedImages={setSelectedImages}\n />\n ) : (\n <AttachmentVideo\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedFiles={setSelectedFiles}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n durationText: {\n fontWeight: 'bold',\n },\n overlay: {\n alignItems: 'flex-end',\n flex: 1,\n },\n videoView: {\n bottom: 5,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingHorizontal: 5,\n position: 'absolute',\n width: '100%',\n },\n});\n"]}
@@ -465,7 +465,7 @@ var AutoCompleteInputWithContext = function AutoCompleteInputWithContext(props)
465
465
  leading: false
466
466
  });
467
467
  return _react["default"].createElement(_reactNative.TextInput, (0, _extends2["default"])({
468
- autoFocus: true,
468
+ autoFocus: giphyActive,
469
469
  maxLength: maxMessageLength,
470
470
  multiline: true,
471
471
  onChangeText: function onChangeText(newText) {