"use client"; import { drive_v3 } from "googleapis"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { MdFolder, MdPlayCircle } from "react-icons/md"; import formatDuration from "utils/fileHelper/formatDuration"; import getFileIcon from "utils/fileHelper/iconMap"; import getFileGroup from "utils/fileHelper/typeMap"; import { FilesResponse } from "types/api/files"; import siteConfig from "config/site.config"; type Props = { data: FilesResponse; }; function GridLayout({ data }: Props) { const pathname = usePathname(); return (
{data.folders.length === 0 && data.files.length === 0 && (
No files or folders found
)} {data.folders.length > 0 && (
{data.folders.map((folder) => ( ))}
)} {data.files.length > 0 && (
{data.files.map((file) => ( ))}
)}
); } function GridFolder({ folder, path = "", }: { folder: drive_v3.Schema$File; path?: string; }) { const folderURL = `${path}/${encodeURIComponent( folder.name ?? "", )}`; return (
{folder.name}
); } function GridFile({ file, path = "", }: { file: drive_v3.Schema$File; path?: string; }) { const Icon = getFileIcon( file.fileExtension ?? "", file.mimeType ?? "", ); const fileGroup = getFileGroup( file.fileExtension ?? "", file.mimeType ?? "", ); const isThumbnailAllowed = siteConfig.files.allowThumbnailFileType.includes( fileGroup, ); const fileURL = `${path}/${encodeURIComponent( file.name ?? "", )}`; return (
{file.thumbnailLink && isThumbnailAllowed ? ( <> {file.name {file.videoMediaMetadata && (
{file.videoMediaMetadata.durationMillis && (
{formatDuration( file.videoMediaMetadata .durationMillis, )}
)}
)} ) : (
)}
{file.name
{file.name}
); } export default GridLayout;