/ src / App.tsx
App.tsx
 1  import { useState, useEffect, useCallback } from 'react';
 2  import { TooltipProvider } from '../components/ui/tooltip';
 3  import { HomePage } from './pages/HomePage';
 4  import { ReviewPage } from './pages/ReviewPage';
 5  import { UpdateBanner } from '../components/UpdateBanner';
 6  import { applyCodeFont } from '../components/SettingsDialog';
 7  import type { ReviewGuide } from '../lib/types';
 8  
 9  type Page = 'home' | 'review';
10  
11  export function App() {
12    const [page, setPage] = useState<Page>('home');
13  
14    useEffect(() => {
15      void window.electronAPI.loadPreferences().then((prefs) => {
16        if (prefs.codeFont) applyCodeFont(prefs.codeFont);
17      });
18    }, []);
19  
20    // When a background auto-review completes, the history list will refresh itself
21    // via the new-review-in-history event — handled in HomePage.
22    const [review, setReview] = useState<ReviewGuide | null>(null);
23    const [prefillPrUrl, setPrefillPrUrl] = useState<string | undefined>();
24  
25    const handleReviewReady = useCallback((r: ReviewGuide) => {
26      setPrefillPrUrl(undefined);
27      setReview(r);
28      setPage('review');
29    }, []);
30  
31    function handleBack() {
32      setReview(null);
33      setPage('home');
34    }
35  
36    function handleReReview(prUrl: string) {
37      setPrefillPrUrl(prUrl);
38      setReview(null);
39      setPage('home');
40    }
41  
42    // Navigate to a completed review when notification is clicked
43    useEffect(() => {
44      window.electronAPI.onReviewNavigate((reviewId) => {
45        void window.electronAPI.loadReview(reviewId).then((r) => {
46          handleReviewReady(r);
47        });
48      });
49      return () => {
50        window.electronAPI.offReviewNavigate();
51      };
52    }, [handleReviewReady]);
53  
54    return (
55      <>
56        <UpdateBanner />
57        <TooltipProvider>
58          {page === 'home' && <HomePage onReviewReady={handleReviewReady} prefillPrUrl={prefillPrUrl} />}
59          {page === 'review' && review && <ReviewPage review={review} onBack={handleBack} onReReview={handleReReview} />}
60        </TooltipProvider>
61      </>
62    );
63  }