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