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 (
-
- }
- component={AppLink}
- to='/admin/switchover/guide'
- newTab
- >
- Switchover Guide
-
-
-
- )
-}
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 (
+ }
+ component={AppLink}
+ to='/admin/switchover/guide'
+ newTab
+ >
+ Switchover Guide
+
+ )
+}
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)}
+