Local modifications to ClusterLabs/Anvil by Alteeve
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.0 KiB

import { Grid } from '@mui/material';
import Head from 'next/head';
import { FC, useState } from 'react';
import API_BASE_URL from '../../lib/consts/API_BASE_URL';
import ConfirmDialog from '../../components/ConfirmDialog';
import Header from '../../components/Header';
import periodicFetch from '../../lib/fetchers/periodicFetch';
import {
ComplexOperationsPanel,
SimpleOperationsPanel,
} from '../../components/StrikerConfig';
import useProtect from '../../hooks/useProtect';
import useProtectedState from '../../hooks/useProtectedState';
// This page can't be reused, and default is set within the render function.
// eslint-disable-next-line react/require-default-props
const Config: FC<{ refreshInterval?: number }> = ({
refreshInterval = 60000,
}) => {
const { protect } = useProtect();
const [isOpenConfirmDialog, setIsOpenConfirmDialog] =
useState<boolean>(false);
const [confirmDialogProps, setConfirmDialogProps] =
useState<ConfirmDialogProps>({
actionProceedText: '',
closeOnProceed: true,
content: '',
dialogProps: { open: isOpenConfirmDialog },
onCancelAppend: () => {
setIsOpenConfirmDialog(false);
},
onProceedAppend: () => {
setIsOpenConfirmDialog(false);
},
titleText: '',
});
const [simpleOpsInstallTarget, setSimpleOpsInstallTarget] = useProtectedState<
APIHostInstallTarget | undefined
>(undefined, protect);
const [simpleOpsPanelHeader, setSimpleOpsPanelHeader] =
useProtectedState<string>('', protect);
const { data: hostDetail, isLoading: loadingHostDetail } =
periodicFetch<APIHostDetail>(`${API_BASE_URL}/host/local`, {
onError: () => {
setSimpleOpsPanelHeader('Unknown');
},
onSuccess: ({ installTarget, shortHostName }) => {
setSimpleOpsInstallTarget(installTarget);
setSimpleOpsPanelHeader(shortHostName);
},
refreshInterval,
});
return (
<>
<Head>
<title>
{loadingHostDetail
? 'Loading...'
: `${hostDetail?.shortHostName} Config`}
</title>
</Head>
<Header />
<Grid container columns={{ xs: 1, md: 3, lg: 4 }}>
<Grid item xs={1}>
<SimpleOperationsPanel
installTarget={simpleOpsInstallTarget}
onSubmit={({ onProceedAppend, ...restConfirmDialogProps }) => {
setConfirmDialogProps((previous) => ({
...previous,
...restConfirmDialogProps,
onProceedAppend: (...args) => {
onProceedAppend?.call(null, ...args);
setIsOpenConfirmDialog(false);
},
}));
setIsOpenConfirmDialog(true);
}}
title={simpleOpsPanelHeader}
/>
</Grid>
<Grid item md={2} xs={1}>
<ComplexOperationsPanel />
</Grid>
</Grid>
<ConfirmDialog
{...confirmDialogProps}
dialogProps={{ open: isOpenConfirmDialog }}
/>
</>
);
};
export default Config;