~sjm/starsmith

79ef759fa33aabbf4c58a5ba2ce9e5f11a763ae4 — Sam Marshall 1 year, 7 months ago f7d293c
feat: render moves
3 files changed, 119 insertions(+), 4 deletions(-)

M packages/moves/package.json
M packages/moves/src/moves.tsx
M yarn.lock
M packages/moves/package.json => packages/moves/package.json +2 -0
@@ 14,6 14,7 @@
    "@types/react": "^17.0.39",
    "@types/react-dom": "^17.0.11",
    "fp-ts": "^2.11.8",
    "markdown-it": "^12.3.2",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-scripts": "5.0.0",


@@ 65,6 66,7 @@
    "@storybook/node-logger": "^6.4.18",
    "@storybook/preset-create-react-app": "^4.0.0",
    "@storybook/react": "^6.4.18",
    "@types/markdown-it": "^12.2.3",
    "prettier": "^2.5.1",
    "webpack": "^5.68.0"
  }

M packages/moves/src/moves.tsx => packages/moves/src/moves.tsx +65 -3
@@ 3,10 3,43 @@ import Box from "@mui/material/Box";
import Paper from "@mui/material/Paper";
import Chip from "@mui/material/Chip";
import Stack from "@mui/material/Stack";
import Card from "@mui/material/Card";
import CardContent from "@mui/material/CardContent";
import Typography from "@mui/material/Typography";
import MarkdownIt from "markdown-it";
import moves from "./moves.json";
import * as A from "fp-ts/Array";
import * as S from "fp-ts/string";

const md = new MarkdownIt();

function Move(props: { Name: string; Text: string }) {
  const [hidden, setHidden] = React.useState(true);
  const bodyText = md.render(props.Text);

  return (
    <Card>
      <CardContent>
        <Typography
          variant="h6"
          component="h1"
          onClick={() => setHidden((x) => !x)}
          sx={{ cursor: "pointer", width: "100%" }}
        >
          {props.Name}
        </Typography>
        {hidden ? (
          <div />
        ) : (
          <Typography sx={{ maxWidth: 600 }} variant="body1">
            <p dangerouslySetInnerHTML={{ __html: bodyText }}></p>
          </Typography>
        )}
      </CardContent>
    </Card>
  );
}

/**
 * TODO pull this stuff into a library.
 *


@@ 17,12 50,41 @@ const moveCategories = A.uniq(S.Eq)(
) as Array<string>;

export default function Moves() {
  const [selectedCategories, setSelectedCategories] = React.useState(
    [] as Array<string>
  );

  return (
    <Box>
    <Box sx={{ maxWidth: 800 }}>
      <Paper elevation={1}>
        <Stack spacing={1} direction="row" sx={{ overflowX: "scroll", p: 1 }}>
        <Stack
          spacing={1}
          direction="row"
          sx={{ overflowX: "scroll", p: 1, pb: 2 }}
        >
          {moveCategories.map((x) => (
            <Chip key={x} label={x} />
            <Chip
              key={x}
              label={x}
              color={selectedCategories.includes(x) ? "primary" : "default"}
              onClick={() => {
                setSelectedCategories((cats) => {
                  return cats.includes(x)
                    ? cats.filter((c) => c !== x)
                    : cats.concat(x);
                });
              }}
            />
          ))}
        </Stack>
        <Stack sx={{ p: 1 }} spacing={0.5}>
          {moves.Moves.filter((mv) =>
            // display all moves when there are no categories selected
            selectedCategories.length === 0
              ? true
              : selectedCategories.includes(mv.Category)
          ).map((mv) => (
            <Move key={mv.Name} {...mv} />
          ))}
        </Stack>
      </Paper>

M yarn.lock => yarn.lock +52 -1
@@ 3262,6 3262,19 @@
  resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
  integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=

"@types/linkify-it@*":
  version "3.0.2"
  resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9"
  integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==

"@types/markdown-it@^12.2.3":
  version "12.2.3"
  resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51"
  integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==
  dependencies:
    "@types/linkify-it" "*"
    "@types/mdurl" "*"

"@types/mdast@^3.0.0":
  version "3.0.10"
  resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af"


@@ 3269,6 3282,11 @@
  dependencies:
    "@types/unist" "*"

"@types/mdurl@*":
  version "1.0.2"
  resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9"
  integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==

"@types/mime@^1":
  version "1.3.2"
  resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"


@@ 6412,6 6430,11 @@ entities@^2.0.0:
  resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==

entities@~2.1.0:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
  integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==

errno@^0.1.3, errno@~0.1.7:
  version "0.1.8"
  resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"


@@ 9360,6 9383,13 @@ lines-and-columns@^1.1.6:
  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
  integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==

linkify-it@^3.0.1:
  version "3.0.3"
  resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e"
  integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==
  dependencies:
    uc.micro "^1.0.1"

loader-runner@^2.4.0:
  version "2.4.0"
  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"


@@ 9561,6 9591,17 @@ markdown-escapes@^1.0.0:
  resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
  integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==

markdown-it@^12.3.2:
  version "12.3.2"
  resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90"
  integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==
  dependencies:
    argparse "^2.0.1"
    entities "~2.1.0"
    linkify-it "^3.0.1"
    mdurl "^1.0.1"
    uc.micro "^1.0.5"

markdown-to-jsx@^7.1.3:
  version "7.1.6"
  resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.1.6.tgz#421487df2a66fe4231d94db653a34da033691e62"


@@ 9618,7 9659,7 @@ mdn-data@2.0.4:
  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
  integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==

mdurl@^1.0.0:
mdurl@^1.0.0, mdurl@^1.0.1:
  version "1.0.1"
  resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
  integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=


@@ 11276,6 11317,11 @@ prelude-ls@~1.1.2:
  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18"
  integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==

prettier@^2.5.1:
  version "2.5.1"
  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
  integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==

pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
  version "5.6.0"
  resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"


@@ 13543,6 13589,11 @@ typescript@^4.5.5:
  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
  integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==

uc.micro@^1.0.1, uc.micro@^1.0.5:
  version "1.0.6"
  resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
  integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==

uglify-js@^3.1.4:
  version "3.15.0"
  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.0.tgz#2d6a689d94783cab43975721977a13c2afec28f1"