import { CloseButton, Image, Wrap, WrapItem } from "@chakra-ui/react"; import React, { useMemo } from "react"; const IMAGES = new Set("png,jpg,jpeg,gif,mp4,svg".split(",")); type NamedFile = { name: string; file: string | Blob }; export function Files({ files, onCancelFile, }: { files: NamedFile[]; onCancelFile?: (file: string | Blob) => void; }) { const linkStyle = { color: "#0645AD", cursor: "pointer", }; // Use memo here so we don't convert blobs to urls each time const components = useMemo(() => { return files .map(({ file, name }) => { const extension = name.split(".").pop(); if (extension && IMAGES.has(extension)) { return { key: name, el: ( {name} ), file, }; } return { key: name, el: ( {name} ), file, }; }) .map(({ key, el, file }) => { if (onCancelFile) { return (
{el} onCancelFile(file)} />
); } return {el}; }); }, [onCancelFile, files]); if (files.length == 0) { return null; } return {components}; } function blobToUrl(blob: Blob | undefined): string | undefined { if (blob) { const urlCreator = window.URL || window.webkitURL; return urlCreator.createObjectURL(blob); } }