Merge branch 'master' into typescript

This commit is contained in:
Mitchell McCaffrey
2021-07-02 15:54:54 +10:00
157 changed files with 8114 additions and 4055 deletions
+71 -48
View File
@@ -8,6 +8,7 @@ import OfflineBanner from "../components/banner/OfflineBanner";
import LoadingOverlay from "../components/LoadingOverlay";
import Link from "../components/Link";
import MapLoadingOverlay from "../components/map/MapLoadingOverlay";
import UpgradingLoadingOverlay from "../components/UpgradingLoadingOverlay";
import AuthModal from "../modals/AuthModal";
import GameExpiredModal from "../modals/GameExpiredModal";
@@ -18,6 +19,10 @@ import { MapStageProvider } from "../contexts/MapStageContext";
import { useDatabase } from "../contexts/DatabaseContext";
import { PlayerProvider } from "../contexts/PlayerContext";
import { PartyProvider } from "../contexts/PartyContext";
import { AssetsProvider, AssetURLsProvider } from "../contexts/AssetsContext";
import { MapDataProvider } from "../contexts/MapDataContext";
import { TokenDataProvider } from "../contexts/TokenDataContext";
import { MapLoadingProvider } from "../contexts/MapLoadingContext";
import NetworkedMapAndTokens from "../network/NetworkedMapAndTokens";
import NetworkedParty from "../network/NetworkedParty";
@@ -44,7 +49,10 @@ function Game() {
}, [session]);
// Handle session errors
const [peerError, setPeerError]: [ peerError: any, setPeerError: React.Dispatch<any>] = useState(null);
const [peerError, setPeerError]: [
peerError: any,
setPeerError: React.Dispatch<any>
] = useState(null);
useEffect(() => {
function handlePeerError({ error }: { error: any }) {
if (error.code === "ERR_WEBRTC_SUPPORT") {
@@ -84,16 +92,18 @@ function Game() {
};
}, [session]);
// Join game
useEffect(() => {
if (sessionStatus === "ready" && databaseStatus !== "loading") {
if (
sessionStatus === "ready" &&
(databaseStatus === "loaded" || databaseStatus === "disabled")
) {
session.joinGame(gameId, password);
}
}, [gameId, password, databaseStatus, session, sessionStatus]);
function handleAuthSubmit(newPassword: string) {
if (databaseStatus !== "loading") {
if (databaseStatus === "loaded" || databaseStatus === "disabled") {
session.joinGame(gameId, newPassword);
}
}
@@ -103,50 +113,63 @@ function Game() {
const mapStageRef: React.MutableRefObject<any> = useRef();
return (
<PlayerProvider session={session}>
<PartyProvider session={session}>
<MapStageProvider value={mapStageRef}>
<Flex sx={{ flexDirection: "column", height: "100%" }}>
<Flex
sx={{
justifyContent: "space-between",
flexGrow: 1,
height: "100%",
}}
>
<NetworkedParty session={session} gameId={gameId} />
<NetworkedMapAndTokens session={session} />
</Flex>
</Flex>
<Banner
isOpen={!!peerError}
onRequestClose={() => setPeerError(null)}
>
<Box p={1}>
<Text as="p" variant="body2">
{peerError} See <Link to="/faq#connection">FAQ</Link> for more
information.
</Text>
</Box>
</Banner>
<OfflineBanner isOpen={sessionStatus === "offline"} />
<ReconnectBanner isOpen={sessionStatus === "reconnecting"} />
<AuthModal
isOpen={sessionStatus === "auth"}
onSubmit={handleAuthSubmit}
/>
<GameExpiredModal
isOpen={gameExpired}
onRequestClose={() => setGameExpired(false)}
/>
<ForceUpdateModal
isOpen={sessionStatus === "needs_update"}
/>
{!sessionStatus && <LoadingOverlay />}
<MapLoadingOverlay />
</MapStageProvider>
</PartyProvider>
</PlayerProvider>
<AssetsProvider>
<AssetURLsProvider>
<MapLoadingProvider>
<MapDataProvider>
<TokenDataProvider>
<PlayerProvider session={session}>
<PartyProvider session={session}>
<MapStageProvider value={mapStageRef}>
<Flex
sx={{
justifyContent: "space-between",
flexGrow: 1,
height: "100%",
}}
>
<NetworkedParty session={session} gameId={gameId} />
<NetworkedMapAndTokens session={session} />
</Flex>
<Banner
isOpen={!!peerError}
onRequestClose={() => setPeerError(null)}
>
<Box p={1}>
<Text as="p" variant="body2">
{peerError} See <Link to="/faq#connection">FAQ</Link>{" "}
for more information.
</Text>
</Box>
</Banner>
<OfflineBanner isOpen={sessionStatus === "offline"} />
<ReconnectBanner
isOpen={sessionStatus === "reconnecting"}
/>
<AuthModal
isOpen={sessionStatus === "auth"}
onSubmit={handleAuthSubmit}
/>
<GameExpiredModal
isOpen={gameExpired}
onRequestClose={() => setGameExpired(false)}
/>
<ForceUpdateModal
isOpen={sessionStatus === "needs_update"}
/>
{!sessionStatus && <LoadingOverlay />}
{sessionStatus && databaseStatus === "upgrading" && (
<UpgradingLoadingOverlay />
)}
<MapLoadingOverlay />
</MapStageProvider>
</PartyProvider>
</PlayerProvider>
</TokenDataProvider>
</MapDataProvider>
</MapLoadingProvider>
</AssetURLsProvider>
</AssetsProvider>
);
}
+8 -2
View File
@@ -25,6 +25,7 @@ const v162 = raw("../docs/releaseNotes/v1.6.2.md");
const v170 = raw("../docs/releaseNotes/v1.7.0.md");
const v180 = raw("../docs/releaseNotes/v1.8.0.md");
const v181 = raw("../docs/releaseNotes/v1.8.1.md");
const v190 = raw("../docs/releaseNotes/v1.9.0.md");
function ReleaseNotes() {
const location = useLocation();
@@ -49,13 +50,18 @@ function ReleaseNotes() {
<Text mb={2} variant="heading" as="h1" sx={{ fontSize: 5 }}>
Release Notes
</Text>
<div id="v190">
<Accordion heading="v1.9.0" defaultOpen>
<Markdown source={v190} />
</Accordion>
</div>
<div id="v181">
<Accordion heading="v1.8.1" defaultOpen>
<Accordion heading="v1.8.1" defaultOpen={location.hash === "#v181"}>
<Markdown source={v181} />
</Accordion>
</div>
<div id="v180">
<Accordion heading="v1.8.0" defaultOpen>
<Accordion heading="v1.8.0" defaultOpen={location.hash === "#v180"}>
<Markdown source={v180} />
</Accordion>
</div>