Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / components / hooks / drawer / useDrawerWidth.ts
blob3c63e92afc9fcf1c4d2f01c7bb197a8e460e0196
1 import { useEffect, useState } from 'react';
3 import useDrawer from '@proton/components/hooks/drawer/useDrawer';
5 const useDrawerWidth = () => {
6     const [sidebarWidth, setSidebarWidth] = useState(0);
7     const [appWidth, setAppWidth] = useState(0);
8     const { showDrawerSidebar, drawerSidebarMounted, appInView } = useDrawer();
10     useEffect(() => {
11         if (!showDrawerSidebar || !drawerSidebarMounted) {
12             setSidebarWidth(0);
13             return;
14         }
15         const sidebarElement = window.document.querySelector('.drawer-sidebar');
17         if (!sidebarElement) {
18             return;
19         }
21         const sidebarResizeObserver = new ResizeObserver((entries) => {
22             setSidebarWidth(entries[0].contentRect.width);
23         });
25         // Only checks iframe root div widths changes (window resize or inner resize when column mailbox layout is set)
26         sidebarResizeObserver.observe(sidebarElement);
28         return () => {
29             sidebarResizeObserver.disconnect();
30         };
31     }, [showDrawerSidebar, drawerSidebarMounted]);
33     useEffect(() => {
34         if (!appInView) {
35             setAppWidth(0);
36         }
38         const appElement = window.document.querySelector('.drawer-app');
40         if (!appElement) {
41             return;
42         }
44         const appResizeObserver = new ResizeObserver((entries) => {
45             setAppWidth(entries[0].contentRect.width);
46         });
48         appResizeObserver.observe(appElement);
50         return () => {
51             appResizeObserver.disconnect();
52         };
53     }, [appInView]);
55     return appWidth + sidebarWidth;
58 export default useDrawerWidth;