import { format } from "date-fns"; import React from "react"; import useSWRImmutable from "swr/immutable"; import styles from "../styles/CellModList.module.css"; import type { Mod } from "./CellData"; const NEXUS_MODS_URL = "https://www.nexusmods.com/skyrimspecialedition"; const LIVE_DOWNLOAD_COUNTS_URL = "https://staticstats.nexusmods.com/live_download_counts/mods/1704.csv"; const csvFetcher = (url: string) => fetch(url).then((res) => res.text()); type Props = { mods: Mod[]; }; type ModWithCounts = Mod & { total_downloads: number; unique_downloads: number; views: number; }; const CellModList: React.FC = ({ mods }) => { // The live download counts are not really immutable, but I'd still rather load them once per session const { data, error } = useSWRImmutable(LIVE_DOWNLOAD_COUNTS_URL, csvFetcher); if (error) return
{`Error loading live download counts: ${error.message}`}
; if (!data) return
Loading...
; const counts = data .split("\n") .map((line) => line.split(",").map((count) => parseInt(count, 10))); const modsWithCounts: ModWithCounts[] = mods.map((mod) => { const modCounts = counts.find((count) => count[0] === mod.nexus_mod_id); return { ...mod, total_downloads: modCounts ? modCounts[1] : 0, unique_downloads: modCounts ? modCounts[2] : 0, views: modCounts ? modCounts[3] : 0, }; }); let numberFmt = new Intl.NumberFormat("en-US"); return ( mods && ( <>

Mods

) ); }; export default CellModList;