118 lines
3.0 KiB
TypeScript
118 lines
3.0 KiB
TypeScript
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
|
|
import {
|
|
getDNSProviders,
|
|
getDNSProvider,
|
|
getDNSProviderTypes,
|
|
createDNSProvider,
|
|
updateDNSProvider,
|
|
deleteDNSProvider,
|
|
testDNSProvider,
|
|
testDNSProviderCredentials,
|
|
type DNSProvider,
|
|
type DNSProviderRequest,
|
|
type DNSProviderTypeInfo,
|
|
type DNSProviderField,
|
|
type DNSTestResult,
|
|
} from '../api/dnsProviders'
|
|
|
|
/** Query key factory for DNS providers */
|
|
const queryKeys = {
|
|
all: ['dns-providers'] as const,
|
|
lists: () => [...queryKeys.all, 'list'] as const,
|
|
list: () => [...queryKeys.lists()] as const,
|
|
details: () => [...queryKeys.all, 'detail'] as const,
|
|
detail: (id: number) => [...queryKeys.details(), id] as const,
|
|
types: () => [...queryKeys.all, 'types'] as const,
|
|
}
|
|
|
|
/**
|
|
* Hook for fetching all DNS providers.
|
|
* @returns Query result with providers array
|
|
*/
|
|
export function useDNSProviders() {
|
|
return useQuery({
|
|
queryKey: queryKeys.list(),
|
|
queryFn: getDNSProviders,
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Hook for fetching a single DNS provider.
|
|
* @param id - DNS provider ID
|
|
* @returns Query result with provider data
|
|
*/
|
|
export function useDNSProvider(id: number) {
|
|
return useQuery({
|
|
queryKey: queryKeys.detail(id),
|
|
queryFn: () => getDNSProvider(id),
|
|
enabled: id > 0,
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Hook for fetching supported DNS provider types.
|
|
* @returns Query result with provider types array
|
|
*/
|
|
export function useDNSProviderTypes() {
|
|
return useQuery({
|
|
queryKey: queryKeys.types(),
|
|
queryFn: getDNSProviderTypes,
|
|
staleTime: 1000 * 60 * 60, // 1 hour - types rarely change
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Hook providing DNS provider mutation operations.
|
|
* @returns Object with mutation functions for create, update, delete, and test
|
|
*/
|
|
export function useDNSProviderMutations() {
|
|
const queryClient = useQueryClient()
|
|
|
|
const createMutation = useMutation({
|
|
mutationFn: (data: DNSProviderRequest) => createDNSProvider(data),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: queryKeys.list() })
|
|
},
|
|
})
|
|
|
|
const updateMutation = useMutation({
|
|
mutationFn: ({ id, data }: { id: number; data: DNSProviderRequest }) =>
|
|
updateDNSProvider(id, data),
|
|
onSuccess: (_, variables) => {
|
|
queryClient.invalidateQueries({ queryKey: queryKeys.list() })
|
|
queryClient.invalidateQueries({ queryKey: queryKeys.detail(variables.id) })
|
|
},
|
|
})
|
|
|
|
const deleteMutation = useMutation({
|
|
mutationFn: (id: number) => deleteDNSProvider(id),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: queryKeys.list() })
|
|
},
|
|
})
|
|
|
|
const testMutation = useMutation({
|
|
mutationFn: (id: number) => testDNSProvider(id),
|
|
})
|
|
|
|
const testCredentialsMutation = useMutation({
|
|
mutationFn: (data: DNSProviderRequest) => testDNSProviderCredentials(data),
|
|
})
|
|
|
|
return {
|
|
createMutation,
|
|
updateMutation,
|
|
deleteMutation,
|
|
testMutation,
|
|
testCredentialsMutation,
|
|
}
|
|
}
|
|
|
|
export type {
|
|
DNSProvider,
|
|
DNSProviderRequest,
|
|
DNSProviderTypeInfo,
|
|
DNSProviderField,
|
|
DNSTestResult,
|
|
}
|