feat: App.jsx — dynamic kennel name in header, Settings nav link, useSettings hook
This commit is contained in:
@@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user