Newer
Older
taehui / qwilight-fe / src / note / NoteVarietyInput.tsx
@Taehui Taehui on 20 Nov 1 KB 2023-11-20 오후 9:36
import { useCallback, useState } from "react";
import {
  Dropdown,
  DropdownItem,
  DropdownMenu,
  DropdownToggle,
} from "reactstrap";

import v0 from "src/assets/v0.png";
import v1 from "src/assets/v1.png";
import v3 from "src/assets/v3.png";

import scss from "src/note/NoteVarietyInput.module.scss";

const NoteVarietyInput = ({
  noteVariety,
  setNoteVariety,
}: {
  noteVariety: number;
  setNoteVariety: (noteVariety: number) => void;
}) => {
  const [isNoteVarietyOpened, setNoteVarietyOpened] = useState(false);

  const onInput = (noteVariety: number) => () => {
    setNoteVariety(noteVariety);
  };

  const NoteVariety = useCallback(
    ({ noteVariety }: { noteVariety: number }) => {
      switch (noteVariety) {
        case 0:
          return <img src={v0} className={scss.noteVariety} alt="" />;
        case 1:
          return <img src={v1} className={scss.noteVariety} alt="" />;
        case 3:
          return <img src={v3} className={scss.noteVariety} alt="" />;
        default:
          return null;
      }
    },
    [],
  );

  return (
    <Dropdown
      isOpen={isNoteVarietyOpened}
      toggle={() => {
        setNoteVarietyOpened(!isNoteVarietyOpened);
      }}
    >
      <DropdownToggle caret>
        <NoteVariety noteVariety={noteVariety} />
      </DropdownToggle>
      <DropdownMenu>
        <DropdownItem onClick={onInput(0)}>
          <NoteVariety noteVariety={0} />
        </DropdownItem>
        <DropdownItem onClick={onInput(1)}>
          <NoteVariety noteVariety={1} />
        </DropdownItem>
        <DropdownItem onClick={onInput(3)}>
          <NoteVariety noteVariety={3} />
        </DropdownItem>
      </DropdownMenu>
    </Dropdown>
  );
};

export default NoteVarietyInput;