[javascript] Draft.js에서 텍스트 에디터의 드래그 앤 셀렉트 기능 구현하기

Draft.js는 텍스트 에디터를 쉽게 구현하고 사용할 수 있는 JavaScript 라이브러리입니다. 이 라이브러리를 사용하여 드래그 앤 셀렉트 기능을 구현하는 방법에 대해 알아보겠습니다.

드래그 앤 셀렉트 기능 구현하기

드래그 앤 셀렉트 기능을 구현하기 위해서는 Draft.js에서 제공하는 SelectionState 객체를 사용해야 합니다. SelectionState는 현재 선택된 텍스트의 상태를 나타내는 객체입니다.

다음은 드래그 앤 셀렉트 기능을 구현하는 코드입니다.

import { Editor, EditorState, DefaultDraftBlockRenderMap, SelectionState } from 'draft-js';

const MyEditor = () => {
  // 텍스트 에디터의 상태를 관리하는 EditorState 객체
  const [editorState, setEditorState] = useState(EditorState.createEmpty());

  // 드래그한 텍스트의 시작과 끝 오프셋을 저장하는 상태
  const [selection, setSelection] = useState({ startOffset: null, endOffset: null });

  // 에디터 클릭 시 SelectionState 초기화
  const handleClick = () => {
    setSelection({ startOffset: null, endOffset: null });
  };

  // 텍스트 드래그 시작 시 SelectionState 업데이트
  const handleMouseDown = (e) => {
    const selection = window.getSelection();
    const startOffset = selection.focusOffset;
    setSelection({ startOffset, endOffset: null });
  };

  // 텍스트 드래그 중 시 SelectionState 업데이트
  const handleMouseUp = (e) => {
    const selection = window.getSelection();
    const endOffset = selection.focusOffset;
    setSelection((prevSelection) => ({ ...prevSelection, endOffset }));
  };

  // 에디터 렌더링
  return (
    <div onClick={handleClick}>
      <Editor
        editorState={editorState}
        blockRenderMap={DefaultDraftBlockRenderMap}
        onMouseDown={handleMouseDown}
        onMouseUp={handleMouseUp}
        onChange={(newEditorState) => setEditorState(newEditorState)}
      />
    </div>
  );
};

위 코드에서는 MyEditor 컴포넌트 내에서 드래그 앤 셀렉트 기능을 구현하고 있습니다.

마무리

위의 코드 예시를 참고하여 Draft.js를 사용하여 텍스트 에디터에 드래그 앤 셀렉트 기능을 구현할 수 있습니다. 드래그한 텍스트의 오프셋을 저장하는 상태를 사용하여 필요한 기능을 추가로 구현할 수도 있습니다.

더 자세한 내용은 Draft.js 공식 문서를 참고하시기 바랍니다.