import { Button, Empty } from 'antd'; import React, { useState } from 'react'; import { trpc } from '../../../api/trpc'; import { MonitorHealthBar } from '../MonitorHealthBar'; import { useAllowEdit } from './useAllowEdit'; import { MonitorStatusPageEditForm, MonitorStatusPageEditFormValues, } from './EditForm'; import clsx from 'clsx'; import { useRequest } from '../../../hooks/useRequest'; import { useNavigate } from 'react-router'; import { ColorSchemeSwitcher } from '../../ColorSchemeSwitcher'; interface MonitorStatusPageProps { slug: string; } export const MonitorStatusPage: React.FC = React.memo( (props) => { const { slug } = props; const { data: info } = trpc.monitor.getPageInfo.useQuery({ slug, }); const editPageMutation = trpc.monitor.editPage.useMutation(); const trpcUtils = trpc.useContext(); const navigate = useNavigate(); const allowEdit = useAllowEdit(info?.workspaceId); const [editMode, setEditMode] = useState(false); const monitorList = info?.monitorList ?? []; const [{ loading }, handleSave] = useRequest( async (values: MonitorStatusPageEditFormValues) => { if (!info) { return; } const newPageInfo = await editPageMutation.mutateAsync({ id: info.id, workspaceId: info.workspaceId, ...values, }); trpcUtils.monitor.getPageInfo.setData( { slug, }, newPageInfo ); setEditMode(false); if (info.slug !== newPageInfo.slug) { // if slug is changed, should to navigate to new url navigate(`/status/${newPageInfo.slug}`); } } ); return (
{editMode && (
setEditMode(false)} />
)}
{info?.title}
{allowEdit && !editMode && ( )}
Services
{info && (
{monitorList.length > 0 ? ( monitorList.map((item) => (
)) ) : ( )}
)}
); } ); MonitorStatusPage.displayName = 'MonitorStatusPage';