import React, {useEffect, useState} from 'react'; import './App.css'; import {Col, Container, Row, Stack} from "react-bootstrap"; import {CharacterStatus} from "./CharacterStatus"; import {GameState} from "../model/GameState"; import OverlayTrigger from "react-bootstrap/OverlayTrigger"; import Tooltip from "react-bootstrap/Tooltip"; import {TurnTimer} from "./TurnTimer"; import {CharacterSide} from "../model/Character"; function useJson(url: string): T | null { const [data, setData] = useState(null); useEffect(() => { let ignore = false; fetch(url) .then(response => response.json() as T) .then(json => { if (!ignore) { setData(json); } }); return () => { ignore = true; }; }, [url]); return data as T | null; } function App() { const state = useJson("/api/current.json") const startTime = Date.now() const endTime = Date.now() + 2 * 60 * 1000 return

Session

Fabula Points spent {state?.session.usedSp.Fabula ?? 0}
The party earns 1 EXP for each (#-players) Fabula Points spent during the session.
} placement={"right"}>
{state?.session.usedSp.Fabula ?? 0}
Points Spent
Ultima Points spent {state?.session.usedSp.Ultima ?? 0}
The party earns 1 EXP for each Ultima Point spent during the session.
} placement={"left"}>
{state?.session.usedSp.Ultima ?? 0}

Allies

{state && state.characters.filter((character) => character.side === CharacterSide.Ally).map((character) => )}

Enemies

{state && state.characters.filter((character) => character.side === CharacterSide.Enemy).map((character) => )}
; } export default App;