FERS 1.0.0
The Flexible Extensible Radar Simulator
Loading...
Searching...
No Matches
PropertyInspector.tsx
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (c) 2025-present FERS Contributors (see AUTHORS.md).
3
4import { Box, Typography, Divider } from '@mui/material';
5import { useScenarioStore, findItemInStore } from '@/stores/scenarioStore';
6import { assertNever } from '@/utils/typeUtils';
7import { GlobalParametersInspector } from './inspectors/GlobalParametersInspector';
8import { WaveformInspector } from './inspectors/WaveformInspector';
9import { TimingInspector } from './inspectors/TimingInspector';
10import { AntennaInspector } from './inspectors/AntennaInspector';
11import { PlatformInspector } from './inspectors/PlatformInspector';
12
13function InspectorContent() {
14 const selectedItem = useScenarioStore((state) =>
15 findItemInStore(state, state.selectedItemId)
16 );
17
18 if (!selectedItem) {
19 return (
20 <Typography color="text.secondary">
21 Select an item to see its properties.
22 </Typography>
23 );
24 }
25
26 const renderInspector = () => {
27 switch (selectedItem.type) {
28 case 'GlobalParameters':
29 return <GlobalParametersInspector item={selectedItem} />;
30 case 'Waveform':
31 return <WaveformInspector item={selectedItem} />;
32 case 'Timing':
33 return <TimingInspector item={selectedItem} />;
34 case 'Antenna':
35 return <AntennaInspector item={selectedItem} />;
36 case 'Platform':
37 return <PlatformInspector item={selectedItem} />;
38 default:
39 return assertNever(selectedItem);
40 }
41 };
42
43 return (
44 <Box>
45 <Typography variant="overline" color="text.secondary">
46 {selectedItem.type}
47 </Typography>
48 <Divider sx={{ my: 1 }} />
49 {renderInspector()}
50 </Box>
51 );
52}
53
54export default function PropertyInspector() {
55 return (
56 <Box
57 sx={{
58 height: '100%',
59 display: 'flex',
60 flexDirection: 'column',
61 }}
62 >
63 <Box sx={{ flexShrink: 0, px: 2, pt: 2, pb: 1 }}>
64 <Typography variant="h6">Properties</Typography>
65 </Box>
66 <Divider sx={{ mx: 2 }} />
67
68 <Box
69 sx={{
70 flexGrow: 1,
71 overflowY: 'auto',
72 minHeight: 0,
73 p: 1.5,
74 }}
75 >
76 <InspectorContent />
77 </Box>
78 </Box>
79 );
80}