result states

This commit is contained in:
2025-08-31 22:23:30 -04:00
parent 0ea16ead64
commit b433a26fc6
7 changed files with 82 additions and 20 deletions

View File

@@ -2,6 +2,7 @@ import { Accessor, createContext, For, useContext } from "solid-js";
import type {
SimpleAction,
SimplePlayerView,
SimpleResult,
} from "@games/shared/games/simple";
import { me, profile } from "~/profile";
import Hand from "./Hand";

View File

@@ -1,5 +1,5 @@
import type { TWsIn, TWsOut } from "@games/server/src/table";
import { fromPromise, Stream } from "kefir";
import { fromPromise, merge, Stream } from "kefir";
import {
Accessor,
createContext,
@@ -11,7 +11,7 @@ import {
} from "solid-js";
import api, { fromWebsocket } from "~/api";
import { createObservable, createObservableWithInit, cx } from "~/fn";
import { me, mePromise } from "~/profile";
import { me, mePromise, profile } from "~/profile";
import Game from "./Game";
import Player from "./Player";
import games from "@games/shared/games/index";
@@ -39,6 +39,7 @@ export default (props: { tableKey: string }) => {
const presenceEvents = wsEvents.filter((evt) => evt.playersPresent != null);
const gameEvents = wsEvents.filter((evt) => evt.view !== undefined);
const resultEvents = wsEvents.filter((evt) => evt.results !== undefined);
const players = createObservableWithInit<string[]>(
presenceEvents.map((evt) => evt.playersPresent!),
@@ -57,6 +58,14 @@ export default (props: { tableKey: string }) => {
createEffect(() => sendWs({ ready: ready() }));
const view = createObservable(gameEvents.map((evt) => evt.view));
const results = createObservable(
merge([
gameEvents
.filter((evt) => "view" in evt && evt.view == null)
.map(() => undefined),
resultEvents.map((evt) => evt.results),
])
);
return (
<TableContext.Provider
@@ -127,6 +136,11 @@ export default (props: { tableKey: string }) => {
<Show when={view() != null}>
<Game />
</Show>
<Show when={results() != null}>
<span class="bg-[var(--light)] text-[var(--dark)] rounded-[24px] border-2 border-[var(--dark)] absolute center p-4 shadow-lg text-[4em] text-center">
{profile(results())()?.name} won!
</span>
</Show>
</TableContext.Provider>
);
};