Skip to content

Instantly share code, notes, and snippets.

@rohmanhm
Created November 11, 2023 14:29
Show Gist options
  • Save rohmanhm/43e73167b7353c5b19aae0f03ba8ae57 to your computer and use it in GitHub Desktop.
Save rohmanhm/43e73167b7353c5b19aae0f03ba8ae57 to your computer and use it in GitHub Desktop.

Filename

use{Service}{Action}.mutation.ts

Code

import { MutationOptions, useMutation } from '@tanstack/react-query';

import { PayloadType } from '@/types/api';

type Params = {
  anything: any
  payload: PayloadType;
};

/**
 * @example:
 * serviceAction
 */
export const serviceAction = async (
  params: Params
): Promise<string> => {
  const response = await fetch(`endpoint`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(params.payload),
  })
  return response.json() as Promise<any>;
};

/**
 * @example:
 * useServiceActionMutation
 */
const useServiceActionMutation = (
  options?: MutationOptions<string, Error, Params, unknown>
) => {
  return useMutation((params: Params) => serviceAction(params), {
    ...options,
  });
};

export default useServiceActionMutation;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment