update dna and panel controls

This commit is contained in:
2026-05-23 08:58:03 +08:00
parent 39b5edb585
commit e612c852e5

View File

@@ -18,7 +18,7 @@ import ConnectionIndicators from './ConnectionIndicators';
import DnsIcon from '@mui/icons-material/Dns'; import DnsIcon from '@mui/icons-material/Dns';
import LanIcon from '@mui/icons-material/Lan'; import LanIcon from '@mui/icons-material/Lan';
import CompactSidebar from './CompactSidebar'; import CompactSidebar from './CompactSidebar';
import DNAServerModal from './DNAServerModal'; import DynamicNodeIdServer from './services/DynamicNodeIdServer';
window.mavlinkSession = new MavlinkSession(); window.mavlinkSession = new MavlinkSession();
window.localNode = new dronecan.Node({name: "com.vimdrones.web_gui"}); window.localNode = new dronecan.Node({name: "com.vimdrones.web_gui"});
@@ -43,25 +43,26 @@ const App = () => {
const [snackbarMessage, setSnackbarMessage] = useState(''); const [snackbarMessage, setSnackbarMessage] = useState('');
const [snackbarSeverity, setSnackbarSeverity] = useState('info'); const [snackbarSeverity, setSnackbarSeverity] = useState('info');
const [selectedBus, setSelectedBus] = useState(0); const [selectedBus, setSelectedBus] = useState(0);
const [dnaModalOpen, setDnaModalOpen] = useState(false);
const [dnaServerActive, setDnaServerActive] = useState(false); const [dnaServerActive, setDnaServerActive] = useState(false);
const openWindow = (windowTitle, windowPath, windowSize) => { const openWindow = (windowTitle, windowPath, windowSize) => {
if (subWindowRef[windowPath]) { if (subWindowRef[windowPath] && !subWindowRef[windowPath].closed) {
subWindowRef[windowPath].focus(); subWindowRef[windowPath].focus();
return; return;
} }
const newWindow = window.open(windowPath, windowTitle, windowSize); const newWindow = window.open(windowPath, windowTitle, windowSize);
if (newWindow) { if (newWindow) {
subWindowRef[windowPath] = newWindow; setSubWindowRef((prev) => ({ ...prev, [windowPath]: newWindow }));
setSubWindowRef(subWindowRef);
newWindow.addEventListener('beforeunload', () => { newWindow.addEventListener('beforeunload', () => {
subWindowRef[windowPath] = null; setSubWindowRef((prev) => {
setSubWindowRef(subWindowRef); const next = { ...prev };
delete next[windowPath];
return next;
});
}); });
} else { } else {
console.error(`Main: Failed to open ${windowName}`); console.error(`Main: Failed to open ${windowTitle}`);
} }
}; };
@@ -106,18 +107,24 @@ const App = () => {
setModalOpen(true); setModalOpen(true);
}; };
const handleCloseModal = (serverRunning) => { const handleCloseModal = () => {
setModalOpen(false); setModalOpen(false);
setDnaServerActive(serverRunning);
}; };
const handleOpenDnaModal = () => { const handleToggleDnaServer = () => {
setDnaModalOpen(true); if (!window.dnaServer) {
}; window.dnaServer = new DynamicNodeIdServer(window.localNode);
}
const handleCloseDnaModal = (serverRunning) => { if (window.dnaServer.getStatus().isActive) {
setDnaModalOpen(false); window.dnaServer.stop();
setDnaServerActive(serverRunning); setDnaServerActive(false);
showMessage('DNA server stopped', 'info');
} else {
const success = window.dnaServer.start(1, 125);
setDnaServerActive(success);
showMessage(success ? 'DNA server started' : 'Failed to start DNA server', success ? 'success' : 'error');
}
}; };
return ( return (
@@ -190,7 +197,7 @@ const App = () => {
}} /> : }} /> :
<DnsIcon /> <DnsIcon />
} }
onClick={handleOpenDnaModal} onClick={handleToggleDnaServer}
sx={dnaServerActive ? { sx={dnaServerActive ? {
borderColor: 'success.main', borderColor: 'success.main',
'&:hover': { '&:hover': {
@@ -277,11 +284,6 @@ const App = () => {
selectedBus={selectedBus} selectedBus={selectedBus}
onBusChange={handleBusChange} onBusChange={handleBusChange}
/> />
<DNAServerModal
open={dnaModalOpen}
onClose={handleCloseDnaModal}
showMessage={showMessage.bind(this)}
/>
<Snackbar <Snackbar
open={snackbarOpen} open={snackbarOpen}
autoHideDuration={6000} autoHideDuration={6000}