Implement nested navigation (Pages) in Command menu
mainYou can implement a 'drill-down' or 'pages' pattern by managing a stack of items in your state. When an item is selected, push a new 'page' to the stack. Use the onKeyDown prop on the Command root to handle Escape or Backspace (when search is empty) to pop the stack and return to the previous page.
const [pages, setPages] = React.useState([])
const page = pages[pages.length - 1]
return (
<Command
onKeyDown={(e) => {
if (e.key === 'Escape' || (e.key === 'Backspace' && !search)) {
e.preventDefault()
setPages((pages) => pages.slice(0, -1))
}
}}
>
<Command.Input value={search} onValueChange={setSearch} />
<Command.List>
{!page && (
<>
<Command.Item onSelect={() => setPages([...pages, 'projects'])}>Search projects…</Command.Item>
</>
)}
{page === 'projects' && (
<>
<Command.Item>Project A</Command.Item>
</>
)}
</Command.List>
</Command>
)