5180 fichiers 38.5 Mo 0 téléchargements 391 vues mis à jour il y a 7 heures ui
nitro-v36-with-renderer-v36 / src / components / room / widgets / wired-leaderboard / WiredLeaderboardOverlayView.tsx
WiredLeaderboardOverlayView.tsx 3.8 Ko Télécharger le fichier
import { FC } from 'react';
import { NativeTextTree } from '../../../../common/native-text/NativeTextTree';
import { useRoom, useWiredLeaderboardEvents, useWiredLeaderboardStore } from '../../../../hooks';
import { WiredLeaderboardPanelView } from './WiredLeaderboardPanelView';

/**
 * The room's variable leaderboard panels (official wf_xtra_var_leaderboard). While a leaderboard
 * box is open in the editor its panel shows the draft and can be dragged; an unpublished box gets a
 * preview panel, and the other panels fade.
 */
export const WiredLeaderboardOverlayView: FC<{}> = () => {
    const { roomSession = null } = useRoom();
    const roomId = roomSession?.roomId ?? 0;

    useWiredLeaderboardEvents(roomId);

    const order = useWiredLeaderboardStore((state) => state.order);
    const panels = useWiredLeaderboardStore((state) => state.panels);
    const draft = useWiredLeaderboardStore((state) => state.editDraft);
    const editOverlayId = useWiredLeaderboardStore((state) => state.editOverlayId);
    const updateDraft = useWiredLeaderboardStore((state) => state.updateDraft);
    const selectVariable = useWiredLeaderboardStore((state) => state.selectVariable);
    const movePage = useWiredLeaderboardStore((state) => state.movePage);

    if (!roomId) return null;

    const editingPublished = !!draft && editOverlayId > 0 && order.includes(editOverlayId);
    const relocate = (location: { tileX: number, tileY: number, offsetX: number, altitude: number }) => updateDraft(location);

    return (
        <NativeTextTree>
            <div className="octane-wired-leaderboard-overlay" data-testid="leaderboard-overlay">
                {order.map((overlayId) => {
                    const panel = panels[overlayId];

                    if (!panel) return null;

                    const edited = editingPublished && overlayId === editOverlayId;
                    const descriptor = panel.descriptor;
                    const shown = edited ? draft : null;

                    return (
                        <WiredLeaderboardPanelView
                            key={overlayId}
                            roomId={roomId}
                            title={shown ? shown.title : descriptor.title}
                            description={shown ? shown.description : descriptor.description}
                            columns={shown ? shown.columns : descriptor.columns}
                            choices={descriptor.choices}
                            pageSizeOption={shown ? shown.pageSizeOption : descriptor.pageSizeOption}
                            location={shown ?? descriptor}
                            variableId={panel.variableId}
                            page={panel.page}
                            total={panel.total}
                            chunks={panel.chunks}
                            dimmed={!!draft && !edited}
                            onRelocate={edited ? relocate : null}
                            onSelectVariable={(variableId) => selectVariable(overlayId, variableId)}
                            onMovePage={(delta) => movePage(overlayId, delta)} />
                    );
                })}
                {draft && !editingPublished && (
                    <WiredLeaderboardPanelView
                        roomId={roomId}
                        title={draft.title}
                        description={draft.description}
                        columns={draft.columns}
                        choices={[]}
                        pageSizeOption={draft.pageSizeOption}
                        location={draft}
                        variableId={null}
                        page={0}
                        total={0}
                        chunks={{}}
                        onRelocate={relocate} />
                )}
            </div>
        </NativeTextTree>
    );
};
15Sujets
1Dépôts
20Membres
3En 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