2020-04-23 11:54:29 +10:00
|
|
|
import React from "react";
|
2020-04-23 15:02:03 +10:00
|
|
|
import { Flex, Image as UIImage, IconButton } from "theme-ui";
|
2020-04-23 11:54:29 +10:00
|
|
|
|
|
|
|
|
import AddIcon from "../../icons/AddIcon";
|
2020-04-23 15:02:03 +10:00
|
|
|
import RemoveIcon from "../../icons/RemoveIcon";
|
2020-04-23 11:54:29 +10:00
|
|
|
|
2020-04-23 15:02:03 +10:00
|
|
|
function MapSelect({ maps, selectedMap, onMapSelect, onMapAdd, onMapRemove }) {
|
2020-04-23 11:54:29 +10:00
|
|
|
const tileProps = {
|
|
|
|
|
m: 2,
|
|
|
|
|
bg: "muted",
|
|
|
|
|
};
|
|
|
|
|
|
2020-04-23 13:31:54 +10:00
|
|
|
const tileStyle = {
|
|
|
|
|
width: "150px",
|
|
|
|
|
height: "150px",
|
|
|
|
|
borderRadius: "4px",
|
|
|
|
|
justifyContent: "center",
|
|
|
|
|
alignItems: "center",
|
|
|
|
|
cursor: "pointer",
|
|
|
|
|
};
|
|
|
|
|
|
2020-04-23 15:02:03 +10:00
|
|
|
function tile(map) {
|
2020-04-23 11:54:29 +10:00
|
|
|
return (
|
2020-04-23 15:02:03 +10:00
|
|
|
<Flex
|
|
|
|
|
key={map.id}
|
2020-04-23 13:31:54 +10:00
|
|
|
sx={{
|
|
|
|
|
borderColor: "primary",
|
2020-04-23 15:02:03 +10:00
|
|
|
borderStyle: map.id === selectedMap ? "solid" : "none",
|
2020-04-23 13:31:54 +10:00
|
|
|
borderWidth: "4px",
|
2020-04-23 15:02:03 +10:00
|
|
|
position: "relative",
|
2020-04-23 13:31:54 +10:00
|
|
|
...tileStyle,
|
|
|
|
|
}}
|
2020-04-23 11:54:29 +10:00
|
|
|
{...tileProps}
|
2020-04-23 15:02:03 +10:00
|
|
|
onClick={() => onMapSelect(map)}
|
2020-04-23 11:54:29 +10:00
|
|
|
>
|
|
|
|
|
<UIImage
|
2020-04-23 15:02:03 +10:00
|
|
|
sx={{ width: "100%", height: "100%", objectFit: "contain" }}
|
2020-04-23 11:54:29 +10:00
|
|
|
src={map.source}
|
|
|
|
|
/>
|
2020-04-23 15:02:03 +10:00
|
|
|
{!map.default && map.id === selectedMap && (
|
|
|
|
|
<IconButton
|
|
|
|
|
aria-label="Remove Map"
|
|
|
|
|
title="Remove map"
|
|
|
|
|
onClick={(e) => {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
e.stopPropagation();
|
|
|
|
|
onMapRemove(map.id);
|
|
|
|
|
}}
|
|
|
|
|
sx={{ position: "absolute", top: 0, right: 0 }}
|
|
|
|
|
>
|
|
|
|
|
<RemoveIcon />
|
|
|
|
|
</IconButton>
|
|
|
|
|
)}
|
2020-04-23 11:54:29 +10:00
|
|
|
</Flex>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Flex
|
|
|
|
|
my={2}
|
|
|
|
|
bg="muted"
|
|
|
|
|
sx={{
|
|
|
|
|
flexWrap: "wrap",
|
|
|
|
|
width: "500px",
|
|
|
|
|
maxHeight: "300px",
|
|
|
|
|
borderRadius: "4px",
|
|
|
|
|
// TODO: move to simple scroll
|
|
|
|
|
overflowY: "scroll",
|
|
|
|
|
flexGrow: 1,
|
|
|
|
|
}}
|
|
|
|
|
>
|
2020-04-23 13:31:54 +10:00
|
|
|
<Flex
|
|
|
|
|
onClick={onMapAdd}
|
|
|
|
|
sx={{
|
|
|
|
|
":hover": {
|
|
|
|
|
color: "primary",
|
|
|
|
|
},
|
|
|
|
|
":focus": {
|
|
|
|
|
outline: "none",
|
|
|
|
|
},
|
|
|
|
|
":active": {
|
|
|
|
|
color: "secondary",
|
|
|
|
|
},
|
|
|
|
|
...tileStyle,
|
|
|
|
|
}}
|
|
|
|
|
{...tileProps}
|
2020-04-23 15:02:03 +10:00
|
|
|
aria-label="Add Map"
|
|
|
|
|
title="Add Map"
|
2020-04-23 13:31:54 +10:00
|
|
|
>
|
2020-04-23 11:54:29 +10:00
|
|
|
<AddIcon />
|
|
|
|
|
</Flex>
|
2020-04-23 15:02:03 +10:00
|
|
|
{maps.map(tile)}
|
2020-04-23 11:54:29 +10:00
|
|
|
</Flex>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default MapSelect;
|