generated from chiffre-io/template-library
-
-
Notifications
You must be signed in to change notification settings - Fork 161
/
Copy pathpage.tsx
63 lines (60 loc) · 2.09 KB
/
page.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import { Card } from '@tremor/react'
import { SearchParams } from 'nuqs/server'
import { Suspense } from 'react'
import { NPMDownloads, NPMStats } from './_components/downloads'
import { StarHistoryGraph } from './_components/stars'
import { Versions } from './_components/versions'
import { getVersions, sumVersions } from './lib/versions'
import { searchParamsCache } from './searchParams'
export const dynamic = 'force-dynamic'
type StatsPageProps = {
searchParams: Promise<SearchParams>
}
export default async function StatsPage({ searchParams }: StatsPageProps) {
const { pkg } = await searchParamsCache.parse(searchParams)
const allVersions = await getVersions()
const pkgVersions = pkg === 'both' ? sumVersions(allVersions) : allVersions
// @ts-expect-error
const versionsToShow = Object.entries(pkgVersions.at(-1)?.[pkg] ?? {})
.slice(0, 5)
.map(([key, _]) => key)
const widgetSkeleton = (
<div className="min-h-[16rem] w-full animate-pulse rounded border" />
)
return (
<main className="container px-2 py-2 sm:px-4 md:py-4">
<h1 className="sr-only">Project Stats</h1>
<section className="my-4 grid grid-cols-1 gap-4 lg:grid-cols-2">
<Suspense fallback={widgetSkeleton}>
<StarHistoryGraph />
</Suspense>
<Card className="flex flex-col gap-2 p-2 dark:bg-background">
<img
width={814}
height={318}
alt="Project analytics and stats"
src="https://repobeats.axiom.co/api/embed/3ee740e4729dce3992bfa8c74645cfebad8ba034.svg"
/>
<div className="flex min-h-24 flex-1 items-center gap-6 px-4">
<Suspense>
<NPMStats />
</Suspense>
</div>
</Card>
<Suspense>
<NPMDownloads />
</Suspense>
<Suspense fallback={widgetSkeleton}>
<Versions
records={pkgVersions.map(v => ({
date: v.date,
// @ts-ignore
...v[pkg]
}))}
versions={versionsToShow}
/>
</Suspense>
</section>
</main>
)
}