ln/app/client/hooks/useToastMutation.tsx

38 lines
940 B
TypeScript

import {
ApolloCache,
DefaultContext,
DocumentNode,
FetchResult,
MaybeMasked,
MutationFunctionOptions,
OperationVariables,
useMutation
} from '@apollo/client';
import { toaster } from '../components/ui/toaster';
interface UseToastMutationProps {
mutation: DocumentNode;
successMsg?: string;
}
interface UseToastMutationReturn<T> {
update: (
options?:
| MutationFunctionOptions<T, OperationVariables, DefaultContext, ApolloCache<any>>
| undefined
) => Promise<FetchResult<MaybeMasked<T>>>;
}
export function useToastMutation<T>(props: UseToastMutationProps): UseToastMutationReturn<T> {
const [update] = useMutation<T>(props.mutation, {
onCompleted: () => toaster.create({ description: props.successMsg, type: 'success' }),
onError: error => {
toaster.create({ description: `${error.message}`, type: 'error' });
console.error(error);
}
});
return {
update
};
}