import dayjs from 'dayjs'; import { get } from 'lodash-es'; import React, { useMemo } from 'react'; import { trpc } from '../../api/trpc'; import { getMonitorProvider, getProviderDisplay } from './provider'; import { useTranslation } from '@i18next-toolkit/react'; import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, } from '../ui/chart'; import { Area, AreaChart, CartesianGrid, Customized, XAxis, YAxis, } from 'recharts'; import { useTheme } from '@/hooks/useTheme'; import { CustomizedErrorArea } from './CustomizedErrorArea'; const chartConfig = { value: { label: Result, }, } satisfies ChartConfig; interface MonitorPublicDataChartProps { workspaceId: string; monitorId: string; className?: string; } export const MonitorPublicDataChart: React.FC = React.memo((props) => { const { t } = useTranslation(); const { workspaceId, monitorId } = props; const { colors } = useTheme(); const { data: monitorInfo } = trpc.monitor.getPublicInfo.useQuery( { monitorIds: [monitorId], }, { select(data) { return data[0]; }, } ); const { data: _data = [] } = trpc.monitor.publicData.useQuery({ workspaceId, monitorId, }); const providerInfo = getMonitorProvider(monitorInfo?.type ?? ''); const { data } = useMemo(() => { const data = _data.map((d, i, arr) => { const value = d.value > 0 ? d.value : null; const time = dayjs(d.createdAt).valueOf(); return { value, time, }; }); return { data }; }, [_data]); const isTrendingMode = monitorInfo?.trendingMode ?? false; // if true, y axis not start from 0 return (
dayjs(date).format('HH:mm')} /> dayjs(get(payload, [0, 'payload', 'time'])).format( 'YYYY-MM-DD HH:mm:ss' ) } formatter={(value, defaultText, item, index, payload) => { if (typeof value !== 'number') { return defaultText; } const { name, text } = getProviderDisplay( Number(value), providerInfo ); return (
{name}: {text}
); }} content={} />
); }); MonitorPublicDataChart.displayName = 'MonitorPublicDataChart';