5180 fichiers 38.5 Mo 0 téléchargements 310 vues mis à jour il y a 6 heures ui
nitro-v36-with-renderer-v36 / src / hooks / rooms / widgets / useDoorbellState.ts
useDoorbellState.ts 1.4 Ko Télécharger le fichier
import { RoomSessionDoorbellEvent } from '@octane/renderer';
import { useCallback, useLayoutEffect, useRef, useState } from 'react';
import { useOctaneEvent } from '../../events';

/**
 * Reduces the three doorbell events (DOORBELL, RSDE_ACCEPTED, RSDE_REJECTED)
 * into a single users array. Data-only hook split — actions live in
 * useDoorbellActions.
 */
export const useDoorbellState = (): readonly string[] => {
    const [users, setUsers] = useState<string[]>([]);

    const usersRef = useRef(users);

    useLayoutEffect(() => {
        usersRef.current = users;
    });

    const handleAdd = useCallback((event: RoomSessionDoorbellEvent) => {
        if (usersRef.current.indexOf(event.userName) >= 0) return;

        setUsers([...usersRef.current, event.userName]);
    }, []);

    const handleRemove = useCallback((event: RoomSessionDoorbellEvent) => {
        const index = usersRef.current.indexOf(event.userName);

        if (index === -1) return;

        const next = [...usersRef.current];
        next.splice(index, 1);
        setUsers(next);
    }, []);

    useOctaneEvent<RoomSessionDoorbellEvent>(RoomSessionDoorbellEvent.DOORBELL, handleAdd);
    useOctaneEvent<RoomSessionDoorbellEvent>(RoomSessionDoorbellEvent.RSDE_ACCEPTED, handleRemove);
    useOctaneEvent<RoomSessionDoorbellEvent>(RoomSessionDoorbellEvent.RSDE_REJECTED, handleRemove);

    return users;
};
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser