Skip to content

Commit 806285d

Browse files
authored
Merge pull request #12 from severo/4-fix-file-size
fix file size
2 parents f168faf + a09a251 commit 806285d

File tree

5 files changed

+26
-18
lines changed

5 files changed

+26
-18
lines changed

src/components/viewers/ContentHeader.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
import React, { ReactNode } from 'react'
22
import { getFileSize } from '../../files.js'
33

4+
export interface ContentSize {
5+
fileSize?: number
6+
}
7+
8+
export interface TextContent extends ContentSize {
9+
text: string
10+
}
11+
412
interface ContentHeaderProps {
5-
content?: { fileSize?: number }
13+
content?: ContentSize
614
headers?: ReactNode
715
children?: ReactNode
816
}

src/components/viewers/ImageView.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useEffect, useState } from 'react'
2-
import ContentHeader, { parseFileSize } from './ContentHeader.js'
2+
import ContentHeader, { ContentSize, parseFileSize } from './ContentHeader.js'
33

44
enum LoadingState {
55
NotLoaded,
@@ -12,9 +12,8 @@ interface ViewerProps {
1212
setError: (error: Error) => void
1313
}
1414

15-
interface Content {
15+
interface Content extends ContentSize {
1616
dataUri: string
17-
fileSize?: number
1817
}
1918

2019
/**

src/components/viewers/MarkdownView.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react'
22
import { useEffect, useState } from 'react'
33
import Markdown from '../Markdown.js'
4-
import ContentHeader from './ContentHeader.js'
4+
import ContentHeader, { parseFileSize, TextContent } from './ContentHeader.js'
55

66
enum LoadingState {
77
NotLoaded,
@@ -19,7 +19,7 @@ interface ViewerProps {
1919
*/
2020
export default function MarkdownView({ file, setError }: ViewerProps) {
2121
const [loading, setLoading] = useState(LoadingState.NotLoaded)
22-
const [text, setText] = useState<string | undefined>()
22+
const [content, setContent] = useState<TextContent>()
2323

2424
const isUrl = file.startsWith('http://') || file.startsWith('https://')
2525
const url = isUrl ? file : '/api/store/get?key=' + file
@@ -29,7 +29,8 @@ export default function MarkdownView({ file, setError }: ViewerProps) {
2929
try {
3030
const res = await fetch(url)
3131
const text = await res.text()
32-
setText(text)
32+
const fileSize = parseFileSize(res.headers) ?? text.length
33+
setContent({ text, fileSize })
3334
} catch (error) {
3435
setError(error as Error)
3536
} finally {
@@ -45,7 +46,7 @@ export default function MarkdownView({ file, setError }: ViewerProps) {
4546
})
4647
}, [url, loading, setError])
4748

48-
return <ContentHeader content={{ fileSize: text?.length }}>
49-
<Markdown className='markdown' text={text || ''} />
49+
return <ContentHeader content={content}>
50+
<Markdown className='markdown' text={content?.text ?? ''} />
5051
</ContentHeader>
5152
}

src/components/viewers/ParquetView.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import HighTable, { DataFrame, rowCache } from 'hightable'
22
import React, { useCallback, useEffect, useState } from 'react'
33
import { parquetDataFrame } from '../../tableProvider.js'
44
import { Spinner } from '../Layout.js'
5-
import ContentHeader from './ContentHeader.js'
5+
import ContentHeader, {ContentSize} from './ContentHeader.js'
66
import { asyncBufferFromUrl, parquetMetadataAsync } from 'hyparquet'
77

88
enum LoadingState {
@@ -17,9 +17,8 @@ interface ViewerProps {
1717
setError: (error: Error) => void
1818
}
1919

20-
interface Content {
20+
interface Content extends ContentSize {
2121
dataframe: DataFrame
22-
fileSize?: number
2322
}
2423

2524
/**

src/components/viewers/TextView.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useEffect, useRef, useState } from 'react'
22
import React from 'react'
33
import { Spinner } from '../Layout.js'
4-
import ContentHeader from './ContentHeader.js'
4+
import ContentHeader, { parseFileSize, TextContent } from './ContentHeader.js'
55

66
enum LoadingState {
77
NotLoaded,
@@ -20,7 +20,7 @@ interface ViewerProps {
2020
*/
2121
export default function TextView({ file, setError }: ViewerProps) {
2222
const [loading, setLoading] = useState(LoadingState.NotLoaded)
23-
const [text, setText] = useState<string | undefined>()
23+
const [content, setContent] = useState<TextContent>()
2424
const textRef = useRef<HTMLPreElement>(null)
2525

2626
const isUrl = file.startsWith('http://') || file.startsWith('https://')
@@ -32,7 +32,8 @@ export default function TextView({ file, setError }: ViewerProps) {
3232
try {
3333
const res = await fetch(url)
3434
const text = await res.text()
35-
setText(text)
35+
const fileSize = parseFileSize(res.headers) ?? text.length
36+
setContent({ text, fileSize })
3637
} catch (error) {
3738
setError(error as Error)
3839
} finally {
@@ -49,13 +50,13 @@ export default function TextView({ file, setError }: ViewerProps) {
4950
}, [file, loading, setError])
5051

5152
const headers = <>
52-
<span>{text ? newlines(text) : 0} lines</span>
53+
<span>{newlines(content?.text ?? "")} lines</span>
5354
</>
5455

5556
// Simple text viewer
56-
return <ContentHeader content={{ fileSize: text?.length }} headers={headers}>
57+
return <ContentHeader content={content} headers={headers}>
5758
<code className='text' ref={textRef}>
58-
{text}
59+
{content?.text}
5960
</code>
6061

6162
{loading && <Spinner className='center' />}

0 commit comments

Comments
 (0)