5180 fichiers 38.5 Mo 0 téléchargements 265 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / hooks / soundboard / soundboardFeedStore.ts
soundboardFeedStore.ts 1.3 Ko Télécharger le fichier
import { createOctaneStore } from '@/state/createOctaneStore';

export const SOUNDBOARD_FEED_LIMIT = 4;
export const SOUNDBOARD_FEED_DURATION_MS = 4_500;

export interface SoundboardFeedEntry {
    key: number;
    username: string;
    userId: number;
    soundName: string;
    soundId: number;
}

interface SoundboardFeedState {
    entries: SoundboardFeedEntry[];
    lastPlayed: { soundId: number; at: number } | null;
    // Never reset: a dismiss timer that fires after a clear must not hit a newer entry.
    nextKey: number;
    push: (entry: Omit<SoundboardFeedEntry, 'key'>) => number;
    dismiss: (key: number) => void;
    clear: () => void;
}

export const useSoundboardFeedStore = createOctaneStore<SoundboardFeedState>()((set, get) => ({
    entries: [],
    lastPlayed: null,
    nextKey: 1,
    push: (entry) => {
        const key = get().nextKey;

        set((state) => ({
            entries: [{ ...entry, key }, ...state.entries].slice(0, SOUNDBOARD_FEED_LIMIT),
            lastPlayed: { soundId: entry.soundId, at: Date.now() },
            nextKey: key + 1
        }));

        return key;
    },
    dismiss: (key) => set((state) => ({ entries: state.entries.filter((entry) => entry.key !== key) })),
    clear: () => set({ entries: [], lastPlayed: null })
}));
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