GameCreationForm.jsx 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import ms from 'pretty-ms';
  2. import React, { useState } from 'react';
  3. import { createGame } from '../../../domain/apiMethods';
  4. import { MAP_CRUNCH, RANDOM_STREET_VIEW, URBAN } from '../../../domain/genMethods';
  5. import { FROZEN, NORMAL, TIME_BANK } from '../../../domain/ruleSets';
  6. import Loading from '../Loading';
  7. import { Dropdown, DropdownGroup, Item } from './Dropdown';
  8. import styles from './GameCreationForm.module.css';
  9. export default ({ afterCreate }) => {
  10. const [ loading, setLoading ] = useState(false);
  11. const [ timer, setTimer ] = useState(300);
  12. const [ rounds, setRounds ] = useState(5);
  13. const [ onlyAmerica, setOnlyAmerica ] = useState(false);
  14. const [ genMethod, setGenMethod ] = useState(MAP_CRUNCH);
  15. const [ ruleSet, setRuleSet ] = useState(NORMAL);
  16. if (loading) {
  17. return <Loading />;
  18. }
  19. const onCreateGame = async () => {
  20. setLoading(true);
  21. const gameId = await createGame(timer, rounds, onlyAmerica, genMethod, ruleSet);
  22. if (afterCreate) {
  23. afterCreate(gameId);
  24. }
  25. };
  26. return (
  27. <div className={styles.form}>
  28. <div className={styles.dropdowns}>
  29. <DropdownGroup>
  30. <Dropdown onSelect={setTimer} open='timer'>
  31. <Item value={30} display={ms(30 * 1000)}>30 Seconds</Item>
  32. <Item value={120} display={ms(2 * 60 * 1000)}>2 Minutes</Item>
  33. <Item value={300} display={ms(5 * 60 * 1000)} default>5 Minutes</Item>
  34. <Item value={3600} display={ms(60 * 60 * 1000)}>1 Hour</Item>
  35. </Dropdown>
  36. <Dropdown onSelect={setRounds} open='rounds'>
  37. <Item value={1}>1 Round</Item>
  38. <Item value={3}>3 Rounds</Item>
  39. <Item value={5} default>5 Rounds</Item>
  40. <Item value={10}>10 Rounds</Item>
  41. </Dropdown>
  42. <Dropdown onSelect={setOnlyAmerica} open='america'>
  43. <Item value={false} display='🌎' default>All Countries</Item>
  44. <Item value={true} display='🇺🇸'>Just America</Item>
  45. </Dropdown>
  46. <Dropdown onSelect={setGenMethod} open='gen'>
  47. <Item value={MAP_CRUNCH} display='MC' default>Map Crunch</Item>
  48. <Item value={RANDOM_STREET_VIEW} display='RSV'>Random Street View</Item>
  49. <Item value={URBAN} display='🏙️'>Urban Centers</Item>
  50. </Dropdown>
  51. <Dropdown onSelect={setRuleSet} open='rule'>
  52. <Item value={NORMAL} display='⏰' default>Normal</Item>
  53. <Item value={TIME_BANK} display='🏦'>Time Bank</Item>
  54. <Item value={FROZEN} display='❄️'>Frozen</Item>
  55. </Dropdown>
  56. </DropdownGroup>
  57. </div>
  58. <button className={styles.start} onClick={onCreateGame}>
  59. New Game
  60. </button>
  61. </div>
  62. );
  63. };