feat(frontend): settings page with dark mode and defaults
This commit is contained in:
@@ -1,13 +1,19 @@
|
||||
import { Link, Outlet } from 'react-router-dom';
|
||||
import { useSettings } from '../stores/settingsStore.js';
|
||||
|
||||
export function Layout() {
|
||||
const { theme, toggleTheme } = useSettings();
|
||||
return (
|
||||
<div className="flex h-full flex-col">
|
||||
<header className="border-b border-slate-200 bg-white px-6 py-3 dark:border-slate-800 dark:bg-slate-900">
|
||||
<nav className="flex gap-4 text-sm">
|
||||
<nav className="flex items-center gap-4 text-sm">
|
||||
<Link to="/" className="font-semibold">Flashcards</Link>
|
||||
<Link to="/admin">Admin</Link>
|
||||
<Link to="/stats">Stats</Link>
|
||||
<Link to="/settings" className="ml-auto">Instellingen</Link>
|
||||
<button onClick={toggleTheme} className="rounded border px-2 py-0.5 text-xs">
|
||||
{theme === 'dark' ? '☀️' : '🌙'}
|
||||
</button>
|
||||
</nav>
|
||||
</header>
|
||||
<main className="flex-1 overflow-auto"><Outlet /></main>
|
||||
|
||||
16
packages/frontend/src/pages/Settings.tsx
Normal file
16
packages/frontend/src/pages/Settings.tsx
Normal file
@@ -0,0 +1,16 @@
|
||||
import { useSettings } from '../stores/settingsStore.js';
|
||||
|
||||
export function SettingsPage() {
|
||||
const { theme, defaultMaxCards, toggleTheme, setDefaultMaxCards } = useSettings();
|
||||
return (
|
||||
<div className="mx-auto max-w-md p-6">
|
||||
<h1 className="mb-4 text-2xl font-semibold">Instellingen</h1>
|
||||
<label className="mb-3 flex items-center gap-2 text-sm">
|
||||
<input type="checkbox" checked={theme === 'dark'} onChange={toggleTheme} /> Dark mode
|
||||
</label>
|
||||
<label className="block text-sm">Standaard max kaarten per sessie
|
||||
<input type="number" min={1} max={500} className="ml-2 w-20 rounded border px-2 py-1 dark:bg-slate-900" value={defaultMaxCards} onChange={(e) => setDefaultMaxCards(Math.max(1, Number(e.target.value)))} />
|
||||
</label>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import { PracticeDonePage } from './pages/PracticeDone.js';
|
||||
import { StatsPage } from './pages/Stats.js';
|
||||
import { StatsLessonPage } from './pages/StatsLesson.js';
|
||||
import { StatsCardPage } from './pages/StatsCard.js';
|
||||
import { SettingsPage } from './pages/Settings.js';
|
||||
|
||||
export const router = createBrowserRouter([
|
||||
{
|
||||
@@ -24,6 +25,7 @@ export const router = createBrowserRouter([
|
||||
{ path: 'stats', element: <StatsPage /> },
|
||||
{ path: 'stats/lessons/:id', element: <StatsLessonPage /> },
|
||||
{ path: 'stats/cards/:id', element: <StatsCardPage /> },
|
||||
{ path: 'settings', element: <SettingsPage /> },
|
||||
{ path: '*', element: <Navigate to="/" replace /> },
|
||||
],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user