import analytics from '@components/analytics'
import { HeaderCenter, HeaderLeft, HeaderRight } from '@components/Header'
import { useActionSheet } from '@expo/react-native-action-sheet'
import { StackScreenProps } from '@react-navigation/stack'
import { findIndex } from 'lodash'
import React, { useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { Platform, Share, StatusBar, View } from 'react-native'
import {
SafeAreaProvider,
useSafeAreaInsets
} from 'react-native-safe-area-context'
import ImageViewer from './ImageViewer/Root'
import { saveAndroid, saveIos } from './ImageViewer/save'
const saveImage = async (
image: Nav.RootStackParamList['Screen-ImagesViewer']['imageUrls'][0]
) => {
switch (Platform.OS) {
case 'ios':
saveIos(image)
break
case 'android':
saveAndroid(image)
break
}
}
const HeaderComponent = React.memo(
({
navigation,
currentIndex,
imageUrls
}: {
navigation: ScreenImagesViewerProp['navigation']
currentIndex: number
imageUrls: Nav.RootStackParamList['Screen-ImagesViewer']['imageUrls']
}) => {
const insets = useSafeAreaInsets()
const { t } = useTranslation('screenImageViewer')
const { showActionSheetWithOptions } = useActionSheet()
const onPress = useCallback(() => {
analytics('imageviewer_more_press')
showActionSheetWithOptions(
{
options: [
t('content.options.save'),
t('content.options.share'),
t('content.options.cancel')
],
cancelButtonIndex: 2
},
async buttonIndex => {
switch (buttonIndex) {
case 0:
analytics('imageviewer_more_save_press')
saveImage(imageUrls[currentIndex])
break
case 1:
analytics('imageviewer_more_share_press')
switch (Platform.OS) {
case 'ios':
Share.share({ url: imageUrls[currentIndex].url })
case 'android':
Share.share({ message: imageUrls[currentIndex].url })
}
break
}
}
)
}, [currentIndex])
return (
navigation.goBack()}
/>
)
},
(prev, next) => prev.currentIndex === next.currentIndex
)
export type ScreenImagesViewerProp = StackScreenProps<
Nav.RootStackParamList,
'Screen-ImagesViewer'
>
const ScreenImagesViewer = ({
route: {
params: { imageUrls, id }
},
navigation
}: ScreenImagesViewerProp) => {
if (imageUrls.length === 0) {
navigation.goBack()
return null
}
const initialIndex = findIndex(imageUrls, ['id', id])
const [currentIndex, setCurrentIndex] = useState(initialIndex)
return (
setCurrentIndex(index)}
onRequestClose={() => navigation.goBack()}
onLongPress={saveImage}
HeaderComponent={() => (
)}
/>
)
}
export default ScreenImagesViewer