diff --git a/ee/app/assets/javascripts/workspaces/user/components/workspaces_breadcrumbs.vue b/ee/app/assets/javascripts/workspaces/user/components/workspaces_breadcrumbs.vue index 4638b22a6caa17aaf2afb2e8f258c5e282f8050a..b4621177640ee7df96ed6446b3cb43e0fc981ccf 100644 --- a/ee/app/assets/javascripts/workspaces/user/components/workspaces_breadcrumbs.vue +++ b/ee/app/assets/javascripts/workspaces/user/components/workspaces_breadcrumbs.vue @@ -12,6 +12,13 @@ export default { components: { GlBreadcrumb, }, + props: { + staticBreadcrumbs: { + type: Object, + default: () => ({ items: [] }), + required: false, + }, + }, computed: { crumbs() { const crumbs = [ @@ -28,7 +35,9 @@ export default { }); } - return crumbs; + const staticCrumbs = this.staticBreadcrumbs.items; + + return [...staticCrumbs, ...crumbs]; }, }, }; diff --git a/ee/app/assets/javascripts/workspaces/user/init_user_workspaces_app.js b/ee/app/assets/javascripts/workspaces/user/init_user_workspaces_app.js index 9443ab2258883baf693975f2c1d4a0c8e80a2119..1cdc1301343cf6c54fee0df520889a7326325cf3 100644 --- a/ee/app/assets/javascripts/workspaces/user/init_user_workspaces_app.js +++ b/ee/app/assets/javascripts/workspaces/user/init_user_workspaces_app.js @@ -31,7 +31,16 @@ const initUserWorkspacesApp = () => { const router = createRouter({ base: workspacesListPath, }); - injectVueAppBreadcrumbs(router, WorkspacesBreadcrumbs); + injectVueAppBreadcrumbs( + router, + WorkspacesBreadcrumbs, + null, + {}, + { + // cf. https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186906 + singleNavOptIn: true, + }, + ); return new Vue({ el, name: 'WorkspacesRoot', diff --git a/ee/spec/frontend/workspaces/user/components/workspaces_breadcrumbs_spec.js b/ee/spec/frontend/workspaces/user/components/workspaces_breadcrumbs_spec.js index 93e61ba43eb6094ec26aeaa977c896bd5bbe6501..fa2d93ae02e74a64e666e46719fa67a88e121086 100644 --- a/ee/spec/frontend/workspaces/user/components/workspaces_breadcrumbs_spec.js +++ b/ee/spec/frontend/workspaces/user/components/workspaces_breadcrumbs_spec.js @@ -21,12 +21,12 @@ describe('workspaces/user/components/workspaces_breadcrumbs', () => { const findBreadcrumbs = () => wrapper.findComponent(GlBreadcrumb); - const createWrapper = () => { + const createWrapper = (props = {}) => { // noinspection JSCheckFunctionSignatures - TODO: Address in https://gitlab.com/gitlab-org/gitlab/-/issues/437600 router = createRouter(base); // noinspection JSValidateTypes - TODO: Address in https://gitlab.com/gitlab-org/gitlab/-/issues/437600 - wrapper = shallowMount(WorkspacesBreadcrumbs, { router }); + wrapper = shallowMount(WorkspacesBreadcrumbs, { router, propsData: props }); }; describe('when mounted', () => { @@ -79,5 +79,14 @@ describe('workspaces/user/components/workspaces_breadcrumbs', () => { it('should disable auto-resize behavior', () => { expect(findBreadcrumbs().props('autoResize')).toEqual(false); }); + + it('should render static breadcrumbs', () => { + const staticBreadcrumb = { text: 'Static', href: '/static' }; + + createWrapper({ + staticBreadcrumbs: { items: [staticBreadcrumb] }, + }); + expect(findBreadcrumbs().props('items')).toStrictEqual([staticBreadcrumb, rootBreadcrumb]); + }); }); }); diff --git a/ee/spec/frontend/workspaces/user/init_user_workspaces_app_spec.js b/ee/spec/frontend/workspaces/user/init_user_workspaces_app_spec.js index 4a9508cb7ad37a074ad1c66e1dfd884aeacb1d7a..842373a05fed80bbee59dd2643c52d23760c0b32 100644 --- a/ee/spec/frontend/workspaces/user/init_user_workspaces_app_spec.js +++ b/ee/spec/frontend/workspaces/user/init_user_workspaces_app_spec.js @@ -47,6 +47,12 @@ describe('ee/workspaces/init_user_workspaces_app', () => { expect(injectVueAppBreadcrumbs).toHaveBeenCalledWith( expect.any(Object), WorkspacesBreadcrumbs, + null, + {}, + { + // cf. https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186906 + singleNavOptIn: true, + }, ); }); });