import React, { useState, useEffect } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { IonApp, IonHeader, IonToolbar, IonTitle, IonContent, IonChip, IonMenuButton } from '@ionic/react'; import { selectCurrentSinger, selectIsAdmin, selectControllerName } from '../../redux/authSlice'; import { logout } from '../../redux/authSlice'; import { ActionButton } from '../common'; import Navigation from '../Navigation/Navigation'; import type { LayoutProps } from '../../types'; const Layout: React.FC = ({ children }) => { const currentSinger = useSelector(selectCurrentSinger); const isAdmin = useSelector(selectIsAdmin); const controllerName = useSelector(selectControllerName); const dispatch = useDispatch(); const [isLargeScreen, setIsLargeScreen] = useState(false); // Check screen size for responsive layout useEffect(() => { const checkScreenSize = () => { setIsLargeScreen(window.innerWidth >= 768); }; checkScreenSize(); window.addEventListener('resize', checkScreenSize); return () => window.removeEventListener('resize', checkScreenSize); }, []); const handleLogout = () => { dispatch(logout()); // Reload the page to return to login screen window.location.reload(); }; return ( {/* Navigation - rendered outside header for proper positioning */} {/* Main content wrapper */}
{/* Only show hamburger button on mobile */} {!isLargeScreen && }
🎤 Karaoke App {controllerName && ( Party: {controllerName} )}
{/* User Info & Logout */} {currentSinger && (
{currentSinger} {isAdmin && ( Admin )}
Logout
)}
{children}
); }; export default Layout;