import * as React from 'react' import { useEffect } from 'react' import Split from 'react-split' import { Box, CircularProgress } from '@mui/material' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faArrowRight } from '@fortawesome/free-solid-svg-icons' import { GameIdContext } from '../app' import { useAppDispatch, useAppSelector } from '../hooks' import { changedOpenedIntro, selectOpenedIntro } from '../state/progress' import { useGetGameInfoQuery, useLoadInventoryOverviewQuery } from '../state/api' import { Button } from './button' import { PageContext, PreferencesContext } from './infoview/context' import { InventoryPanel } from './inventory' import { ErasePopup } from './popup/erase' import { InfoPopup } from './popup/game_info' import { PrivacyPolicyPopup } from './popup/privacy_policy' import { RulesHelpPopup } from './popup/rules_help' import { UploadPopup } from './popup/upload' import { PreferencesPopup} from "./popup/preferences" import { WorldTreePanel } from './world_tree' import '../css/welcome.css' import { Hint } from './hints' import i18next from 'i18next' import { useTranslation } from 'react-i18next' /** the panel showing the game's introduction text */ function IntroductionPanel({introduction, setPageNumber}: {introduction: string, setPageNumber}) { const {mobile} = React.useContext(PreferencesContext) const {gameId} = React.useContext(GameIdContext) let { t } = useTranslation() const dispatch = useAppDispatch() // TODO: I left the setup for splitting up the introduction in place, but if it's not needed // then this can be simplified. // let text: Array = introduction.split(/\n(\s*\n)+/) let text: Array = introduction ? [t(introduction, {ns : gameId})] : [] return
{text?.map(((t, i) => t.trim() ? : <> ))}
{mobile &&
}
} /** main page of the game showing among others the tree of worlds/levels */ function Welcome() { const {gameId} = React.useContext(GameIdContext) // Load the namespace of the game i18next.loadNamespaces(gameId) const {mobile} = React.useContext(PreferencesContext) const {layout, isSavePreferences, language, setLayout, setIsSavePreferences, setLanguage} = React.useContext(PreferencesContext) const gameInfo = useGetGameInfoQuery({game: gameId}) const inventory = useLoadInventoryOverviewQuery({game: gameId}) // For mobile only const openedIntro = useAppSelector(selectOpenedIntro(gameId)) const {page, setPage} = React.useContext(PageContext) // TODO: recover `openedIntro` functionality // const [pageNumber, setPageNumber] = React.useState(openedIntro ? 1 : 0) // pop-ups const [eraseMenu, setEraseMenu] = React.useState(false) const [impressum, setImpressum] = React.useState(false) const [privacy, setPrivacy] = React.useState(false) const [info, setInfo] = React.useState(false) const [rulesHelp, setRulesHelp] = React.useState(false) const [uploadMenu, setUploadMenu] = React.useState(false) const [preferencesPopup, setPreferencesPopup] = React.useState(false) function closeEraseMenu() {setEraseMenu(false)} function closeImpressum() {setImpressum(false)} function closePrivacy() {setPrivacy(false)} function closeInfo() {setInfo(false)} function closeRulesHelp() {setRulesHelp(false)} function closeUploadMenu() {setUploadMenu(false)} function closePreferencesPopup() {setPreferencesPopup(false)} function toggleEraseMenu() {setEraseMenu(!eraseMenu)} function toggleImpressum() {setImpressum(!impressum)} function togglePrivacy() {setPrivacy(!privacy)} function toggleInfo() {setInfo(!info)} function toggleUploadMenu() {setUploadMenu(!uploadMenu)} function togglePreferencesPopup() {setPreferencesPopup(!preferencesPopup)} // set the window title useEffect(() => { if (gameInfo.data?.title) { window.document.title = gameInfo.data.title } }, [gameInfo.data?.title]) return gameInfo.isLoading ? : <> {/* */}
{ mobile ?
{(page == 0 ? : page == 1 ? : )}
: }
} export default Welcome