'use client'; import { useState } from 'react'; import { ChartSwitch } from '@/components/report/chart'; import { useEventQueryFilters } from '@/hooks/useEventQueryFilters'; import { cn } from '@/utils/cn'; import type { IChartType } from '@openpanel/validation'; import { LazyChart } from '../report/chart/LazyChart'; import { Widget, WidgetBody } from '../widget'; import { OverviewChartToggle } from './overview-chart-toggle'; import { WidgetButtons, WidgetHead } from './overview-widget'; import { useOverviewOptions } from './useOverviewOptions'; import { useOverviewWidget } from './useOverviewWidget'; interface OverviewTopGeoProps { projectId: string; } export default function OverviewTopGeo({ projectId }: OverviewTopGeoProps) { const { interval, range, previous, startDate, endDate } = useOverviewOptions(); const [chartType, setChartType] = useState('bar'); const [filters, setFilter] = useEventQueryFilters(); const isPageFilter = filters.find((filter) => filter.name === 'path'); const [widget, setWidget, widgets] = useOverviewWidget('geo', { countries: { title: 'Top countries', btn: 'Countries', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'country', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top sources', range: range, previous: previous, metric: 'sum', }, }, regions: { title: 'Top regions', btn: 'Regions', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'region', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top sources', range: range, previous: previous, metric: 'sum', }, }, cities: { title: 'Top cities', btn: 'Cities', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'city', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top sources', range: range, previous: previous, metric: 'sum', }, }, }); return ( <>
{widget.title}
{widgets.map((w) => ( ))}
{ switch (widget.key) { case 'countries': setWidget('regions'); setFilter('country', item.name); break; case 'regions': setWidget('cities'); setFilter('region', item.name); break; case 'cities': setFilter('city', item.name); break; } }} />
Map
); }