-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGraphs.tsx
68 lines (65 loc) · 3.17 KB
/
Graphs.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
64
65
66
67
68
import { createAsyncStore } from "@solidjs/router";
import { createMemo, createSignal, Show } from "solid-js";
import { getIssuesGraphData, PossibleNumbers } from "~/lib/queries";
import { Card, CardContent, CardHeader, CardTitle } from "../ui/card";
import NumberFlow from "solid-number-flow";
import { Badge } from "../ui/badge";
import { BarChart } from "../ui/charts";
export default function Graphs() {
const [currentNumber, setCurrentNumber] = createSignal<keyof PossibleNumbers>('totalIssuesResolved');
const issuesGraphData = createAsyncStore(() => getIssuesGraphData());
const chartDataIssuesCreatedPerDay = createMemo(() => ({
labels: issuesGraphData()?.issuesCreatedPerDay.labels!,
datasets: [
{
label: "Issues created",
data: issuesGraphData()?.issuesCreatedPerDay.data!
}
]
}));
return (
<>
<div class="flex gap-4 items-center justify-center">
<Show when={issuesGraphData()}>
{issuesGraphData => (
<Card class="w-full p-4 mb-4">
<div class="flex flex-col items-center mb-4">
<span class="text-base">Issues Resolved</span>
<NumberFlow
class="text-6xl"
value={issuesGraphData().numbers[currentNumber()]}
format={{ notation: 'compact' }}
locales="en-US"
/>
<div class="flex items-center gap-2">
<Badge variant={currentNumber() !== 'issuesResolvedToday' ? 'secondary' : 'default'}
onClick={() => {
setCurrentNumber('issuesResolvedToday')
}}>Today</Badge>
<Badge variant={currentNumber() !== 'issuesResolvedYesterday' ? 'secondary' : 'default'}
onClick={() => {
setCurrentNumber('issuesResolvedYesterday')
}}>Yesterday</Badge>
<Badge variant={currentNumber() !== 'totalIssuesResolved' ? 'secondary' : 'default'}
onClick={() => {
setCurrentNumber('totalIssuesResolved')
}}>All-Time</Badge>
</div>
</div>
</Card>
)}
</Show>
</div>
<div>
<Card>
<CardHeader>
<CardTitle>Issues created per day</CardTitle>
</CardHeader>
<CardContent class="h-64 w-[500px] max-w-full">
<BarChart data={chartDataIssuesCreatedPerDay()} />
</CardContent>
</Card>
</div>
</>
)
}