"use client"; import * as React from "react"; import { useNavigate } from "react-router-dom"; import { AppWindow, Box, ShieldCheck, Zap } from "lucide-react"; import { appopsClient } from "@/api/appopsClient"; import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, } from "@/components/ui/command"; import { buildCommandPaletteGroups } from "@/lib/commandPaletteNavigation"; import { isCommandPaletteShortcut } from "@/lib/commandPaletteShortcut"; import { navigationGroups } from "@/lib/navigationGroups"; const commandPaletteGroups = buildCommandPaletteGroups(navigationGroups); export function CommandPalette() { const [open, setOpen] = React.useState(false); const [liveItems, setLiveItems] = React.useState<{ apps: Awaited>; containers: Awaited>; policies: Awaited>; actions: Awaited>["items"]; }>({ apps: [], containers: [], policies: [], actions: [] }); const navigate = useNavigate(); React.useEffect(() => { const down = (e: KeyboardEvent) => { if (isCommandPaletteShortcut(e)) { e.preventDefault(); setOpen((open) => !open); } }; document.addEventListener("keydown", down); return () => document.removeEventListener("keydown", down); }, []); React.useEffect(() => { if (!open) return; let active = true; Promise.allSettled([ appopsClient.getApps(), appopsClient.getContainers(), appopsClient.getPolicies(), appopsClient.getActionRegistry(), ]).then(([apps, containers, policies, actions]) => { if (!active) return; setLiveItems({ apps: apps.status === "fulfilled" ? apps.value : [], containers: containers.status === "fulfilled" ? containers.value : [], policies: policies.status === "fulfilled" ? policies.value : [], actions: actions.status === "fulfilled" ? actions.value.items : [], }); }); return () => { active = false; }; }, [open]); const runCommand = (command: () => void) => { setOpen(false); command(); }; return ( Geen resultaten gevonden. {commandPaletteGroups.map((group, groupIndex) => ( {groupIndex > 0 && } {group.items.map((item) => ( runCommand(() => navigate(item.path))} > {item.searchLabel} ))} ))} {liveItems.apps.length > 0 && ( <> {liveItems.apps.map((app) => ( runCommand(() => navigate(`/apps/${encodeURIComponent(app.id)}`))}> {app.name}{app.status} ))} )} {liveItems.containers.length > 0 && ( <> {liveItems.containers.map((container) => ( runCommand(() => navigate(`/containers?query=${encodeURIComponent(container.name)}`))}> {container.name}{container.state} ))} )} {liveItems.actions.length > 0 && ( <> {liveItems.actions.map((action) => ( runCommand(() => navigate(`/command-center?query=${encodeURIComponent(action.id)}`))}> {action.label}{action.policyDecision} ))} )} {liveItems.policies.length > 0 && ( <> {liveItems.policies.map((policy) => ( runCommand(() => navigate(`/policies?query=${encodeURIComponent(policy.id)}`))}> {policy.action}{policy.manual} ))} )} ); }