| import { useSocketContext } from '@/providers/socket-context' |
| import { resetAllRoomState } from '@/lib/resetStores' |
| import { storage } from '@/lib/storage' |
| import { EVENTS } from '@music-together/shared' |
| import { useCallback } from 'react' |
| import { useRoomStore } from '@/stores/roomStore' |
|
|
| import { useRoomState } from './room/useRoomState' |
| import { useChatSync } from './room/useChatSync' |
| import { useQueueSync } from './room/useQueueSync' |
| import { useAuthSync } from './room/useAuthSync' |
| import { useConnectionGuard } from './room/useConnectionGuard' |
|
|
| |
| |
| |
| |
| |
| export function useRoom() { |
| const { socket } = useSocketContext() |
|
|
| |
| useRoomState() |
| useChatSync() |
| useQueueSync() |
| useAuthSync() |
| useConnectionGuard() |
|
|
| const leaveRoom = useCallback(() => { |
| const roomId = useRoomStore.getState().room?.id |
| if (roomId) storage.clearRejoinToken(roomId) |
| socket.emit(EVENTS.ROOM_LEAVE) |
| resetAllRoomState() |
| }, [socket]) |
|
|
| const updateSettings = useCallback( |
| (settings: { |
| name?: string |
| password?: string | null |
| audioQuality?: import('@music-together/shared').AudioQuality |
| hidden?: boolean |
| permanent?: boolean |
| allowTemporaryAdminTrackRemoval?: boolean |
| allowTemporaryAdminQueueClear?: boolean |
| }) => { |
| socket.emit(EVENTS.ROOM_SETTINGS, settings) |
| }, |
| [socket], |
| ) |
|
|
| const setUserRole = useCallback( |
| (userId: string, role: 'admin' | 'member') => { |
| socket.emit(EVENTS.ROOM_SET_ROLE, { userId, role }) |
| }, |
| [socket], |
| ) |
|
|
| return { leaveRoom, updateSettings, setUserRole } |
| } |
|
|