mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-30 22:32:04 +00:00
- Revised SameSite attribute for session cookies to clarify its behavior in documentation. - Streamlined cookie clearing logic in the authentication route by utilizing `getSessionCookieOptions()`. - Enhanced the login view to support aborting server checks, improving responsiveness during component unmounting. - Ensured proper handling of server check retries with abort signal integration for better user experience.
60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
import { useState, useCallback, useEffect } from 'react';
|
|
import { RouterProvider } from '@tanstack/react-router';
|
|
import { createLogger } from '@automaker/utils/logger';
|
|
import { router } from './utils/router';
|
|
import { SplashScreen } from './components/splash-screen';
|
|
import { useSettingsSync } from './hooks/use-settings-sync';
|
|
import { useCursorStatusInit } from './hooks/use-cursor-status-init';
|
|
import './styles/global.css';
|
|
import './styles/theme-imports';
|
|
|
|
const logger = createLogger('App');
|
|
|
|
export default function App() {
|
|
const [showSplash, setShowSplash] = useState(() => {
|
|
// Only show splash once per session
|
|
if (sessionStorage.getItem('automaker-splash-shown')) {
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
|
|
// Clear accumulated PerformanceMeasure entries to prevent memory leak in dev mode
|
|
// React's internal scheduler creates performance marks/measures that accumulate without cleanup
|
|
useEffect(() => {
|
|
if (import.meta.env.DEV) {
|
|
const clearPerfEntries = () => {
|
|
performance.clearMarks();
|
|
performance.clearMeasures();
|
|
};
|
|
const interval = setInterval(clearPerfEntries, 5000);
|
|
return () => clearInterval(interval);
|
|
}
|
|
}, []);
|
|
|
|
// Settings are now loaded in __root.tsx after successful session verification
|
|
// This ensures a unified flow: verify session → load settings → redirect
|
|
// We no longer block router rendering here - settings loading happens in __root.tsx
|
|
|
|
// Sync settings changes back to server (API-first persistence)
|
|
const settingsSyncState = useSettingsSync();
|
|
if (settingsSyncState.error) {
|
|
logger.error('Settings sync error:', settingsSyncState.error);
|
|
}
|
|
|
|
// Initialize Cursor CLI status at startup
|
|
useCursorStatusInit();
|
|
|
|
const handleSplashComplete = useCallback(() => {
|
|
sessionStorage.setItem('automaker-splash-shown', 'true');
|
|
setShowSplash(false);
|
|
}, []);
|
|
|
|
return (
|
|
<>
|
|
<RouterProvider router={router} />
|
|
{showSplash && <SplashScreen onComplete={handleSplashComplete} />}
|
|
</>
|
|
);
|
|
}
|