import React, {useMemo, useCallback, useState} from 'react' import { ImageStyle, KeyboardAvoidingView, ScrollView, StyleSheet, TextInput, TouchableOpacity, View, useWindowDimensions, } from 'react-native' import {Image} from 'expo-image' import {usePalette} from 'lib/hooks/usePalette' import {gradients, s} from 'lib/styles' import {enforceLen} from 'lib/strings/helpers' import {MAX_ALT_TEXT} from 'lib/constants' import {useTheme} from 'lib/ThemeContext' import {Text} from '../util/text/Text' import LinearGradient from 'react-native-linear-gradient' import {isAndroid, isWeb} from 'platform/detection' import {ImageModel} from 'state/models/media/image' import {useModalControls} from '#/state/modals' export const snapPoints = ['fullscreen'] interface Props { image: ImageModel } export function Component({image}: Props) { const pal = usePalette('default') const theme = useTheme() const [altText, setAltText] = useState(image.altText) const windim = useWindowDimensions() const {closeModal} = useModalControls() const imageStyles = useMemo(() => { const maxWidth = isWeb ? 450 : windim.width if (image.height > image.width) { return { resizeMode: 'contain', width: '100%', aspectRatio: 1, borderRadius: 8, } } return { width: '100%', height: (maxWidth / image.width) * image.height, borderRadius: 8, } }, [image, windim]) const onPressSave = useCallback(() => { image.setAltText(altText) closeModal() }, [closeModal, image, altText]) const onPressCancel = () => { closeModal() } return ( setAltText(enforceLen(text, MAX_ALT_TEXT))} accessibilityLabel="Image alt text" accessibilityHint="" accessibilityLabelledBy="imageAltText" autoFocus /> Save Cancel ) } const styles = StyleSheet.create({ container: { flex: 1, height: '100%', width: '100%', paddingVertical: isWeb ? 0 : 18, }, scrollContainer: { flex: 1, height: '100%', paddingHorizontal: isWeb ? 0 : 12, }, scrollInner: { gap: 12, }, imageContainer: { borderRadius: 8, }, textArea: { borderWidth: 1, borderRadius: 6, paddingTop: 10, paddingHorizontal: 12, fontSize: 16, height: 100, textAlignVertical: 'top', }, button: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', width: '100%', borderRadius: 32, padding: 10, }, buttonControls: { gap: 8, }, })