@@ -12,17 +12,25 @@ import { useResponseActions } from '@/state/responseStore';
1212import { ArrowRight , Loader2 } from 'lucide-react' ;
1313import { showError } from '@/error/errorHandler' ;
1414import { REQUEST_MODEL } from '@/lib/monaco/models' ;
15+ import { useGlobalHotkeys } from '@/hooks/useGlobalHotkeys' ;
16+ import { NamingModal } from '@/components/sidebar/SidebarRequestList/Nav/Dropdown/modals/NamingModal' ;
17+ import { Collection } from 'shim/objects/collection' ;
1518
1619const httpService = HttpService . instance ;
1720const eventService = RendererEventService . instance ;
1821
1922export function MainTopBar ( ) {
2023 const [ hasError , setHasError ] = useState ( false ) ;
2124 const [ isLoading , setIsLoading ] = useState ( false ) ;
25+ const [ modalState , setModalState ] = useState ( {
26+ isOpen : false ,
27+ type : 'request' as 'request' | 'folder' ,
28+ } ) ;
2229
2330 const { updateRequest } = useCollectionActions ( ) ;
2431 const { addResponse } = useResponseActions ( ) ;
2532 const request = useCollectionStore ( selectRequest ) ;
33+ const collection = useCollectionStore ( ( state ) => state . collection ) ;
2634 const selectedHttpMethod = request ?. method ;
2735 const url = request ?. url ;
2836
@@ -62,57 +70,54 @@ export function MainTopBar() {
6270 useErrorHandler ( async ( ) => {
6371 if ( request == null ) return ;
6472
65- // save request draft with the current editor content
6673 console . info ( 'Saving request:' , request ) ;
6774 await eventService . saveRequest ( request , REQUEST_MODEL . getValue ( ) ) ;
68-
69- // override existing request with the saved draft
7075 updateRequest ( await eventService . saveChanges ( request ) , true ) ;
7176 } ) ,
7277 [ request ]
7378 ) ;
7479
75- // useEffect to reset error state when URL and method are valid
80+ const openRequestModal = ( ) => setModalState ( { isOpen : true , type : 'request' } ) ;
81+
82+ useGlobalHotkeys ( {
83+ onSendRequest : sendRequest ,
84+ onSaveRequest : saveRequest ,
85+ onCreateNewRequest : openRequestModal ,
86+ } ) ;
87+
7688 useEffect ( ( ) => {
7789 if ( request ?. url && request ?. method ) {
7890 setHasError ( false ) ;
7991 }
8092 } , [ request ] ) ;
8193
82- useEffect ( ( ) => {
83- const handleKeyDown = ( event : KeyboardEvent ) => {
84- //isSaveShortcut is true if save combination is recorded
85- const isSaveShortcut = ( event . ctrlKey || event . metaKey ) && event . key . toLowerCase ( ) === 's' ;
86- //if save combination is pressed and request is in draft mode, perform save
87- if ( isSaveShortcut && request ?. draft ) {
88- event . preventDefault ( ) ;
89- saveRequest ( ) ;
90- }
91- } ;
92- //add keyboard event listener
93- window . addEventListener ( 'keydown' , handleKeyDown ) ;
94- //cleanup
95- return ( ) => {
96- window . removeEventListener ( 'keydown' , handleKeyDown ) ;
97- } ;
98- } , [ saveRequest ] ) ;
99-
10094 return (
101- < div className = "mb-[24px] flex gap-6" >
102- < div className = "relative flex w-full" >
103- < HttpMethodSelect
104- selectedHttpMethod = { selectedHttpMethod }
105- onHttpMethodChange = { handleHttpMethodChange }
106- />
107-
108- < UrlInput url = { url } onUrlChange = { handleUrlChange } hasError = { hasError } />
109-
110- < SaveButton isDisabled = { ! request ?. draft } onClick = { saveRequest } />
95+ < >
96+ < div className = "mb-[24px] flex gap-6" >
97+ < div className = "relative flex w-full" >
98+ < HttpMethodSelect
99+ selectedHttpMethod = { selectedHttpMethod }
100+ onHttpMethodChange = { handleHttpMethodChange }
101+ />
102+
103+ < UrlInput url = { url } onUrlChange = { handleUrlChange } hasError = { hasError } />
104+
105+ < SaveButton isDisabled = { ! request ?. draft } onClick = { saveRequest } />
106+ </ div >
107+
108+ < SendButton onClick = { sendRequest } disabled = { isLoading } >
109+ { isLoading ? < Loader2 className = "h-5 w-5 animate-spin" /> : < ArrowRight /> }
110+ </ SendButton >
111111 </ div >
112112
113- < SendButton onClick = { sendRequest } disabled = { isLoading } >
114- { isLoading ? < Loader2 className = "h-5 w-5 animate-spin" /> : < ArrowRight /> }
115- </ SendButton >
116- </ div >
113+ { modalState . isOpen && (
114+ < NamingModal
115+ isOpen = { modalState . isOpen }
116+ trufosObject = { collection as Collection }
117+ createType = { modalState . type }
118+ setOpen = { ( open ) => setModalState ( { isOpen : open , type : modalState . type } ) }
119+ />
120+ ) }
121+ </ >
117122 ) ;
118123}
0 commit comments