mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-09-22 04:26:18 +00:00
140 lines
4.1 KiB
TypeScript
140 lines
4.1 KiB
TypeScript
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
import { toast } from "sonner";
|
|
|
|
import { useI18n } from "@/core/i18n/hooks";
|
|
|
|
import {
|
|
createScheduledTask,
|
|
deleteScheduledTask,
|
|
fetchScheduledTasks,
|
|
fetchThreadScheduledTasks,
|
|
pauseScheduledTask,
|
|
resumeScheduledTask,
|
|
triggerScheduledTask,
|
|
updateScheduledTask,
|
|
type ScheduledTaskPayload,
|
|
} from "./api";
|
|
|
|
export function useScheduledTasks() {
|
|
return useQuery({
|
|
queryKey: ["scheduled-tasks"],
|
|
queryFn: fetchScheduledTasks,
|
|
refetchInterval: 15000,
|
|
refetchIntervalInBackground: false,
|
|
});
|
|
}
|
|
|
|
export function useThreadScheduledTasks(threadId: string | null | undefined) {
|
|
return useQuery({
|
|
queryKey: ["scheduled-tasks", "thread", threadId],
|
|
queryFn: () => fetchThreadScheduledTasks(threadId ?? ""),
|
|
enabled: Boolean(threadId),
|
|
});
|
|
}
|
|
|
|
export function useCreateScheduledTask() {
|
|
const queryClient = useQueryClient();
|
|
const { t } = useI18n();
|
|
return useMutation({
|
|
mutationFn: (payload: ScheduledTaskPayload) => createScheduledTask(payload),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["scheduled-tasks"] });
|
|
},
|
|
onError: (error: Error) => {
|
|
toast.error(`${t.scheduledTasks.errors.create}: ${error.message}`);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useUpdateScheduledTask(taskId: string) {
|
|
const queryClient = useQueryClient();
|
|
const { t } = useI18n();
|
|
return useMutation({
|
|
mutationFn: (
|
|
payload: Partial<
|
|
Omit<ScheduledTaskPayload, "thread_id" | "schedule_type">
|
|
>,
|
|
) => updateScheduledTask(taskId, payload),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["scheduled-tasks"] });
|
|
void queryClient.invalidateQueries({
|
|
queryKey: ["scheduled-tasks", "thread"],
|
|
});
|
|
},
|
|
onError: (error: Error) => {
|
|
toast.error(`${t.scheduledTasks.errors.update}: ${error.message}`);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function usePauseScheduledTask() {
|
|
const queryClient = useQueryClient();
|
|
const { t } = useI18n();
|
|
return useMutation({
|
|
mutationFn: (taskId: string) => pauseScheduledTask(taskId),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["scheduled-tasks"] });
|
|
void queryClient.invalidateQueries({
|
|
queryKey: ["scheduled-tasks", "thread"],
|
|
});
|
|
},
|
|
onError: (error: Error) => {
|
|
toast.error(`${t.scheduledTasks.errors.pause}: ${error.message}`);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useResumeScheduledTask() {
|
|
const queryClient = useQueryClient();
|
|
const { t } = useI18n();
|
|
return useMutation({
|
|
mutationFn: (taskId: string) => resumeScheduledTask(taskId),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["scheduled-tasks"] });
|
|
void queryClient.invalidateQueries({
|
|
queryKey: ["scheduled-tasks", "thread"],
|
|
});
|
|
},
|
|
onError: (error: Error) => {
|
|
toast.error(`${t.scheduledTasks.errors.resume}: ${error.message}`);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useTriggerScheduledTask() {
|
|
const queryClient = useQueryClient();
|
|
const { t } = useI18n();
|
|
return useMutation({
|
|
mutationFn: (taskId: string) => triggerScheduledTask(taskId),
|
|
onSuccess: (_result, taskId) => {
|
|
void queryClient.invalidateQueries({ queryKey: ["scheduled-tasks"] });
|
|
void queryClient.invalidateQueries({
|
|
queryKey: ["scheduled-tasks", "thread"],
|
|
});
|
|
void queryClient.invalidateQueries({
|
|
queryKey: ["scheduled-tasks", "runs", taskId],
|
|
});
|
|
},
|
|
onError: (error: Error) => {
|
|
toast.error(`${t.scheduledTasks.errors.trigger}: ${error.message}`);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteScheduledTask() {
|
|
const queryClient = useQueryClient();
|
|
const { t } = useI18n();
|
|
return useMutation({
|
|
mutationFn: (taskId: string) => deleteScheduledTask(taskId),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["scheduled-tasks"] });
|
|
void queryClient.invalidateQueries({
|
|
queryKey: ["scheduled-tasks", "thread"],
|
|
});
|
|
},
|
|
onError: (error: Error) => {
|
|
toast.error(`${t.scheduledTasks.errors.delete}: ${error.message}`);
|
|
},
|
|
});
|
|
}
|