import { Button, message, Spin, Switch } from 'antd'; import React from 'react'; import { SyncOutlined } from '@ant-design/icons'; import { DateFilter } from '../DateFilter'; import { getDateArray } from '../../utils/date'; import { useEvent } from '../../hooks/useEvent'; import { MetricCard } from '../MetricCard'; import { useGlobalRangeDate } from '../../hooks/useGlobalRangeDate'; import { AppRouterOutput, trpc } from '../../api/trpc'; import { getUserTimezone } from '../../api/model/user'; import { useGlobalStateStore } from '../../store/global'; import { useTranslation } from '@i18next-toolkit/react'; import { TimeEventChart } from '../TimeEventChart'; export const TelemetryOverview: React.FC<{ workspaceId: string; telemetryId: string; showDateFilter?: boolean; actions?: React.ReactNode; }> = React.memo((props) => { const { t } = useTranslation(); const { workspaceId, telemetryId, showDateFilter = false, actions } = props; const { startDate, endDate, unit, refresh } = useGlobalRangeDate(); const showPreviousPeriod = useGlobalStateStore( (state) => state.showPreviousPeriod ); const { data: info } = trpc.telemetry.info.useQuery({ workspaceId, telemetryId, }); const { data: chartData = [], isLoading: isLoadingPageview, refetch: refetchPageview, } = trpc.telemetry.pageviews.useQuery( { workspaceId, telemetryId, startAt: startDate.valueOf(), endAt: endDate.valueOf(), unit, timezone: getUserTimezone(), }, { select(data) { const pageviews = data.pageviews ?? []; const sessions = data.sessions ?? []; const pageviewsArr = getDateArray(pageviews, startDate, endDate, unit); const sessionsArr = getDateArray(sessions, startDate, endDate, unit); return [ ...pageviewsArr.map((item) => ({ ...item, type: 'pageview' })), ...sessionsArr.map((item) => ({ ...item, type: 'session' })), ]; }, } ); const { data: stats, isLoading: isLoadingStats, refetch: refetchStats, } = trpc.telemetry.stats.useQuery({ workspaceId, telemetryId, startAt: startDate.unix() * 1000, endAt: endDate.unix() * 1000, timezone: getUserTimezone(), unit, }); const handleRefresh = useEvent(async () => { refresh(); await Promise.all([refetchPageview(), refetchStats()]); message.success(t('Refreshed')); }); const loading = isLoadingPageview || isLoadingStats; return (
{info?.name}
{actions}
{stats && }
useGlobalStateStore.setState({ showPreviousPeriod: checked, }) } /> {t('Previous period')}
); }); TelemetryOverview.displayName = 'TelemetryOverview'; const MetricsBar: React.FC<{ stats: AppRouterOutput['telemetry']['stats']; }> = React.memo((props) => { const { t } = useTranslation(); const { pageviews, uniques } = props.stats || {}; return (
); }); MetricsBar.displayName = 'MetricsBar';