1717import Box from '@mui/material/Box' ;
1818import { useTheme } from '@mui/material/styles' ;
1919import useMediaQuery from '@mui/material/useMediaQuery' ;
20+ import { useCallback , useEffect , useRef } from 'react' ;
2021import { useTranslation } from 'react-i18next' ;
2122import { useDispatch } from 'react-redux' ;
2223import { setSelectedResource } from '../../../redux/drawerModeSlice' ;
@@ -32,16 +33,38 @@ export default function DetailsDrawer() {
3233 const isSmallScreen = useMediaQuery ( theme . breakpoints . down ( 'md' ) ) ;
3334 const isDetailDrawerEnabled = useTypedSelector ( state => state ?. drawerMode ?. isDetailDrawerEnabled ) ;
3435
35- function closeDrawer ( ) {
36+ const drawerRef = useRef < HTMLDivElement > ( null ) ;
37+
38+ const closeDrawer = useCallback ( ( ) => {
3639 dispatch ( setSelectedResource ( undefined ) ) ;
37- }
40+ } , [ dispatch ] ) ;
41+
42+ useEffect ( ( ) => {
43+ if ( selectedResource && ! isSmallScreen && isDetailDrawerEnabled && drawerRef . current ) {
44+ drawerRef . current . focus ( ) ;
45+ }
46+ } , [ selectedResource , isSmallScreen , isDetailDrawerEnabled ] ) ;
47+
48+ useEffect ( ( ) => {
49+ const mainElement = document . getElementById ( 'main' ) ;
50+ if ( ! mainElement ) return ;
51+
52+ if ( selectedResource && ! isSmallScreen && isDetailDrawerEnabled ) {
53+ mainElement . setAttribute ( 'inert' , '' ) ;
54+ return ( ) => {
55+ mainElement . removeAttribute ( 'inert' ) ;
56+ } ;
57+ }
58+ } , [ selectedResource , isSmallScreen , isDetailDrawerEnabled ] ) ;
3859
3960 if ( ! selectedResource || isSmallScreen || ! isDetailDrawerEnabled ) {
4061 return null ;
4162 }
4263
4364 return (
4465 < Box
66+ ref = { drawerRef }
67+ tabIndex = { - 1 }
4568 sx = { {
4669 position : 'absolute' ,
4770 backgroundColor : 'background.paper' ,
@@ -54,9 +77,13 @@ export default function DetailsDrawer() {
5477 zIndex : 1 ,
5578 border : '1px solid' ,
5679 borderColor : theme . palette . divider ,
80+ outline : 'none' ,
5781 } }
58- role = "complementary"
82+ role = "dialog"
83+ aria-label = { t ( 'Resource details' ) }
5984 aria-describedby = "resource-details-content"
85+ aria-modal = "true"
86+ data-details-drawer = "true"
6087 >
6188 < Box
6289 sx = { {
0 commit comments