import { type UseMutationOptions, type UseQueryOptions, useMutation, useQuery, } from "@tanstack/react-query"; import apiService from "./apiService"; import type { HelmRepositories } from "./interfaces"; // Get list of Helm repositories export function useGetRepositories( options?: UseQueryOptions ) { return useQuery({ queryKey: ["helm", "repositories"], queryFn: () => apiService.fetchWithSafeDefaults({ url: "/api/helm/repositories", fallback: [], }), select: (data) => data?.sort((a, b) => a?.name?.localeCompare(b?.name)), ...(options ?? {}), }); } // Update repository from remote export function useUpdateRepo( repo: string, options?: UseMutationOptions ) { return useMutation({ mutationFn: () => { return apiService.fetchWithDefaults( `/api/helm/repositories/${repo}`, { method: "POST", } ); }, ...(options ?? {}), }); } // Remove repository export function useDeleteRepo( repo: string, options?: UseMutationOptions ) { return useMutation({ mutationFn: () => { return apiService.fetchWithDefaults( `/api/helm/repositories/${repo}`, { method: "DELETE", } ); }, ...(options ?? {}), }); } export function useChartRepoValues({ version, chart, }: { version: string; chart: string; }) { return useQuery({ queryKey: ["helm", "repositories", "values", chart, version], queryFn: () => apiService.fetchWithDefaults( `/api/helm/repositories/values?chart=${chart}&version=${version}`, { headers: { "Content-Type": "text/plain; charset=utf-8" }, } ), enabled: Boolean(version) && Boolean(chart), }); }