5180 fichiers 38.5 Mo 0 téléchargements 234 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / hooks / wired-tools / useWiredVariableHolders.ts
useWiredVariableHolders.ts 1.7 Ko Télécharger le fichier
import { IWiredVariableHolderValue, WiredVariableHoldersEvent, WiredVariableHoldersRequestComposer } from '@octane/renderer';
import { useEffect, useRef, useState } from 'react';
import { SendMessageComposer } from '../../api';
import { useMessageEvent } from '../events';

/** AIR WiredMenuOverviewTab: the holders of the highlighted variable are asked for again every 500 ms. */
export const WIRED_VARIABLE_HOLDERS_POLL_MS = 500;

/**
 * Every holder of one wired variable in the room (AIR requestHolders), polled while a variable id is given and
 * dropped when it is not. Answers for another room or variable are ignored.
 */
export const useWiredVariableHolders = (variableId: string | null, roomId: number): IWiredVariableHolderValue[] | null => {
    const [holders, setHolders] = useState<IWiredVariableHolderValue[] | null>(null);
    const wantedRef = useRef({ variableId, roomId });

    wantedRef.current = { variableId, roomId };

    useEffect(() => {
        setHolders(null);

        if (!variableId) return;

        const request = () => SendMessageComposer(new WiredVariableHoldersRequestComposer(variableId));

        request();

        const interval = window.setInterval(request, WIRED_VARIABLE_HOLDERS_POLL_MS);

        return () => window.clearInterval(interval);
    }, [variableId, roomId]);

    useMessageEvent<WiredVariableHoldersEvent>(WiredVariableHoldersEvent, (event) => {
        const parser = event.getParser();
        const wanted = wantedRef.current;

        if (!parser || !wanted.variableId) return;
        if (parser.roomId !== wanted.roomId || parser.variable?.variableId !== wanted.variableId) return;

        setHolders(parser.holders ?? []);
    });

    return holders;
};
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