GameCenterView.tsx 2.8 Ko
Télécharger le fichier
import { AddLinkEventTracker, Game2GetAccountGameStatusMessageComposer, GetGameStatusMessageComposer, ILinkEventTracker, RemoveLinkEventTracker } from '@octane/renderer';
import { useEffect } from 'react';
import { LocalizeText, SendMessageComposer } from '../../api';
import { useGameCenter } from '../../hooks';
import { GameStageView } from './views/GameStageView';
import { GameTileView } from './views/GameTileView';
import { SnowWarInstructionsView } from './views/snowwar/SnowWarInstructionsView';
import { BaseButton } from '../../common/BaseButton';
import { NativeTextTree } from '../../common/native-text/NativeTextTree';
const localizeWithFallback = (key: string, fallback: string) =>
{
const text = LocalizeText(key);
return text && text !== key ? text : fallback;
};
export const GameCenterView = () => {
const { isVisible, setIsVisible, games, selectedGame, accountStatus, instructionsOpen } = useGameCenter();
useEffect(() => {
const toggleGameCenter = () => {
setIsVisible((prev) => !prev);
};
const linkTracker: ILinkEventTracker = {
linkReceived: (url: string) => {
const value = url.split('/');
switch (value[1]) {
case 'toggle':
toggleGameCenter();
break;
case 'show':
setIsVisible(true);
break;
}
},
eventUrlPrefix: 'games/'
};
AddLinkEventTracker(linkTracker);
return () => RemoveLinkEventTracker(linkTracker);
}, [setIsVisible]);
useEffect(() => {
if (!selectedGame) return;
SendMessageComposer(new GetGameStatusMessageComposer(selectedGame.gameId));
SendMessageComposer(new Game2GetAccountGameStatusMessageComposer(selectedGame.gameId));
}, [selectedGame]);
if (!isVisible || !games || !accountStatus) return;
return (
<NativeTextTree>
<div className="game-center-main">
<div className="game-center-header">
<div className="game-center-header__title">{localizeWithFallback('gamecenter.game_list_title', 'Choose a game')}</div>
<BaseButton className="game-center-header__close" type="button" onClick={() => setIsVisible(false)}>×</BaseButton>
</div>
{instructionsOpen
? <SnowWarInstructionsView />
: (
<div className="game-tile-grid">
{games.map((game) => <GameTileView key={game.gameId} game={game} />)}
</div>
)}
<GameStageView />
</div>
</NativeTextTree>
);
};
