diff --git a/.changeset/gold-queens-clap.md b/.changeset/gold-queens-clap.md new file mode 100644 index 0000000000..252fbb1626 --- /dev/null +++ b/.changeset/gold-queens-clap.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Fix an issue where changes related to the `MobileSidebar` prevented scrolling pages. Additionally improve the menu of the `MobileSidebar` to not overlay the `BottomNavigation`. diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index 6046113dd2..88e7f4efab 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -739,7 +739,7 @@ export type OverflowTooltipClassKey = 'container'; // Warning: (ae-missing-release-tag) "Page" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export function Page(props: PropsWithChildren): JSX.Element; +export function Page(props: Props_16): JSX.Element; // Warning: (ae-missing-release-tag) "PageClassKey" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/packages/core-components/src/layout/Page/Page.tsx b/packages/core-components/src/layout/Page/Page.tsx index b013affee3..0b35a59d8f 100644 --- a/packages/core-components/src/layout/Page/Page.tsx +++ b/packages/core-components/src/layout/Page/Page.tsx @@ -14,34 +14,37 @@ * limitations under the License. */ -import React, { PropsWithChildren } from 'react'; +import React, { useContext } from 'react'; import { BackstageTheme } from '@backstage/theme'; import { makeStyles, ThemeProvider } from '@material-ui/core/styles'; +import { SidebarPinStateContext } from '../Sidebar/Page'; export type PageClassKey = 'root'; -const useStyles = makeStyles( +const useStyles = makeStyles( () => ({ - root: { + root: ({ isMobile }) => ({ display: 'grid', gridTemplateAreas: "'pageHeader pageHeader pageHeader' 'pageSubheader pageSubheader pageSubheader' 'pageNav pageContent pageSidebar'", gridTemplateRows: 'max-content auto 1fr', gridTemplateColumns: 'auto 1fr auto', - height: '100%', + height: isMobile ? '100%' : '100vh', overflowY: 'auto', - }, + }), }), { name: 'BackstagePage' }, ); type Props = { themeId: string; + children?: React.ReactNode; }; -export function Page(props: PropsWithChildren) { +export function Page(props: Props) { const { themeId, children } = props; - const classes = useStyles(); + const { isMobile } = useContext(SidebarPinStateContext); + const classes = useStyles({ isMobile }); return ( ({ diff --git a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx index 95947f9274..6734d4b53a 100644 --- a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx +++ b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx @@ -93,6 +93,10 @@ const useStyles = makeStyles(theme => ({ overlayHeaderClose: { color: theme.palette.bursts.fontColor, }, + + marginMobileSidebar: { + marginBottom: `${sidebarConfig.mobileSidebarHeight}px`, + }, })); const sortSidebarGroupsForPriority = (children: React.ReactElement[]) => @@ -117,7 +121,13 @@ const OverlayMenu = ({ anchor="bottom" open={open} onClose={onClose} - classes={{ paperAnchorBottom: classes.overlay }} + ModalProps={{ + BackdropProps: { classes: { root: classes.marginMobileSidebar } }, + }} + classes={{ + root: classes.marginMobileSidebar, + paperAnchorBottom: classes.overlay, + }} > {label}