Render gRPC request for reflection.

Closes https://feedback.yaak.app/p/grpc-address-reflection-and-address-bar-issues
This commit is contained in:
Gregory Schier
2025-03-31 12:26:07 -07:00
parent 92be088e6c
commit e114a85c39
2 changed files with 29 additions and 6 deletions

View File

@@ -138,11 +138,30 @@ async fn cmd_dismiss_notification<R: Runtime>(
#[tauri::command]
async fn cmd_grpc_reflect<R: Runtime>(
request_id: &str,
environment_id: Option<&str>,
proto_files: Vec<String>,
window: WebviewWindow<R>,
app_handle: AppHandle<R>,
grpc_handle: State<'_, Mutex<GrpcHandle>>,
) -> YaakResult<Vec<ServiceDefinition>> {
let req = app_handle.db().get_grpc_request(request_id)?;
let environment = match environment_id {
Some(id) => app_handle.db().get_environment(id).ok(),
None => None,
};
let unrendered_request = app_handle.db().get_grpc_request(request_id)?;
let base_environment =
app_handle.db().get_base_environment(&unrendered_request.workspace_id)?;
let req = render_grpc_request(
&unrendered_request,
&base_environment,
environment.as_ref(),
&PluginTemplateCallback::new(
&app_handle,
&WindowContext::from_window(&window),
RenderPurpose::Send,
),
)
.await?;
let uri = safe_uri(&req.url);
@@ -186,6 +205,7 @@ async fn cmd_grpc_go<R: Runtime>(
),
)
.await?;
let mut metadata = BTreeMap::new();
// Add the rest of metadata

View File

@@ -1,9 +1,10 @@
import { useMutation, useQuery } from '@tanstack/react-query';
import { emit } from '@tauri-apps/api/event';
import type { GrpcConnection, GrpcRequest } from '@yaakapp-internal/models';
import {jotaiStore} from "../lib/jotai";
import { minPromiseMillis } from '../lib/minPromiseMillis';
import { invokeCmd } from '../lib/tauri';
import { useActiveEnvironment } from './useActiveEnvironment';
import {activeEnvironmentIdAtom, useActiveEnvironment} from './useActiveEnvironment';
import { useDebouncedValue } from './useDebouncedValue';
export interface ReflectResponseService {
@@ -46,11 +47,13 @@ export function useGrpc(
const reflect = useQuery<ReflectResponseService[], string>({
enabled: req != null,
queryKey: ['grpc_reflect', req?.id ?? 'n/a', debouncedUrl, protoFiles],
queryFn: () =>
minPromiseMillis<ReflectResponseService[]>(
invokeCmd('cmd_grpc_reflect', { requestId, protoFiles }),
queryFn: () => {
const environmentId = jotaiStore.get(activeEnvironmentIdAtom);
return minPromiseMillis<ReflectResponseService[]>(
invokeCmd('cmd_grpc_reflect', { requestId, protoFiles, environmentId }),
300,
),
);
},
});
return {