@@ -32,6 +32,7 @@ import {
3232} from '@/components/table/rows' ;
3333import { useBatchDynamicQuery } from '@/hooks/use-dynamic-query' ;
3434import { getUserTimezone } from '@/lib/timezone' ;
35+ import { useDateFilters } from '@/hooks/use-date-filters' ;
3536import {
3637 metricVisibilityAtom ,
3738 toggleMetricAtom ,
@@ -52,6 +53,7 @@ const CustomEventsSection = dynamic(() =>
5253
5354interface ChartDataPoint {
5455 date : string ;
56+ rawDate ?: string ;
5557 pageviews ?: number ;
5658 visitors ?: number ;
5759 sessions ?: number ;
@@ -142,11 +144,15 @@ export function WebsiteOverviewTab({
142144 [ ]
143145 ) ;
144146
147+ const { setDateRangeAction } = useDateFilters ( ) ;
148+
145149 const previousPeriodRange = useMemo (
146150 ( ) => calculatePreviousPeriod ( dateRange ) ,
147151 [ dateRange , calculatePreviousPeriod ]
148152 ) ;
149153
154+ const [ visibleMetrics ] = useAtom ( metricVisibilityAtom ) ;
155+
150156 const queries = [
151157 {
152158 id : 'overview-summary' ,
@@ -241,26 +247,6 @@ export function WebsiteOverviewTab({
241247 getDataForQuery ( 'overview-custom-events' , 'outbound_domains' ) || [ ] ,
242248 } ;
243249
244- const [ visibleMetrics ] = useAtom ( metricVisibilityAtom ) ;
245- const [ , toggleMetricAction ] = useAtom ( toggleMetricAtom ) ;
246-
247- const toggleMetric = useCallback (
248- ( metric : string ) => {
249- if ( metric in visibleMetrics ) {
250- toggleMetricAction ( metric as keyof typeof visibleMetrics ) ;
251- }
252- } ,
253- [ visibleMetrics , toggleMetricAction ]
254- ) ;
255-
256- const hiddenMetrics = useMemo ( ( ) => {
257- const result : Record < string , boolean > = { } ;
258- for ( const key of Object . keys ( visibleMetrics ) ) {
259- result [ key ] = ! visibleMetrics [ key as keyof typeof visibleMetrics ] ;
260- }
261- return result ;
262- } , [ visibleMetrics ] ) ;
263-
264250 const createPercentageCell = ( ) => ( info : CellInfo ) => {
265251 const percentage = info . getValue ( ) as number ;
266252 return < PercentageBadge percentage = { percentage } /> ;
@@ -355,32 +341,22 @@ export function WebsiteOverviewTab({
355341 ) ;
356342
357343 const chartData = useMemo ( ( ) => {
358- if ( ! analytics . events_by_date ?. length ) {
359- return [ ] ;
360- }
344+ if ( ! analytics . events_by_date ?. length ) return [ ] ;
345+
361346 const filteredEvents = filterFutureEvents ( analytics . events_by_date ) ;
362- return filteredEvents . map ( ( event : MetricPoint ) : ChartDataPoint => {
363- const filtered : ChartDataPoint = {
364- date : formatDateByGranularity ( event . date , dateRange . granularity ) ,
365- } ;
366- if ( visibleMetrics . pageviews ) {
367- filtered . pageviews = event . pageviews as number ;
368- }
369- if ( visibleMetrics . visitors ) {
370- filtered . visitors =
371- ( event . visitors as number ) || ( event . unique_visitors as number ) || 0 ;
372- }
373- if ( visibleMetrics . sessions ) {
374- filtered . sessions = event . sessions as number ;
375- }
376- if ( visibleMetrics . bounce_rate ) {
377- filtered . bounce_rate = event . bounce_rate as number ;
378- }
379- if ( visibleMetrics . avg_session_duration ) {
380- filtered . avg_session_duration = event . avg_session_duration as number ;
381- }
382- return filtered ;
383- } ) ;
347+ return filteredEvents . map ( ( event : MetricPoint ) : ChartDataPoint => ( {
348+ date : formatDateByGranularity ( event . date , dateRange . granularity ) ,
349+ rawDate : event . date ,
350+ ...( visibleMetrics . pageviews && { pageviews : event . pageviews as number } ) ,
351+ ...( visibleMetrics . visitors && {
352+ visitors : ( event . visitors as number ) || ( event . unique_visitors as number ) || 0
353+ } ) ,
354+ ...( visibleMetrics . sessions && { sessions : event . sessions as number } ) ,
355+ ...( visibleMetrics . bounce_rate && { bounce_rate : event . bounce_rate as number } ) ,
356+ ...( visibleMetrics . avg_session_duration && {
357+ avg_session_duration : event . avg_session_duration as number
358+ } ) ,
359+ } ) ) ;
384360 } , [
385361 analytics . events_by_date ,
386362 dateRange . granularity ,
@@ -389,37 +365,32 @@ export function WebsiteOverviewTab({
389365 ] ) ;
390366
391367 const miniChartData = useMemo ( ( ) => {
392- if ( ! analytics . events_by_date ?. length ) {
393- return { } ;
394- }
368+ if ( ! analytics . events_by_date ?. length ) return { } ;
369+
395370 const filteredEvents = filterFutureEvents ( analytics . events_by_date ) ;
396371 const createChartSeries = (
397372 field : keyof MetricPoint ,
398373 transform ?: ( value : number ) => number
399374 ) =>
400375 filteredEvents . map ( ( event : MetricPoint ) => ( {
401- date :
402- dateRange . granularity === 'hourly'
403- ? event . date
404- : event . date . slice ( 0 , 10 ) ,
405- value : transform
406- ? transform ( event [ field ] as number )
407- : ( event [ field ] as number ) || 0 ,
376+ date : dateRange . granularity === 'hourly' ? event . date : event . date . slice ( 0 , 10 ) ,
377+ value : transform ? transform ( event [ field ] as number ) : ( event [ field ] as number ) || 0 ,
408378 } ) ) ;
379+
380+ const formatSessionDuration = ( value : number ) => {
381+ if ( value < 60 ) return Math . round ( value ) ;
382+ const minutes = Math . floor ( value / 60 ) ;
383+ const seconds = Math . round ( value % 60 ) ;
384+ return minutes * 60 + seconds ;
385+ } ;
386+
409387 return {
410388 visitors : createChartSeries ( 'visitors' ) ,
411389 sessions : createChartSeries ( 'sessions' ) ,
412390 pageviews : createChartSeries ( 'pageviews' ) ,
413391 pagesPerSession : createChartSeries ( 'pages_per_session' ) ,
414392 bounceRate : createChartSeries ( 'bounce_rate' ) ,
415- sessionDuration : createChartSeries ( 'avg_session_duration' , ( value ) => {
416- if ( value < 60 ) {
417- return Math . round ( value ) ;
418- }
419- const minutes = Math . floor ( value / 60 ) ;
420- const seconds = Math . round ( value % 60 ) ;
421- return minutes * 60 + seconds ;
422- } ) ,
393+ sessionDuration : createChartSeries ( 'avg_session_duration' , formatSessionDuration ) ,
423394 } ;
424395 } , [ analytics . events_by_date , dateRange . granularity , filterFutureEvents ] ) ;
425396
@@ -968,9 +939,8 @@ export function WebsiteOverviewTab({
968939 className = "rounded border-0"
969940 data = { chartData }
970941 height = { 350 }
971- hiddenMetrics = { hiddenMetrics }
972942 isLoading = { isLoading }
973- onToggleMetric = { toggleMetric }
943+ onRangeSelect = { setDateRangeAction }
974944 />
975945 </ div >
976946 </ div >
0 commit comments