5180 fichiers 38.5 Mo 0 téléchargements 221 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / hooks / session / usePerkAllowances.ts
usePerkAllowances.ts 1.1 Ko Télécharger le fichier
import { PerkAllowancesMessageEvent } from '@octane/renderer';
import { useCallback, useState } from 'react';
import { registerSharedHook, useSharedHook } from '@/state/useSharedHook';
import { useMessageEvent } from '../events';

const NO_PERKS: ReadonlySet<string> = new Set();

// The perks arrive once at login, before most views mount, so the listener is a shared source registered here.
const usePerkAllowancesStore = () => {
    const [allowed, setAllowed] = useState<ReadonlySet<string>>(NO_PERKS);

    const onPerkAllowances = useCallback((event: PerkAllowancesMessageEvent) => {
        const perks = event.getParser()?.perks ?? [];

        setAllowed(new Set(perks.filter((perk) => perk.isAllowed).map((perk) => perk.code)));
    }, []);

    useMessageEvent<PerkAllowancesMessageEvent>(PerkAllowancesMessageEvent, onPerkAllowances);

    return { allowed };
};

/** Whether the server allows this perk (a PerkEnum code) for the logged-in user. */
export const usePerkAllowed = (perkCode: string): boolean => useSharedHook(usePerkAllowancesStore).allowed.has(perkCode);

registerSharedHook(usePerkAllowancesStore);
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