import { useEffect, useMemo, useState } from "react"; import fileSize from "pretty-bytes"; import { Link } from "gatsby"; import useSWR from "swr"; import { useUser } from "../../contexts/user"; import useActivePlan from "../../hooks/useActivePlan"; import { ContainerLoadingIndicator } from "../LoadingIndicator"; import { GraphBar } from "./GraphBar"; import { UsageGraph } from "./UsageGraph"; const useUsageData = () => { const { user } = useUser(); const { activePlan, error } = useActivePlan(user); const { data: stats, error: statsError } = useSWR("user/stats"); const [loading, setLoading] = useState(true); const [usage, setUsage] = useState({}); const hasError = error || statsError; const hasData = activePlan && stats; useEffect(() => { if (hasData || hasError) { setLoading(false); } if (hasData && !hasError) { setUsage({ filesUsed: stats?.numUploads, filesLimit: activePlan?.limits?.maxNumberUploads, storageUsed: stats?.totalUploadsSize, storageLimit: activePlan?.limits?.storageLimit, }); } }, [hasData, hasError, stats, activePlan]); return { error: error || statsError, loading, usage, }; }; const size = (bytes) => { const text = fileSize(bytes ?? 0, { maximumFractionDigits: 0 }); const [value, unit] = text.split(" "); return { text, value, unit, }; }; const ErrorMessage = () => (

We were not able to fetch the current usage data.

We'll try again automatically.

); export default function CurrentUsage() { const { usage, error, loading } = useUsageData(); const storageUsage = size(usage.storageUsed); const storageLimit = size(usage.storageLimit); const filesUsedLabel = useMemo(() => ({ value: usage.filesUsed, unit: "files" }), [usage.filesUsed]); if (loading) { return ; } if (error) { return ; } return ( <>

{storageUsage.text} of {storageLimit.text}

{usage.filesUsed} of {usage.filesLimit} files

Storage {storageLimit.text}
Files UPGRADE {" "} {/* TODO: proper URL */} {usage.filesLimit}
); }