import { Button, Card, Space, Spin } from 'antd'; import dayjs from 'dayjs'; import React, { useState } from 'react'; import { defaultErrorHandler, defaultSuccessHandler, trpc, } from '../../api/trpc'; import { useCurrentWorkspaceId } from '../../store/user'; import { Loading } from '../Loading'; import { getMonitorLink } from './provider'; import { NotFoundTip } from '../NotFoundTip'; import { MonitorInfo as MonitorInfoType } from '../../../types'; import { MonitorHealthBar } from './MonitorHealthBar'; import { last } from 'lodash-es'; import { ColorTag } from '../ColorTag'; import { useNavigate } from 'react-router'; import { MonitorEventList } from './MonitorEventList'; import { useEvent } from '../../hooks/useEvent'; import { MonitorDataMetrics } from './MonitorDataMetrics'; import { MonitorDataChart } from './MonitorDataChart'; interface MonitorInfoProps { monitorId: string; } export const MonitorInfo: React.FC = React.memo((props) => { const workspaceId = useCurrentWorkspaceId(); const { monitorId } = props; const [currectResponse, setCurrentResponse] = useState(0); const navigate = useNavigate(); const { data: monitorInfo, isInitialLoading, isLoading, } = trpc.monitor.get.useQuery({ workspaceId, monitorId, }); const changeActiveMutation = trpc.monitor.changeActive.useMutation({ onSuccess: defaultSuccessHandler, onError: defaultErrorHandler, }); const trpcUtils = trpc.useContext(); const handleStart = useEvent(async () => { await changeActiveMutation.mutateAsync({ workspaceId, monitorId, active: true, }); trpcUtils.monitor.get.refetch({ workspaceId, monitorId, }); trpcUtils.monitor.events.refetch({ workspaceId, monitorId, }); }); const handleStop = useEvent(async () => { await changeActiveMutation.mutateAsync({ workspaceId, monitorId, active: false, }); trpcUtils.monitor.get.refetch({ workspaceId, monitorId, }); trpcUtils.monitor.events.refetch({ workspaceId, monitorId, }); }); if (isInitialLoading) { return ; } if (!monitorInfo) { return ; } return (
{monitorInfo.name} {monitorInfo.active === false && (
Stoped
)}
{getMonitorLink(monitorInfo as any as MonitorInfoType)}
Monitored for {dayjs().diff(dayjs(monitorInfo.createdAt), 'days')}{' '} days
{monitorInfo.active ? ( ) : ( )}
{ setCurrentResponse(last(items)?.value ?? 0); }} />
); }); MonitorInfo.displayName = 'MonitorInfo';