# Conflicts: # frontend-web/src/components/workspace/agents/agent-gallery.tsx # frontend-web/src/components/workspace/settings/skill-settings-page.tsx
123 lines
3.3 KiB
TypeScript
123 lines
3.3 KiB
TypeScript
import {
|
|
keepPreviousData,
|
|
useMutation,
|
|
useQuery,
|
|
useQueryClient,
|
|
} from "@tanstack/react-query";
|
|
|
|
import {
|
|
deleteCustomSkill,
|
|
enableSkill,
|
|
getSkillContent,
|
|
installSkillUpload,
|
|
setSkillPinned,
|
|
setSkillPublished,
|
|
setSkillState,
|
|
validateSkillUpload,
|
|
} from "./api";
|
|
import type { SkillState } from "./type";
|
|
|
|
import { loadSkills } from ".";
|
|
|
|
export function useSkills(params: { search?: string; tagId?: string | null } = {}) {
|
|
const search = params.search ?? "";
|
|
const tagId = params.tagId ?? null;
|
|
const { data, isLoading, error } = useQuery({
|
|
queryKey: ["skills", search, tagId],
|
|
queryFn: () => loadSkills({ search, tagId }),
|
|
placeholderData: keepPreviousData,
|
|
});
|
|
return { skills: data ?? [], isLoading, error };
|
|
}
|
|
|
|
export function useSkillContent(skillName: string | null) {
|
|
return useQuery({
|
|
queryKey: ["skill-content", skillName],
|
|
queryFn: () => getSkillContent(skillName!),
|
|
enabled: !!skillName,
|
|
});
|
|
}
|
|
|
|
export function useEnableSkill() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: async ({
|
|
skillName,
|
|
enabled,
|
|
}: {
|
|
skillName: string;
|
|
enabled: boolean;
|
|
}) => {
|
|
await enableSkill(skillName, enabled);
|
|
},
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["skills"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useValidateSkillUpload() {
|
|
return useMutation({
|
|
mutationFn: (file: File) => validateSkillUpload(file),
|
|
});
|
|
}
|
|
|
|
export function useInstallSkillUpload() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ file, overwrite, targetCategory }: { file: File; overwrite?: boolean; targetCategory?: "public" | "custom" }) =>
|
|
installSkillUpload(file, { overwrite, targetCategory }),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["skills"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useSetSkillPublished() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({
|
|
skillName,
|
|
published,
|
|
}: {
|
|
skillName: string;
|
|
published: boolean;
|
|
}) => setSkillPublished(skillName, published),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["skills"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useSetSkillState() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ skillName, state }: { skillName: string; state: SkillState }) =>
|
|
setSkillState(skillName, state),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["skills"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useSetSkillPinned() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ skillName, pinned }: { skillName: string; pinned: boolean }) =>
|
|
setSkillPinned(skillName, pinned),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["skills"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteCustomSkill() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (skillName: string) => deleteCustomSkill(skillName),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["skills"] });
|
|
},
|
|
});
|
|
}
|