From b269ef02216a253c6fd89f3f046dc391ae824c0e Mon Sep 17 00:00:00 2001 From: Iftach Yakar Date: Wed, 4 Jun 2025 08:56:29 +0300 Subject: [PATCH] Show educational panel automatically on first run --- src/components/App.tsx | 16 ++++++++++++++-- tests/components/App.test.tsx | 22 +++++++++++++++++++++- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/components/App.tsx b/src/components/App.tsx index 99e3332..f3f3cd0 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -16,6 +16,13 @@ const App: React.FC = () => { const [viewBasis, setViewBasis] = useState(Basis.Bell); const [drawerOpen, setDrawerOpen] = useState(false); const [infoOpen, setInfoOpen] = useState(false); + + // Show the educational panel automatically on first run + useEffect(() => { + if (!localStorage.getItem('infoWindowSeen')) { + setInfoOpen(true); + } + }, []); useEffect(() => { // Initialize controller with default parameters @@ -44,6 +51,11 @@ const App: React.FC = () => { setEngineType(type); }; + const handleInfoClose = () => { + setInfoOpen(false); + localStorage.setItem('infoWindowSeen', 'true'); + }; + return (
@@ -101,9 +113,9 @@ const App: React.FC = () => {
- setInfoOpen(false)} + onClose={handleInfoClose} /> diff --git a/tests/components/App.test.tsx b/tests/components/App.test.tsx index 27e67ef..ded1771 100644 --- a/tests/components/App.test.tsx +++ b/tests/components/App.test.tsx @@ -61,6 +61,8 @@ describe('App', () => { beforeEach(() => { vi.clearAllMocks(); + localStorage.clear(); + localStorage.setItem('infoWindowSeen', 'true'); // Setup the controller mock to provide immediate state (SimulationController as unknown as ReturnType).mockImplementation( @@ -328,4 +330,22 @@ describe('App', () => { // Verify the header contains the title expect(header).toContainElement(headerTitle); }); -}); \ No newline at end of file + + test('shows info window on first run when not previously seen', () => { + localStorage.clear(); + + render(); + + expect(screen.getByTestId('info-window')).toBeInTheDocument(); + }); + + test('closing info window sets localStorage flag', () => { + localStorage.clear(); + + render(); + + fireEvent.click(screen.getByLabelText('Close information window')); + + expect(localStorage.getItem('infoWindowSeen')).toBe('true'); + }); +});