diff --git a/.changeset/five-gorillas-pay.md b/.changeset/five-gorillas-pay.md new file mode 100644 index 0000000000..c5cd18a186 --- /dev/null +++ b/.changeset/five-gorillas-pay.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Create a separate route for the custom fields explorer so we refresh it without being redirected to scaffolder edit page. diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index b0af10a55b..81cf0ecced 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -613,6 +613,7 @@ export const scaffolderPlugin: BackstagePlugin< listTasks: SubRouteRef; edit: SubRouteRef; editor: SubRouteRef; + customFields: SubRouteRef; }, { registerComponent: ExternalRouteRef; diff --git a/plugins/scaffolder/src/components/Router/Router.tsx b/plugins/scaffolder/src/components/Router/Router.tsx index f06b0bcd39..27c2eede70 100644 --- a/plugins/scaffolder/src/components/Router/Router.tsx +++ b/plugins/scaffolder/src/components/Router/Router.tsx @@ -35,6 +35,7 @@ import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; import { actionsRouteRef, editorRouteRef, + customFieldsRouteRef, editRouteRef, scaffolderListTaskRouteRef, scaffolderTaskRouteRef, @@ -51,8 +52,11 @@ import { } from '@backstage/plugin-scaffolder/alpha'; import { TemplateListPage, TemplateWizardPage } from '../../next'; import { OngoingTask } from '../OngoingTask'; -import { TemplateEditorPage } from '../../next/TemplateEditorPage'; -import { TemplatePage } from '../../next/TemplateEditorPage/TemplatePage'; +import { + TemplatePage, + TemplateEditorPage, + CustomFieldsPage, +} from '../../next/TemplateEditorPage'; /** * The Props for the Scaffolder Router @@ -173,6 +177,14 @@ export const Router = (props: PropsWithChildren) => { } /> + + + + } + /> } /> []; +} + +export function CustomFieldsPage(props: CustomFieldsPageProps) { + const navigate = useNavigate(); + const editLink = useRouteRef(editRouteRef); + const { t } = useTranslationRef(scaffolderTranslationRef); + + const handleClose = useCallback(() => { + navigate(editLink()); + }, [navigate, editLink]); + + return ( + +
+ + + + + ); +} diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx index 19eb1d6453..b4a62b5797 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx +++ b/plugins/scaffolder/src/next/TemplateEditorPage/TemplateEditorPage.tsx @@ -19,7 +19,6 @@ import { TemplateDirectoryAccess, WebFileSystemAccess, } from '../../lib/filesystem'; -import { CustomFieldExplorer } from './CustomFieldExplorer'; import { TemplateFormPreviewer } from './TemplateFormPreviewer'; import { FieldExtensionOptions, @@ -33,6 +32,7 @@ import { useRouteRef } from '@backstage/core-plugin-api'; import { actionsRouteRef, editorRouteRef, + customFieldsRouteRef, rootRouteRef, scaffolderListTaskRouteRef, } from '../../routes'; @@ -70,6 +70,7 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { const tasksLink = useRouteRef(scaffolderListTaskRouteRef); const createLink = useRouteRef(rootRouteRef); const editorLink = useRouteRef(editorRouteRef); + const customFieldsLink = useRouteRef(customFieldsRouteRef); const { t } = useTranslationRef(scaffolderTranslationRef); const scaffolderPageContextMenuProps = { @@ -90,13 +91,6 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { formProps={props.formProps} /> ); - } else if (selection?.type === 'field-explorer') { - content = ( - setSelection(undefined)} - /> - ); } else { content = ( @@ -119,7 +113,7 @@ export function TemplateEditorPage(props: TemplateEditorPageProps) { } else if (option === 'form') { setSelection({ type: 'form' }); } else if (option === 'field-explorer') { - setSelection({ type: 'field-explorer' }); + navigate(customFieldsLink()); } }} /> diff --git a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts b/plugins/scaffolder/src/next/TemplateEditorPage/index.ts index b7beab4896..45e85f8a83 100644 --- a/plugins/scaffolder/src/next/TemplateEditorPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateEditorPage/index.ts @@ -16,6 +16,7 @@ export { TemplatePage } from './TemplatePage'; export { TemplateEditorPage } from './TemplateEditorPage'; +export { CustomFieldsPage } from './CustomFieldsPage'; export type { ScaffolderCustomFieldExplorerClassKey } from './CustomFieldExplorer'; export type { ScaffolderTemplateEditorClassKey } from './TemplateEditor'; export type { ScaffolderTemplateFormPreviewerClassKey } from './TemplateFormPreviewer'; diff --git a/plugins/scaffolder/src/plugin.tsx b/plugins/scaffolder/src/plugin.tsx index 6892cf7e43..bf4d3a41ac 100644 --- a/plugins/scaffolder/src/plugin.tsx +++ b/plugins/scaffolder/src/plugin.tsx @@ -69,6 +69,7 @@ import { actionsRouteRef, editRouteRef, editorRouteRef, + customFieldsRouteRef, } from './routes'; import { MyGroupsPicker, @@ -109,6 +110,7 @@ export const scaffolderPlugin = createPlugin({ listTasks: scaffolderListTaskRouteRef, edit: editRouteRef, editor: editorRouteRef, + customFields: customFieldsRouteRef, }, externalRoutes: { registerComponent: registerComponentRouteRef, diff --git a/plugins/scaffolder/src/routes.ts b/plugins/scaffolder/src/routes.ts index f47d2bdab8..3bd4435078 100644 --- a/plugins/scaffolder/src/routes.ts +++ b/plugins/scaffolder/src/routes.ts @@ -84,3 +84,9 @@ export const editorRouteRef = createSubRouteRef({ parent: rootRouteRef, path: '/template', }); + +export const customFieldsRouteRef = createSubRouteRef({ + id: 'scaffolder/edit', + parent: rootRouteRef, + path: '/custom-fields', +});