import { useMemo, Suspense, lazy } from "react"; import { useParams } from "react-router"; import RevisionsList from "../components/revision/RevisionsList"; import type { ReleaseRevision } from "../data/types"; import { useQuery } from "@tanstack/react-query"; import apiService from "../API/apiService"; import Spinner from "../components/Spinner"; const RevisionDetails = lazy( () => import("../components/revision/RevisionDetails") ); const descendingSort = (r1: ReleaseRevision, r2: ReleaseRevision) => r1.revision - r2.revision < 0 ? 1 : -1; function Revision() { const { revision = "", ...restParams } = useParams(); const selectedRevision = revision ? parseInt(revision, 10) : 0; const { data: releaseRevisions = [], isLoading: isLoadingHistory } = useQuery( { queryKey: ["releasesHistory", restParams], queryFn: apiService.getReleasesHistory, select: (data) => data?.sort(descendingSort), } ); const latestRevision = useMemo( () => releaseRevisions.reduce((max, revisionData) => { return Math.max(max, revisionData.revision); }, Number.MIN_SAFE_INTEGER), [releaseRevisions] ); const selectedRelease = useMemo(() => { if (selectedRevision && releaseRevisions) { return releaseRevisions.find( (r: ReleaseRevision) => r.revision === selectedRevision ); } return null; }, [releaseRevisions, selectedRevision]); return (