added room actions: leave and delete, and improved connection error handling

This commit is contained in:
2026-01-17 07:09:52 +01:00
parent e30631be60
commit d325511d0e
17 changed files with 874 additions and 350 deletions

View File

@@ -1,42 +1,65 @@
import { apiFetch } from './client'
import type { Room, RoomInvite } from '../types'
import { UserProfile, type Room, type RoomInvite } from '../types'
export function fetchRooms() {
return apiFetch<Room[]>(`/rooms`)
return apiFetch<Room[]>(`/rooms`)
}
export function fetchRoomInfo(uuid: string) {
return apiFetch<Room>(`/rooms/${uuid}`)
return apiFetch<Room>(`/rooms/${uuid}`)
}
export function createRoom(name: string, global: boolean) {
return apiFetch<Room>('/rooms', {
method: 'POST',
body: JSON.stringify({ name, global }),
})
return apiFetch<Room>('/rooms', {
method: 'POST',
body: JSON.stringify({ name, global }),
})
}
export function fetchRoomInvites() {
return apiFetch<RoomInvite[]>('/rooms/invites')
return apiFetch<RoomInvite[]>('/rooms/invites')
}
export function sendRoomInvite(receiverUsername: string, roomUuid: string) {
return apiFetch<void>('/rooms/invite', {
method: 'POST',
body: JSON.stringify({ receiver_username: receiverUsername, room_uuid: roomUuid }),
});
return apiFetch<void>('/rooms/invite', {
method: 'POST',
body: JSON.stringify({ receiver_username: receiverUsername, room_uuid: roomUuid }),
});
}
export function acceptRoomInvite(senderUuid: string, roomUuid: string) {
return apiFetch<void>('/rooms/join', {
method: 'POST',
body: JSON.stringify({ sender_uuid: senderUuid, room_uuid: roomUuid }),
})
return apiFetch<void>('/rooms/join', {
method: 'POST',
body: JSON.stringify({ sender_uuid: senderUuid, room_uuid: roomUuid }),
})
}
export function declineRoomInvite(senderUuid: string, roomUuid: string) {
return apiFetch<void>('/rooms/decline', {
method: 'POST',
body: JSON.stringify({ sender_uuid: senderUuid, room_uuid: roomUuid }),
})
return apiFetch<void>('/rooms/decline', {
method: 'POST',
body: JSON.stringify({ sender_uuid: senderUuid, room_uuid: roomUuid }),
})
}
export function leaveRoom(roomUuid: string) {
return apiFetch<void>(`/rooms/${roomUuid}/leave`, {
method: 'POST'
})
}
export function deleteRoom(roomUuid: string) {
return apiFetch<void>(`/rooms/${roomUuid}/delete`, {
method: 'DELETE'
})
}
export function transferOwnership(roomUuid: string, newOwnerUuid: string) {
return apiFetch<void>('/rooms/transfer-ownership', {
method: 'POST',
body: JSON.stringify({ room_uuid: roomUuid, new_owner_uuid: newOwnerUuid }),
})
}
export function listMembers(roomUuid: string) {
return apiFetch<UserProfile[]>(`/rooms/${roomUuid}/members`)
}