diff --git a/components/FileListing.tsx b/components/FileListing.tsx
index fa2beea..f0f82ba 100644
--- a/components/FileListing.tsx
+++ b/components/FileListing.tsx
@@ -10,6 +10,7 @@ import { ImageDecorator } from 'react-viewer/lib/ViewerProps'
import { useRouter } from 'next/router'
import dynamic from 'next/dynamic'
+import { humanFileSize, formatModifiedDateTime } from '../utils/fileDetails'
import { getExtension, getFileIcon, hasKey } from '../utils/getFileIcon'
import { extensions, preview } from '../utils/getPreviewType'
import { useProtectedSWRInfinite } from '../utils/fetchWithSWR'
@@ -30,30 +31,15 @@ import CodePreview from './previews/CodePreview'
import OfficePreview from './previews/OfficePreview'
import AudioPreview from './previews/AudioPreview'
import VideoPreview from './previews/VideoPreview'
-import DownloadButtonGroup from './DownloadBtnGtoup'
import PDFPreview from './previews/PDFPreview'
import URLPreview from './previews/URLPreview'
-import { DownloadBtnContainer, PreviewContainer } from './previews/Containers'
+import DefaultPreview from './previews/DefaultPreview'
+import { PreviewContainer } from './previews/Containers'
// Disabling SSR for some previews (image gallery view, and PDF view)
const ReactViewer = dynamic(() => import('react-viewer'), { ssr: false })
const EPUBPreview = dynamic(() => import('./previews/EPUBPreview'), { ssr: false })
-/**
- * Convert raw bits file/folder size into a human readable string
- *
- * @param size File or folder size, in raw bits
- * @returns Human readable form of the file or folder size
- */
-const humanFileSize = (size: number) => {
- if (size < 1024) return size + ' B'
- const i = Math.floor(Math.log(size) / Math.log(1024))
- const num = size / Math.pow(1024, i)
- const round = Math.round(num)
- const formatted = round < 10 ? num.toFixed(2) : round < 100 ? num.toFixed(1) : round
- return `${formatted} ${'KMGTPEZY'[i - 1]}B`
-}
-
/**
* Convert url query into path string
*
@@ -92,14 +78,7 @@ const FileListItem: FC<{
- {new Date(c.lastModifiedDateTime).toLocaleString('en-US', {
- year: 'numeric',
- month: '2-digit',
- day: '2-digit',
- hour: '2-digit',
- minute: '2-digit',
- hour12: false,
- })}
+ {formatModifiedDateTime(c.lastModifiedDateTime)}
{humanFileSize(c.size)}
@@ -600,22 +579,11 @@ const FileListing: FC<{ query?: ParsedUrlQuery }> = ({ query }) => {
return
default:
- return
{fileName}
+ return
}
+ } else {
+ return
}
-
- return (
- <>
-
-
-
-
-
-
- >
- )
}
return (
diff --git a/components/previews/DefaultPreview.tsx b/components/previews/DefaultPreview.tsx
new file mode 100644
index 0000000..f26c21e
--- /dev/null
+++ b/components/previews/DefaultPreview.tsx
@@ -0,0 +1,79 @@
+import { OdFileObject } from '../../types'
+import { FC } from 'react'
+
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
+
+import { getFileIcon } from '../../utils/getFileIcon'
+import { formatModifiedDateTime, humanFileSize } from '../../utils/fileDetails'
+
+import DownloadButtonGroup from '../DownloadBtnGtoup'
+import { DownloadBtnContainer, PreviewContainer } from './Containers'
+
+const DefaultPreview: FC<{ file: OdFileObject }> = ({ file }) => {
+ return (
+
+
+
+
+
+
+
+
Last modified
+
{formatModifiedDateTime(file.lastModifiedDateTime)}
+
+
+
+
File size
+
{humanFileSize(file.size)}
+
+
+
+
MIME type
+
{file.file.mimeType}
+
+
+
+
Hashes
+
+
+
+ |
+ Quick XOR
+ |
+
+ {file.file.hashes.quickXorHash}
+ |
+
+
+ |
+ SHA1
+ |
+
+ {file.file.hashes.sha1Hash}
+ |
+
+
+ |
+ SHA256
+ |
+
+ {file.file.hashes.sha256Hash}
+ |
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default DefaultPreview
diff --git a/types/index.d.ts b/types/index.d.ts
new file mode 100644
index 0000000..827a55e
--- /dev/null
+++ b/types/index.d.ts
@@ -0,0 +1,15 @@
+export type OdFileObject = {
+ '@microsoft.graph.downloadUrl': string
+ name: string
+ size: number
+ id: string
+ lastModifiedDateTime: string
+ file: {
+ mimeType: string
+ hashes: {
+ quickXorHash: string
+ sha1Hash: string
+ sha256Hash: string
+ }
+ }
+}
diff --git a/utils/fileDetails.ts b/utils/fileDetails.ts
new file mode 100644
index 0000000..56ecbfc
--- /dev/null
+++ b/utils/fileDetails.ts
@@ -0,0 +1,31 @@
+/**
+ * Convert raw bits file/folder size into a human readable string
+ *
+ * @param size File or folder size, in raw bits
+ * @returns Human readable form of the file or folder size
+ */
+export const humanFileSize = (size: number) => {
+ if (size < 1024) return size + ' B'
+ const i = Math.floor(Math.log(size) / Math.log(1024))
+ const num = size / Math.pow(1024, i)
+ const round = Math.round(num)
+ const formatted = round < 10 ? num.toFixed(2) : round < 100 ? num.toFixed(1) : round
+ return `${formatted} ${'KMGTPEZY'[i - 1]}B`
+}
+
+/**
+ * Convert the last modified date time into locale friendly string
+ *
+ * @param lastModifedDateTime DateTime string in ISO format
+ * @returns Human readable form of the file or folder last modified date
+ */
+export const formatModifiedDateTime = (lastModifedDateTime: string) => {
+ return new Date(lastModifedDateTime).toLocaleString('en-US', {
+ year: 'numeric',
+ month: '2-digit',
+ day: '2-digit',
+ hour: '2-digit',
+ minute: '2-digit',
+ hour12: false,
+ })
+}