feat(renderer): AppHeader gets Settings + About icon buttons

This commit is contained in:
2026-06-05 19:46:56 +05:30
parent fe62c8814c
commit 9d154a8521
2 changed files with 43 additions and 1 deletions
+17 -1
View File
@@ -1,4 +1,4 @@
import { PanelLeft, PanelRight, Keyboard } from 'lucide-react'; import { PanelLeft, PanelRight, Keyboard, Settings, Info } from 'lucide-react';
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { ThemeToggle } from '@/components/theme-toggle'; import { ThemeToggle } from '@/components/theme-toggle';
import { useAppStore } from '@/stores/app-store'; import { useAppStore } from '@/stores/app-store';
@@ -47,6 +47,22 @@ export function AppHeader() {
> >
<Keyboard className="h-4 w-4" /> <Keyboard className="h-4 w-4" />
</Button> </Button>
<Button
variant="ghost"
size="icon"
aria-label="Settings"
onClick={() => dispatch('settings.open')}
>
<Settings className="h-4 w-4" />
</Button>
<Button
variant="ghost"
size="icon"
aria-label="About"
onClick={() => dispatch('help.about')}
>
<Info className="h-4 w-4" />
</Button>
<ThemeToggle /> <ThemeToggle />
</div> </div>
</header> </header>
+26
View File
@@ -19,6 +19,12 @@ describe('AppHeader', () => {
useAppStore.getState().togglePreview(); useAppStore.getState().togglePreview();
}); });
useCommandStore.getState().register('shortcuts.show', () => {}); useCommandStore.getState().register('shortcuts.show', () => {});
useCommandStore.getState().register('settings.open', () => {
useAppStore.getState().openModal('settings');
});
useCommandStore.getState().register('help.about', () => {
useAppStore.getState().openModal('about');
});
}); });
it('renders the app title', () => { it('renders the app title', () => {
@@ -64,4 +70,24 @@ describe('AppHeader', () => {
// The test passes if no error is thrown and the click is processed. // The test passes if no error is thrown and the click is processed.
expect(btn).toBeInTheDocument(); expect(btn).toBeInTheDocument();
}); });
it('settings button opens settings modal', async () => {
render(
<ThemeProvider defaultTheme="dark" attribute="class">
<AppHeader />
</ThemeProvider>
);
await userEvent.click(screen.getByRole('button', { name: /settings/i }));
expect(useAppStore.getState().modal).toEqual({ kind: 'settings' });
});
it('about button opens about modal', async () => {
render(
<ThemeProvider defaultTheme="dark" attribute="class">
<AppHeader />
</ThemeProvider>
);
await userEvent.click(screen.getByRole('button', { name: /^about$/i }));
expect(useAppStore.getState().modal).toEqual({ kind: 'about' });
});
}); });