PlayerScores.jsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import React from 'react';
  2. import styled from "styled-components";
  3. import Loading from '../../util/Loading';
  4. import { useGameCoords, usePlayers, useLinkedGame } from '../../../hooks/useGameInfo';
  5. import ClickToCopy from '../../util/ClickToCopy';
  6. import SummaryMap from './SummaryMap';
  7. import LinkedGame from './LinkedGame';
  8. import ScoreBoard from './ScoreBoard';
  9. import { useGameId } from '../../../domain/gameStore';
  10. const Container = styled.div`
  11. display: flex;
  12. flex-flow: column nowrap;
  13. justify-content: space-between;
  14. align-items: center;
  15. height: 100%;
  16. `
  17. const Label = styled.span`
  18. padding: 0.2em;
  19. margin-bottom: 0.5em;
  20. `
  21. export default () => {
  22. // poll the game state
  23. const gameId = useGameId();
  24. const coords = useGameCoords();
  25. const players = usePlayers();
  26. const linkedGame = useLinkedGame();
  27. // set up the summary URL
  28. const summaryURL = new URL(window.location.href);
  29. summaryURL.searchParams.append("summary", gameId);
  30. if (!players || !coords) {
  31. return <Loading/>
  32. }
  33. return (
  34. <Container>
  35. <SummaryMap {...{ players, coords }}/>
  36. <ScoreBoard {...{ players }} />
  37. <LinkedGame {...{ linkedGame, gameId }} />
  38. <Label><ClickToCopy text={summaryURL.href}>Click here to copy a link to this summary!</ClickToCopy></Label>
  39. </Container>
  40. );
  41. }