2024-09-10 18:49:16 +02:00
|
|
|
import {
|
|
|
|
|
ButtonIcon,
|
|
|
|
|
Button,
|
|
|
|
|
Sheets,
|
|
|
|
|
} from "@codex-storage/marketplace-ui-components";
|
2024-08-30 17:26:27 +02:00
|
|
|
import { CodexDataContent } from "@codex-storage/sdk-js";
|
2024-08-29 18:45:52 +02:00
|
|
|
import { PrettyBytes } from "../../utils/bytes";
|
|
|
|
|
import { ICON_SIZE } from "../../utils/constants";
|
|
|
|
|
import { Dates } from "../../utils/dates";
|
|
|
|
|
import { CidCopyButton } from "./CidCopyButton";
|
|
|
|
|
import "./FileDetails.css";
|
2024-09-10 18:49:16 +02:00
|
|
|
import { DownloadIcon, X } from "lucide-react";
|
2024-10-10 10:31:30 +02:00
|
|
|
import { CodexSdk } from "../../sdk/codex";
|
2024-08-29 18:45:52 +02:00
|
|
|
|
|
|
|
|
type Props = {
|
2024-09-13 22:40:31 +02:00
|
|
|
details: CodexDataContent | undefined;
|
2024-08-29 18:45:52 +02:00
|
|
|
onClose: () => void;
|
|
|
|
|
expanded: boolean;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export function FileDetails({ onClose, details, expanded }: Props) {
|
2024-10-10 10:31:30 +02:00
|
|
|
const url = CodexSdk.url() + "/api/codex/v1/data/";
|
2024-08-29 18:45:52 +02:00
|
|
|
|
|
|
|
|
const Icon = () => <X size={ICON_SIZE} onClick={onClose} />;
|
|
|
|
|
|
|
|
|
|
const onDownload = () => window.open(url + details?.cid, "_target");
|
|
|
|
|
|
|
|
|
|
return (
|
2024-09-10 18:49:16 +02:00
|
|
|
<Sheets open={expanded} onClose={onClose}>
|
|
|
|
|
<>
|
2024-08-29 18:45:52 +02:00
|
|
|
{details && (
|
|
|
|
|
<>
|
|
|
|
|
<div className="fileDetails-header">
|
|
|
|
|
<b className="fileDetails-headerTitle">File details</b>
|
|
|
|
|
<ButtonIcon variant="small" Icon={Icon}></ButtonIcon>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className="fileDetails-body">
|
|
|
|
|
<div className="fileDetails-grid">
|
|
|
|
|
<p className="text-secondary">CID:</p>
|
|
|
|
|
<p className="fileDetails-gridColumn">{details.cid}</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className="fileDetails-grid">
|
|
|
|
|
<p className="text-secondary">File name:</p>
|
2024-09-13 22:40:31 +02:00
|
|
|
<p className="fileDetails-gridColumn">
|
|
|
|
|
{details.manifest.filename}
|
|
|
|
|
</p>
|
2024-08-29 18:45:52 +02:00
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className="fileDetails-grid">
|
|
|
|
|
<p className="text-secondary">Date:</p>
|
|
|
|
|
<p className="fileDetails-gridColumn">
|
2024-09-13 22:40:31 +02:00
|
|
|
{Dates.format(details.manifest.uploadedAt).toString()}
|
2024-08-29 18:45:52 +02:00
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className="fileDetails-grid">
|
|
|
|
|
<p className="text-secondary">Mimetype:</p>
|
2024-09-13 22:40:31 +02:00
|
|
|
<p className="fileDetails-gridColumn">
|
|
|
|
|
{details.manifest.mimetype}
|
|
|
|
|
</p>
|
2024-08-29 18:45:52 +02:00
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className="fileDetails-grid">
|
|
|
|
|
<p className="text-secondary">Size:</p>
|
|
|
|
|
<p className="fileDetails-gridColumn">
|
|
|
|
|
{PrettyBytes(details.manifest.datasetSize)}
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className="fileDetails-grid">
|
|
|
|
|
<p className="text-secondary">Protected:</p>
|
|
|
|
|
<p className="fileDetails-gridColumn">
|
|
|
|
|
{details.manifest.protected ? "Yes" : "No"}
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className="fileDetails-actions">
|
|
|
|
|
<CidCopyButton cid={details.cid} />
|
|
|
|
|
|
|
|
|
|
<Button
|
|
|
|
|
Icon={() => <DownloadIcon size={ICON_SIZE} />}
|
|
|
|
|
label="Download"
|
|
|
|
|
onClick={onDownload}></Button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</>
|
|
|
|
|
)}
|
2024-09-10 18:49:16 +02:00
|
|
|
</>
|
|
|
|
|
</Sheets>
|
2024-08-29 18:45:52 +02:00
|
|
|
);
|
|
|
|
|
}
|