Fix graphql and other things

This commit is contained in:
Gregory Schier
2023-03-15 09:06:56 -07:00
parent 951ed787fa
commit 8915915c47
15 changed files with 77 additions and 56 deletions

View File

@@ -4,17 +4,13 @@ import type { HttpRequest } from '../lib/models';
import { useRequests } from './useRequests';
export function useActiveRequest(): HttpRequest | null {
const params = useParams<{ requestId?: string }>();
const requests = useRequests();
const { requestId } = useParams<{ requestId?: string }>();
const [activeRequest, setActiveRequest] = useState<HttpRequest | null>(null);
useEffect(() => {
if (requests.length === 0) {
setActiveRequest(null);
} else {
setActiveRequest(requests.find((r) => r.id === params.requestId) ?? null);
}
}, [requests, params.requestId]);
setActiveRequest(requests.find((r) => r.id === requestId) ?? null);
}, [requests, requestId]);
return activeRequest;
}

View File

@@ -4,17 +4,13 @@ import type { Workspace } from '../lib/models';
import { useWorkspaces } from './useWorkspaces';
export function useActiveWorkspace(): Workspace | null {
const params = useParams<{ workspaceId?: string }>();
const workspaces = useWorkspaces();
const { workspaceId } = useParams<{ workspaceId?: string }>();
const [activeWorkspace, setActiveWorkspace] = useState<Workspace | null>(null);
useEffect(() => {
if (workspaces.length === 0) {
setActiveWorkspace(null);
} else {
setActiveWorkspace(workspaces.find((w) => w.id === params.workspaceId) ?? null);
}
}, [workspaces, params.workspaceId]);
setActiveWorkspace(workspaces.find((w) => w.id === workspaceId) ?? null);
}, [workspaces, workspaceId]);
return activeWorkspace;
}

View File

@@ -12,7 +12,7 @@ export function useCreateRequest({ navigateAfter }: { navigateAfter: boolean })
if (workspace === null) {
throw new Error("Cannot create request when there's no active workspace");
}
return invoke('create_request', { ...patch, workspaceId: workspace?.id });
return invoke('create_request', { ...patch, workspaceId: workspace.id });
},
onSuccess: async (requestId) => {
if (navigateAfter) {

View File

@@ -7,11 +7,11 @@ export function useDeleteRequest(request: HttpRequest | null) {
const queryClient = useQueryClient();
return useMutation<void, string>({
mutationFn: async () => {
if (request == null) return;
if (!request) return;
await invoke('delete_request', { requestId: request.id });
},
onSuccess: async () => {
if (request == null) return;
if (!request) return;
await queryClient.invalidateQueries(requestsQueryKey(request.workspaceId));
},
});

View File

@@ -5,11 +5,11 @@ export function useDeleteResponses(requestId?: string) {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async () => {
if (requestId == null) return;
if (!requestId) return;
await invoke('delete_all_responses', { requestId });
},
onSuccess: () => {
if (requestId == null) return;
if (!requestId) return;
queryClient.setQueryData(['responses', { requestId: requestId }], []);
},
});

View File

@@ -1,6 +1,7 @@
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { invoke } from '@tauri-apps/api';
import type { HttpResponse } from '../lib/models';
import { responsesQueryKey } from './useResponses';
export function useDeleteResponse(response: HttpResponse | null) {
const queryClient = useQueryClient();
@@ -12,7 +13,7 @@ export function useDeleteResponse(response: HttpResponse | null) {
onSuccess: () => {
if (response === null) return;
queryClient.setQueryData(
['responses', { requestId: response.requestId }],
responsesQueryKey(response.requestId),
(responses: HttpResponse[] = []) => responses.filter((r) => r.id !== response.id),
);
},

View File

@@ -8,12 +8,14 @@ import {
toggleAppearance,
} from '../lib/theme/window';
const appearanceQueryKey = ['theme', 'appearance'];
export function appearanceQueryKey() {
return ['theme', 'appearance'];
}
export function useTheme() {
const queryClient = useQueryClient();
const appearance = useQuery({
queryKey: appearanceQueryKey,
queryKey: appearanceQueryKey(),
queryFn: getAppearance,
initialData: getAppearance(),
}).data;
@@ -24,12 +26,10 @@ export function useTheme() {
const handleToggleAppearance = async () => {
const newAppearance = toggleAppearance();
await queryClient.setQueryData(appearanceQueryKey, newAppearance);
await queryClient.setQueryData(appearanceQueryKey(), newAppearance);
};
useEffect(() => {
return subscribeToPreferredAppearanceChange(themeChange);
}, []);
useEffect(() => subscribeToPreferredAppearanceChange(themeChange), []);
return {
appearance,

View File

@@ -0,0 +1,16 @@
import { useState } from 'react';
export function useUniqueKey(len = 10): { key: string; regenerate: () => void } {
const [key, setKey] = useState<string>(() => generate(len));
return { key, regenerate: () => setKey(generate(len)) };
}
const CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
function generate(len: number): string {
const chars = [];
for (let i = 0; i < len; i++) {
chars.push(CHARS[Math.floor(Math.random() * CHARS.length)]);
}
return chars.join('');
}