This commit is contained in:
Rogério Brito 2025-06-12 15:39:26 +02:00 committed by GitHub
commit a5b4eee506
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 41 additions and 3 deletions

View File

@ -360,12 +360,14 @@ export const DownloadExperimentButton = ({
interface EnableDisableCronButtonProps extends ActionButtonProps, Partial<RefetchExperiments> { interface EnableDisableCronButtonProps extends ActionButtonProps, Partial<RefetchExperiments> {
isCronEnabled: boolean; isCronEnabled: boolean;
setIsCronEnabled?: React.Dispatch<React.SetStateAction<boolean | undefined>>;
} }
export const EnableDisableCronButton = ({ export const EnableDisableCronButton = ({
experimentID, experimentID,
tooltipProps, tooltipProps,
isCronEnabled, isCronEnabled,
setIsCronEnabled,
refetchExperiments refetchExperiments
}: EnableDisableCronButtonProps): React.ReactElement => { }: EnableDisableCronButtonProps): React.ReactElement => {
const scope = getScope(); const scope = getScope();
@ -394,11 +396,13 @@ export const EnableDisableCronButton = ({
intent: Intent.WARNING, intent: Intent.WARNING,
onClose: (isConfirmed: boolean) => { onClose: (isConfirmed: boolean) => {
if (isConfirmed) { if (isConfirmed) {
const diable = isCronEnabled ? true : false;
setIsCronEnabled?.(!diable);
updateCronExperimentStateMutation({ updateCronExperimentStateMutation({
variables: { variables: {
projectID: scope.projectID, projectID: scope.projectID,
experimentID: experimentID, experimentID: experimentID,
disable: isCronEnabled ? true : false disable: diable
} }
}); });
} }

View File

@ -1,5 +1,5 @@
import React from 'react'; import React from 'react';
import { Container, Layout, Text } from '@harnessio/uicore'; import { Container, Layout, Text, useToaster } from '@harnessio/uicore';
import { Color, FontVariation } from '@harnessio/design-system'; import { Color, FontVariation } from '@harnessio/design-system';
import { Classes } from '@blueprintjs/core'; import { Classes } from '@blueprintjs/core';
import { useStrings } from '@strings'; import { useStrings } from '@strings';
@ -14,6 +14,9 @@ import {
} from '@components/ExperimentActionButtons'; } from '@components/ExperimentActionButtons';
import type { RefetchExperimentRuns, RefetchExperiments } from '@controllers/ExperimentDashboardV2'; import type { RefetchExperimentRuns, RefetchExperiments } from '@controllers/ExperimentDashboardV2';
import { ExperimentRunStatus, ExperimentType, InfrastructureType } from '@api/entities'; import { ExperimentRunStatus, ExperimentType, InfrastructureType } from '@api/entities';
import { listExperiment, ListExperimentResponse } from '@api/core';
import { getScope } from '@utils';
import { cronEnabled } from 'utils';
interface RightSideBarViewV2Props extends Partial<RefetchExperiments>, Partial<RefetchExperimentRuns> { interface RightSideBarViewV2Props extends Partial<RefetchExperiments>, Partial<RefetchExperimentRuns> {
experimentID: string; experimentID: string;
@ -23,6 +26,7 @@ interface RightSideBarViewV2Props extends Partial<RefetchExperiments>, Partial<R
phase: ExperimentRunStatus | undefined; phase: ExperimentRunStatus | undefined;
loading?: boolean; loading?: boolean;
isCronEnabled?: boolean; isCronEnabled?: boolean;
setIsCronEnabled?: React.Dispatch<React.SetStateAction<boolean | undefined>>;
isEditMode?: boolean; isEditMode?: boolean;
} }
@ -35,9 +39,36 @@ function RightSideBarV2({
loading, loading,
isEditMode, isEditMode,
isCronEnabled, isCronEnabled,
setIsCronEnabled,
refetchExperiments, refetchExperiments,
refetchExperimentRuns refetchExperimentRuns
}: RightSideBarViewV2Props): React.ReactElement { }: RightSideBarViewV2Props): React.ReactElement {
const { showError } = useToaster();
let experimentList: ListExperimentResponse | undefined;
if (experimentType === ExperimentType.CRON) {
const scope = getScope();
const { data: experimentListData } = listExperiment({
...scope,
experimentIDs: [experimentID],
options: {
onError: err => showError(err.message),
fetchPolicy: 'network-only'
}
});
experimentList = experimentListData;
}
React.useEffect(() => {
if (experimentList !== undefined) {
const experimentData = experimentList?.listExperiment.experiments.filter(
experiment => experiment.experimentID === experimentID
)[0];
const parsedManifest = JSON.parse(experimentData?.experimentManifest);
setIsCronEnabled?.(cronEnabled(parsedManifest));
}
}, [experimentList]);
const { getString } = useStrings(); const { getString } = useStrings();
const showStopButton = phase === ExperimentRunStatus.RUNNING || phase === ExperimentRunStatus.QUEUED; const showStopButton = phase === ExperimentRunStatus.RUNNING || phase === ExperimentRunStatus.QUEUED;
@ -61,6 +92,7 @@ function RightSideBarV2({
experimentID={experimentID} experimentID={experimentID}
refetchExperiments={refetchExperiments} refetchExperiments={refetchExperiments}
isCronEnabled={isCronEnabled} isCronEnabled={isCronEnabled}
setIsCronEnabled={setIsCronEnabled}
/> />
<Text <Text
style={{ textAlign: 'center' }} style={{ textAlign: 'center' }}

View File

@ -68,7 +68,8 @@ export default function ChaosStudioEditController(): React.ReactElement {
?.updateExperimentManifest(experimentID, parse(experimentData.experimentManifest)) ?.updateExperimentManifest(experimentID, parse(experimentData.experimentManifest))
.then(() => setShowStudio(oldState => oldState + 1)); .then(() => setShowStudio(oldState => oldState + 1));
setLastExperimentRun(experimentData.recentExperimentRunDetails?.[0]); setLastExperimentRun(experimentData.recentExperimentRunDetails?.[0]);
}
if (experimentData && showStudio < 2) {
const parsedManifest = JSON.parse(experimentData.experimentManifest); const parsedManifest = JSON.parse(experimentData.experimentManifest);
const validateCron = experimentData?.experimentType === ExperimentType.CRON && cronEnabled(parsedManifest); const validateCron = experimentData?.experimentType === ExperimentType.CRON && cronEnabled(parsedManifest);
setIsCronEnabled(validateCron); setIsCronEnabled(validateCron);
@ -89,6 +90,7 @@ export default function ChaosStudioEditController(): React.ReactElement {
<RightSideBarV2 <RightSideBarV2
experimentID={experimentID} experimentID={experimentID}
isCronEnabled={isCronEnabled} isCronEnabled={isCronEnabled}
setIsCronEnabled={setIsCronEnabled}
isEditMode isEditMode
phase={lastExperimentRun?.phase} phase={lastExperimentRun?.phase}
experimentType={experimentType as ExperimentType} experimentType={experimentType as ExperimentType}