| import { useSocketContext } from '@/providers/socket-context' | |
| import { useRoomStore } from '@/stores/roomStore' | |
| import { EVENTS } from '@music-together/shared' | |
| import type { Track } from '@music-together/shared' | |
| import { useEffect } from 'react' | |
| /** Keeps the local queue in sync with server-side QUEUE_UPDATED events. */ | |
| export function useQueueSync() { | |
| const { socket } = useSocketContext() | |
| useEffect(() => { | |
| const onQueueUpdated = (data: { queue: Track[] }) => { | |
| const room = useRoomStore.getState().room | |
| if (room) { | |
| useRoomStore.getState().updateRoom({ queue: data.queue }) | |
| } | |
| } | |
| socket.on(EVENTS.QUEUE_UPDATED, onQueueUpdated) | |
| return () => { | |
| socket.off(EVENTS.QUEUE_UPDATED, onQueueUpdated) | |
| } | |
| }, [socket]) | |
| } | |