import PropTypes from 'prop-types'; import { useEffect, useRef, useState } from 'react'; import { CssVarsProvider } from '@mui/joy/styles'; import { Button } from '@mui/joy'; import HostViewerIcon from '../images/host_viewer_icon.png'; import theme from '../theme.js'; import HostViewer from './ssh/HostViewer.jsx'; function Launchpad({ onClose, getHosts, connectToHost, isAddHostHidden, setIsAddHostHidden, isEditHostHidden, isErrorHidden, deleteHost, editHost, shareHost, userRef, isHostViewerMenuOpen, setIsHostViewerMenuOpen, }) { const launchpadRef = useRef(null); const [sidebarOpen, setSidebarOpen] = useState(false); const [activeApp, setActiveApp] = useState('hostViewer'); const [isAnyModalOpen, setIsAnyModalOpen] = useState(false); useEffect(() => { const handleClickOutside = (event) => { if ( launchpadRef.current && !launchpadRef.current.contains(event.target) && isAddHostHidden && isEditHostHidden && isErrorHidden && !isHostViewerMenuOpen && !isAnyModalOpen ) { onClose(); } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, [onClose, isAddHostHidden, isEditHostHidden, isErrorHidden, isHostViewerMenuOpen, isAnyModalOpen]); const handleModalOpen = () => { setIsAnyModalOpen(true); }; const handleModalClose = () => { setIsAnyModalOpen(false); }; return (
{/* Sidebar */}
{/* Sidebar Toggle Button */} {/* HostViewer Button */}
{/* Main Content */}
{activeApp === 'hostViewer' && ( { if (!hostConfig || typeof hostConfig !== 'object') { return; } if (!hostConfig.ip || !hostConfig.user) { return; } connectToHost(hostConfig); }} setIsAddHostHidden={setIsAddHostHidden} deleteHost={deleteHost} editHost={editHost} openEditPanel={editHost} shareHost={shareHost} onModalOpen={handleModalOpen} onModalClose={handleModalClose} userRef={userRef} isMenuOpen={isHostViewerMenuOpen || false} setIsMenuOpen={setIsHostViewerMenuOpen} /> )}
); } Launchpad.propTypes = { onClose: PropTypes.func.isRequired, getHosts: PropTypes.func.isRequired, connectToHost: PropTypes.func.isRequired, isAddHostHidden: PropTypes.bool.isRequired, setIsAddHostHidden: PropTypes.func.isRequired, isEditHostHidden: PropTypes.bool.isRequired, isErrorHidden: PropTypes.bool.isRequired, deleteHost: PropTypes.func.isRequired, editHost: PropTypes.func.isRequired, shareHost: PropTypes.func.isRequired, userRef: PropTypes.object.isRequired, isHostViewerMenuOpen: PropTypes.bool, setIsHostViewerMenuOpen: PropTypes.func.isRequired, }; export default Launchpad;