diff --git a/TaskTracker.Web/src/components/Layout.tsx b/TaskTracker.Web/src/components/Layout.tsx index 0aef1e5..7b9a3f5 100644 --- a/TaskTracker.Web/src/components/Layout.tsx +++ b/TaskTracker.Web/src/components/Layout.tsx @@ -1,7 +1,7 @@ -import { useState } from 'react' import { NavLink, Outlet, useNavigate } from 'react-router-dom' -import { LayoutGrid, BarChart3, Link, PanelLeftClose, PanelLeftOpen } from 'lucide-react' -import SearchBar from './SearchBar.tsx' +import { LayoutGrid, BarChart3, Link, Plus, Search } from 'lucide-react' +import { useState, useEffect, useCallback } from 'react' +import SearchModal from './SearchModal.tsx' const navItems = [ { to: '/board', label: 'Board', icon: LayoutGrid }, @@ -10,60 +10,99 @@ const navItems = [ ] export default function Layout() { - const [collapsed, setCollapsed] = useState(false) const navigate = useNavigate() + const [searchOpen, setSearchOpen] = useState(false) + const [showCreateHint, setShowCreateHint] = useState(false) + + // Global Cmd+K handler + const handleGlobalKeyDown = useCallback((e: KeyboardEvent) => { + if ((e.metaKey || e.ctrlKey) && e.key === 'k') { + e.preventDefault() + setSearchOpen(true) + } + }, []) + + useEffect(() => { + document.addEventListener('keydown', handleGlobalKeyDown) + return () => document.removeEventListener('keydown', handleGlobalKeyDown) + }, [handleGlobalKeyDown]) return ( -
- {/* Sidebar */} - - {/* Main area */} -
- {/* Top bar */} -
-

TaskTracker

- navigate(`/board?task=${taskId}`)} /> -
+ {/* New task button */} + + - {/* Content */} -
- -
-
+ {/* Content */} +
+ +
+ + {/* Search modal */} + {searchOpen && ( + { + setSearchOpen(false) + navigate(`/board?task=${taskId}`) + }} + onClose={() => setSearchOpen(false)} + /> + )}
) }