From 1da978e121b891f3c9393816d734686bf7b401f9 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 14 Feb 2024 12:19:21 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(app-desk)=20add=20useTeamAccesses=20r?= =?UTF-8?q?eact-query=20hook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the hook useTeamAccesses, it queries the accesses if a team. It is paginated. --- .../apps/desk/src/features/teams/api/index.ts | 2 + .../desk/src/features/teams/api/types.tsx | 8 +++- .../features/teams/api/useTeamsAccesses.tsx | 41 +++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/frontend/apps/desk/src/features/teams/api/useTeamsAccesses.tsx 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 7021b9c..5b969f5 100644 --- a/src/frontend/apps/desk/src/features/teams/api/index.ts +++ b/src/frontend/apps/desk/src/features/teams/api/index.ts @@ -1,3 +1,5 @@ +export * from './types'; export * from './useCreateTeam'; export * from './useTeam'; export * from './useTeams'; +export * from './useTeamsAccesses'; diff --git a/src/frontend/apps/desk/src/features/teams/api/types.tsx b/src/frontend/apps/desk/src/features/teams/api/types.tsx index 8e571d4..180905d 100644 --- a/src/frontend/apps/desk/src/features/teams/api/types.tsx +++ b/src/frontend/apps/desk/src/features/teams/api/types.tsx @@ -7,7 +7,7 @@ enum Role { export interface Access { id: string; role: Role; - user: string; + user: User; } export interface Team { @@ -17,3 +17,9 @@ export interface Team { created_at: string; updated_at: string; } + +export interface User { + id: string; + email: string; + name?: string; +} diff --git a/src/frontend/apps/desk/src/features/teams/api/useTeamsAccesses.tsx b/src/frontend/apps/desk/src/features/teams/api/useTeamsAccesses.tsx new file mode 100644 index 0000000..123a0b7 --- /dev/null +++ b/src/frontend/apps/desk/src/features/teams/api/useTeamsAccesses.tsx @@ -0,0 +1,41 @@ +import { UseQueryOptions, useQuery } from '@tanstack/react-query'; + +import { APIError, APIList, errorCauses, fetchAPI } from '@/api'; + +import { Access } from './types'; + +export type TeamAccessesAPIParams = { + page: number; + teamId: string; +}; + +type AccessesResponse = APIList; + +export const getTeamAccesses = async ({ + page, + teamId, +}: TeamAccessesAPIParams): Promise => { + const response = await fetchAPI(`teams/${teamId}/accesses/?page=${page}`); + + if (!response.ok) { + throw new APIError( + 'Failed to get the team accesses', + await errorCauses(response), + ); + } + + return response.json() as Promise; +}; + +export const KEY_LIST_TEAM_ACCESSES = 'teams-accesses'; + +export function useTeamAccesses( + params: TeamAccessesAPIParams, + queryConfig?: UseQueryOptions, +) { + return useQuery({ + queryKey: [KEY_LIST_TEAM_ACCESSES, params], + queryFn: () => getTeamAccesses(params), + ...queryConfig, + }); +}