import { Download, FilesIcon, ReceiptText, Star } from "lucide-react"; import { useEffect, useRef, useState } from "react"; import { PrettyBytes } from "../../utils/bytes.ts"; import { Dates } from "../../utils/dates.ts"; import "./Files.css"; import { ICON_SIZE, SIDE_DURATION } from "../../utils/constants.ts"; import { ButtonIcon, EmptyPlaceholder, WebFileIcon, } from "@codex-storage/marketplace-ui-components"; import { FileDetails } from "./FileDetails.tsx"; import { classnames } from "../../utils/classnames.ts"; import { FavoriteStorage } from "../../utils/favorite-storage.tsx"; import { useData } from "../../hooks/useData.tsx"; type StarIconProps = { isFavorite: boolean; }; function StarIcon({ isFavorite }: StarIconProps) { if (isFavorite) { return ( ); } return ; } export function Files() { const files = useData(); const cid = useRef(""); const [expanded, setExpanded] = useState(false); const [favorites, setFavorites] = useState([]); const [selected, setSelected] = useState<"all" | "favorites">("all"); useEffect(() => { FavoriteStorage.list().then((cids) => setFavorites(cids)); }, []); const onClose = () => { setExpanded(false); setTimeout(() => { cid.current = ""; }, SIDE_DURATION); }; const onSelected = () => setSelected(selected === "all" ? "favorites" : "all"); const onDetails = (id: string) => { cid.current = id; setExpanded(true); }; const onToggleFavorite = (cid: string) => { if (favorites.includes(cid)) { FavoriteStorage.delete(cid); setFavorites(favorites.filter((c) => c !== cid)); } else { FavoriteStorage.add(cid); setFavorites([...favorites, cid]); } }; const items = []; if (selected === "favorites") { items.push(...files.filter((f) => favorites.includes(f.cid))); } else { items.push(...files); } const details = items.find((c) => c.cid === cid.current); const url = import.meta.env.VITE_CODEX_API_URL + "/api/codex/v1/data/"; return (
Files
All files
Favorites
{items.length ? ( items.map((c) => (
{c.name}
{PrettyBytes(c.manifest.datasetSize)} -{" "} {Dates.format(c.uploadedAt).toString()} - ... {c.cid.slice(-5)}
window.open(url + c.cid, "_blank")} Icon={() => }> onToggleFavorite(c.cid)} Icon={() => ( )}> onDetails(c.cid)} Icon={() => ( )}>
)) ) : (
)}
); }