import { ArrowUpDownIcon, Code2Icon, CreditCardIcon, FileSignatureIcon, FileTextIcon, HomeIcon, InfoIcon, LayoutGridIcon, LinkIcon, NetworkIcon, PlugIcon, QrCodeIcon, RefreshCwIcon, SendIcon, SettingsIcon, ShieldIcon, ShuffleIcon, SquareStackIcon, UserIcon, UserPlus2Icon, WalletIcon, } from "lucide-react"; import * as React from "react"; import { useNavigate } from "react-router"; import AppAvatar from "src/components/AppAvatar"; import { CommandDialog, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, } from "src/components/ui/command"; import { useApps } from "src/hooks/useApps"; interface CommandPaletteProps { open?: boolean; onOpenChange?: (open: boolean) => void; } export function CommandPalette({ open, onOpenChange }: CommandPaletteProps) { const navigate = useNavigate(); const [searchText, setSearchText] = React.useState(""); const { data: connectedAppsByAppName } = useApps( undefined, undefined, { name: searchText, }, undefined, !!searchText?.length ); const runCommand = React.useCallback( (command: () => void) => { onOpenChange?.(false); setSearchText(""); // hack: run the command after 1ms delay to fix autofocus setTimeout(command, 1); }, [onOpenChange] ); return ( {/* No results found */} runCommand(() => navigate("/home"))} keywords={["dashboard"]} > Home runCommand(() => navigate("/wallet"))}> Wallet runCommand(() => navigate("/apps?tab=connected-apps")) } > Connected Apps runCommand(() => navigate("/sub-wallets"))} > Sub-wallets runCommand(() => navigate("/channels"))} keywords={["node", "liquidity", "channels"]} > Node runCommand(() => navigate("/peers"))}> Peers runCommand(() => navigate("/apps?tab=app-store"))} > App Store runCommand(() => navigate("/wallet/send"))} > Send Payment runCommand(() => navigate("/wallet/receive"))} > Receive Payment runCommand(() => navigate("/wallet/swap"))} > Swap runCommand(() => navigate("/wallet/swap/auto"))} > Auto Swap runCommand(() => navigate("/wallet/receive/invoice")) } > Create Invoice runCommand(() => navigate("/wallet/receive?type=onchain")) } > Receive On-chain runCommand(() => navigate("/wallet/sign-message"))} > Sign Message runCommand(() => navigate("/settings"))} keywords={["theme", "fiat", "currency", "dark"]} > Settings runCommand(() => navigate("/settings/backup"))} > Backup runCommand(() => navigate("/settings/alby-account")) } > Alby Account runCommand(() => navigate("/settings/about"))} > About runCommand(() => navigate("/settings/developer"))} > Developer Settings runCommand(() => navigate("/apps/new"))}> Connect New App runCommand(() => navigate("/sub-wallets/new"))} > Create Sub-wallet runCommand(() => navigate("/channels/incoming"))} > Open Channel runCommand(() => navigate("/peers/new"))} > Connect Peer {!!connectedAppsByAppName?.apps.length && ( {connectedAppsByAppName?.apps.map((app) => ( runCommand(() => navigate(`/apps/${app.id}`))} > {app.name} ))} )} ); }