diff --git a/.changeset/shiny-radios-deliver.md b/.changeset/shiny-radios-deliver.md new file mode 100644 index 0000000000..3a00a6acc0 --- /dev/null +++ b/.changeset/shiny-radios-deliver.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Encode the `formData` in the `queryString` using `JSON.stringify` to keep the types in the decoded value diff --git a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx index 4c28caad1b..2f49f40643 100644 --- a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx +++ b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx @@ -302,7 +302,9 @@ export const TaskPage = ({ loadingText }: TaskPageProps) => { navigate( generatePath( - `${rootLink()}/templates/:templateName?${qs.stringify({ formData })}`, + `${rootLink()}/templates/:templateName?${qs.stringify({ + formData: JSON.stringify(formData), + })}`, { templateName: taskStream.task!.spec.metadata!.name, }, diff --git a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx index 852ae3d81c..d30c292053 100644 --- a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx +++ b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx @@ -128,7 +128,11 @@ export const TemplatePage = ({ ignoreQueryPrefix: true, }); - return query.formData ?? {}; + try { + return JSON.parse(query.formData as string); + } catch (e) { + return query.formData ?? {}; + } }); const handleFormReset = () => setFormState({}); const handleChange = useCallback(