Files
grungnet/src/components/token/TokenSettings.js

103 lines
3.0 KiB
JavaScript
Raw Normal View History

2020-05-20 12:37:29 +10:00
import React from "react";
import { Flex, Box, Input, IconButton, Label, Checkbox } from "theme-ui";
2020-05-20 12:37:29 +10:00
import ExpandMoreIcon from "../../icons/ExpandMoreIcon";
import { isEmpty } from "../../helpers/shared";
2020-05-20 12:37:29 +10:00
import Select from "../Select";
2020-08-27 19:09:16 +10:00
const categorySettings = [
{ value: "character", label: "Character" },
{ value: "prop", label: "Prop" },
{ value: "vehicle", label: "Vehicle / Mount" },
2020-08-27 19:09:16 +10:00
];
2020-05-20 12:37:29 +10:00
function TokenSettings({
token,
onSettingsChange,
showMore,
onShowMoreChange,
}) {
const tokenEmpty = !token || isEmpty(token);
2020-05-20 12:37:29 +10:00
return (
<Flex sx={{ flexDirection: "column" }}>
<Flex>
<Box mt={2} sx={{ flexGrow: 1 }}>
<Label htmlFor="tokenSize">Default Size</Label>
<Input
type="number"
name="tokenSize"
value={`${(token && token.defaultSize) || 0}`}
2020-05-20 12:37:29 +10:00
onChange={(e) =>
onSettingsChange("defaultSize", parseInt(e.target.value))
}
disabled={tokenEmpty || token.type === "default"}
2020-05-20 12:37:29 +10:00
min={1}
my={1}
/>
</Box>
</Flex>
{showMore && (
<>
<Box mt={2} sx={{ flexGrow: 1 }}>
2020-05-20 12:37:29 +10:00
<Label htmlFor="name">Name</Label>
<Input
name="name"
value={(token && token.name) || ""}
onChange={(e) => onSettingsChange("name", e.target.value)}
disabled={tokenEmpty || token.type === "default"}
2020-05-20 12:37:29 +10:00
my={1}
/>
</Box>
<Flex my={2}>
<Box mb={1} sx={{ flexGrow: 1 }}>
<Label mb={1}>Category</Label>
2020-08-27 19:09:16 +10:00
<Select
options={categorySettings}
value={
!tokenEmpty &&
categorySettings.find((s) => s.value === token.category)
}
isDisabled={tokenEmpty || token.type === "default"}
onChange={(option) =>
onSettingsChange("category", option.value)
}
2020-10-01 15:04:45 +10:00
isSearchable={false}
/>
</Box>
2020-08-27 19:09:16 +10:00
<Flex sx={{ flexGrow: 1, alignItems: "center" }} ml={2}>
<Label>
<Checkbox
checked={token && token.hideInSidebar}
disabled={tokenEmpty || token.type === "default"}
onChange={(e) =>
onSettingsChange("hideInSidebar", e.target.checked)
}
/>
Hide in Sidebar
</Label>
2020-08-27 19:09:16 +10:00
</Flex>
</Flex>
2020-05-20 12:37:29 +10:00
</>
)}
<IconButton
onClick={(e) => {
e.stopPropagation();
e.preventDefault();
onShowMoreChange(!showMore);
}}
sx={{
transform: `rotate(${showMore ? "180deg" : "0"})`,
alignSelf: "center",
}}
aria-label={showMore ? "Show Less" : "Show More"}
title={showMore ? "Show Less" : "Show More"}
>
<ExpandMoreIcon />
</IconButton>
</Flex>
);
}
export default TokenSettings;