UNPKG

prodobit

Version:

Open-core business application development platform

74 lines (64 loc) 2.73 kB
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useProdobitClient } from '../providers/ProdobitProvider'; import { queryKeys } from '../utils/query-keys'; import type { QueryOptions, MutationOptions, AttributeQuery, Pagination } from '../types'; import type { Attribute, CreateAttributeRequest, UpdateAttributeRequest, Response, PaginatedResponse } from '@prodobit/types'; export const useAttributes = ( query?: AttributeQuery & Pagination, options?: QueryOptions ) => { const client = useProdobitClient(); return useQuery<PaginatedResponse<Attribute[]>, Error>({ queryKey: queryKeys.attributes.list(query), queryFn: () => client.getAttributes(query), ...options, }); }; export const useAttribute = (id: string, options?: QueryOptions) => { const client = useProdobitClient(); return useQuery<Response<Attribute>, Error>({ queryKey: queryKeys.attributes.detail(id), queryFn: () => client.getAttribute(id), enabled: !!id && options?.enabled !== false, ...options, }); }; export const useCreateAttribute = (options?: MutationOptions) => { const client = useProdobitClient(); const queryClient = useQueryClient(); return useMutation<Response<Attribute>, Error, CreateAttributeRequest>({ mutationFn: (data: CreateAttributeRequest) => client.createAttribute(data), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: queryKeys.attributes.all() }); options?.onSuccess?.(data); }, onError: options?.onError, }); }; export const useUpdateAttribute = (options?: MutationOptions) => { const client = useProdobitClient(); const queryClient = useQueryClient(); return useMutation<Response<Attribute>, Error, { id: string; data: UpdateAttributeRequest }>({ mutationFn: ({ id, data }: { id: string; data: UpdateAttributeRequest }) => client.updateAttribute(id, data), onSuccess: (data, variables) => { queryClient.invalidateQueries({ queryKey: queryKeys.attributes.all() }); queryClient.invalidateQueries({ queryKey: queryKeys.attributes.detail(variables.id) }); options?.onSuccess?.(data); }, onError: options?.onError, }); }; export const useDeleteAttribute = (options?: MutationOptions) => { const client = useProdobitClient(); const queryClient = useQueryClient(); return useMutation<Response<void>, Error, string>({ mutationFn: (id: string) => client.deleteAttribute(id), onSuccess: (data, id) => { queryClient.invalidateQueries({ queryKey: queryKeys.attributes.all() }); queryClient.removeQueries({ queryKey: queryKeys.attributes.detail(id) }); options?.onSuccess?.(data); }, onError: options?.onError, }); };