mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-17 23:14:03 +01:00
Fix graphql and other things
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
},
|
||||
});
|
||||
|
||||
@@ -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 }], []);
|
||||
},
|
||||
});
|
||||
|
||||
@@ -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),
|
||||
);
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
|
||||
16
src-web/hooks/useUniqueKey.ts
Normal file
16
src-web/hooks/useUniqueKey.ts
Normal 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('');
|
||||
}
|
||||
Reference in New Issue
Block a user