diff --git a/src/frontend/src/features/rooms/api/ApiRoom.ts b/src/frontend/src/features/rooms/api/ApiRoom.ts index 4e00bc3b..7c8fde65 100644 --- a/src/frontend/src/features/rooms/api/ApiRoom.ts +++ b/src/frontend/src/features/rooms/api/ApiRoom.ts @@ -30,3 +30,4 @@ export type ApiRoom = { } export type ParticipantRole = 'member' | 'administrator' | 'owner' +export type AssignableParticipantRole = Exclude diff --git a/src/frontend/src/features/rooms/api/updateParticipantRole.ts b/src/frontend/src/features/rooms/api/updateParticipantRole.ts new file mode 100644 index 00000000..11e37ff4 --- /dev/null +++ b/src/frontend/src/features/rooms/api/updateParticipantRole.ts @@ -0,0 +1,32 @@ +import type { Participant } from 'livekit-client' +import { fetchApi } from '@/api/fetchApi' +import { useRoomData } from '@/features/rooms/livekit/hooks/useRoomData' +import { AssignableParticipantRole } from '@/features/rooms/api/ApiRoom' + +export const useParticipantRole = () => { + const data = useRoomData() + + const updateParticipantRole = async ( + participant: Participant, + role: AssignableParticipantRole + ) => { + if (!data?.id) { + throw new Error('Room id is not available') + } + + try { + return fetchApi(`rooms/${data.id}/update-participant-role/`, { + method: 'POST', + body: JSON.stringify({ + participant_identity: participant.identity, + role: role, + }), + }) + } catch (error) { + console.error( + `Failed to update participant's role ${participant.identity}: ${error instanceof Error ? error.message : 'Unknown error'}` + ) + } + } + return { updateParticipantRole } +}