import React from "react"; import gql from "graphql-tag"; import { useQuery } from "@apollo/react-hooks"; import { Box, Flex, Select, Text } from "@chakra-ui/core"; import { Delay, useFetch } from "./util"; /** * SpeciesColorPicker lets the user pick the species/color of their pet. * * It preloads all species, colors, and valid species/color pairs; and then * ensures that the outfit is always in a valid state. */ function SpeciesColorPicker({ speciesId, colorId, showPlaceholders, dark = false, onChange, }) { const { loading: loadingMeta, error: errorMeta, data: meta } = useQuery(gql` query { allSpecies { id name } allColors { id name } } `); const { loading: loadingValids, error: errorValids, data: validsBuffer, } = useFetch("/api/validPetPoses", { responseType: "arrayBuffer" }); const valids = React.useMemo( () => validsBuffer && new DataView(validsBuffer), [validsBuffer] ); const allColors = (meta && [...meta.allColors]) || []; allColors.sort((a, b) => a.name.localeCompare(b.name)); const allSpecies = (meta && [...meta.allSpecies]) || []; allSpecies.sort((a, b) => a.name.localeCompare(b.name)); const backgroundColor = dark ? "gray.600" : "white"; const borderColor = dark ? "transparent" : "green.600"; const textColor = dark ? "gray.50" : "inherit"; const SpeciesColorSelect = ({ ...props }) => (