From d5dfc0d2dbf0310e06969b5ed63fde5362f9efd1 Mon Sep 17 00:00:00 2001 From: Bert Hausmans Date: Thu, 21 May 2026 07:15:02 +0200 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20=E2=8C=98K=20search=20trigger?= =?UTF-8?q?=20in=20layout=20+=20/lessons=20nav?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/frontend/src/components/Layout.tsx | 30 ++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/components/Layout.tsx b/packages/frontend/src/components/Layout.tsx index 2ba1005..51d9cae 100644 --- a/packages/frontend/src/components/Layout.tsx +++ b/packages/frontend/src/components/Layout.tsx @@ -1,11 +1,13 @@ +import { useEffect, useState } from 'react'; import { NavLink, Outlet } from 'react-router-dom'; import { useSettings } from '../stores/settingsStore.js'; import { useAuth } from '../stores/authStore.js'; import { UserMenu } from './UserMenu.js'; +import { SearchPalette } from './SearchPalette.js'; const navItems = [ { to: '/', label: 'Dashboard', end: true }, - { to: '/admin', label: 'Lessen' }, + { to: '/lessons', label: 'Lessen' }, { to: '/marketplace', label: 'Marketplace 🛍️' }, { to: '/stats', label: 'Stats' }, ]; @@ -13,6 +15,19 @@ const navItems = [ export function Layout() { const { theme, toggleTheme } = useSettings(); const user = useAuth((s) => s.user); + const [searchOpen, setSearchOpen] = useState(false); + + useEffect(() => { + function onKey(e: KeyboardEvent) { + if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') { + e.preventDefault(); + setSearchOpen(true); + } + } + document.addEventListener('keydown', onKey); + return () => document.removeEventListener('keydown', onKey); + }, []); + return (
@@ -42,6 +57,18 @@ export function Layout() { )}
+ {user && ( + + )}
+ setSearchOpen(false)} />
); }