diff --git a/web/src/app/admin/switchover/AdminSWOStatusCard.tsx b/web/src/app/admin/switchover/AdminSWOStatusCard.tsx index c035a1efad..1ba64ed423 100644 --- a/web/src/app/admin/switchover/AdminSWOStatusCard.tsx +++ b/web/src/app/admin/switchover/AdminSWOStatusCard.tsx @@ -14,6 +14,7 @@ import InProgressIcon from 'mdi-material-ui/DatabaseEdit' import { SWOStatus } from '../../../schema' import LoadingButton from '@mui/lab/LoadingButton' import { toTitle } from './util' +import { AdminSwitchoverGuideButton } from './AdminSwitchoverGuide' function getIcon(data: SWOStatus): JSX.Element { const i: SvgIconProps = { color: 'primary', sx: { fontSize: '3.5rem' } } @@ -85,10 +86,9 @@ export function AdminSWOStatusCard( sx={{ p: 0 }} /> {getDetails(props.data)} -
} @@ -118,6 +118,7 @@ export function AdminSWOStatusCard( {isExec ? 'Executing...' : 'Execute'} + ) diff --git a/web/src/app/admin/switchover/AdminSwitchover.tsx b/web/src/app/admin/switchover/AdminSwitchover.tsx index bea62141ea..be78bc250c 100644 --- a/web/src/app/admin/switchover/AdminSwitchover.tsx +++ b/web/src/app/admin/switchover/AdminSwitchover.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import React, { ReactNode, useEffect, useState } from 'react' import Grid from '@mui/material/Grid' import { gql, useMutation, useQuery } from 'urql' import { DateTime } from 'luxon' @@ -12,9 +12,7 @@ import { AdminSWODone } from './AdminSWODone' import { AdminSWOWrongMode } from './AdminSWOWrongMode' import { AdminSWODBVersionCard } from './AdminSWODBVersionCard' import { AdminSWOStatusCard } from './AdminSWOStatusCard' -import { Button } from '@mui/material' -import AppLink from '../../util/AppLink' -import OpenInNewIcon from '@mui/icons-material/OpenInNew' +import { AdminSwitchoverGuideButton } from './AdminSwitchoverGuide' const query = gql` query { @@ -48,7 +46,7 @@ const mutation = gql` } ` -export function AdminSwitchoverInterface(): JSX.Element { +export default function AdminSwitchover(): JSX.Element { const [{ fetching, error, data: _data }, refetch] = useQuery({ query, }) @@ -68,13 +66,22 @@ export function AdminSwitchoverInterface(): JSX.Element { return () => clearInterval(t) }, [fetching, refetch, data?.state, mutationStatus.fetching]) - // remember if we are done and stay that way - if (data?.state === 'done') return - - if (error && error.message === '[GraphQL] not in SWO mode' && !data) - return - - if (!data) return + // loading/error states to show before page load + let msgJSX: ReactNode + if (error?.message === '[GraphQL] not in SWO mode' && !data) + msgJSX = + else if (!data) msgJSX = + else if (data?.state === 'done') msgJSX = + if (msgJSX) { + return ( + + {msgJSX} +
+ +
+
+ ) + } function actionHandler(action: 'reset' | 'execute'): () => void { return () => { @@ -139,7 +146,7 @@ export function AdminSwitchoverInterface(): JSX.Element { - + {data?.nodes.length > 0 && data.nodes .slice() @@ -157,20 +164,3 @@ export function AdminSwitchoverInterface(): JSX.Element { ) } - -export default function AdminSwitchover(): JSX.Element { - return ( - - - - - ) -} diff --git a/web/src/app/admin/switchover/AdminSwitchoverGuide.tsx b/web/src/app/admin/switchover/AdminSwitchoverGuide.tsx index 8de2fe86b5..03726f31ee 100644 --- a/web/src/app/admin/switchover/AdminSwitchoverGuide.tsx +++ b/web/src/app/admin/switchover/AdminSwitchoverGuide.tsx @@ -2,7 +2,32 @@ import React from 'react' import swoGuide from '../../../../../docs/switchover.md' import Markdown from '../../util/Markdown' +import { Button, Card, CardContent, Typography } from '@mui/material' +import AppLink from '../../util/AppLink' +import OpenInNewIcon from '@mui/icons-material/OpenInNew' + +export function AdminSwitchoverGuideButton(): JSX.Element { + return ( + + ) +} export default function AdminSwitchoverGuide(): JSX.Element { - return + return ( + + + + + + + + ) } diff --git a/web/src/app/admin/switchover/SWONode.tsx b/web/src/app/admin/switchover/SWONode.tsx index 0162e354d2..5b0ea6a3f6 100644 --- a/web/src/app/admin/switchover/SWONode.tsx +++ b/web/src/app/admin/switchover/SWONode.tsx @@ -42,8 +42,12 @@ export default function SWONode({ node, name }: SWONodeProps): JSX.Element { - - {node.connections?.reduce((acc, cur) => acc + cur.count, 0)} + + + {node.connections?.reduce((acc, cur) => acc + cur.count, 0)} + @@ -91,8 +95,12 @@ export default function SWONode({ node, name }: SWONodeProps): JSX.Element { - - {node.connections?.reduce((acc, cur) => acc + cur.count, 0)} + + + {node.connections?.reduce((acc, cur) => acc + cur.count, 0)} +