import { FileIcon } from "@/components/ui/file-icon" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { FILE_DESCRIPTION_MAX, FILE_NAME_MAX } from "@/db/limits" import { getFileFromStorage } from "@/db/storage/files" import { Tables } from "@/supabase/types" import { FC, useState } from "react" import { SidebarItem } from "../all/sidebar-display-item" interface FileItemProps { file: Tables<"files"> } export const FileItem: FC = ({ file }) => { const [name, setName] = useState(file.name) const [isTyping, setIsTyping] = useState(false) const [description, setDescription] = useState(file.description) const getLinkAndView = async () => { const link = await getFileFromStorage(file.file_path) window.open(link, "_blank") } return ( } updateState={{ name, description }} renderInputs={() => ( <>
View {file.name}
{file.type}
{formatFileSize(file.size)}
{file.tokens.toLocaleString()} tokens
setName(e.target.value)} maxLength={FILE_NAME_MAX} />
setDescription(e.target.value)} maxLength={FILE_DESCRIPTION_MAX} />
)} /> ) } export const formatFileSize = (sizeInBytes: number): string => { let size = sizeInBytes let unit = "bytes" if (size >= 1024) { size /= 1024 unit = "KB" } if (size >= 1024) { size /= 1024 unit = "MB" } if (size >= 1024) { size /= 1024 unit = "GB" } return `${size.toFixed(2)} ${unit}` }