[javascript] Draft.js에서 텍스트 에디터의 마우스 우클릭 메뉴 추가하기

Draft.js는 React 기반의 강력한 텍스트 편집기 라이브러리입니다. 그러나 기본적으로 Draft.js는 마우스 우클릭 메뉴를 지원하지 않습니다. 이번 블로그 포스트에서는 Draft.js 에디터에 마우스 우클릭 메뉴를 추가하는 방법을 알아보겠습니다.

1. 마우스 우클릭 이벤트 처리하기

Draft.js에서 마우스 우클릭 이벤트를 처리하기 위해서는 일반적인 React 컴포넌트에서와 같이 onContextMenu 이벤트 핸들러를 사용해야 합니다. 이 이벤트 핸들러는 마우스 우클릭 시에 호출되는 함수를 정의합니다.

다음은 Draft.js 에디터에서 마우스 우클릭 이벤트를 처리하는 코드입니다.

class MyEditor extends React.Component {
  handleContextMenu = (e) => {
    e.preventDefault();
    // 마우스 우클릭 메뉴를 표시하는 로직 작성
  }

  render() {
    return (
      <Editor
        onContextMenu={this.handleContextMenu}
        // 나머지 코드
      />
    );
  }
}

handleContextMenu 함수 내부에서는 마우스 우클릭 메뉴를 표시하기 위한 로직을 작성하면 됩니다.

2. 컨텍스트 메뉴 구현하기

마우스 우클릭 이벤트를 처리한 후에는 실제로 컨텍스트 메뉴를 구현해야 합니다. 일반적인 웹 애플리케이션에서는 웹 브라우저가 기본적으로 제공하는 contextmenu 이벤트와 contextmenu 이벤트를 통해 표시되는 메뉴를 사용할 수 있습니다.

다음은 컨텍스트 메뉴를 적용한 예시 코드입니다.

class MyEditor extends React.Component {
  handleContextMenu = (e) => {
    e.preventDefault();

    const menu = document.getElementById("context-menu");
    menu.style.top = `${e.clientY}px`;
    menu.style.left = `${e.clientX}px`;
    menu.style.display = "block";
  }

  hideContextMenu = () => {
    const menu = document.getElementById("context-menu");
    menu.style.display = "none";
  }

  render() {
    return (
      <div>
        <Editor
          onContextMenu={this.handleContextMenu}
          // 나머지 코드
        />
        <div id="context-menu" onContextMenu={this.hideContextMenu}>
          <ul>
            <li>복사</li>
            <li>붙여넣기</li>
            <li>잘라내기</li>
          </ul>
        </div>
      </div>
    );
  }
}

위 코드에서 handleContextMenu 함수에서는 컨텍스트 메뉴를 표시할 위치를 설정하고, hideContextMenu 함수에서는 컨텍스트 메뉴를 숨기기 위한 로직을 작성하였습니다.

마무리

위의 예시 코드에서는 마우스 우클릭 이벤트를 처리하고, 컨텍스트 메뉴를 구현하는 방법을 알아보았습니다. 이를 활용하여 Draft.js 에디터에 원하는 컨텍스트 메뉴를 구현할 수 있습니다.

더 자세한 내용은 Draft.js 공식 문서를 참고해 주세요.