import { Accessor, createContext, createEffect, createResource, createSignal, For, onCleanup, Resource, ResourceReturn, Show, untrack, } from "solid-js"; import { GameState, Action, vGameState, PlayerView, } from "../../../server/src/games/simple"; import api from "../api"; import Hand from "./Hand"; import Pile from "./Pile"; import { ApiType } from "../fn"; import { createStore } from "solid-js/store"; export const GameContext = createContext<{ view: Accessor; submitAction: (action: Action) => Promise; }>(); const [playerProfiles, setPlayerProfiles] = createStore< Record>> >({}); export default (props: { tableKey: string }) => { const [view, setView] = createSignal(); const [players, setPlayers] = createSignal([]); createEffect(() => { players().forEach((player) => { if (!untrack(() => playerProfiles[player])) { const [playerProfile] = createResource(() => api.profile .get({ query: { otherHumanKey: player } }) .then((r) => r.data) ); setPlayerProfiles((prev) => ({ ...prev, [player]: playerProfile, })); } }); }); const ws = api(props).subscribe; onCleanup(() => ws.close()); ws.on("message", (evt) => { if (evt.data.players) { setPlayers(evt.data.players); } if (evt.data.view) { setView(evt.data.view); } }); const submitAction = (action: Action) => api.simple(props).post({ action }); const Lobby = () => { return (
{(player) => (

{playerProfiles[player]?.()?.name}

)}
); }; return ( }> submitAction({ type: "draw" })} /> ); };