All files / src/components/forms MovementTypeSelect.tsx

0% Statements 0/19
0% Branches 0/13
0% Functions 0/4
0% Lines 0/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71                                                                                                                                             
import React, { FC, useMemo } from "react";
import l10n from "shared/lib/lang/l10n";
import { MovementType, movementTypes } from "shared/lib/entities/entitiesTypes";
import { DropdownButton } from "ui/buttons/DropdownButton";
import {
  BlankIcon,
  CheckIcon,
  CursorDiagonalIcon,
  CursorHorizontalIcon,
  CursorVeticalIcon,
} from "ui/icons/Icons";
import { MenuGroup, MenuItem, MenuItemIcon } from "ui/menu/Menu";
import { FlexGrow } from "ui/spacing/Spacing";
import styled from "styled-components";
 
interface MovementTypeSelectProps {
  value?: MovementType;
  onChange?: (newValue: MovementType) => void;
}
 
const movementTypeIconsLookup: Record<MovementType, JSX.Element> = {
  horizontal: <CursorHorizontalIcon />,
  vertical: <CursorVeticalIcon />,
  diagonal: <CursorDiagonalIcon />,
};
 
const MenuSpacer = styled.div`
  width: 10px;
`;
 
export const MovementTypeSelect: FC<MovementTypeSelectProps> = ({
  value = "horizontal",
  onChange,
}) => {
  const selectedIcon = value ? (
    movementTypeIconsLookup[value]
  ) : (
    <CursorHorizontalIcon />
  );
  const movementTypeNamesLookup: Record<MovementType, string> = useMemo(
    () => ({
      horizontal: l10n("FIELD_HORIZONTAL_FIRST"),
      vertical: l10n("FIELD_VERTICAL_FIRST"),
      diagonal: l10n("FIELD_DIAGONAL"),
    }),
    []
  );
 
  const title = `${l10n("FIELD_MOVEMENT_TYPE")}${value ? ": " : ""}${
    value ? movementTypeNamesLookup[value] : ""
  }`;
  return (
    <DropdownButton label={selectedIcon} showArrow={false} title={title}>
      <MenuGroup>{l10n("FIELD_MOVEMENT_TYPE")}</MenuGroup>
      {movementTypes.map((movementType) => (
        <MenuItem
          key={movementType}
          onClick={() => {
            onChange?.(movementType);
          }}
          icon={value === movementType ? <CheckIcon /> : <BlankIcon />}
        >
          <FlexGrow>{movementTypeNamesLookup[movementType]}</FlexGrow>
          <MenuSpacer />
          <MenuItemIcon>{movementTypeIconsLookup[movementType]}</MenuItemIcon>
        </MenuItem>
      ))}
    </DropdownButton>
  );
};