Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FE] feat: 한국어 crdt 구현 #201

Merged
merged 1 commit into from
Dec 6, 2023

Conversation

d0422
Copy link
Collaborator

@d0422 d0422 commented Dec 6, 2023

한국어 crdt 구현

PR 설명

  • 한국어 crdt 구현

✅ 완료한 기능 명세

  • 한국어 crdt 구현

📸 스크린샷

image

고민과 해결과정

기존의 문제점은 한글이 한글자씩 입력되는 경우 ytext에 자모음이 하나씩 입력되어 한글이 깨진다는 것이었다.
이를 해결하기 위해 compositionEnd 이벤트를 사용했다.
한글이 완성되었을 때 발생하는 이벤트인데, 이때 ytext에 추가시키는 형태로 구현했다.
또한, 기존의 onChange함수에서 한 글자에 한글인 경우에 대해서는 ytext에 처리하지 않는 형태로 구현하여 해결했다.

  const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {
    const newText = event.target.value;
    const newCursor = event.target.selectionStart; // 연산 이후의 최종 위치

    setPlainCode(newText);
    setCursorPosition(newCursor);

    const changedLength = plainCode.length - newText.length;
    const isAdded = changedLength < 0;

    if (isAdded) {
      const addedText = newText.slice(newCursor - Math.abs(changedLength), newCursor);
      const isOneLetter = addedText.length === 1;
      const isKorean = addedText.match(/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/);

      if (isOneLetter && isKorean) return; //한글인 경우 추가하지 않음

      crdt.getText('sharedText').insert(newCursor - Math.abs(changedLength), addedText);
    } else {
      const removedLength = Math.abs(changedLength);
      crdt.getText('sharedText').delete(newCursor, removedLength);
    }

    sendMessageDataChannels(codeDataChannel, Y.encodeStateAsUpdate(crdt));
  };

한글을 한글자씩 입력받는 경우 처리

  const handleCompositionEnd = (event: React.CompositionEvent<HTMLTextAreaElement>) => {
    crdt.getText('sharedText').insert(cursorPosition - 1, event.data);
    sendMessageDataChannels(codeDataChannel, Y.encodeStateAsUpdate(crdt));
  };

한국어 crdt 구현
@d0422 d0422 added feature 기능 구현 FrontEnd 프론트엔드 관련 labels Dec 6, 2023
@d0422 d0422 self-assigned this Dec 6, 2023
@d0422 d0422 requested a review from HBSPS December 6, 2023 08:23
@d0422 d0422 merged commit bb9a6db into boostcampwm2023:dev Dec 6, 2023
6 checks passed
@d0422 d0422 mentioned this pull request Dec 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 기능 구현 FrontEnd 프론트엔드 관련
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants