import { Plugins } from '@capacitor/core'; import classNames from 'classnames'; import { useEffect, useRef, useState } from 'react'; import { useDrag } from 'react-use-gesture'; const { DarkMode } = Plugins; const Menu = ({ open, onClose, children, className, ...props }) => { const ref = useRef(); const [x, setX] = useState(-100000); const [rect, setRect] = useState(null); const [dragging, setDragging] = useState(false); useEffect(async () => { try { let darkmodeConfig = await DarkMode.isDarkModeOn(); console.log({ open, darkMode: darkmodeConfig.isDarkModeOn }); Plugins.StatusBar.setStyle({ style: open && !darkmodeConfig.isDarkModeOn ? 'LIGHT' : 'DARK', }).catch(() => {}); } catch (e) {} }, [open]); useEffect(() => { const rect = ref.current?.getBoundingClientRect(); setRect(rect); setX(-rect.width); }, []); useEffect(() => { if (open) { setX(0); } else if (rect) { setX(-rect.width); } }, [rect, open]); const bind = useDrag( ({ down, movement: [mx] }) => { setX(mx > 0 ? 0 : mx); if (down) { setDragging(true); } else { setDragging(false); } // If the drag ended, snap the menu back if (!down) { const mid = -rect.width; if (x < mid / 2) { // Close setX(-rect.width); onClose(); } else { // Re-open setX(0); } } }, { axis: 'x', } ); return (
{children}
); }; export default Menu;