Files
silo/web/src/hooks/useModules.ts
Forbes 42a901f39c feat(web): collapsible left sidebar, remove top nav bar
- Replace top header with left sidebar navigation
- Sidebar shows module-aware nav items filtered by /api/modules
- Collapsible: expanded shows icon+label, collapsed shows icon only
- Toggle with Ctrl+J or collapse button, state persisted in localStorage
- Keyboard navigable: Arrow Up/Down, Enter to navigate, Escape to collapse
- Bottom section: density toggle, user info with role badge, logout
- Add useModules hook for fetching module state
- Add sidebar density variables to theme.css

Closes #113, closes #114
2026-02-15 12:32:52 -06:00

18 lines
517 B
TypeScript

import { useEffect, useState } from "react";
import { get } from "../api/client";
import type { ModuleInfo, ModulesResponse } from "../api/types";
export function useModules() {
const [modules, setModules] = useState<Record<string, ModuleInfo>>({});
const [loading, setLoading] = useState(true);
useEffect(() => {
get<ModulesResponse>("/api/modules")
.then((res) => setModules(res.modules))
.catch(() => {})
.finally(() => setLoading(false));
}, []);
return { modules, loading };
}