Files

28 lines
780 B
TypeScript

import { onScopeDispose, watch } from 'vue';
import { getEcho } from '@/lib/echo';
import type { PaperBallThrownPayload } from '@/types/emote';
const PAPER_BALL_EVENT = '.room.emote.thrown';
export function useRoomEmotes(
roomId: () => string,
onPaperBallThrown: (payload: PaperBallThrownPayload) => void,
): void {
const stopWatchingRoom = watch(
roomId,
(nextRoomId, _previousRoomId, onCleanup) => {
const channel = getEcho().channel(`rooms.${nextRoomId}`);
channel.listen(PAPER_BALL_EVENT, onPaperBallThrown);
onCleanup(() => {
channel.stopListening(PAPER_BALL_EVENT, onPaperBallThrown);
});
},
{ immediate: true },
);
onScopeDispose(stopWatchingRoom);
}