Skip to content

Commit 00d81b5

Browse files
committed
npm stats
1 parent 9057447 commit 00d81b5

2 files changed

Lines changed: 52 additions & 19 deletions

File tree

src/routes/stats/npm/-comparisons.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,10 @@ export function getPopularComparisons(): z.input<
193193
packages: [{ name: 'svelte' }],
194194
color: '#FF3E00',
195195
},
196+
{
197+
packages: [{ name: 'solid-js' }],
198+
color: '#2C4F7C',
199+
},
196200
{
197201
packages: [{ name: 'preact' }],
198202
color: '#673AB8',

src/routes/stats/npm/index.tsx

Lines changed: 48 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,14 @@ function npmQueryOptions({
285285
}
286286

287287
return queryOptions({
288-
queryKey: ['npm-stats', packageGroups, range],
288+
queryKey: [
289+
'npm-stats',
290+
packageGroups.map((pg) => ({
291+
packages: pg.packages.map((p) => ({ name: p.name })),
292+
baseline: pg.baseline,
293+
})),
294+
range,
295+
],
289296
queryFn: async (): Promise<NpmQueryData> => {
290297
// For all-time range, get the earliest creation date
291298
if (range === 'all-time') {
@@ -548,12 +555,18 @@ function NpmStatsChart({
548555

549556
startDate = binOption.bin.floor(startDate)
550557

551-
const combinedPackageGroups = queryData.map((packageGroup) => {
558+
const combinedPackageGroups = queryData.map((packageGroup, index) => {
559+
// Get the corresponding package group from the packages prop to get the hidden state
560+
const packageGroupWithHidden = packages[index]
561+
552562
// Filter out any sub packages that are hidden before
553563
// summing them into a unified downloads count
554-
const visiblePackages = packageGroup.packages.filter(
555-
(p, i) => !i || !p.hidden,
556-
)
564+
const visiblePackages = packageGroup.packages.filter((p, i) => {
565+
const hiddenState = packageGroupWithHidden?.packages.find(
566+
(pg) => pg.name === p.name,
567+
)?.hidden
568+
return !i || !hiddenState
569+
})
557570

558571
const downloadsByDate: Map<number, number> = new Map()
559572

@@ -645,9 +658,11 @@ function NpmStatsChart({
645658
})
646659

647660
// Filter out any top-level hidden packages
648-
const filteredPackageData = correctedPackageData.filter(
649-
(pkg) => !pkg.baseline && !pkg.packages[0].hidden,
650-
)
661+
const filteredPackageData = correctedPackageData.filter((pkg, index) => {
662+
const packageGroupWithHidden = packages[index]
663+
const isHidden = packageGroupWithHidden?.packages[0]?.hidden
664+
return !pkg.baseline && !isHidden
665+
})
651666

652667
const plotData = filteredPackageData.flatMap((d) => d.downloads)
653668

@@ -1816,7 +1831,7 @@ function RouteComponent() {
18161831
<div className="">
18171832
<div className="space-y-2 sm:space-y-4">
18181833
<div className="relative">
1819-
{npmQuery.isFetching ? (
1834+
{npmQuery.isFetching && npmQuery.data ? (
18201835
<div className="absolute inset-0 flex items-center justify-center bg-white/30 dark:bg-black/30 backdrop-blur-sm z-10 rounded-lg">
18211836
<div className="flex flex-col items-center gap-4">
18221837
<FaSpinner className="w-8 h-8 animate-spin text-blue-500" />
@@ -1827,16 +1842,30 @@ function RouteComponent() {
18271842
</div>
18281843
) : null}
18291844
<Resizable height={height} onHeightChange={onHeightChange}>
1830-
<NpmStatsChart
1831-
range={range}
1832-
queryData={npmQuery.data}
1833-
transform={transform}
1834-
binType={binType}
1835-
packages={packageGroups}
1836-
facetX={facetX}
1837-
facetY={facetY}
1838-
showDataMode={showDataModeParam}
1839-
/>
1845+
{npmQuery.isLoading ? (
1846+
<div
1847+
className="flex items-center justify-center"
1848+
style={{ height }}
1849+
>
1850+
<div className="flex flex-col items-center gap-4">
1851+
<FaSpinner className="w-8 h-8 animate-spin text-blue-500" />
1852+
<div className="text-sm text-gray-600 dark:text-gray-400">
1853+
Loading download statistics...
1854+
</div>
1855+
</div>
1856+
</div>
1857+
) : (
1858+
<NpmStatsChart
1859+
range={range}
1860+
queryData={npmQuery.data}
1861+
transform={transform}
1862+
binType={binType}
1863+
packages={packageGroups}
1864+
facetX={facetX}
1865+
facetY={facetY}
1866+
showDataMode={showDataModeParam}
1867+
/>
1868+
)}
18401869
</Resizable>
18411870
</div>
18421871
<div className="overflow-x-auto rounded-xl">

0 commit comments

Comments
 (0)