Skip to content

Commit 6ac1a67

Browse files
committed
add date ranges
1 parent aff556d commit 6ac1a67

File tree

2 files changed

+43
-33
lines changed

2 files changed

+43
-33
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { AuthMechChart, AuthMechDataPoint } from './auth-mech-chart'
99
import { DailySignupsChart, DailySignupsDataPoint } from './daily-signups-chart'
1010
import { DailyLoginFailsChart, DailyLoginFailsDataPoint } from './daily-login-fails-chart'
1111
import { DateRangePicker, DateRange } from '@/components/ui/date-range-picker'
12-
import { startOfDay, endOfDay } from 'date-fns'
12+
import { startOfDay, endOfDay, format } from 'date-fns'
1313

1414
interface ConversionData {
1515
new_signups: number
@@ -79,9 +79,9 @@ export default function Auth0Dashboard() {
7979
async function fetchMetrics() {
8080
if (!token) return
8181

82-
const fromDate = dateRange.from.toISOString()
83-
const toDate = dateRange.to.toISOString()
84-
const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString()
82+
const fromDate = format(dateRange.from, "yyyy-MM-dd HH:mm:ss")
83+
const toDate = format(dateRange.to, "yyyy-MM-dd HH:mm:ss")
84+
const thirtyDaysAgo = format(new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), "yyyy-MM-dd HH:mm:ss")
8585

8686
try {
8787
const [

apps/web/src/components/ui/date-range-picker.tsx

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,12 @@ export function DateRangePicker({
3434
className,
3535
initialDateRange,
3636
}: DateRangePickerProps) {
37+
const [dateRange, setDateRange] = useState<DateRange>(initialDateRange)
3738
const [isOpen, setIsOpen] = useState(false)
38-
const [dateRange, setDateRange] = useState<DateRange>(
39-
initialDateRange || {
40-
from: subDays(new Date(), 7),
41-
to: new Date(),
42-
}
43-
)
39+
const [tempDate, setTempDate] = useState<Date | null>(null)
4440
const [compareLastPeriod, setCompareLastPeriod] = useState(false)
41+
const [fromInput, setFromInput] = useState(format(initialDateRange.from, "yyyy-MM-dd HH:mm:ss"))
42+
const [toInput, setToInput] = useState(format(initialDateRange.to, "yyyy-MM-dd HH:mm:ss"))
4543

4644
const handleRangeSelect = (range: DateRange | undefined) => {
4745
if (range?.from && range?.to) {
@@ -61,21 +59,27 @@ export function DateRangePicker({
6159
}
6260

6361
const handleFromChange = (e: React.ChangeEvent<HTMLInputElement>) => {
64-
const newDate = new Date(e.target.value.replace('UTC ', ''))
65-
if (!isNaN(newDate.getTime())) {
66-
setDateRange(prev => ({
67-
...prev,
68-
from: startOfDay(newDate)
62+
const value = e.target.value
63+
setFromInput(value)
64+
65+
const date = new Date(value)
66+
if (!isNaN(date.getTime())) {
67+
setDateRange(prev => ({
68+
...prev,
69+
from: startOfDay(date)
6970
}))
7071
}
7172
}
7273

7374
const handleToChange = (e: React.ChangeEvent<HTMLInputElement>) => {
74-
const newDate = new Date(e.target.value.replace('UTC ', ''))
75-
if (!isNaN(newDate.getTime())) {
76-
setDateRange(prev => ({
77-
...prev,
78-
to: endOfDay(newDate)
75+
const value = e.target.value
76+
setToInput(value)
77+
78+
const date = new Date(value)
79+
if (!isNaN(date.getTime())) {
80+
setDateRange(prev => ({
81+
...prev,
82+
to: endOfDay(date)
7983
}))
8084
}
8185
}
@@ -126,35 +130,41 @@ export function DateRangePicker({
126130
<div className="space-y-2">
127131
<div>
128132
<Label className="text-sm">From</Label>
129-
<div className="mt-1">
133+
<div className="flex items-center">
134+
<span className="mr-2 text-sm text-muted-foreground">UTC</span>
130135
<Input
131136
type="text"
132-
value={`UTC ${format(dateRange.from, "yyyy-MM-dd HH:mm:ss")}`}
137+
value={fromInput}
133138
onChange={handleFromChange}
134139
className="rounded-md text-sm"
140+
placeholder="YYYY-MM-DD HH:mm:ss"
135141
/>
136142
</div>
137143
</div>
138144

139145
<div>
140146
<div className="flex justify-between items-center">
141147
<Label className="text-sm">To</Label>
142-
<div className="flex-1 text-right">
143-
<Button
144-
variant="link"
145-
className="h-auto p-0 text-xs text-black hover:text-black/80"
146-
onClick={() => setDateRange({ ...dateRange, to: new Date() })}
147-
>
148-
Set to latest
149-
</Button>
150-
</div>
148+
<Button
149+
variant="link"
150+
className="h-auto p-0 text-xs text-black hover:text-black/80"
151+
onClick={() => {
152+
const now = new Date()
153+
setToInput(format(now, "yyyy-MM-dd HH:mm:ss"))
154+
setDateRange(prev => ({ ...prev, to: now }))
155+
}}
156+
>
157+
Set to latest
158+
</Button>
151159
</div>
152-
<div className="mt-1">
160+
<div className="flex items-center">
161+
<span className="mr-2 text-sm text-muted-foreground">UTC</span>
153162
<Input
154163
type="text"
155-
value={`UTC ${format(dateRange.to, "yyyy-MM-dd HH:mm:ss")}`}
164+
value={toInput}
156165
onChange={handleToChange}
157166
className="rounded-md text-sm"
167+
placeholder="YYYY-MM-DD HH:mm:ss"
158168
/>
159169
</div>
160170
</div>

0 commit comments

Comments
 (0)