From 904fae469d512a959876be521f45badc8b58cf2d Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Fri, 15 Mar 2024 16:24:29 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(app-desk)=20add=20useCreateTeamAccess?= =?UTF-8?q?=20react-query=20hook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the hook useCreateTeamAccess, it will be used to add a member to a team. --- .../desk/src/features/members/api/index.ts | 1 + .../members/api/useCreateTeamAccess.tsx | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/frontend/apps/desk/src/features/members/api/useCreateTeamAccess.tsx diff --git a/src/frontend/apps/desk/src/features/members/api/index.ts b/src/frontend/apps/desk/src/features/members/api/index.ts index 19da771..f7b78f2 100644 --- a/src/frontend/apps/desk/src/features/members/api/index.ts +++ b/src/frontend/apps/desk/src/features/members/api/index.ts @@ -1,4 +1,5 @@ export * from './useCreateInvitation'; +export * from './useCreateTeamAccess'; export * from './useTeamsAccesses'; export * from './useUpdateTeamAccess'; export * from './useUsers'; diff --git a/src/frontend/apps/desk/src/features/members/api/useCreateTeamAccess.tsx b/src/frontend/apps/desk/src/features/members/api/useCreateTeamAccess.tsx new file mode 100644 index 0000000..b111785 --- /dev/null +++ b/src/frontend/apps/desk/src/features/members/api/useCreateTeamAccess.tsx @@ -0,0 +1,58 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { APIError, errorCauses, fetchAPI } from '@/api'; +import { User } from '@/features/auth'; +import { KEY_LIST_TEAM, KEY_TEAM, Team } from '@/features/teams'; + +import { Access, Role } from '../types'; + +import { KEY_LIST_TEAM_ACCESSES } from '.'; + +interface CreateTeamAccessParams { + name: User['name']; + role: Role; + teamId: Team['id']; + userId: User['id']; +} + +export const createTeamAccess = async ({ + userId, + name, + role, + teamId, +}: CreateTeamAccessParams): Promise => { + const response = await fetchAPI(`teams/${teamId}/accesses/`, { + method: 'POST', + body: JSON.stringify({ + user: userId, + role, + }), + }); + + if (!response.ok) { + throw new APIError( + `Failed to add ${name} in the team.`, + await errorCauses(response), + ); + } + + return response.json() as Promise; +}; + +export function useCreateTeamAccess() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: createTeamAccess, + onSuccess: () => { + void queryClient.invalidateQueries({ + queryKey: [KEY_LIST_TEAM], + }); + void queryClient.invalidateQueries({ + queryKey: [KEY_LIST_TEAM_ACCESSES], + }); + void queryClient.invalidateQueries({ + queryKey: [KEY_TEAM], + }); + }, + }); +}