import { useMutation, useQueryClient } from 'react-query'; import { getApiBaseUrl } from './getApiBaseUrl'; import { useClient } from './useClient'; import { invalidateQueriesByEntityName } from './invalidateQueriesByEntityName'; import { useErrorHandler } from './useErrorHandler'; import { AxiosRequestConfig } from 'axios'; export interface UseSaveItemOptions { entityName: string; t?: (english?: string) => string | undefined; requestConfig?: AxiosRequestConfig; errorMessage?: string; } export const useSaveItem = <T extends { id: string }>({ entityName, t = (english?: string) => english, requestConfig = {}, errorMessage, }: UseSaveItemOptions) => { const { post } = useClient(); const { errorHandler } = useErrorHandler({ message: errorMessage ?? 'Save failed.', t }); const queryClient = useQueryClient(); return useMutation((model: T) => post(`${getApiBaseUrl(entityName)}`, model, requestConfig), { onError: errorHandler, onSuccess: () => { setTimeout(() => invalidateQueriesByEntityName(queryClient)(entityName), 250); }, }); };