Files
cstb-next/src/app/(main)/dynamic/page.tsx

83 lines
2.9 KiB
TypeScript
Raw Normal View History

"use client"
import { MarkdownRender } from "@/components/markdown"
import { Card, CardBody, CardHeader, CardIcon } from "@/components/window/Card"
import { createClient } from "@/utils/supabase/client"
import { NewspaperFolding } from "@icon-park/react"
import useSWR from "swr"
import { Chip, Skeleton } from "@heroui/react"
export default function Page() {
return (
<section className="flex flex-col gap-4 overflow-hidden">
<Card className="overflow-hidden">
<CardHeader>
<CardIcon>
<NewspaperFolding />
</CardIcon>
{/* <CardTool>
<ToolButton onClick={async () => {}}></ToolButton>
</CardTool> */}
</CardHeader>
<CardBody className="overflow-y-hidden">
<ReleaseNotes />
</CardBody>
</Card>
</section>
)
}
const ReleaseNotes = () => {
const noticeFetcher = async () => {
const supabase = createClient()
const { data /* , error */ } = await supabase
.from("ReleaseNote")
.select("version, content, created_at")
.eq("stable", true)
.order("created_at", { ascending: false })
.range(0, 10)
return data
}
const { data: releases /* , error */, isLoading } = useSWR("/api/release-notes", noticeFetcher)
if (isLoading) return (
<div className="grid h-full grid-cols-1 gap-2 overflow-y-auto rounded-lg grid-flow-dense lg:grid-cols-2 xl:grid-cols-3 pb-9 hide-scrollbar">
<Skeleton className="h-32 rounded-lg"></Skeleton>
<Skeleton className="h-32 rounded-lg"></Skeleton>
<Skeleton className="h-32 rounded-lg"></Skeleton>
</div>
)
return (
<ul className="grid h-full grid-cols-1 gap-2 overflow-y-auto rounded-lg grid-flow-dense lg:grid-cols-2 xl:grid-cols-3 pb-9 hide-scrollbar">
{releases?.map((release, index) => (
<li key={index}>
{/* <Link href={`/releases/${release.version}`} className="w-full"> */}
<Card className="w-full h-full pt-3 transition bg-white text-zinc-900 dark:bg-white/10 dark:text-white">
<CardHeader>
<h3 className="w-full text-2xl font-semibold">CS工具箱 {release.version}</h3>
<span className="flex items-center gap-3">
{/* <Chip size="sm" className="bg-zinc-200">
{release?.version}
</Chip> */}
<Chip size="sm" className="bg-zinc-200 dark:bg-white/10">
{release?.created_at ? new Date(release.created_at).toLocaleString() : "未知时间"}
</Chip>
</span>
</CardHeader>
<CardBody className="gap-3">
<div className="">
<MarkdownRender>{release?.content || "无内容"}</MarkdownRender>
</div>
</CardBody>
</Card>
{/* </Link> */}
</li>
))}
</ul>
)
}