44 lines
1001 B
TypeScript
44 lines
1001 B
TypeScript
/**
|
|
* External dependencies
|
|
*/
|
|
import { useEffect, useLayoutEffect, useState } from '@wordpress/element';
|
|
|
|
export const useHeaderHeight = () => {
|
|
const [ headerHeight, setHeaderHeight ] = useState( 60 );
|
|
const [ adminBarHeight, setAdminBarHeight ] = useState( 32 );
|
|
|
|
useEffect( () => {
|
|
const wpbody = document.querySelector( '#wpbody' ) as Node;
|
|
const observer = new MutationObserver( () => {
|
|
setHeaderHeight(
|
|
parseInt( ( wpbody as HTMLElement ).style.marginTop, 10 )
|
|
);
|
|
} );
|
|
observer.observe( wpbody, {
|
|
attributes: true,
|
|
} );
|
|
|
|
return () => {
|
|
observer.disconnect();
|
|
};
|
|
}, [] );
|
|
|
|
useLayoutEffect( () => {
|
|
const handleResize = () => {
|
|
const adminBar = document.querySelector(
|
|
'#wpadminbar'
|
|
) as HTMLElement;
|
|
setAdminBarHeight( adminBar.clientHeight );
|
|
};
|
|
window.addEventListener( 'resize', handleResize );
|
|
return () => {
|
|
window.removeEventListener( 'resize', handleResize );
|
|
};
|
|
}, [] );
|
|
|
|
return {
|
|
adminBarHeight,
|
|
headerHeight,
|
|
};
|
|
};
|