Skip to content

Commit 69e2341

Browse files
committed
add cumulative signups
1 parent c271c44 commit 69e2341

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { BarChart, Bar, XAxis, YAxis } from 'recharts'
2+
import { ChartContainer, ChartTooltip, ChartConfig, ChartTooltipContent } from '@/components/ui/chart'
3+
4+
interface SignupData {
5+
day: string
6+
new_users: number
7+
cumulative_users: number
8+
}
9+
10+
interface CumulativeSignupsChartProps {
11+
data: SignupData[]
12+
isLoading: boolean
13+
className?: string
14+
}
15+
16+
const chartConfig = {
17+
cumulative_users: {
18+
color: "hsl(var(--primary))",
19+
label: "Total Users",
20+
},
21+
new_users: {
22+
color: "hsl(var(--secondary))",
23+
label: "New Users",
24+
},
25+
} satisfies ChartConfig
26+
27+
export function CumulativeSignupsChart({ data, isLoading, className }: CumulativeSignupsChartProps) {
28+
if (isLoading) return <div className={`flex items-center justify-center ${className}`}>Loading...</div>
29+
if (!data.length) return <div className={`flex items-center justify-center ${className}`}>No data available</div>
30+
31+
return (
32+
<ChartContainer config={chartConfig} className={`w-full ${className}`}>
33+
<BarChart
34+
data={data}
35+
margin={{
36+
left: 24,
37+
right: 12,
38+
top: 12,
39+
bottom: 24,
40+
}}
41+
>
42+
<XAxis
43+
dataKey="day"
44+
tickLine={false}
45+
axisLine={false}
46+
tickMargin={8}
47+
/>
48+
<YAxis
49+
tickLine={false}
50+
axisLine={false}
51+
tickMargin={8}
52+
width={70}
53+
/>
54+
<ChartTooltip
55+
content={<ChartTooltipContent />}
56+
cursor={{ fill: "hsl(var(--muted))", opacity: 0.2 }}
57+
/>
58+
<Bar
59+
dataKey="cumulative_users"
60+
fill="hsl(var(--primary))"
61+
radius={[4, 4, 0, 0]}
62+
stackId="a"
63+
/>
64+
<Bar
65+
dataKey="new_users"
66+
fill="hsl(var(--secondary))"
67+
radius={[4, 4, 0, 0]}
68+
stackId="a"
69+
/>
70+
</BarChart>
71+
</ChartContainer>
72+
)
73+
}

apps/web/src/components/tools/auth0/dashboard.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
CollapsibleTrigger,
3232
} from "@/components/ui/collapsible"
3333
import { ChevronDown, ChevronUp } from "lucide-react"
34+
import { CumulativeSignupsChart } from './cumulative-signups-chart'
3435

3536
interface SummaryMetrics {
3637
total_users: number
@@ -105,6 +106,7 @@ export default function Auth0Dashboard() {
105106
unique_emails: number
106107
}>>([])
107108
const [isDomainsOpen, setIsDomainsOpen] = useState(false)
109+
const [cumulativeSignupsData, setCumulativeSignupsData] = useState<Array<{ day: string; new_users: number; cumulative_users: number }>>([])
108110

109111
useEffect(() => {
110112
async function fetchInitialData() {
@@ -226,6 +228,9 @@ export default function Auth0Dashboard() {
226228
unique_emails: number
227229
}> ?? [])
228230
setLogs(logsResult?.data ?? [])
231+
232+
const cumulativeSignupsResult = await pipe<{ data: Array<{ day: string; new_users: number; cumulative_users: number }> }>(token, 'auth0_cumulative_users', baseParams)
233+
setCumulativeSignupsData(cumulativeSignupsResult?.data ?? [])
229234
} catch (error) {
230235
console.error('Failed to fetch metrics:', error)
231236
} finally {
@@ -349,6 +354,18 @@ export default function Auth0Dashboard() {
349354
description="New users compared to total users"
350355
/>
351356
</div>
357+
<Card>
358+
<CardHeader>
359+
<CardTitle>Cumulative Signups</CardTitle>
360+
</CardHeader>
361+
<CardContent>
362+
<CumulativeSignupsChart
363+
data={cumulativeSignupsData ?? []}
364+
isLoading={isLoading}
365+
className="h-[150px]"
366+
/>
367+
</CardContent>
368+
</Card>
352369

353370
<Separator className="my-6" />
354371

0 commit comments

Comments
 (0)