All files / src/components/forms CollisionMaskPicker.tsx

0% Statements 0/8
0% Branches 0/6
0% Functions 0/2
0% Lines 0/8

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 72 73 74 75 76 77 78 79 80                                                                                                                                                               
import React, { useMemo } from "react";
import { CollisionGroup } from "shared/lib/entities/entitiesTypes";
import l10n from "shared/lib/lang/l10n";
import { ToggleButtonGroup } from "ui/form/ToggleButtonGroup";
 
type CollisionMaskPickerProps = {
  id: string;
  includePlayer?: boolean;
  includeNone?: boolean;
} & (
  | {
      multiple: true;
      value: CollisionGroup[];
      onChange: (newValue: CollisionGroup[]) => void;
    }
  | {
      multiple?: false;
      value: CollisionGroup;
      onChange: (newValue: CollisionGroup) => void;
    }
);
 
interface CollisionMaskPickerOption {
  value: CollisionGroup;
  label: React.ReactNode;
  title: string;
}
 
const CollisionMaskPicker = ({
  id,
  includePlayer,
  includeNone,
  ...props
}: CollisionMaskPickerProps) => {
  const options = useMemo(
    () =>
      ([] as CollisionMaskPickerOption[]).concat(
        includeNone && !props.multiple
          ? [
              {
                value: "",
                label: l10n("FIELD_NONE"),
                title: l10n("FIELD_NONE"),
              },
            ]
          : [],
        includePlayer
          ? [
              {
                value: "player",
                label: l10n("FIELD_PLAYER"),
                title: l10n("FIELD_PLAYER"),
              },
            ]
          : [],
        [
          {
            value: "1",
            label: "1",
            title: l10n("FIELD_COLLISION_GROUP_N", { n: 1 }),
          },
          {
            value: "2",
            label: "2",
            title: l10n("FIELD_COLLISION_GROUP_N", { n: 2 }),
          },
          {
            value: "3",
            label: "3",
            title: l10n("FIELD_COLLISION_GROUP_N", { n: 3 }),
          },
        ]
      ) as CollisionMaskPickerOption[],
    [includeNone, includePlayer, props.multiple]
  );
  return <ToggleButtonGroup name={id} options={options} {...props} />;
};
 
export default CollisionMaskPicker;