import React, { useMemo } from "react"; import { formatDownloadPercentage, toGigabytes } from "@/_utils/converter"; import Image from "next/image"; import { Product } from "@/_models/Product"; import useDownloadModel from "@/_hooks/useDownloadModel"; import { modelDownloadStateAtom } from "@/_helpers/atoms/DownloadState.atom"; import { atom, useAtomValue } from "jotai"; import { ModelVersion } from "@/_models/ModelVersion"; type Props = { model: Product; modelVersion: ModelVersion; }; const ModelVersionItem: React.FC = ({ model, modelVersion }) => { const { downloadModel } = useDownloadModel(); const downloadAtom = useMemo( () => atom((get) => get(modelDownloadStateAtom)[modelVersion.id ?? ""]), [modelVersion.id ?? ""] ); const downloadState = useAtomValue(downloadAtom); const onDownloadClick = () => { downloadModel(model, modelVersion); }; let downloadButton = ( ); if (downloadState) { downloadButton = (
{formatDownloadPercentage(downloadState.percent)}
); } return (
{modelVersion.name}
{toGigabytes(modelVersion.size)}
{downloadButton}
); }; export default ModelVersionItem;