feat: App.jsx — dynamic kennel name in header, Settings nav link, useSettings hook

This commit is contained in:
2026-03-09 22:14:51 -05:00
parent ec24a15c66
commit 67912dc78d

View File

@@ -1,5 +1,5 @@
import { BrowserRouter as Router, Routes, Route, Link} from 'react-router-dom' import { BrowserRouter as Router, Routes, Route, Link, useLocation } from 'react-router-dom'
import { Home, Users, Activity, Heart, FlaskConical } from 'lucide-react' import { Home, Users, Activity, Heart, FlaskConical, Settings } from 'lucide-react'
import Dashboard from './pages/Dashboard' import Dashboard from './pages/Dashboard'
import DogList from './pages/DogList' import DogList from './pages/DogList'
import DogDetail from './pages/DogDetail' import DogDetail from './pages/DogDetail'
@@ -8,11 +8,26 @@ import LitterList from './pages/LitterList'
import LitterDetail from './pages/LitterDetail' import LitterDetail from './pages/LitterDetail'
import BreedingCalendar from './pages/BreedingCalendar' import BreedingCalendar from './pages/BreedingCalendar'
import PairingSimulator from './pages/PairingSimulator' import PairingSimulator from './pages/PairingSimulator'
import SettingsPage from './pages/SettingsPage'
import { useSettings } from './hooks/useSettings'
import './App.css' import './App.css'
function App() { function NavLink({ to, icon: Icon, label }) {
const location = useLocation()
const isActive = location.pathname === to
return (
<Link to={to} className={`nav-link${isActive ? ' active' : ''}`}>
<Icon size={20} />
<span>{label}</span>
</Link>
)
}
function AppInner() {
const { settings } = useSettings()
const kennelName = settings?.kennel_name || 'BREEDR'
return ( return (
<Router>
<div className="app"> <div className="app">
<nav className="navbar"> <nav className="navbar">
<div className="container"> <div className="container">
@@ -22,29 +37,15 @@ function App() {
alt="BREEDR Logo" alt="BREEDR Logo"
className="brand-logo" className="brand-logo"
/> />
<span className="brand-text">BREEDR</span> <span className="brand-text">{kennelName}</span>
</div> </div>
<div className="nav-links"> <div className="nav-links">
<Link to="/" className="nav-link"> <NavLink to="/" icon={Home} label="Dashboard" />
<Home size={20} /> <NavLink to="/dogs" icon={Users} label="Dogs" />
<span>Dashboard</span> <NavLink to="/litters" icon={Activity} label="Litters" />
</Link> <NavLink to="/breeding" icon={Heart} label="Breeding" />
<Link to="/dogs" className="nav-link"> <NavLink to="/pairing" icon={FlaskConical} label="Pairing" />
<Users size={20} /> <NavLink to="/settings" icon={Settings} label="Settings" />
<span>Dogs</span>
</Link>
<Link to="/litters" className="nav-link">
<Activity size={20} />
<span>Litters</span>
</Link>
<Link to="/breeding" className="nav-link">
<Heart size={20} />
<span>Breeding</span>
</Link>
<Link to="/pairing" className="nav-link">
<FlaskConical size={20} />
<span>Pairing</span>
</Link>
</div> </div>
</div> </div>
</nav> </nav>
@@ -59,9 +60,17 @@ function App() {
<Route path="/litters/:id" element={<LitterDetail />} /> <Route path="/litters/:id" element={<LitterDetail />} />
<Route path="/breeding" element={<BreedingCalendar />} /> <Route path="/breeding" element={<BreedingCalendar />} />
<Route path="/pairing" element={<PairingSimulator />} /> <Route path="/pairing" element={<PairingSimulator />} />
<Route path="/settings" element={<SettingsPage />} />
</Routes> </Routes>
</main> </main>
</div> </div>
)
}
function App() {
return (
<Router>
<AppInner />
</Router> </Router>
) )
} }