'use client'; import { useState } from 'react'; 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 OverviewTopSourcesProps { projectId: string; } export default function OverviewTopSources({ projectId, }: OverviewTopSourcesProps) { 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('sources', { all: { title: 'Top sources', btn: 'All', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters: filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'referrer_name', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top groups', range: range, previous: previous, metric: 'sum', }, }, domain: { title: 'Top urls', btn: 'URLs', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters: filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'referrer', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top sources', range: range, previous: previous, metric: 'sum', }, }, type: { title: 'Top types', btn: 'Types', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters: filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'referrer_type', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top types', range: range, previous: previous, metric: 'sum', }, }, utm_source: { title: 'UTM Source', btn: 'Source', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'properties.__query.utm_source', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top sources', range: range, previous: previous, metric: 'sum', }, }, utm_medium: { title: 'UTM Medium', btn: 'Medium', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'properties.__query.utm_medium', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top sources', range: range, previous: previous, metric: 'sum', }, }, utm_campaign: { title: 'UTM Campaign', btn: 'Campaign', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'properties.__query.utm_campaign', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top sources', range: range, previous: previous, metric: 'sum', }, }, utm_term: { title: 'UTM Term', btn: 'Term', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'properties.__query.utm_term', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top sources', range: range, previous: previous, metric: 'sum', }, }, utm_content: { title: 'UTM Content', btn: 'Content', chart: { projectId, startDate, endDate, events: [ { segment: 'event', filters, id: 'A', name: isPageFilter ? 'screen_view' : 'session_start', }, ], breakdowns: [ { id: 'A', name: 'properties.__query.utm_content', }, ], chartType, lineType: 'monotone', interval: interval, name: 'Top sources', range: range, previous: previous, metric: 'sum', }, }, }); return ( <>
{widget.title}
{widgets.map((w) => ( ))}
{ switch (widget.key) { case 'all': setFilter('referrer_name', item.name); setWidget('domain'); break; case 'domain': setFilter('referrer', item.name); break; case 'type': setFilter('referrer_type', item.name); setWidget('domain'); break; case 'utm_source': setFilter('properties.__query.utm_source', item.name); break; case 'utm_medium': setFilter('properties.__query.utm_medium', item.name); break; case 'utm_campaign': setFilter('properties.__query.utm_campaign', item.name); break; case 'utm_term': setFilter('properties.__query.utm_term', item.name); break; case 'utm_content': setFilter('properties.__query.utm_content', item.name); break; } }} />
); }