import Button from './Button'; import { toast } from 'react-toastify'; import interactImg from '../../../assets/interact.svg'; import { useConvex, useMutation, useQuery } from 'convex/react'; import { api } from '../../../convex/_generated/api'; // import { SignInButton } from '@clerk/clerk-react'; import { ConvexError } from 'convex/values'; import { Id } from '../../../convex/_generated/dataModel'; import { useCallback } from 'react'; import { waitForInput } from '../../hooks/sendInput'; import { useServerGame } from '../../hooks/serverGame'; export default function InteractButton() { // const { isAuthenticated } = useConvexAuth(); const worldStatus = useQuery(api.world.defaultWorldStatus); const worldId = worldStatus?.worldId; const game = useServerGame(worldId); const oauth = JSON.parse(localStorage.getItem('oauth')); const oauthToken = oauth ? oauth.userInfo.fullname : undefined; const humanTokenIdentifier = useQuery(api.world.userStatus, worldId ? { worldId, oauthToken } : 'skip'); const userPlayerId = game && [...game.world.players.values()].find((p) => p.human === humanTokenIdentifier)?.id; const join = useMutation(api.world.joinWorld); const leave = useMutation(api.world.leaveWorld); const isPlaying = !!userPlayerId; const convex = useConvex(); const joinInput = useCallback( async (worldId: Id<'worlds'>) => { let inputId; try { inputId = await join({ worldId, oauthToken }); } catch (e: any) { if (e instanceof ConvexError) { toast.error(e.data); return; } throw e; } try { await waitForInput(convex, inputId); } catch (e: any) { toast.error(e.message); } }, [convex, join, oauthToken], ); const joinOrLeaveGame = () => { if ( !worldId || // || !isAuthenticated game === undefined ) { return; } if (isPlaying) { console.log(`Leaving game for player ${userPlayerId}`); void leave({ worldId , oauthToken}); } else { console.log(`Joining game`); void joinInput(worldId); } }; // if (!isAuthenticated || game === undefined) { // return ( // // // // ); // } return ( ); }