"use client"; import Link from "next/link"; import { ArrowRight, CheckCircle2 } from "lucide-react"; import { useEffect, useState } from "react"; import { RevealSection } from "@/components/landing/RevealSection"; import { fetchChangelog, type ChangelogRelease } from "@/lib/changelog"; import { buildLandingLatestUpdates } from "@/lib/landingLatest"; import { fetchLatestReleaseInfo, type LatestReleaseInfo } from "@/lib/latestRelease"; type LandingLatestUpdatesProps = { lang: "en" | "cn"; fallbackVersion: string; initialRelease?: ChangelogRelease; initialLatestRelease?: LatestReleaseInfo | null; }; export function LandingLatestUpdates({ lang, fallbackVersion, initialRelease, initialLatestRelease }: LandingLatestUpdatesProps) { const [latest, setLatest] = useState(() => buildLandingLatestUpdates(lang, initialRelease, fallbackVersion, initialLatestRelease)); useEffect(() => { let active = true; setLatest(buildLandingLatestUpdates(lang, initialRelease, fallbackVersion, initialLatestRelease)); Promise.all([fetchLatestReleaseInfo(), fetchChangelog(lang)]).then(([releaseInfo, data]) => { if (!active) return; setLatest(buildLandingLatestUpdates(lang, data.releases[0] ?? initialRelease, fallbackVersion, releaseInfo ?? initialLatestRelease)); }); return () => { active = false; }; }, [lang, fallbackVersion, initialRelease, initialLatestRelease]); return (
{latest.version}

{latest.title}

{latest.desc}

{latest.link}
); }