54 lines · 1.8 KB · TypeScript
RawDownload
import { useEffect, useEffectEvent } from "react";import { Alert } from "react-native";import ImageViewing from "react-native-image-viewing"; import { downloadAndShareAttachment, shareLocalAttachment } from "../lib/attachmentDownload";import type { ResolvedFilePreviewSource } from "./FilePreviewModal";import { MediaImagePreview } from "./MediaImagePreview"; function PdfPreview(props: {  readonly source: ResolvedFilePreviewSource;  readonly onRequestClose: () => void;}) {  const { uri, name } = props.source;  const onRequestClose = useEffectEvent(props.onRequestClose);  useEffect(() => {    const controller = new AbortController();    const input = {      attachment: { name: name ?? "Document.pdf", mimeType: "application/pdf" },      signal: controller.signal,    };    // Android's system chooser supplies the installed PDF apps.    const opened =      uri.startsWith("file:") || uri.startsWith("content:")        ? shareLocalAttachment({ ...input, uri })        : downloadAndShareAttachment({ ...input, url: uri });    void opened      .catch(() => {        if (!controller.signal.aborted) Alert.alert("Could not open PDF", "Please try again.");      })      .finally(() => {        if (!controller.signal.aborted) onRequestClose();      });    return () => controller.abort();  }, [uri, name]);  return null;} export function FilePreview(props: {  readonly source: ResolvedFilePreviewSource;  readonly onRequestClose: () => void;}) {  if (props.source.kind === "pdf") return <PdfPreview {...props} />;  if (props.source.actionsSource) return <MediaImagePreview {...props} />;  return (    <ImageViewing      images={[{ uri: props.source.uri }]}      imageIndex={0}      visible      onRequestClose={props.onRequestClose}      swipeToCloseEnabled      doubleTapToZoomEnabled    />  );}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t