94 lines
3.0 KiB
TypeScript
Raw Normal View History

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";
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 (
<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>
</>
)}
</>
</Sheets>
2024-08-29 18:45:52 +02:00
);
}