@@ -9,6 +9,10 @@ import { CacheStatsChart } from './cache-stats-chart'
99import { ResponseTimesChart } from './response-times-chart'
1010import { TopPathsTable } from './top-paths-table'
1111import { VercelFilters } from './filters'
12+ import { TimeRange } from '../shared/time-range'
13+ import { format } from 'date-fns'
14+ import { addDays } from 'date-fns'
15+ import { DateRange } from 'react-day-picker'
1216
1317export default function VercelLogsDashboard ( ) {
1418 const [ token ] = useQueryState ( 'token' )
@@ -30,6 +34,11 @@ export default function VercelLogsDashboard() {
3034 const [ cacheStatsData , setCacheStatsData ] = useState < any [ ] > ( [ ] )
3135 const [ topPathsPage , setTopPathsPage ] = useState ( 0 )
3236 const [ topPathsLoading , setTopPathsLoading ] = useState ( false )
37+ const [ timeRange , setTimeRange ] = useState ( 'daily' )
38+ const [ dateRange , setDateRange ] = useState < DateRange > ( {
39+ from : addDays ( new Date ( ) , - 7 ) ,
40+ to : new Date ( )
41+ } )
3342
3443 const fetchTopPaths = async ( ) => {
3544 if ( ! token ) return
@@ -63,7 +72,10 @@ export default function VercelLogsDashboard() {
6372 host,
6473 project,
6574 event_type : eventType ,
66- source
75+ source,
76+ time_range : timeRange ,
77+ ...( dateRange ?. from && { date_from : format ( dateRange . from , 'yyyy-MM-dd HH:mm:ss' ) } ) ,
78+ ...( dateRange ?. to && { date_to : format ( dateRange . to , 'yyyy-MM-dd 23:59:59' ) } )
6779 }
6880
6981 try {
@@ -93,28 +105,37 @@ export default function VercelLogsDashboard() {
93105
94106 useEffect ( ( ) => {
95107 fetchMetrics ( )
96- } , [ token , environment , host , project , eventType , source ] )
108+ } , [ token , environment , host , project , eventType , source , timeRange , dateRange ] )
97109
98110 useEffect ( ( ) => {
99111 fetchTopPaths ( )
100- } , [ token , environment , host , project , eventType , source , topPathsPage ] )
112+ } , [ token , environment , host , project , eventType , source , topPathsPage , timeRange , dateRange ] )
101113
102114 return (
103115 < div className = "space-y-8" >
104- < VercelFilters
105- token = { token ?? '' }
106- className = "mb-8"
107- environment = { environment }
108- host = { host }
109- project = { project }
110- eventType = { eventType }
111- source = { source }
112- onEnvironmentChange = { setEnvironment }
113- onHostChange = { setHost }
114- onProjectChange = { setProject }
115- onEventTypeChange = { setEventType }
116- onSourceChange = { setSource }
117- />
116+ < div className = "flex justify-between items-start" >
117+ < VercelFilters
118+ token = { token ?? '' }
119+ className = "mb-8"
120+ environment = { environment }
121+ host = { host }
122+ project = { project }
123+ eventType = { eventType }
124+ source = { source }
125+ onEnvironmentChange = { setEnvironment }
126+ onHostChange = { setHost }
127+ onProjectChange = { setProject }
128+ onEventTypeChange = { setEventType }
129+ onSourceChange = { setSource }
130+ />
131+ < TimeRange
132+ timeRange = { timeRange }
133+ onTimeRangeChange = { setTimeRange }
134+ dateRange = { dateRange }
135+ onDateRangeChange = { ( range ) => setDateRange ( range || { from : new Date ( ) , to : addDays ( new Date ( ) , 7 ) } ) }
136+ className = "mb-8"
137+ />
138+ </ div >
118139 { /* Metrics Row */ }
119140 < div className = "grid gap-4 md:grid-cols-3" >
120141 < Card >
0 commit comments