import { ButtonIcon, Button, Sheets, } from "@codex-storage/marketplace-ui-components"; import { CodexDataContent } from "@codex-storage/sdk-js"; import { PrettyBytes } from "../../utils/bytes"; import { ICON_SIZE } from "../../utils/constants"; import { Dates } from "../../utils/dates"; import { CidCopyButton } from "./CidCopyButton"; import "./FileDetails.css"; import { DownloadIcon, X } from "lucide-react"; import { CodexSdk } from "../../sdk/codex"; import { Files } from "../../utils/files"; import { useEffect, useState } from "react"; import { WebStorage } from "../../utils/web-storage"; type Props = { details: CodexDataContent | null; onClose: () => void; }; export function FileDetails({ onClose, details }: Props) { const [purchases, setPurchases] = useState(0); useEffect(() => { WebStorage.purchases .entries() .then((entries) => setPurchases( entries .filter((e) => e[1] === details?.cid) .reduce((acc) => acc + 1, 0) ) ); }, [details?.cid]); const url = CodexSdk.url() + "/api/codex/v1/data/"; const Icon = () => ; const onDownload = () => window.open(url + details?.cid, "_target"); return ( <> {details && ( <>
File details
{Files.isImage(details.manifest.mimetype) && (
)}

CID:

{details.cid}

File name:

{details.manifest.filename}

Date:

{Dates.format(details.manifest.uploadedAt).toString()}

Mimetype:

{details.manifest.mimetype}

Size:

{PrettyBytes(details.manifest.datasetSize)}

Protected:

{details.manifest.protected ? "Yes" : "No"}

Used:

{purchases + " purchase(s)"}

)}
); }