preview ms office files

This commit is contained in:
spencerwooo
2021-06-29 16:20:35 +01:00
parent 6e78ac80ad
commit c7813a7614
8 changed files with 1143 additions and 2584 deletions
+4
View File
@@ -20,6 +20,7 @@ import FourOhFour from './FourOhFour'
import TextPreview from './previews/TextPreview' import TextPreview from './previews/TextPreview'
import MarkdownPreview from './previews/MarkdownPreview' import MarkdownPreview from './previews/MarkdownPreview'
import CodePreview from './previews/CodePreview' import CodePreview from './previews/CodePreview'
import OfficePreview from './previews/OfficePreview'
// Disabling SSR for some previews (image gallery view, and PDF view) // Disabling SSR for some previews (image gallery view, and PDF view)
const ReactViewer = dynamic(() => import('react-viewer'), { ssr: false }) const ReactViewer = dynamic(() => import('react-viewer'), { ssr: false })
@@ -235,6 +236,9 @@ const FileListing: FunctionComponent<{ query?: ParsedUrlQuery }> = ({ query }) =
case preview.pdf: case preview.pdf:
return <PDFPreview file={resp} /> return <PDFPreview file={resp} />
case preview.office:
return <OfficePreview file={resp} />
default: default:
return <div className="bg-white shadow rounded">{fileName}</div> return <div className="bg-white shadow rounded">{fileName}</div>
} }
+30
View File
@@ -0,0 +1,30 @@
import { FunctionComponent, useEffect, useRef, useState } from 'react'
import Preview from 'preview-office-docs'
import DownloadBtn from '../DownloadBtn'
const OfficePreview: FunctionComponent<{ file: any }> = ({ file }) => {
const docContainer = useRef<HTMLDivElement>(null)
const [docContainerWidth, setDocContainerWidth] = useState(600)
useEffect(() => {
setDocContainerWidth(docContainer.current ? docContainer.current.offsetWidth : 600)
}, [])
return (
<>
<div className="shadow overflow-scroll" ref={docContainer} style={{ maxHeight: '90vh' }}>
<Preview
url={file['@microsoft.graph.downloadUrl']}
width={docContainerWidth.toString()}
height="800"
/>
</div>
<div className="mt-4">
<DownloadBtn downloadUrl={file['@microsoft.graph.downloadUrl']} />
</div>
</>
)
}
export default OfficePreview
+2 -2
View File
@@ -1,4 +1,4 @@
import { createRef, FunctionComponent, useEffect, useRef, useState } from 'react' import { FunctionComponent, useEffect, useRef, useState } from 'react'
import { Document, Page, pdfjs } from 'react-pdf' import { Document, Page, pdfjs } from 'react-pdf'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
@@ -31,7 +31,7 @@ const PDFPreview: FunctionComponent<{ file: any }> = ({ file }) => {
> >
<div className="w-full flex-1 overflow-scroll" ref={pdfContainter} style={{ maxHeight: '80vh' }}> <div className="w-full flex-1 overflow-scroll" ref={pdfContainter} style={{ maxHeight: '80vh' }}>
<Document <Document
className="bg-gray-200" className="bg-gray-100"
file={file['@microsoft.graph.downloadUrl']} file={file['@microsoft.graph.downloadUrl']}
onLoadSuccess={onDocumentLoadSuccess} onLoadSuccess={onDocumentLoadSuccess}
loading={<Loading loadingText={loadingText} />} loading={<Loading loadingText={loadingText} />}
+1082 -2578
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -17,6 +17,7 @@
"axios": "^0.21.1", "axios": "^0.21.1",
"github-markdown-css": "^4.0.0", "github-markdown-css": "^4.0.0",
"next": "11.0.0", "next": "11.0.0",
"preview-office-docs": "^1.0.2",
"prismjs": "^1.23.0", "prismjs": "^1.23.0",
"react": "17.0.2", "react": "17.0.2",
"react-copy-to-clipboard": "^5.0.3", "react-copy-to-clipboard": "^5.0.3",
+1
View File
@@ -6,4 +6,5 @@
.react-pdf__Page__canvas { .react-pdf__Page__canvas {
@apply mx-auto; @apply mx-auto;
@apply shadow-md;
} }
+15 -4
View File
@@ -1,7 +1,11 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "es5", "target": "es5",
"lib": ["dom", "dom.iterable", "esnext"], "lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true, "allowJs": true,
"skipLibCheck": true, "skipLibCheck": true,
"strict": true, "strict": true,
@@ -12,8 +16,15 @@
"moduleResolution": "node", "moduleResolution": "node",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"jsx": "preserve" "jsx": "preserve",
"noImplicitAny": false
}, },
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "include": [
"exclude": ["node_modules"] "next-env.d.ts",
"**/*.ts",
"**/*.tsx"
],
"exclude": [
"node_modules"
]
} }
+8
View File
@@ -6,6 +6,7 @@ const preview = {
code: 'code', code: 'code',
video: 'video', video: 'video',
audio: 'audio', audio: 'audio',
office: 'ms-office',
} }
const extensions = { const extensions = {
@@ -21,6 +22,13 @@ const extensions = {
pdf: preview.pdf, pdf: preview.pdf,
doc: preview.office,
docx: preview.office,
ppt: preview.office,
pptx: preview.office,
xls: preview.office,
xlsx: preview.office,
c: preview.code, c: preview.code,
cpp: preview.code, cpp: preview.code,
js: preview.code, js: preview.code,