diff --git a/src/frontend/apps/desk/src/features/teams/api/index.ts b/src/frontend/apps/desk/src/features/teams/api/index.ts index 13c1cac..82a556e 100644 --- a/src/frontend/apps/desk/src/features/teams/api/index.ts +++ b/src/frontend/apps/desk/src/features/teams/api/index.ts @@ -1,4 +1,5 @@ export * from './useCreateTeam'; +export * from './useRemoveTeam'; export * from './useTeam'; export * from './useTeams'; export * from './useUpdateTeam'; diff --git a/src/frontend/apps/desk/src/features/teams/api/useRemoveTeam.tsx b/src/frontend/apps/desk/src/features/teams/api/useRemoveTeam.tsx new file mode 100644 index 0000000..8e78c54 --- /dev/null +++ b/src/frontend/apps/desk/src/features/teams/api/useRemoveTeam.tsx @@ -0,0 +1,51 @@ +import { + UseMutationOptions, + useMutation, + useQueryClient, +} from '@tanstack/react-query'; + +import { APIError, errorCauses, fetchAPI } from '@/api'; + +import { KEY_LIST_TEAM } from './useTeams'; + +interface RemoveTeamProps { + teamId: string; +} + +export const removeTeam = async ({ + teamId, +}: RemoveTeamProps): Promise => { + const response = await fetchAPI(`teams/${teamId}/`, { + method: 'DELETE', + }); + + if (!response.ok) { + throw new APIError( + 'Failed to delete the team', + await errorCauses(response), + ); + } +}; + +type UseRemoveTeamOptions = UseMutationOptions; + +export const useRemoveTeam = (options?: UseRemoveTeamOptions) => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: removeTeam, + ...options, + onSuccess: (data, variables, context) => { + void queryClient.invalidateQueries({ + queryKey: [KEY_LIST_TEAM], + }); + if (options?.onSuccess) { + options.onSuccess(data, variables, context); + } + }, + onError: (error, variables, context) => { + if (options?.onError) { + options.onError(error, variables, context); + } + }, + }); +};