import { Image } from "expo-image" import { useState } from "react" import { Modal, Pressable, Text, useWindowDimensions, View } from "react-native" import { formatBytes, StagedNoteImage } from "@/src/notes/image-utils" import { noteImagePanelStyles as styles } from "@/src/styles/app-styles" type Palette = { surface: string elevated: string text: string mutedText: string border: string accent: string destructive: string } type NoteImagePanelProps = { canEdit: boolean isBusy?: boolean currentImageUrl?: string | null currentImageMimeType?: string | null currentImageSizeBytes?: number | null stagedImage?: StagedNoteImage | null helperText?: string | null palette: Palette primaryTextColor: string onTakePhoto?: () => void onChooseFromLibrary?: () => void onRemoveImage?: () => void } export default function NoteImagePanel({ canEdit, isBusy = false, currentImageUrl, currentImageMimeType, currentImageSizeBytes, stagedImage, helperText, palette, primaryTextColor, onTakePhoto, onChooseFromLibrary, onRemoveImage, }: NoteImagePanelProps) { const [isFullscreenOpen, setIsFullscreenOpen] = useState(false) const { width } = useWindowDimensions() const previewUri = stagedImage?.uri ?? currentImageUrl ?? null const mimeType = stagedImage?.mimeType ?? currentImageMimeType ?? null const sizeBytes = stagedImage?.fileSize ?? currentImageSizeBytes ?? null const useStackedLayout = width < 680 return ( {previewUri ? ( {stagedImage ? "Staged image" : "Saved image"} {(mimeType ?? "Unknown type").toUpperCase()} {formatBytes(sizeBytes)} {!stagedImage && currentImageUrl ? ( {currentImageUrl} ) : null} { if (previewUri) { setIsFullscreenOpen(true) } }} style={styles.previewFrame} > ) : ( No image attached. )} {helperText ? {helperText} : null} {canEdit ? ( Take photo Choose from gallery {previewUri ? ( Remove image ) : null} ) : null} { setIsFullscreenOpen(false) }} > { setIsFullscreenOpen(false) }} /> { setIsFullscreenOpen(false) }} style={[styles.closeButton, { borderColor: palette.border, backgroundColor: palette.elevated }]} > Close {previewUri ? ( ) : null} ) }