diff --git a/.changeset/ten-hats-appear.md b/.changeset/ten-hats-appear.md new file mode 100644 index 0000000000..318bbfbb25 --- /dev/null +++ b/.changeset/ten-hats-appear.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': minor +'@backstage/plugin-scaffolder': minor +--- + +Fix `contextMenu` not being disabled bug in new scaffolder pages diff --git a/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx index 721e53f6e6..38d83ae6fd 100644 --- a/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx +++ b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx @@ -66,7 +66,12 @@ export function ScaffolderPageContextMenu( permission: templateManagementPermission, }); - if (!onEditorClicked && !onActionsClicked) { + if ( + !onEditorClicked && + !onActionsClicked && + !onTasksClicked && + !onCreateClicked + ) { return null; } diff --git a/plugins/scaffolder/report.api.md b/plugins/scaffolder/report.api.md index 8a1d3db179..538b2cd9eb 100644 --- a/plugins/scaffolder/report.api.md +++ b/plugins/scaffolder/report.api.md @@ -499,6 +499,7 @@ export type RouterProps = { editor?: boolean; actions?: boolean; tasks?: boolean; + create?: boolean; }; }; diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx index 539a5697d3..f85c1f0e6b 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx @@ -407,7 +407,16 @@ export const ActionPageContent = () => { ); }; -export const ActionsPage = () => { + +export type ActionsPageProps = { + contextMenu?: { + editor?: boolean; + tasks?: boolean; + create?: boolean; + }; +}; + +export const ActionsPage = (props: ActionsPageProps) => { const navigate = useNavigate(); const editorLink = useRouteRef(editRouteRef); const tasksLink = useRouteRef(scaffolderListTaskRouteRef); @@ -415,10 +424,19 @@ export const ActionsPage = () => { const { t } = useTranslationRef(scaffolderTranslationRef); const scaffolderPageContextMenuProps = { - onEditorClicked: () => navigate(editorLink()), + onEditorClicked: + props?.contextMenu?.editor !== false + ? () => navigate(editorLink()) + : undefined, onActionsClicked: undefined, - onTasksClicked: () => navigate(tasksLink()), - onCreateClicked: () => navigate(createLink()), + onTasksClicked: + props?.contextMenu?.tasks !== false + ? () => navigate(tasksLink()) + : undefined, + onCreateClicked: + props?.contextMenu?.create !== false + ? () => navigate(createLink()) + : undefined, }; return ( diff --git a/plugins/scaffolder/src/components/ListTasksPage/ListTasksPage.tsx b/plugins/scaffolder/src/components/ListTasksPage/ListTasksPage.tsx index b07d7c7fd3..26c8d8c36f 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/ListTasksPage.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/ListTasksPage.tsx @@ -46,6 +46,11 @@ import { scaffolderTranslationRef } from '../../translation'; export interface MyTaskPageProps { initiallySelectedFilter?: 'owned' | 'all'; + contextMenu?: { + editor?: boolean; + actions?: boolean; + create?: boolean; + }; } const ListTaskPageContent = (props: MyTaskPageProps) => { @@ -161,10 +166,19 @@ export const ListTasksPage = (props: MyTaskPageProps) => { const { t } = useTranslationRef(scaffolderTranslationRef); const scaffolderPageContextMenuProps = { - onEditorClicked: () => navigate(editorLink()), - onActionsClicked: () => navigate(actionsLink()), + onEditorClicked: + props?.contextMenu?.editor !== false + ? () => navigate(editorLink()) + : undefined, + onActionsClicked: + props?.contextMenu?.actions !== false + ? () => navigate(actionsLink()) + : undefined, onTasksClicked: undefined, - onCreateClicked: () => navigate(createLink()), + onCreateClicked: + props?.contextMenu?.create !== false + ? () => navigate(createLink()) + : undefined, }; return ( diff --git a/plugins/scaffolder/src/components/Router/Router.tsx b/plugins/scaffolder/src/components/Router/Router.tsx index ce31d2f975..79684a694d 100644 --- a/plugins/scaffolder/src/components/Router/Router.tsx +++ b/plugins/scaffolder/src/components/Router/Router.tsx @@ -97,6 +97,8 @@ export type RouterProps = { actions?: boolean; /** Whether to show a link to the tasks page */ tasks?: boolean; + /** Whether to show a link to the create page (on /create subroutes) */ + create?: boolean; }; }; @@ -207,12 +209,15 @@ export const Router = (props: PropsWithChildren) => { } /> - } /> + } + /> - + } />