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.
- package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +122 -433
- package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js +358 -0
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +1 -1
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
- package/lib/commonjs/components/MessageList/NetworkDownIndicator.js +14 -6
- package/lib/commonjs/components/MessageList/NetworkDownIndicator.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +134 -85
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +39 -17
- package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
- package/lib/commonjs/hooks/useAppStateListener.js +9 -15
- package/lib/commonjs/hooks/useAppStateListener.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/AttachmentPicker/AttachmentPicker.js +122 -433
- package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js +358 -0
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
- package/lib/module/components/MessageList/NetworkDownIndicator.js +14 -6
- package/lib/module/components/MessageList/NetworkDownIndicator.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +134 -85
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/contexts/overlayContext/OverlayProvider.js +39 -17
- package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
- package/lib/module/hooks/useAppStateListener.js +9 -15
- package/lib/module/hooks/useAppStateListener.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts +0 -11
- package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerItem.d.ts +16 -0
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +1 -1
- package/lib/typescript/hooks/__tests__/useAppStateListener.test.d.ts +1 -0
- package/package.json +2 -2
- package/src/components/AttachmentPicker/AttachmentPicker.tsx +79 -322
- package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx +245 -0
- package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +1 -1
- package/src/components/MessageInput/__tests__/__snapshots__/MessageInput.test.js.snap +1 -1
- package/src/components/MessageList/NetworkDownIndicator.tsx +13 -10
- package/src/contexts/messageInputContext/MessageInputContext.tsx +27 -25
- package/src/contexts/overlayContext/OverlayProvider.tsx +28 -4
- package/src/hooks/__tests__/useAppStateListener.test.tsx +41 -0
- package/src/hooks/useAppStateListener.ts +9 -12
- 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:
|
|
468
|
+
autoFocus: giphyActive,
|
|
469
469
|
maxLength: maxMessageLength,
|
|
470
470
|
multiline: true,
|
|
471
471
|
onChangeText: function onChangeText(newText) {
|