Fix workspace/request creation race

This commit is contained in:
Gregory Schier
2024-10-22 14:27:12 -07:00
parent 94f8949ca2
commit 5de50c70c6
3 changed files with 20 additions and 5 deletions

View File

@@ -19,7 +19,7 @@ export function useCreateGrpcRequest() {
Partial<Pick<GrpcRequest, 'name' | 'sortPriority' | 'folderId'>> Partial<Pick<GrpcRequest, 'name' | 'sortPriority' | 'folderId'>>
>({ >({
mutationKey: ['create_grpc_request'], mutationKey: ['create_grpc_request'],
mutationFn: (patch) => { mutationFn: async (patch) => {
if (workspace === null) { if (workspace === null) {
throw new Error("Cannot create grpc request when there's no active workspace"); throw new Error("Cannot create grpc request when there's no active workspace");
} }
@@ -33,11 +33,16 @@ export function useCreateGrpcRequest() {
} }
} }
patch.folderId = patch.folderId || activeRequest?.folderId; patch.folderId = patch.folderId || activeRequest?.folderId;
return invokeCmd('cmd_create_grpc_request', { const request = await invokeCmd<GrpcRequest>('cmd_create_grpc_request', {
workspaceId: workspace.id, workspaceId: workspace.id,
name: '', name: '',
...patch, ...patch,
}); });
// Give some time for the workspace to sync to the local store
await new Promise((resolve) => setTimeout(resolve, 100));
return request;
}, },
onSettled: () => trackEvent('grpc_request', 'create'), onSettled: () => trackEvent('grpc_request', 'create'),
onSuccess: async (request) => { onSuccess: async (request) => {

View File

@@ -15,7 +15,7 @@ export function useCreateHttpRequest() {
return useMutation<HttpRequest, unknown, Partial<HttpRequest>>({ return useMutation<HttpRequest, unknown, Partial<HttpRequest>>({
mutationKey: ['create_http_request'], mutationKey: ['create_http_request'],
mutationFn: (patch = {}) => { mutationFn: async (patch = {}) => {
if (workspace === null) { if (workspace === null) {
throw new Error("Cannot create request when there's no active workspace"); throw new Error("Cannot create request when there's no active workspace");
} }
@@ -29,9 +29,14 @@ export function useCreateHttpRequest() {
} }
} }
patch.folderId = patch.folderId || activeRequest?.folderId; patch.folderId = patch.folderId || activeRequest?.folderId;
return invokeCmd('cmd_create_http_request', { const request = await invokeCmd<HttpRequest>('cmd_create_http_request', {
request: { workspaceId: workspace.id, ...patch }, request: { workspaceId: workspace.id, ...patch },
}); });
// Give some time for the workspace to sync to the local store
await new Promise((resolve) => setTimeout(resolve, 100));
return request;
}, },
onSettled: () => trackEvent('http_request', 'create'), onSettled: () => trackEvent('http_request', 'create'),
onSuccess: async (request) => { onSuccess: async (request) => {

View File

@@ -18,7 +18,12 @@ export function useCreateWorkspace() {
placeholder: 'My Workspace', placeholder: 'My Workspace',
confirmText: 'Create', confirmText: 'Create',
}); });
return invokeCmd('cmd_create_workspace', { name }); const workspace = await invokeCmd<Workspace>('cmd_create_workspace', { name });
// Give some time for the workspace to sync to the local store
await new Promise((resolve) => setTimeout(resolve, 100));
return workspace;
}, },
onSuccess: async (workspace) => { onSuccess: async (workspace) => {
routes.navigate('workspace', { workspaceId: workspace.id }); routes.navigate('workspace', { workspaceId: workspace.id });