1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (c) 2025-present FERS Contributors (see AUTHORS.md).
4import React, { useState } from 'react';
5import { Box, Snackbar, Alert } from '@mui/material';
6import AppRail from '@/components/AppRail';
7import { ScenarioView } from '@/views/ScenarioView';
8import { AssetLibraryView } from '@/views/AssetLibraryView';
9import { SimulationView } from '@/views/SimulationView';
10import { ResultsView } from '@/views/ResultsView';
11import SettingsDialog from '@/components/SettingsDialog';
12import { useScenarioStore } from '@/stores/scenarioStore';
14export function MainLayout() {
15 const [activeView, setActiveView] = useState('scenario');
16 const [settingsOpen, setSettingsOpen] = useState(false);
17 const { open: errorOpen, message: errorMessage } = useScenarioStore(
18 (state) => state.errorSnackbar
20 const hideError = useScenarioStore((state) => state.hideError);
29 position: 'fixed', // Ensure it stays in viewport
35 activeView={activeView}
36 onViewChange={setActiveView}
37 onSettingsClick={() => setSettingsOpen(true)}
43 minWidth: 0, // Allow shrinking below content size
45 overflow: 'hidden', // Prevent overflow
49 {/* Render all views but only display the active one */}
52 display: activeView === 'scenario' ? 'flex' : 'none',
61 display: activeView === 'assets' ? 'block' : 'none',
70 display: activeView === 'simulation' ? 'block' : 'none',
79 display: activeView === 'results' ? 'block' : 'none',
89 onClose={() => setSettingsOpen(false)}
93 autoHideDuration={6000}
95 anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
101 sx={{ width: '100%' }}