1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (c) 2025-present FERS Contributors (see AUTHORS.md).
4import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
5import PlayArrowIcon from '@mui/icons-material/PlayArrow';
6import PodcastsIcon from '@mui/icons-material/Podcasts';
7import SettingsIcon from '@mui/icons-material/Settings';
8import TerminalIcon from '@mui/icons-material/Terminal';
9import ViewInArIcon from '@mui/icons-material/ViewInAr';
10import WidgetsIcon from '@mui/icons-material/Widgets';
18} from '@mui/material';
19import { useFersLogStore } from '@/stores/fersLogStore';
21interface AppRailProps {
23 onViewChange: (view: string) => void;
24 onSettingsClick: () => void;
25 onAboutClick: () => void;
29 { id: 'scenario', label: 'Scenario Builder', icon: <ViewInArIcon /> },
30 { id: 'assets', label: 'Asset Library', icon: <WidgetsIcon /> },
31 { id: 'simulation', label: 'Simulation Run', icon: <PlayArrowIcon /> },
32 { id: 'vita49', label: 'VITA49 Streams', icon: <PodcastsIcon /> },
35export default function AppRail({
41 const logOpen = useFersLogStore((state) => state.isOpen);
42 const toggleLogOpen = useFersLogStore((state) => state.toggleOpen);
43 const logCount = useFersLogStore((state) => state.entries.length);
51 flexDirection: 'column',
54 borderColor: 'divider',
55 bgcolor: 'background.paper',
60 <List sx={{ flexGrow: 1, overflow: 'auto', width: '100%' }}>
61 {views.map((view) => (
62 <Tooltip title={view.label} placement="right" key={view.id}>
64 selected={activeView === view.id}
65 onClick={() => onViewChange(view.id)}
68 justifyContent: 'center',
71 backgroundColor: 'action.selected',
75 <ListItemIcon sx={{ minWidth: 0 }}>
83 <Tooltip title="Raw logs" placement="right">
86 onClick={toggleLogOpen}
89 justifyContent: 'center',
91 backgroundColor: 'action.selected',
95 <ListItemIcon sx={{ minWidth: 0 }}>
97 badgeContent={logCount}
100 invisible={logCount === 0}
107 <Tooltip title="Settings" placement="right">
109 onClick={onSettingsClick}
110 sx={{ my: 1, justifyContent: 'center' }}
112 <ListItemIcon sx={{ minWidth: 0 }}>
117 <Tooltip title="About" placement="right">
119 onClick={onAboutClick}
120 sx={{ my: 1, justifyContent: 'center' }}
122 <ListItemIcon sx={{ minWidth: 0 }}>