import { Box, Grid, Typography } from '@material-ui/core' import { Web } from '@material-ui/icons' import { ReactElement, useMemo } from 'react' import File from 'remixicon-react/FileLineIcon' import Folder from 'remixicon-react/FolderLineIcon' import { FitImage } from '../../components/FitImage' import { shortenText } from '../../utils' import { getHumanReadableFileSize } from '../../utils/file' import { shortenHash } from '../../utils/hash' import { AssetIcon } from './AssetIcon' import { FitVideo } from '../../components/FitVideo' import { FitAudio } from '../../components/FitAudio' interface Props { previewUri?: string metadata?: Metadata } /* eslint-disable react/display-name */ const getPreviewComponent = (previewUri?: string, metadata?: Metadata) => { if (metadata?.isVideo) { return () => } if (metadata?.isAudio) { return () => } if (metadata?.isImage) { return () => } if (metadata?.isWebsite) { return () => } /> } if (metadata?.type === 'folder') { return () => } /> } return () => } /> } const getType = (metadata?: Metadata) => { if (metadata?.isWebsite) return 'Website' if (metadata?.type === 'folder') return 'Folder' return metadata?.type } // TODO: add optional prop for indexDocument when it is already known (e.g. downloading a manifest) export function AssetPreview({ metadata, previewUri }: Props): ReactElement | null { const PreviewAssetComponent = useMemo(() => getPreviewComponent(previewUri, metadata), [metadata, previewUri]) const type = useMemo(() => getType(metadata), [metadata]) return ( {metadata?.hash && Swarm Hash: {shortenHash(metadata.hash)}} {metadata?.name && metadata?.name !== metadata?.hash && ( {metadata?.type === 'folder' ? 'Folder Name' : 'Filename'}: {shortenText(metadata?.name)} )} Kind: {type} {metadata?.size ? Size: {getHumanReadableFileSize(metadata.size)} : null} {metadata?.type === 'folder' && metadata.count && ( Folder content {metadata.count} items )} ) }