import { useEffect, useMemo, useRef, useState } from "react"; import { availableNavigation } from "../navigation"; import { Icon } from "./Icon"; import { Modal } from "./Modal"; export function CommandMenu({ open, canReadAudit, navigate, onClose, }: { open: boolean; canReadAudit: boolean; navigate: (next: string) => void; onClose: () => void; }) { const [query, setQuery] = useState(""); const inputRef = useRef(null); const items = useMemo(() => availableNavigation(canReadAudit), [canReadAudit]); const results = useMemo(() => { const needle = query.trim().toLowerCase(); if (!needle) return items; return items.filter((item) => `${item.label} ${item.description}`.toLowerCase().includes(needle)); }, [items, query]); useEffect(() => { if (!open) return; setQuery(""); const focusTimer = window.setTimeout(() => inputRef.current?.focus(), 0); return () => window.clearTimeout(focusTimer); }, [open]); const select = (href: string) => { onClose(); navigate(href); }; return (
{results.length ? results.map((item) => ( )) : (
No workspace foundTry a broader name or capability.
)}

Navigate without leaving the keyboard. Access-controlled destinations remain hidden.

); }