Spaces:
Paused
Paused
| import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' | |
| import { transformationsApi } from '@/lib/api/transformations' | |
| import { useToast } from '@/lib/hooks/use-toast' | |
| import { useTranslation } from '@/lib/hooks/use-translation' | |
| import { getApiErrorMessage } from '@/lib/utils/error-handler' | |
| import { | |
| CreateTransformationRequest, | |
| UpdateTransformationRequest, | |
| ExecuteTransformationRequest | |
| } from '@/lib/types/transformations' | |
| // Add to QUERY_KEYS in query-client.ts | |
| export const TRANSFORMATION_QUERY_KEYS = { | |
| transformations: ['transformations'] as const, | |
| transformation: (id: string) => ['transformations', id] as const, | |
| defaultPrompt: ['transformations', 'default-prompt'] as const, | |
| } | |
| export function useTransformations() { | |
| return useQuery({ | |
| queryKey: TRANSFORMATION_QUERY_KEYS.transformations, | |
| queryFn: () => transformationsApi.list(), | |
| }) | |
| } | |
| export function useTransformation(id?: string, options?: { enabled?: boolean }) { | |
| const transformationId = id ?? '' | |
| return useQuery({ | |
| queryKey: TRANSFORMATION_QUERY_KEYS.transformation(transformationId), | |
| queryFn: () => transformationsApi.get(transformationId), | |
| enabled: !!transformationId && (options?.enabled ?? true), | |
| }) | |
| } | |
| export function useCreateTransformation() { | |
| const queryClient = useQueryClient() | |
| const { toast } = useToast() | |
| const { t } = useTranslation() | |
| return useMutation({ | |
| mutationFn: (data: CreateTransformationRequest) => transformationsApi.create(data), | |
| onSuccess: () => { | |
| queryClient.invalidateQueries({ queryKey: TRANSFORMATION_QUERY_KEYS.transformations }) | |
| toast({ | |
| title: t('common.success'), | |
| description: t('transformations.createSuccess'), | |
| }) | |
| }, | |
| onError: (error: unknown) => { | |
| toast({ | |
| title: t('common.error'), | |
| description: getApiErrorMessage(error, (key) => t(key)), | |
| variant: 'destructive', | |
| }) | |
| }, | |
| }) | |
| } | |
| export function useUpdateTransformation() { | |
| const queryClient = useQueryClient() | |
| const { toast } = useToast() | |
| const { t } = useTranslation() | |
| return useMutation({ | |
| mutationFn: ({ id, data }: { id: string; data: UpdateTransformationRequest }) => | |
| transformationsApi.update(id, data), | |
| onSuccess: (_, { id }) => { | |
| queryClient.invalidateQueries({ queryKey: TRANSFORMATION_QUERY_KEYS.transformations }) | |
| queryClient.invalidateQueries({ queryKey: TRANSFORMATION_QUERY_KEYS.transformation(id) }) | |
| toast({ | |
| title: t('common.success'), | |
| description: t('transformations.updateSuccess'), | |
| }) | |
| }, | |
| onError: (error: unknown) => { | |
| toast({ | |
| title: t('common.error'), | |
| description: getApiErrorMessage(error, (key) => t(key)), | |
| variant: 'destructive', | |
| }) | |
| }, | |
| }) | |
| } | |
| export function useDeleteTransformation() { | |
| const queryClient = useQueryClient() | |
| const { toast } = useToast() | |
| const { t } = useTranslation() | |
| return useMutation({ | |
| mutationFn: (id: string) => transformationsApi.delete(id), | |
| onSuccess: () => { | |
| queryClient.invalidateQueries({ queryKey: TRANSFORMATION_QUERY_KEYS.transformations }) | |
| toast({ | |
| title: t('common.success'), | |
| description: t('transformations.deleteSuccess'), | |
| }) | |
| }, | |
| onError: (error: unknown) => { | |
| toast({ | |
| title: t('common.error'), | |
| description: getApiErrorMessage(error, (key) => t(key)), | |
| variant: 'destructive', | |
| }) | |
| }, | |
| }) | |
| } | |
| export function useExecuteTransformation() { | |
| const { toast } = useToast() | |
| const { t } = useTranslation() | |
| return useMutation({ | |
| mutationFn: (data: ExecuteTransformationRequest) => transformationsApi.execute(data), | |
| onError: (error: unknown) => { | |
| toast({ | |
| title: t('common.error'), | |
| description: getApiErrorMessage(error, (key) => t(key)), | |
| variant: 'destructive', | |
| }) | |
| }, | |
| }) | |
| } | |
| export function useDefaultPrompt() { | |
| return useQuery({ | |
| queryKey: TRANSFORMATION_QUERY_KEYS.defaultPrompt, | |
| queryFn: () => transformationsApi.getDefaultPrompt(), | |
| }) | |
| } | |
| export function useUpdateDefaultPrompt() { | |
| const queryClient = useQueryClient() | |
| const { toast } = useToast() | |
| const { t } = useTranslation() | |
| return useMutation({ | |
| mutationFn: (prompt: { transformation_instructions: string }) => transformationsApi.updateDefaultPrompt(prompt), | |
| onSuccess: () => { | |
| queryClient.invalidateQueries({ queryKey: TRANSFORMATION_QUERY_KEYS.defaultPrompt }) | |
| toast({ | |
| title: t('common.success'), | |
| description: t('transformations.updateSuccess'), | |
| }) | |
| }, | |
| onError: (error: unknown) => { | |
| toast({ | |
| title: t('common.error'), | |
| description: getApiErrorMessage(error, (key) => t(key)), | |
| variant: 'destructive', | |
| }) | |
| }, | |
| }) | |
| } | |