import { useRef, useState } from "react"; import { HistoryIcon } from "lucide-react"; import { useSearchParams } from "next/navigation"; import { useUpdateEffect } from "react-use"; import { Button } from "@/components/ui/button"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Commit } from "@/lib/type"; import { cn, humanizeNumber } from "@/lib/utils"; export const Commits = function ({ commits }: { commits?: Commit[] }) { const searchParams = useSearchParams(); const commitParam = searchParams.get("commit"); const commitsContainer = useRef(null); const commitSelected = useRef(null); const [open, setOpen] = useState(false); const [selectedCommit, setSelectedCommit] = useState( commitParam ? commitParam : commits && commits.length > 0 ? commits[0]?.oid : null ); const handleViewCommit = (commitId: string) => { let url = window.location.pathname; if (commitId !== commits?.[0].oid) { url += `?commit=${encodeURIComponent(commitId)}`; } window.location.replace(url); }; useUpdateEffect(() => { if (open) { setTimeout(() => { if (commitSelected.current && commitsContainer.current) { const container = commitsContainer.current; const selected = commitSelected.current; if (!container || !selected) return; const offsetTop = selected.offsetTop; const offsetHeight = selected.offsetHeight; const containerHeight = container.offsetHeight; const scrollTop = offsetTop - containerHeight / 2 + offsetHeight / 2; container.scrollTo({ top: scrollTop, behavior: "smooth", }); } }, 200); } }, [open]); useUpdateEffect(() => { if (selectedCommit !== commits?.[0].oid && !commitParam) { setSelectedCommit(commits ? commits[0]?.oid : null); } }, [commits]); return (
Historical Versions {humanizeNumber(commits ? commits.length : 0)}
    {commits?.map((commit) => (
  • handleViewCommit(commit.oid)} >

    {commit.title}

    {new Date(commit.date).toLocaleString()}

  • ))}
); };