diff --git a/packages/core-components/src/layout/LayoutProvider/LayoutProvider.tsx b/packages/core-components/src/layout/LayoutProvider/LayoutProvider.tsx index 53fc0aee59..1dcc91d817 100644 --- a/packages/core-components/src/layout/LayoutProvider/LayoutProvider.tsx +++ b/packages/core-components/src/layout/LayoutProvider/LayoutProvider.tsx @@ -17,6 +17,7 @@ import React, { createContext, PropsWithChildren, + useCallback, useContext, useRef, } from 'react'; @@ -50,9 +51,9 @@ export function LayoutProvider(props: PropsWithChildren<{}>) { export function useLayoutContent() { const { content } = useContext(LayoutContext); - const focusContent = () => { + const focusContent = useCallback(() => { content.contentRef?.current?.focus(); - }; + }, [content]); return { focusContent, contentRef: content.contentRef }; } diff --git a/packages/core-components/src/layout/Sidebar/Bar.tsx b/packages/core-components/src/layout/Sidebar/Bar.tsx index e134703f50..2243cfc10c 100644 --- a/packages/core-components/src/layout/Sidebar/Bar.tsx +++ b/packages/core-components/src/layout/Sidebar/Bar.tsx @@ -69,7 +69,7 @@ const useStyles = makeStyles( visuallyHidden: { top: 0, position: 'absolute', - zIndex: 2, + zIndex: 1000, transform: 'translateY(-200%)', '&:focus': { transform: 'translateY(5px)', @@ -176,13 +176,7 @@ const DesktopSidebar = (props: SidebarProps) => { return (
- + { ); }; + +function A11ySkipSidebar() { + const { focusContent, contentRef } = useLayoutContent(); + const classes = useStyles(); + + if (!contentRef?.current) { + return null; + } + return ( + + ); +} + function ignoreChildEvent(handlerFn: (e?: any) => void) { // TODO type the event return (event: any) => { diff --git a/packages/core-components/src/layout/index.ts b/packages/core-components/src/layout/index.ts index 9bb7fbaa26..06ee5d1d4c 100644 --- a/packages/core-components/src/layout/index.ts +++ b/packages/core-components/src/layout/index.ts @@ -31,3 +31,4 @@ export * from './Sidebar'; export * from './SignInPage'; export * from './TabbedCard'; export * from './Breadcrumbs'; +export * from './LayoutProvider';