From 16266f3e8ec764be3aeef46243ede4e921b515f3 Mon Sep 17 00:00:00 2001 From: Imre Toth <imre.toth@ess.eu> Date: Thu, 2 Nov 2023 08:23:03 +0000 Subject: [PATCH] Resolve CE-2153 "Disabling controll buttons" --- .../IOC/ChangeHostAdmin/ChangeHostAdmin.js | 12 ++++++++---- src/components/IOC/DeployIOC/DeployIOC.js | 9 +++++++-- src/components/IOC/IOCAdmin/IOCAdmin.js | 11 ++++++++++- src/components/IOC/IOCDelete/IOCDelete.js | 11 +++++++---- .../IOC/IOCDeployDialog/IOCDeployDialog.js | 7 +++++-- .../IOC/IOCDetailAdmin/IOCDetailAdmin.js | 12 ++++++++---- src/components/IOC/IOCManage/IOCManage.js | 4 ++++ .../IOC/IOCUndeployDialog/IOCUndeployDialog.js | 6 +++++- src/components/IOC/UndeployIOC/UndeployIOC.js | 14 ++++++++++++-- src/views/IOC/IOCDetailsView.js | 1 + 10 files changed, 67 insertions(+), 20 deletions(-) diff --git a/src/components/IOC/ChangeHostAdmin/ChangeHostAdmin.js b/src/components/IOC/ChangeHostAdmin/ChangeHostAdmin.js index 6b442ab3..dfa908f5 100644 --- a/src/components/IOC/ChangeHostAdmin/ChangeHostAdmin.js +++ b/src/components/IOC/ChangeHostAdmin/ChangeHostAdmin.js @@ -26,7 +26,8 @@ export default function ChangeHostAdmin({ ioc, getIOC, resetTab, - buttonDisabled + buttonDisabled, + setButtonDisabled }) { const initHost = useMemo( () => ({ @@ -72,16 +73,18 @@ export default function ChangeHostAdmin({ useEffect(() => { if (updateHostError) { + setButtonDisabled(false); setError(updateHostError?.message); } - }, [updateHostError, setError]); + }, [updateHostError, setError, setButtonDisabled]); useEffect(() => { if (updatedIoc) { getIOC(); resetTab(); + setButtonDisabled(false); } - }, [updatedIoc, getIOC, resetTab]); + }, [updatedIoc, getIOC, resetTab, setButtonDisabled]); useEffect(() => { getHosts({ query: transformHostQuery(`${query}`) }); @@ -93,6 +96,7 @@ export default function ChangeHostAdmin({ }, [setOpen, initHost]); const onConfirm = useCallback(() => { + setButtonDisabled(true); updateHost( { ioc_id: ioc.id @@ -103,7 +107,7 @@ export default function ChangeHostAdmin({ } } ); - }, [updateHost, ioc, host?.csEntryHost?.id]); + }, [updateHost, ioc, host?.csEntryHost?.id, setButtonDisabled]); let disabledButtonTitle = ""; if (buttonDisabled || ioc.operationInProgress) { diff --git a/src/components/IOC/DeployIOC/DeployIOC.js b/src/components/IOC/DeployIOC/DeployIOC.js index 83c29376..269d0ad7 100644 --- a/src/components/IOC/DeployIOC/DeployIOC.js +++ b/src/components/IOC/DeployIOC/DeployIOC.js @@ -12,7 +12,9 @@ export function DeployIOC({ submitCallback, iocId, hasActiveDeployment, - init = {} + init = {}, + buttonDisabled, + setButtonDisabled }) { const [error, setError] = useState(); const client = useContext(apiContext); @@ -27,9 +29,10 @@ export function DeployIOC({ useEffect(() => { if (deployError) { + setButtonDisabled(false); setError(deployError?.message); } - }, [deployError]); + }, [deployError, setButtonDisabled]); const { watchDeployment } = useContext(notificationContext); @@ -44,6 +47,8 @@ export function DeployIOC({ hasActiveDeployment={hasActiveDeployment} error={error} resetError={() => setError(null)} + buttonDisabled={buttonDisabled} + setButtonDisabled={setButtonDisabled} /> ); } else { diff --git a/src/components/IOC/IOCAdmin/IOCAdmin.js b/src/components/IOC/IOCAdmin/IOCAdmin.js index 3d3a967e..64ac9a54 100644 --- a/src/components/IOC/IOCAdmin/IOCAdmin.js +++ b/src/components/IOC/IOCAdmin/IOCAdmin.js @@ -4,7 +4,13 @@ import IOCDelete from "../IOCDelete"; import IOCDetailAdmin from "../IOCDetailAdmin"; import ChangeHostAdmin from "../ChangeHostAdmin"; -export default function IOCAdmin({ ioc, getIOC, resetTab, buttonDisabled }) { +export default function IOCAdmin({ + ioc, + getIOC, + resetTab, + buttonDisabled, + setButtonDisabled +}) { return ( <> <IOCDetailAdmin @@ -12,6 +18,7 @@ export default function IOCAdmin({ ioc, getIOC, resetTab, buttonDisabled }) { getIOC={getIOC} resetTab={resetTab} buttonDisabled={buttonDisabled} + setButtonDisabled={setButtonDisabled} /> {ioc.activeDeployment && ( <ChangeHostAdmin @@ -19,6 +26,7 @@ export default function IOCAdmin({ ioc, getIOC, resetTab, buttonDisabled }) { getIOC={getIOC} resetTab={resetTab} buttonDisabled={buttonDisabled} + setButtonDisabled={setButtonDisabled} /> )} <AdministerUndeployment @@ -28,6 +36,7 @@ export default function IOCAdmin({ ioc, getIOC, resetTab, buttonDisabled }) { <IOCDelete ioc={ioc} buttonDisabled={buttonDisabled} + setButtonDisabled={setButtonDisabled} /> </> ); diff --git a/src/components/IOC/IOCDelete/IOCDelete.js b/src/components/IOC/IOCDelete/IOCDelete.js index f505f0f4..4b2a037c 100644 --- a/src/components/IOC/IOCDelete/IOCDelete.js +++ b/src/components/IOC/IOCDelete/IOCDelete.js @@ -13,7 +13,7 @@ import AccessControl from "../../auth/AccessControl"; import { apiContext } from "../../../api/DeployApi"; import { useAPIMethod } from "@ess-ics/ce-ui-common"; -export default function IOCDelete({ ioc, buttonDisabled }) { +export default function IOCDelete({ ioc, buttonDisabled, setButtonDisabled }) { const navigate = useNavigate(); // for the dialog @@ -41,15 +41,17 @@ export default function IOCDelete({ ioc, buttonDisabled }) { useEffect(() => { if (errorResponse) { + setButtonDisabled(false); setError(errorResponse?.message); } - }, [errorResponse, setError]); + }, [errorResponse, setError, setButtonDisabled]); useEffect(() => { if (dataready && !error) { + setButtonDisabled(false); navigate(-1); } - }, [dataready, navigate, error]); + }, [dataready, navigate, error, setButtonDisabled]); let disabledButtonTitle = ""; @@ -63,8 +65,9 @@ export default function IOCDelete({ ioc, buttonDisabled }) { }, [setOpen]); const onConfirm = useCallback(() => { + setButtonDisabled(true); deleteIOC(); - }, [deleteIOC]); + }, [deleteIOC, setButtonDisabled]); return ( <> diff --git a/src/components/IOC/IOCDeployDialog/IOCDeployDialog.js b/src/components/IOC/IOCDeployDialog/IOCDeployDialog.js index 681f0e16..0287d837 100644 --- a/src/components/IOC/IOCDeployDialog/IOCDeployDialog.js +++ b/src/components/IOC/IOCDeployDialog/IOCDeployDialog.js @@ -25,7 +25,9 @@ export function IOCDeployDialog({ hasActiveDeployment, init = {}, error, - resetError + resetError, + buttonDisabled, + setButtonDisabled }) { const client = useContext(apiContext); const { @@ -82,6 +84,7 @@ export function IOCDeployDialog({ const onSubmit = (event) => { event.preventDefault(); + setButtonDisabled(true); const { git: gitText } = event.currentTarget.elements; const git = gitText.value; @@ -304,7 +307,7 @@ export function IOCDeployDialog({ color="primary" variant="contained" type="submit" - disabled={!host || !gitVersion} + disabled={!host || !gitVersion || buttonDisabled} > Deploy </Button> diff --git a/src/components/IOC/IOCDetailAdmin/IOCDetailAdmin.js b/src/components/IOC/IOCDetailAdmin/IOCDetailAdmin.js index b2f37986..10381612 100644 --- a/src/components/IOC/IOCDetailAdmin/IOCDetailAdmin.js +++ b/src/components/IOC/IOCDetailAdmin/IOCDetailAdmin.js @@ -18,7 +18,8 @@ export default function IOCDetailAdmin({ ioc, getIOC, resetTab, - buttonDisabled + buttonDisabled, + setButtonDisabled }) { const [gitId, setGitId] = useState(ioc.gitProjectId); @@ -65,9 +66,10 @@ export default function IOCDetailAdmin({ useEffect(() => { if (updateError) { + setButtonDisabled(false); setError(updateError?.message); } - }, [updateError, setError]); + }, [updateError, setError, setButtonDisabled]); const requiredDataMissing = useCallback(() => !gitId || !name, [gitId, name]); @@ -104,6 +106,7 @@ export default function IOCDetailAdmin({ }, [setOpen]); const onConfirm = useCallback(() => { + setButtonDisabled(true); actionUpdateIoc( { ioc_id: ioc?.id }, { @@ -113,14 +116,15 @@ export default function IOCDetailAdmin({ } } ); - }, [actionUpdateIoc, ioc, name, gitId]); + }, [actionUpdateIoc, ioc, name, gitId, setButtonDisabled]); useEffect(() => { if (uioc) { getIOC(); resetTab(); + setButtonDisabled(false); } - }, [uioc, getIOC, resetTab]); + }, [uioc, getIOC, resetTab, setButtonDisabled]); const iocIsDeployed = Boolean(ioc.activeDeployment); diff --git a/src/components/IOC/IOCManage/IOCManage.js b/src/components/IOC/IOCManage/IOCManage.js index 0c02f871..8ee610da 100644 --- a/src/components/IOC/IOCManage/IOCManage.js +++ b/src/components/IOC/IOCManage/IOCManage.js @@ -227,11 +227,15 @@ export function IOCManage({ init={formInit} iocId={ioc.id} hasActiveDeployment={Boolean(ioc.activeDeployment)} + buttonDisabled={buttonDisabled} + setButtonDisabled={setButtonDisabled} /> <UndeployIOC open={undeployDialogOpen} setOpen={setUndeployDialogOpen} submitCallback={closeUndeployModal} + buttonDisabled={buttonDisabled} + setButtonDisabled={setButtonDisabled} ioc={ioc} /> </AccessControl> diff --git a/src/components/IOC/IOCUndeployDialog/IOCUndeployDialog.js b/src/components/IOC/IOCUndeployDialog/IOCUndeployDialog.js index ddacda21..34c31e65 100644 --- a/src/components/IOC/IOCUndeployDialog/IOCUndeployDialog.js +++ b/src/components/IOC/IOCUndeployDialog/IOCUndeployDialog.js @@ -14,7 +14,9 @@ export function IOCUndeployDialog({ setOpen, submitCallback, ioc, - error + error, + buttonDisabled, + setButtonDisabled }) { const handleClose = () => { setOpen(false); @@ -22,6 +24,7 @@ export function IOCUndeployDialog({ const onSubmit = (event) => { event.preventDefault(); + setButtonDisabled(true); submitCallback({ ioc_id: ioc.id @@ -60,6 +63,7 @@ export function IOCUndeployDialog({ color="primary" variant="contained" type="submit" + disabled={buttonDisabled} > Undeploy </Button> diff --git a/src/components/IOC/UndeployIOC/UndeployIOC.js b/src/components/IOC/UndeployIOC/UndeployIOC.js index a098bc57..26c9920c 100644 --- a/src/components/IOC/UndeployIOC/UndeployIOC.js +++ b/src/components/IOC/UndeployIOC/UndeployIOC.js @@ -6,7 +6,14 @@ import { apiContext } from "../../../api/DeployApi"; import { useAPIMethod } from "@ess-ics/ce-ui-common"; // Process component -export function UndeployIOC({ open, setOpen, submitCallback, ioc }) { +export function UndeployIOC({ + open, + setOpen, + submitCallback, + ioc, + buttonDisabled, + setButtonDisabled +}) { const [error, setError] = useState(); const client = useContext(apiContext); const { @@ -20,9 +27,10 @@ export function UndeployIOC({ open, setOpen, submitCallback, ioc }) { useEffect(() => { if (deploymentError) { + setButtonDisabled(false); setError(deploymentError?.message); } - }, [deploymentError]); + }, [deploymentError, setButtonDisabled]); const { watchDeployment } = useContext(notificationContext); @@ -34,6 +42,8 @@ export function UndeployIOC({ open, setOpen, submitCallback, ioc }) { submitCallback={action} ioc={ioc} error={error} + buttonDisabled={buttonDisabled} + setButtonDisabled={setButtonDisabled} /> ); } else { diff --git a/src/views/IOC/IOCDetailsView.js b/src/views/IOC/IOCDetailsView.js index 32839522..d7b396ea 100644 --- a/src/views/IOC/IOCDetailsView.js +++ b/src/views/IOC/IOCDetailsView.js @@ -230,6 +230,7 @@ export function IOCDetailsView({ ioc, getIOC, abortGetIOC, loading }) { getIOC={getIOC} resetTab={resetTab} buttonDisabled={buttonDisabled} + setButtonDisabled={setButtonDisabled} /> ) }); -- GitLab