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 fef12de..19da771 100644 --- a/src/frontend/apps/desk/src/features/members/api/index.ts +++ b/src/frontend/apps/desk/src/features/members/api/index.ts @@ -1,3 +1,4 @@ +export * from './useCreateInvitation'; export * from './useTeamsAccesses'; export * from './useUpdateTeamAccess'; export * from './useUsers'; diff --git a/src/frontend/apps/desk/src/features/members/api/useCreateInvitation.tsx b/src/frontend/apps/desk/src/features/members/api/useCreateInvitation.tsx new file mode 100644 index 0000000..5a38f94 --- /dev/null +++ b/src/frontend/apps/desk/src/features/members/api/useCreateInvitation.tsx @@ -0,0 +1,42 @@ +import { useMutation } from '@tanstack/react-query'; + +import { APIError, errorCauses, fetchAPI } from '@/api'; +import { User } from '@/features/auth'; +import { Team } from '@/features/teams'; + +import { Invitation, Role } from '../types'; + +interface CreateInvitationParams { + email: User['email']; + role: Role; + teamId: Team['id']; +} + +export const createInvitation = async ({ + email, + role, + teamId, +}: CreateInvitationParams): Promise => { + const response = await fetchAPI(`teams/${teamId}/invitations/`, { + method: 'POST', + body: JSON.stringify({ + email, + role, + }), + }); + + if (!response.ok) { + throw new APIError( + `Failed to create the invitation for ${email}`, + await errorCauses(response, email), + ); + } + + return response.json() as Promise; +}; + +export function useCreateInvitation() { + return useMutation({ + mutationFn: createInvitation, + }); +} diff --git a/src/frontend/apps/desk/src/features/members/types.tsx b/src/frontend/apps/desk/src/features/members/types.tsx index 1429c2d..f1cb1f6 100644 --- a/src/frontend/apps/desk/src/features/members/types.tsx +++ b/src/frontend/apps/desk/src/features/members/types.tsx @@ -1,4 +1,5 @@ import { User } from '@/features/auth/'; +import { Team } from '@/features/teams/'; export enum Role { MEMBER = 'member', @@ -18,3 +19,13 @@ export interface Access { set_role_to: Role[]; }; } + +export interface Invitation { + id: string; + created_at: string; + email: string; + team: Team['id']; + role: Role; + issuer: User['id']; + is_expired: boolean; +}