import React, { useEffect } from 'react'; import { ConfirmDialog } from './components/common/ConfirmDialog';import { ContextSwitchOverlay } from './components/common/ContextSwitchOverlay';import { ErrorBoundary } from './components/common/ErrorBoundary';import { TabbedLayout } from './components/layout/TabbedLayout';import { useTheme } from './hooks/useTheme';import { api } from './api';import { initializeNotificationListeners, useStore } from './store'; export const App = (): React.JSX.Element => { // Initialize theme on app load useTheme(); // Dismiss splash screen once React is ready useEffect(() => { const splash = document.getElementById('splash'); if (splash) { splash.style.opacity = '0'; setTimeout(() => splash.remove(), 300); } }, []); // Initialize context system (before notification listeners) useEffect(() => { void useStore.getState().initializeContextSystem(); }, []); // Refresh available contexts when SSH connection state changes useEffect(() => { if (!api.ssh?.onStatus) return; const cleanup = api.ssh.onStatus(() => { void useStore.getState().fetchAvailableContexts(); }); return cleanup; }, []); // Initialize IPC event listeners (notifications, file changes) useEffect(() => { const cleanup = initializeNotificationListeners(); return cleanup; }, []); return ( <ErrorBoundary> <ContextSwitchOverlay /> <TabbedLayout /> <ConfirmDialog /> </ErrorBoundary> );};
import React, { useEffect } from 'react';
import { ConfirmDialog } from './components/common/ConfirmDialog';
import { ContextSwitchOverlay } from './components/common/ContextSwitchOverlay';
import { ErrorBoundary } from './components/common/ErrorBoundary';
import { TabbedLayout } from './components/layout/TabbedLayout';
import { useTheme } from './hooks/useTheme';
import { api } from './api';
import { initializeNotificationListeners, useStore } from './store';
export const App = (): React.JSX.Element => {
// Initialize theme on app load
useTheme();
// Dismiss splash screen once React is ready
useEffect(() => {
const splash = document.getElementById('splash');
if (splash) {
splash.style.opacity = '0';
setTimeout(() => splash.remove(), 300);
}
}, []);
// Initialize context system (before notification listeners)
useEffect(() => {
void useStore.getState().initializeContextSystem();
}, []);
// Refresh available contexts when SSH connection state changes
useEffect(() => {
if (!api.ssh?.onStatus) return;
const cleanup = api.ssh.onStatus(() => {
void useStore.getState().fetchAvailableContexts();
});
return cleanup;
}, []);
// Initialize IPC event listeners (notifications, file changes)
useEffect(() => {
const cleanup = initializeNotificationListeners();
return cleanup;
}, []);
return (
<ErrorBoundary>
<ContextSwitchOverlay />
<TabbedLayout />
<ConfirmDialog />
</ErrorBoundary>
);
};