import { ApplicationGroup } from '@/UIModels/ApplicationGroup' import { AppState } from '@/UIModels/AppState' import { calculateSubmenuStyle, SubmenuStyle } from '@/Utils/CalculateSubmenuStyle' import { FunctionComponent } from 'preact' import { useCallback, useEffect, useRef, useState } from 'preact/hooks' import { WorkspaceSwitcherMenu } from '@/Components/AccountMenu/WorkspaceSwitcher/WorkspaceSwitcherMenu' import { Button } from '@/Components/Button/Button' import { Icon } from '@/Components/Icon/Icon' import { useCloseOnClickOutside } from '@/Hooks/useCloseOnClickOutside' type Props = { mainApplicationGroup: ApplicationGroup appState: AppState } export const LockscreenWorkspaceSwitcher: FunctionComponent = ({ mainApplicationGroup, appState }) => { const buttonRef = useRef(null) const menuRef = useRef(null) const containerRef = useRef(null) const [isOpen, setIsOpen] = useState(false) const [menuStyle, setMenuStyle] = useState() useCloseOnClickOutside(containerRef, () => setIsOpen(false)) const toggleMenu = useCallback(() => { if (!isOpen) { const menuPosition = calculateSubmenuStyle(buttonRef.current) if (menuPosition) { setMenuStyle(menuPosition) } } setIsOpen(!isOpen) }, [isOpen]) useEffect(() => { if (isOpen) { const timeToWaitBeforeCheckingMenuCollision = 0 setTimeout(() => { const newMenuPosition = calculateSubmenuStyle(buttonRef.current, menuRef.current) if (newMenuPosition) { setMenuStyle(newMenuPosition) } }, timeToWaitBeforeCheckingMenuCollision) } }, [isOpen]) return (
{isOpen && (
)}
) }