chore: refactor, and move the execution

Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
blam
2024-11-19 12:44:47 +01:00
parent f217918b14
commit a8140e10aa
8 changed files with 109 additions and 69 deletions
@@ -120,11 +120,11 @@ export const Stepper = (stepperProps: StepperProps) => {
reviewButtonText = 'Review',
} = components;
const analytics = useAnalytics();
const { presentation, steps } = useTemplateSchema(props.manifest);
const apiHolder = useApiHolder();
const [activeStep, setActiveStep] = useState(0);
const [isValidating, setIsValidating] = useState(false);
const [initialState] = useFormDataFromQuery(props.initialState);
const { presentation, steps } = useTemplateSchema(props.manifest);
const [stepsState, setStepsState] =
useState<Record<string, JsonValue>>(initialState);
@@ -26,10 +26,7 @@ import { makeStyles } from '@material-ui/core/styles';
import { errorApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api';
import { useTemplateParameterSchema } from '../../hooks/useTemplateParameterSchema';
import { Stepper, type StepperProps } from '../Stepper/Stepper';
import {
SecretsContextProvider,
useInternalTemplateSecrets,
} from '../../../secrets/SecretsContext';
import { SecretsContextProvider } from '../../../secrets/SecretsContext';
import { useFilteredSchemaProperties } from '../../hooks/useFilteredSchemaProperties';
import { ReviewStepProps } from '@backstage/plugin-scaffolder-react';
import { useTemplateTimeSavedMinutes } from '../../hooks/useTemplateTimeSaved';
@@ -88,40 +85,9 @@ export const Workflow = (workflowProps: WorkflowProps): JSX.Element | null => {
const { loading, manifest, error } = useTemplateParameterSchema(templateRef);
const sortedManifest = useFilteredSchemaProperties(manifest);
const minutesSaved = useTemplateTimeSavedMinutes(templateRef);
const { setSecrets } = useInternalTemplateSecrets();
const formDecorators = useFormDecorators();
const workflowOnCreate = useCallback(
async (originalFormState: Record<string, JsonValue>) => {
let formState: Record<string, JsonValue> = { ...originalFormState };
if (manifest?.EXPERIMENTAL_formDecorators) {
// for each of the form decorators, go and call the decorator with the context
await Promise.all(
manifest.EXPERIMENTAL_formDecorators.map(async decorator => {
const formDecorator = formDecorators?.get(decorator.id);
if (!formDecorator) {
// eslint-disable-next-line no-console
console.error('Failed to find form decorator', decorator.id);
return;
}
await formDecorator.decorator({
setSecrets,
setFormState: (
handler: (
oldState: Record<string, JsonValue>,
) => Record<string, JsonValue>,
) => {
formState = { ...handler(formState) };
},
formState,
input: decorator.input ?? {},
});
}),
);
}
async (formState: Record<string, JsonValue>) => {
onCreate(formState);
const name =
@@ -130,15 +96,7 @@ export const Workflow = (workflowProps: WorkflowProps): JSX.Element | null => {
value: minutesSaved,
});
},
[
manifest?.EXPERIMENTAL_formDecorators,
formDecorators,
onCreate,
analytics,
templateName,
minutesSaved,
setSecrets,
],
[onCreate, analytics, templateName, minutesSaved],
);
useEffect(() => {
@@ -94,15 +94,3 @@ export const useTemplateSecrets = (): ScaffolderUseTemplateSecrets => {
return { setSecrets, secrets };
};
export const useInternalTemplateSecrets = () => {
const value = useContext(SecretsContext)?.atVersion(1);
if (!value) {
throw new Error(
'useTemplateSecrets must be used within a SecretsContextProvider',
);
}
return value;
};