diff --git a/spin-observatory-plugin-deck/src/components/actions/PauseResumeButton.tsx b/spin-observatory-plugin-deck/src/components/actions/PauseResumeButton.tsx index 1e8af66..ec571df 100644 --- a/spin-observatory-plugin-deck/src/components/actions/PauseResumeButton.tsx +++ b/spin-observatory-plugin-deck/src/components/actions/PauseResumeButton.tsx @@ -12,6 +12,7 @@ import React, { Fragment, useRef, useState } from 'react'; import { pauseExecutions, resumeExecutions } from '../../services/gateService'; interface IPauseResumeButtonProps { + disabled: boolean; executionIds: string[]; refreshExecutions: () => void; } @@ -21,7 +22,7 @@ const options = [ { text: 'Resume', action: resumeExecutions }, ]; -export const PauseResumeButton = ({ executionIds, refreshExecutions }: IPauseResumeButtonProps) => { +export const PauseResumeButton = ({ disabled, executionIds, refreshExecutions }: IPauseResumeButtonProps) => { const [open, setOpen] = useState(false); const anchorRef = useRef(null); const [selectedIndex, setSelectedIndex] = useState(0); @@ -50,7 +51,7 @@ export const PauseResumeButton = ({ executionIds, refreshExecutions }: IPauseRes const handleHover = () => setHover((prevHover) => !prevHover); - const isHovered = hover && executionIds.length > 0; + const isHovered = hover && !disabled; return ( @@ -59,7 +60,7 @@ export const PauseResumeButton = ({ executionIds, refreshExecutions }: IPauseRes onMouseLeave={handleHover} variant="contained" ref={anchorRef} - disabled={executionIds.length === 0} + disabled={disabled} > ; +import { Button } from '@material-ui/core'; +import React, { useState } from 'react'; + +import type { IExecution } from '@spinnaker/core'; + +import { retriggerExecutions } from '../../services/BroadsideService'; + +interface IRetriggerButtonProps { + disabled: boolean; + executions: IExecution[]; + refreshExecutions: () => void; +} + +export const RetriggerButton = ({ disabled, executions, refreshExecutions }: IRetriggerButtonProps) => { + const [retriggerInProgress, setRetriggerInProgress] = useState(false); + const [hover, setHover] = useState(false); + + const handleHover = () => setHover((prevHover) => !prevHover); + + const isHovered = hover && !disabled && !retriggerInProgress; + + const handleRetrigger = () => { + setRetriggerInProgress(true); + retriggerExecutions({ executions }) + .then((res) => { + // eslint-disable-next-line no-console + console.log('retriggered: ', res); + setRetriggerInProgress(false); + }) + .catch((e) => { + //TODO: surface this error + console.error('error retriggering: ', e); + }) + .finally(() => { + setRetriggerInProgress(false); + refreshExecutions(); + }); + }; + + return ( + + ); }; diff --git a/spin-observatory-plugin-deck/src/components/pipelines/ExecutionsTable.tsx b/spin-observatory-plugin-deck/src/components/pipelines/ExecutionsTable.tsx index c64f68a..3f5a238 100644 --- a/spin-observatory-plugin-deck/src/components/pipelines/ExecutionsTable.tsx +++ b/spin-observatory-plugin-deck/src/components/pipelines/ExecutionsTable.tsx @@ -36,7 +36,6 @@ interface IExecutionsTableProps { export const ExecutionsTable = ({ executions, parameters, refreshExecutions }: IExecutionsTableProps) => { const [selectedExecutionIds, setSelectedExecutionIds] = useState([]); - const [retriggerInProgress, setRetriggerInProgress] = useState(false); const [currentPage, setPage] = useState(0); const [rowsPerPage, setRowsPerPage] = useState(DEFAULT_ROWS_PER_PAGE); const styles = useStyles(); @@ -73,23 +72,6 @@ export const ExecutionsTable = ({ executions, parameters, refreshExecutions }: I setSelectedExecutionIds(newSelected); }; - const handleRetrigger = () => { - setRetriggerInProgress(true); - // retriggerExecutions({ executions: selectedExecutions }) - // .then((res) => { - // // eslint-disable-next-line no-console - // console.log('retriggered: ', res); - // setRetriggerInProgress(false); - // }) - // .catch((e) => { - // //TODO: surface this error - // console.error('error retriggering: ', e); - // }) - // .finally(() => { - // setRetriggerInProgress(false); - // }); - }; - const isSelected = (name: string) => selectedExecutionIds.indexOf(name) !== -1; return ( @@ -116,8 +98,16 @@ export const ExecutionsTable = ({ executions, parameters, refreshExecutions }: I - - + + selectedExecutionIds.includes(e.id))} + refreshExecutions={refreshExecutions} + /> => { +export const retriggerExecutions = ({ executions }: { executions: IExecution[] }) => { /*** - * application: "clipper" + * application: "clipper" * pipelineNameOrId: "Generate Clipper X.509 Key Pair" * amount: 50 * delay: 100 @@ -15,13 +15,11 @@ export const retriggerExecutions = ({ executions }: { executions: IExecution[] } */ // eslint-disable-next-line no-console console.log({ executions }); - return Promise.all( - executions.map(async (execution) => { - return await REST(BROADSIDE_URI).post({ - application: execution.application, - pipelineNameOrId: execution.pipelineConfigId, - pipelineBaseParameters: execution.trigger.parameters, - }); - }), - ); + + const application = executions[0].application; + const pipelineNameOrId = executions[0].name; + const amount = executions.length; + const pipelineMultiParameters = executions.map((e) => e.trigger.parameters); + + return REST(BROADSIDE_URI).post({ application, pipelineNameOrId, amount, pipelineMultiParameters }); };