import * as React from 'react'; import {formatFileSize, formatNumeral} from 'packages/web-kitchensink-reactnext/src/utils/numeral'; import {useFileMetadata, useFileUrl} from 'src/index'; import {augmentTextFile, getMimeTypeDescription} from 'packages/web-kitchensink-reactnext/src/utils/blob'; import clsx from 'clsx'; import {KeyValueTable} from 'categories/information/react'; import {Refractor} from 'packages/web-kitchensink-reactnext/src/packages/react-refractor'; import {useClientSide} from 'packages/react-utils'; import type {CommonPreviewProps} from '../../../../../categories/blob/react/src/components/FileSelectBox'; type TextFilePreviewDerivedComponent = HTMLDivElement; export interface TextFilePreviewProps = Partial> extends React.HTMLProps, CommonPreviewProps {} export const TextFilePreview = React.forwardRef(({ file, className, style, enhanced: enhancedProp = false, ...etcProps }, forwardedRef) => { const { fileWithUrl } = useFileUrl({ file }); const { fileWithMetadata, error } = useFileMetadata({ file: fileWithUrl, augmentFunction: augmentTextFile, }); const { clientSide } = useClientSide({ clientSide: enhancedProp }); if (!fileWithMetadata) { return null; } return (
{ typeof fileWithMetadata.metadata?.contents === 'string' && (
) }
{fileWithMetadata.metadata!.languageMatches.slice(0, 3).map(([language, probability], index) => { return (
{language.slice(0, 1).toUpperCase()} {language.slice(1)}
{(probability * 100).toFixed(3)}% {' '} prob.
); })} ), }, }, ]} />
); }); TextFilePreview.displayName = 'TextFilePreview';