26 lines
1.3 KiB
TypeScript
26 lines
1.3 KiB
TypeScript
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||
import { api } from "./client.ts";
|
||
import type { CreatedProject, HubSettings, Project } from "./types.ts";
|
||
|
||
// запросы ядра: настройки и проекты; запросы модулей — в web/src/modules/<модуль>/api/queries.ts
|
||
export const qk = {
|
||
settings: ["settings"] as const,
|
||
projects: ["projects"] as const,
|
||
};
|
||
|
||
export const useSettings = () =>
|
||
useQuery({ queryKey: qk.settings, queryFn: () => api.get<HubSettings>("/settings"), staleTime: Infinity });
|
||
|
||
export const useProjects = () =>
|
||
useQuery({ queryKey: qk.projects, queryFn: () => api.get<{ projects?: Project[] }>("/projects").then((r) => r.projects ?? []) });
|
||
|
||
// «Новый проект»: пакет обновления хаб ставит сам (batch_id), автор — viewer, чтобы доска подхватила его ход
|
||
export function useCreateProject() {
|
||
const qc = useQueryClient();
|
||
return useMutation({
|
||
mutationFn: (f: { label: string; name: string; board_id?: number }) =>
|
||
api.post<CreatedProject>("/projects", { ...f, author: "viewer" }),
|
||
onSuccess: () => qc.invalidateQueries({ queryKey: qk.projects }), // ждём список: onCreated уже видит новый проект
|
||
});
|
||
}
|