diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 052e50d5..bc995472 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -7,7 +7,7 @@ #[macro_use] extern crate objc; -use crate::models::{find_environments, generate_id}; +use crate::models::generate_id; use base64::Engine; use http::header::{HeaderName, ACCEPT, USER_AGENT}; use http::{HeaderMap, HeaderValue, Method}; @@ -64,28 +64,27 @@ async fn migrate_db( #[tauri::command] async fn send_ephemeral_request( request: models::HttpRequest, + environment_id: &str, app_handle: AppHandle, db_instance: State<'_, Mutex>>, ) -> Result { let pool = &*db_instance.lock().await; let response = models::HttpResponse::default(); - return actually_send_ephemeral_request(request, &response, &app_handle, pool).await; + return actually_send_ephemeral_request(request, &response, &environment_id, &app_handle, pool).await; } async fn actually_send_ephemeral_request( request: models::HttpRequest, response: &models::HttpResponse, + environment_id: &str, app_handle: &AppHandle, pool: &Pool, ) -> Result { let start = std::time::Instant::now(); - let environments = find_environments(&request.workspace_id, pool) - .await - .expect("Failed to find environments"); + let environment = models::get_environment(environment_id, pool).await.ok(); // TODO: Use active environment - let environment = environments.first(); let mut url_string = match environment { Some(e) => render::render(&request.url, e.clone()), None => request.url.to_string(), @@ -250,6 +249,7 @@ async fn send_request( window: Window, db_instance: State<'_, Mutex>>, request_id: &str, + environment_id: Option<&str>, ) -> Result { let pool = &*db_instance.lock().await; @@ -262,10 +262,12 @@ async fn send_request( .expect("Failed to create response"); let response2 = response.clone(); + let environment_id2 = environment_id.unwrap_or("n/a").to_string(); let app_handle2 = window.app_handle().clone(); let pool2 = pool.clone(); + tokio::spawn(async move { - actually_send_ephemeral_request(req, &response2, &app_handle2, &pool2) + actually_send_ephemeral_request(req, &response2, &environment_id2, &app_handle2, &pool2) .await .expect("Failed to send request"); }); diff --git a/src-web/components/RequestPane.tsx b/src-web/components/RequestPane.tsx index 065de782..4e20431a 100644 --- a/src-web/components/RequestPane.tsx +++ b/src-web/components/RequestPane.tsx @@ -30,6 +30,7 @@ import { GraphQLEditor } from './GraphQLEditor'; import { HeaderEditor } from './HeaderEditor'; import { ParametersEditor } from './ParameterEditor'; import { UrlBar } from './UrlBar'; +import { useActiveEnvironmentId } from '../hooks/useActiveEnvironmentId'; interface Props { style?: CSSProperties; @@ -42,6 +43,7 @@ const useActiveTab = createGlobalState('body'); export const RequestPane = memo(function RequestPane({ style, fullHeight, className }: Props) { const activeRequest = useActiveRequest(); const activeRequestId = activeRequest?.id ?? null; + const activeEnvironmentId = useActiveEnvironmentId(); const updateRequest = useUpdateRequest(activeRequestId); const [activeTab, setActiveTab] = useActiveTab(); const [forceUpdateHeaderEditorKey, setForceUpdateHeaderEditorKey] = useState(0); @@ -144,9 +146,9 @@ export const RequestPane = memo(function RequestPane({ style, fullHeight, classN 'send_request', async ({ windowLabel }) => { if (windowLabel !== appWindow.label) return; - await invoke('send_request', { requestId: activeRequestId }); + await invoke('send_request', { requestId: activeRequestId, environmentId: activeEnvironmentId }); }, - [activeRequestId], + [activeRequestId, activeEnvironmentId], ); return ( diff --git a/src-web/components/Sidebar.tsx b/src-web/components/Sidebar.tsx index 208c38e8..b2a8062a 100644 --- a/src-web/components/Sidebar.tsx +++ b/src-web/components/Sidebar.tsx @@ -23,6 +23,8 @@ import { useActiveEnvironmentId } from '../hooks/useActiveEnvironmentId'; import { WorkspaceActionsDropdown } from './WorkspaceActionsDropdown'; import { IconButton } from './core/IconButton'; import { useCreateRequest } from '../hooks/useCreateRequest'; +import { appWindow } from '@tauri-apps/api/window'; +import { invoke } from '@tauri-apps/api'; interface Props { className?: string; @@ -48,6 +50,9 @@ export const Sidebar = memo(function Sidebar({ className }: Props) { const [hasFocus, setHasFocus] = useState(false); const [selectedIndex, setSelectedIndex] = useState(); + // TODO: Move these listeners to a central place + useListenToTauriEvent('create_request', async () => createRequest.mutate({})); + const focusActiveRequest = useCallback( (forcedIndex?: number) => { const index = forcedIndex ?? requests.findIndex((r) => r.id === activeRequestId); @@ -169,7 +174,12 @@ export const Sidebar = memo(function Sidebar({ className }: Props) { className="text-left mb-0" justify="start" /> - createRequest.mutate({})} /> + createRequest.mutate({})} + /> (function Editor( }: EditorProps, ref, ) { - const environments = useEnvironments(); - const environment = environments[0] ?? null; + const environment = useActiveEnvironment(); const cm = useRef<{ view: EditorView; languageCompartment: Compartment } | null>(null); useImperativeHandle(ref, () => cm.current?.view); @@ -121,7 +121,6 @@ const _Editor = forwardRef(function Editor( if (cm.current === null) return; const { view, languageCompartment } = cm.current; const ext = getLanguageExtension({ contentType, environment, useTemplating, autocomplete }); - console.log("EXT", ext); view.dispatch({ effects: languageCompartment.reconfigure(ext) }); }, [contentType, autocomplete, useTemplating, environment]); diff --git a/src-web/hooks/useSendRequest.ts b/src-web/hooks/useSendRequest.ts index fd4d970b..4d640434 100644 --- a/src-web/hooks/useSendRequest.ts +++ b/src-web/hooks/useSendRequest.ts @@ -1,9 +1,11 @@ import { useMutation } from '@tanstack/react-query'; import { invoke } from '@tauri-apps/api'; import type { HttpResponse } from '../lib/models'; +import { useActiveEnvironmentId } from './useActiveEnvironmentId'; export function useSendRequest(id: string | null) { + const environmentId = useActiveEnvironmentId(); return useMutation({ - mutationFn: () => invoke('send_request', { requestId: id }), + mutationFn: () => invoke('send_request', { requestId: id, environmentId }), }).mutate; }