Skip to content

Commit e270d81

Browse files
committed
feat(doc-viewer): add default text viewer and image viewer
1 parent 9b2e80e commit e270d81

File tree

5 files changed

+64
-2
lines changed

5 files changed

+64
-2
lines changed

packages/pluggableWidgets/document-viewer-web/components/ErrorViewer.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { createElement, useCallback } from "react";
22
import { DocRendererElement, DocumentRendererProps } from "./documentRenderer";
3-
import { DocumentViewerContainerProps } from "../typings/DocumentViewerProps";
43
import BaseViewer from "./BaseViewer";
54
import { downloadFile } from "../utils/helpers";
65

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { createElement } from "react";
2+
import { BaseControlViewer } from "./BaseViewer";
3+
import { DocRendererElement, DocumentRendererProps } from "./documentRenderer";
4+
5+
const ImageViewer: DocRendererElement = (props: DocumentRendererProps) => {
6+
const { file } = props;
7+
8+
return (
9+
<BaseControlViewer {...props} file={file}>
10+
<img src={file.value?.uri} alt="Image" className="image-viewer-content" />
11+
</BaseControlViewer>
12+
);
13+
};
14+
15+
ImageViewer.contentTypes = ["image/*", "image/jpeg", "image/png", "image/gif", "image/bmp", "image/tiff", "image/webp"];
16+
17+
ImageViewer.fileTypes = ["jpg", "jpeg", "png", "gif", "bmp", "tiff", "webp"];
18+
19+
export default ImageViewer;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { createElement, useEffect, useState } from "react";
2+
import { BaseControlViewer } from "./BaseViewer";
3+
import { DocRendererElement, DocumentRendererProps, DocumentStatus } from "./documentRenderer";
4+
5+
const TextViewer: DocRendererElement = (props: DocumentRendererProps) => {
6+
const { file, setDocumentStatus } = props;
7+
const [text, setText] = useState<string | null>(null);
8+
9+
useEffect(() => {
10+
const controller = new AbortController();
11+
const { signal } = controller;
12+
if (file.status === "available" && file.value.uri) {
13+
fetch(file.value.uri, { method: "GET", signal })
14+
.then(res => res.text())
15+
.then(response => {
16+
setText(response);
17+
})
18+
.catch(() => {
19+
setDocumentStatus(DocumentStatus.error);
20+
});
21+
}
22+
23+
return () => {
24+
controller.abort();
25+
};
26+
}, [file, file.status, file.value?.uri, setDocumentStatus]);
27+
28+
return (
29+
<BaseControlViewer {...props} file={file}>
30+
<pre className="text-content">{text}</pre>
31+
</BaseControlViewer>
32+
);
33+
};
34+
35+
TextViewer.contentTypes = ["text/plain", "text/csv", "application/json"];
36+
37+
TextViewer.fileTypes = ["txt", "csv", "json"];
38+
39+
export default TextViewer;
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import DocxViewer from "./DocxViewer";
22
import PDFViewer from "./PDFViewer";
33
import ExcelViewer from "./ExcelViewer";
4+
import TextViewer from "./TextViewer";
5+
import ImageViewer from "./ImageViewer";
46

5-
export const DocumentRenderers = [DocxViewer, ExcelViewer, PDFViewer];
7+
export const DocumentRenderers = [DocxViewer, ExcelViewer, PDFViewer, TextViewer, ImageViewer];

packages/pluggableWidgets/document-viewer-web/utils/useRendererSelector.ts

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { DocumentRenderers } from "../components";
44
import { DocRendererElement, DocumentRendererProps, DocumentStatus } from "../components/documentRenderer";
55
import ErrorViewer from "../components/ErrorViewer";
66
import { DocumentViewerContainerProps } from "../typings/DocumentViewerProps";
7+
import TextViewer from "../components/TextViewer";
78

89
interface DocumentRenderer {
910
CurrentRenderer: DocRendererElement;
@@ -38,6 +39,8 @@ export function useRendererSelector(props: DocumentViewerContainerProps): Docume
3839
}
3940
if (selectedRenderer.length > 0) {
4041
setComponent(() => selectedRenderer[0]);
42+
} else {
43+
setComponent(() => TextViewer);
4144
}
4245
}
4346
});

0 commit comments

Comments
 (0)