import { useId, useMemo, useState } from "react"; import { ActivityIndicator, Image, Pressable, View } from "react-native"; import { AppText as Text } from "../../components/AppText"; import { EmptyState } from "../../components/EmptyState"; import { FilePreviewModal, type FilePreviewSource } from "../../components/FilePreviewModal"; import { PresentationSource } from "../../components/NativePresentation"; import { useMediaActions, type MediaActionsSource } from "../../lib/mediaActions"; import { MediaActionsMenu } from "../../components/MediaActionsMenu"; function ResolvedWorkspaceFileImagePreview(props: { readonly accessibilityLabel: string; readonly uri: string; readonly actionsSource?: MediaActionsSource; }) { const [loadError, setLoadError] = useState(null); const [preview, setPreview] = useState(null); const sourceIdentifier = useId(); const mediaActions = useMediaActions(props.actionsSource); const imageSource = useMemo( () => ({ uri: props.uri, cache: "force-cache" as const }), [props.uri], ); return ( 0 ? "Touch and hold for media actions" : undefined } disabled={loadError !== null} className="flex-1 p-4 active:bg-subtle-strong" onPress={() => setPreview({ kind: "image", uri: props.uri, name: props.accessibilityLabel, sourceIdentifier, actionsSource: props.actionsSource, }) } > setLoadError(null)} onError={(event) => { setLoadError(event.nativeEvent.error || "The image could not be rendered."); }} /> {loadError !== null ? ( ) : null} setPreview(null)} /> ); } export function WorkspaceFileImagePreview(props: { readonly accessibilityLabel: string; readonly uri: string | null; readonly actionsSource?: MediaActionsSource; }) { if (props.uri === null) { return ( Preparing image preview... ); } return ( ); }