import { ActionIcon, Group, Skeleton, Stack, Table, TextInput, } from "@mantine/core"; import { useClipboard } from "@mantine/hooks"; import { useModals } from "@mantine/modals"; import mime from "mime-types"; import Link from "next/link"; import { TbDownload, TbEye, TbLink } from "react-icons/tb"; import useConfig from "../../hooks/config.hook"; import shareService from "../../services/share.service"; import { FileMetaData } from "../../types/File.type"; import { Share } from "../../types/share.type"; import { byteToHumanSizeString } from "../../utils/fileSize.util"; import toast from "../../utils/toast.util"; const FileList = ({ files, share, isLoading, }: { files?: FileMetaData[]; share: Share; isLoading: boolean; }) => { const clipboard = useClipboard(); const config = useConfig(); const modals = useModals(); const copyFileLink = (file: FileMetaData) => { const link = `${config.get("general.appUrl")}/api/shares/${ share.id }/files/${file.id}`; if (window.isSecureContext) { clipboard.copy(link); toast.success("Your file link was copied to the keyboard."); } else { modals.openModal({ title: "File link", children: ( ), }); } }; return ( {isLoading ? skeletonRows : files!.map((file) => ( ))}
Name Size
{file.name} {byteToHumanSizeString(parseInt(file.size))} {shareService.doesFileSupportPreview(file.name) && ( )} {!share.hasPassword && ( copyFileLink(file)}> )} { await shareService.downloadFile(share.id, file.id); }} >
); }; const skeletonRows = [...Array(5)].map((c, i) => ( )); export default FileList;