Skip to content

Commit

Permalink
touch all task fields when workspaces are updated
Browse files Browse the repository at this point in the history
  • Loading branch information
rottencandy committed Jun 3, 2021
1 parent d8f563c commit 1d072a3
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
Expand Up @@ -14,7 +14,7 @@ import { EditorType } from '@console/shared/src/components/synced-editor/editor-
import { safeJSToYAML } from '@console/shared/src/utils/yaml';
import { PipelineKind, PipelineTask, TaskKind } from '../../../types';
import { PipelineModel } from '../../../models';
import { useFormikFetchAndSaveTasks } from './hooks';
import { useFormikFetchAndSaveTasks, useExplicitFormikTouch } from './hooks';
import { removeTaskModal } from './modals';
import PipelineBuilderHeader from './PipelineBuilderHeader';
import Sidebar from './task-sidebar/Sidebar';
Expand Down Expand Up @@ -60,6 +60,7 @@ const PipelineBuilderForm: React.FC<PipelineBuilderFormProps> = (props) => {
validateForm,
} = props;
useFormikFetchAndSaveTasks(namespace, validateForm);
useExplicitFormikTouch();

const statusRef = React.useRef(status);
statusRef.current = status;
Expand Down
@@ -1,7 +1,7 @@
import * as React from 'react';
import { useTranslation } from 'react-i18next';
import { getRandomChars } from '@console/shared';
import { useFormikContext } from 'formik';
import { useFormikContext, FormikTouched } from 'formik';
import { referenceForModel } from '@console/internal/module/k8s';
import { useK8sWatchResources } from '@console/internal/components/utils/k8s-watch-hook';
import { ClusterTaskModel, TaskModel } from '../../../models';
Expand Down Expand Up @@ -262,3 +262,29 @@ export const useNodes = (

return [...nodes, finallyNode];
};

const touchTaskFields = (task: PipelineTask): FormikTouched<PipelineTask> => ({
workspaces: task.workspaces?.map(() => ({ workspace: true })),
resources: {
inputs: task.resources?.inputs?.map(() => ({ resource: true })),
outputs: task.resources?.outputs?.map(() => ({ resource: true })),
},
});

export const useExplicitFormikTouch = () => {
const { setTouched, touched, values } = useFormikContext<PipelineBuilderFormikValues>();
const workspacesTouched = !!touched.formData?.workspaces;
const resourcesTouched = !!touched.formData?.resources;

React.useEffect(() => {
if (workspacesTouched || resourcesTouched) {
setTouched({
formData: {
tasks: values.formData?.tasks?.map(touchTaskFields),
finallyTasks: values.formData?.finallyTasks?.map(touchTaskFields),
},
});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [workspacesTouched, resourcesTouched]);
};

0 comments on commit 1d072a3

Please sign in to comment.