diff --git a/content/mos-diner/index.md b/content/mos-diner/index.md index f43cdc8b5148..61488b6f8b13 100644 --- a/content/mos-diner/index.md +++ b/content/mos-diner/index.md @@ -10,6 +10,7 @@ versions: contentType: landing layout: bespoke-landing heroTheme: mos-diner +hideSidebar: true children: - /content/copilot/how-tos/copilot-on-github/copilot-for-github-tasks/use-copilot-to-create-or-update-issues - /content/copilot/tutorials/copilot-cookbook/communicate-effectively/summarize-repository-activity diff --git a/src/fixtures/fixtures/content/get-started/sidebar-test/hidden-sidebar.md b/src/fixtures/fixtures/content/get-started/sidebar-test/hidden-sidebar.md new file mode 100644 index 000000000000..01b80569e3a2 --- /dev/null +++ b/src/fixtures/fixtures/content/get-started/sidebar-test/hidden-sidebar.md @@ -0,0 +1,11 @@ +--- +title: Hidden Sidebar Page +intro: 'Test page for the hideSidebar frontmatter' +versions: + fpt: '*' + ghes: '*' + ghec: '*' +hideSidebar: true +--- + +This page renders without the doc-tree sidebar. diff --git a/src/fixtures/fixtures/content/get-started/sidebar-test/index.md b/src/fixtures/fixtures/content/get-started/sidebar-test/index.md index a8e24ea5071b..068b76be9a18 100644 --- a/src/fixtures/fixtures/content/get-started/sidebar-test/index.md +++ b/src/fixtures/fixtures/content/get-started/sidebar-test/index.md @@ -10,6 +10,7 @@ sidebarLink: href: /get-started/sidebar-test children: - /test-child + - /hidden-sidebar --- This is a test page for the sidebar custom link functionality. diff --git a/src/fixtures/tests/sidebar.ts b/src/fixtures/tests/sidebar.ts index 2b2ae2ed4769..18b1325dff23 100644 --- a/src/fixtures/tests/sidebar.ts +++ b/src/fixtures/tests/sidebar.ts @@ -14,6 +14,14 @@ describe('sidebar', () => { expect($('[data-testid="sidebar-mobile-toggle"]').length).toBe(1) }) + test('hideSidebar frontmatter drops the sidebar and its toggles', async () => { + const $: CheerioAPI = await getDOM('/get-started/sidebar-test/hidden-sidebar') + expect($('[data-container="nav"]').length).toBe(0) + expect($('[data-testid="sidebar-collapse-toggle"]').length).toBe(0) + expect($('[data-testid="sidebar-mobile-toggle"]').length).toBe(0) + expect($('[data-testid="docs-secondary-bar"]').length).toBe(1) + }) + test('REST pages get the REST sidebar', async () => { const $: CheerioAPI = await getDOM('/rest') expect($('[data-testid=rest-sidebar-reference]').length).toBe(1) diff --git a/src/frame/components/DefaultLayout.tsx b/src/frame/components/DefaultLayout.tsx index 8cff2d7ac51c..39e0ba86b087 100644 --- a/src/frame/components/DefaultLayout.tsx +++ b/src/frame/components/DefaultLayout.tsx @@ -276,13 +276,14 @@ type LayoutBodyProps = { } const LayoutBody = ({ children, hasDrawer }: LayoutBodyProps) => { const { collapsed, mobileNavOpen } = useSidebarCollapsed() - const { currentProduct } = useMainContext() + const { currentProduct, page } = useMainContext() const isSearchResultsPage = currentProduct?.id === 'search' + const hideSidebar = page?.hideSidebar && !isSearchResultsPage const miniTocItems = useMiniTocItems() const hasSubBar = miniTocItems.length > 1 return (
- {collapsed && !mobileNavOpen && !isSearchResultsPage ? null : ( + {hideSidebar || (collapsed && !mobileNavOpen && !isSearchResultsPage) ? null : ( )}
{ hasSubBar && hasDrawer && (collapsed ? styles.stickyStackYieldsWhenCollapsed : styles.stickyStackYieldsAtXxl), - mobileNavOpen && styles.contentHiddenForNav, + mobileNavOpen && !hideSidebar && styles.contentHiddenForNav, )} >
diff --git a/src/frame/components/context/MainContext.tsx b/src/frame/components/context/MainContext.tsx index 67487ab94507..3b5f0f439988 100644 --- a/src/frame/components/context/MainContext.tsx +++ b/src/frame/components/context/MainContext.tsx @@ -120,6 +120,7 @@ export type MainContextT = { introPlainText?: string hidden: boolean noEarlyAccessBanner: boolean + hideSidebar: boolean applicableVersions: string[] docsTeamMetrics: string[] | null } | null @@ -228,6 +229,7 @@ export const getMainContext = async ( applicableVersions: page.permalinks.map((obj: Permalink) => obj.pageVersion), hidden: page.hidden || false, noEarlyAccessBanner: page.noEarlyAccessBanner || false, + hideSidebar: page.hideSidebar || false, docsTeamMetrics: page.docsTeamMetrics || null, }) || null diff --git a/src/frame/components/page-header/DocsSecondaryBar.tsx b/src/frame/components/page-header/DocsSecondaryBar.tsx index 71b7257083c2..3de0faff4dc7 100644 --- a/src/frame/components/page-header/DocsSecondaryBar.tsx +++ b/src/frame/components/page-header/DocsSecondaryBar.tsx @@ -24,7 +24,7 @@ import styles from './DocsSecondaryBar.module.scss' // the unversioned route matches router.route === '/search'. export const DocsSecondaryBar = () => { const router = useRouter() - const { isHomepageVersion, currentProduct } = useMainContext() + const { isHomepageVersion, currentProduct, page } = useMainContext() const { t } = useTranslation('header') const { collapsed, toggleCollapsed, mobileNavOpen, toggleMobileNav } = useSidebarCollapsed() @@ -40,7 +40,7 @@ export const DocsSecondaryBar = () => { <>
- {!isEarlyAccessPage && ( + {!isEarlyAccessPage && !page?.hideSidebar && (