1+ "use client"
2+
3+ import {
4+ Command ,
5+ CommandGroup ,
6+ CommandInput ,
7+ CommandItem ,
8+ CommandList ,
9+ CommandSeparator ,
10+ } from "cmdk"
11+
12+ import {
13+ Activity ,
14+ AlertTriangle ,
15+ BarChart3 ,
16+ Boxes ,
17+ Cable ,
18+ Radio ,
19+ } from "lucide-react"
20+
21+ import { useRouter } from "next/navigation"
22+
23+ import { useCommandStore } from "@/app/stores/command-store"
24+
25+ import { useCommandMenu } from "@/hooks/use-command-menu"
26+
27+ export function CommandMenu ( ) {
28+ useCommandMenu ( )
29+
30+ const router = useRouter ( )
31+
32+ const open =
33+ useCommandStore (
34+ ( s ) => s . open
35+ )
36+
37+ const setOpen =
38+ useCommandStore (
39+ ( s ) => s . setOpen
40+ )
41+
42+ return (
43+ < >
44+ { open && (
45+ < div
46+ className = "
47+ fixed inset-0 z-[100]
48+ bg-black/50
49+ backdrop-blur-sm
50+ "
51+ onClick = { ( ) =>
52+ setOpen ( false )
53+ }
54+ />
55+ ) }
56+
57+ < div
58+ className = { `
59+ fixed left-1/2 top-[18%]
60+ z-[101]
61+ w-full max-w-2xl
62+ -translate-x-1/2
63+ transition-all duration-200
64+ ${
65+ open
66+ ? "opacity-100 scale-100"
67+ : "pointer-events-none opacity-0 scale-95"
68+ }
69+ ` }
70+ >
71+
72+ < Command
73+ className = "
74+ overflow-hidden rounded-2xl
75+ border border-border
76+ bg-background
77+ shadow-2xl
78+ "
79+ >
80+
81+ < CommandInput
82+ placeholder = "Search commands..."
83+ className = "
84+ h-14 w-full border-b
85+ border-border bg-transparent
86+ px-4 text-sm outline-none
87+ "
88+ />
89+
90+ < CommandList className = "max-h-[420px] overflow-y-auto p-2" >
91+
92+ < CommandGroup heading = "Navigation" >
93+
94+ < CommandItem
95+ onSelect = { ( ) => {
96+ router . push ( "/events" )
97+ setOpen ( false )
98+ } }
99+ className = "command-item"
100+ >
101+ < Activity className = "h-4 w-4" />
102+ Events
103+ </ CommandItem >
104+
105+ < CommandItem
106+ onSelect = { ( ) => {
107+ router . push ( "/metrics" )
108+ setOpen ( false )
109+ } }
110+ className = "command-item"
111+ >
112+ < BarChart3 className = "h-4 w-4" />
113+ Metrics
114+ </ CommandItem >
115+
116+ < CommandItem
117+ onSelect = { ( ) => {
118+ router . push ( "/dlq" )
119+ setOpen ( false )
120+ } }
121+ className = "command-item"
122+ >
123+ < AlertTriangle className = "h-4 w-4" />
124+ Dead Letter Queue
125+ </ CommandItem >
126+
127+ < CommandItem
128+ onSelect = { ( ) => {
129+ router . push ( "/integrations" )
130+ setOpen ( false )
131+ } }
132+ className = "command-item"
133+ >
134+ < Cable className = "h-4 w-4" />
135+ Integrations
136+ </ CommandItem >
137+
138+ < CommandItem
139+ onSelect = { ( ) => {
140+ router . push ( "/streams" )
141+ setOpen ( false )
142+ } }
143+ className = "command-item"
144+ >
145+ < Radio className = "h-4 w-4" />
146+ Streams
147+ </ CommandItem >
148+
149+ < CommandItem
150+ onSelect = { ( ) => {
151+ router . push ( "/delivery-targets" )
152+ setOpen ( false )
153+ } }
154+ className = "command-item"
155+ >
156+ < Boxes className = "h-4 w-4" />
157+ Delivery Targets
158+ </ CommandItem >
159+
160+ </ CommandGroup >
161+
162+ < CommandSeparator />
163+
164+ </ CommandList >
165+
166+ </ Command >
167+ </ div >
168+ </ >
169+ )
170+ }
0 commit comments