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

[Mission5/홍건우] Project_Notion_VanillaJS 과제 #40

Open
wants to merge 19 commits into
base: 4/#5_HongGunWoo
Choose a base branch
from

Conversation

HongGunWoo
Copy link
Member

@HongGunWoo HongGunWoo commented Jul 6, 2023

📌 과제 설명

2023-07-06.11.31.05.mov

링크

Main 컴포넌트는 DocumentsList 컴포넌트와 DocumentDetailPage 컴포넌트를 렌더링하며
DocumentsList는 화면 좌측의 리스트를, DocumentDetailPage는 document 클릭 시 우측에 에디터 화면을 담당하게 구현하였습니다.

👩‍💻 요구 사항과 구현 내용

기본 요구사항

  • 화면 좌측에 Root Documents를 불러오는 API를 통해 루트 Documents를 렌더링

    • Root Document를 클릭하면 오른쪽 편집기 영역에 해당 Document의 Content를 렌더링
    • 해당 Root Document에 하위 Document가 있는 경우, 해당 Document 아래에 트리 형태로 렌더링
    • Document Tree에서 각 Document 우측에는 + 버튼을 만들고 해당 버튼을 클릭하면, 클릭한 Document의 하위 Document로 새 Document를 생성하고 편집화면으로 넘깁니다.
  • Document Save API를 이용해 지속적으로 서버에 저장되도록 구현

  • History API를 이용해 SPA 형태로 구현

보너스 요구사항

  • div와 contentEditable을 조합해서 좀 더 Rich한 에디터를 구현
    • '# '로 시작할 경우 => h1
    • '## '로 시작할 경우 => h2
    • '### '로 시작할 경우 => h3
  • 편집기 최하단에는 현재 편집 중인 Document의 하위 Document 링크를 렌더링하도록 추가합니다. => 폴더 구조로 대체
  • Document API를 사용하여 document의 title이 "dir/"로 시작할 시 폴더로 인식하여 폴더 처럼 사용 가능
  • 편집기 내에서 다른 Document name을 적은 경우, 자동으로 해당 Document의 편집 페이지로 이동하는 링크를 거는 기능을 추가
    • '/ {document name}'으로 시작할 경우 링크 추가

✅ PR 포인트 & 궁금한 점

2023-07-06.11.47.49.mov

enter키를 입력하고 나서 커서를 유지하는 방법, h1 태그 등을 적용시키는 방법 등 rich 에디터를 구현하는데 너무 많은 고민을 했었던 것 같습니다ㅠㅠ...
아직도 불안정하다고 생각되고 실제로 고치지 못한 버그도 있는데 위의 동영상을 보면 숫자나 영어로 입력하고 난 후 enter를 입력했을 때 커서가 잘 유지되어서 다음 줄로 넘어가지만 한글을 입력하고 enter를 입력할 경우 커서가 유지되지 않고 이상하게 동작되는 것을 볼 수 있습니다. 하지만 한글을 입력하고 난 후 화살표 키를 사용해 커서를 오른쪽으로 이동시키면 제대로 동작하는 것을 확인했습니다.
찾아보니 한글 입력 시 조합과 관련된 문제 때문인 것 같아서 isComposing을 적용해봤으나 해결하지 못했습니다. 어떻게 하면 해결할 수 있을지 궁금합니다.
또, 전체적으로 rich 에디터를 구현하는데 사용한 커서 유지 방법이나 구현된 방식이 어느 부분이 잘못되고 올바르지 않은 코드인지도 궁금합니다!

@HongGunWoo HongGunWoo requested a review from feel5ny July 6, 2023 14:54
@HongGunWoo HongGunWoo self-assigned this Jul 6, 2023
@HongGunWoo HongGunWoo changed the title 4/#5 hong gun woo working [Mission5/홍건우] Project_Notion_VanillaJS 과제 Jul 6, 2023
// 커서 위치 불러옴
$node.focus();

const range = document.createRange();
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

한글 입력 후 enter 입력 시 range의 출력 값이 다른데 해당 부분이 문제인 것 같습니다.ㅠㅠ

영어, 숫자 입력 후 range 값
스크린샷 2023-07-07 오전 12 47 28

한글 입력 후 range 값
스크린샷 2023-07-07 오전 12 48 33

Copy link

@JeongWuk JeongWuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

프로젝트 하시느라 고생하셨어요! 디자인도 정말 깔끔하고 좋은 것 같아요👍

src/pages/MainPage/components/DirItem.js Show resolved Hide resolved
src/pages/MainPage/components/DirItem.js Show resolved Hide resolved
src/pages/MainPage/components/DocumentEditor.js Outdated Show resolved Hide resolved
Copy link

@Eosdia Eosdia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

과제를 하신다고 수고많으셨습니다! 항상 코드 작성이 깔끔해서 많이 배우고 갑니다!
보너스 구현까지 하신거 정말 대단한것 같아요. 아직 실력이 부족해서 리뷰에 도움이 되지 못하지만 개인적으로 많이 배우고 갑니다!!

src/services/api.js Show resolved Hide resolved
Copy link

@khj0426 khj0426 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!
오프라인때 엄청난 개발속도에 감탄을 하면서 봤었는데 새로 얻어간 게 많은 거 같아요!
다음과제도 화이팅입니당 ! 👍 👍

src/pages/MainPage/components/DirItem.js Show resolved Hide resolved
src/services/router.js Show resolved Hide resolved
src/pages/MainPage/components/DirItem.js Show resolved Hide resolved
Copy link

@feel5ny feel5ny left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다! 비주얼적으로도 안정감있고, 컴포넌트 역할분리도 안정적이네요 👍 !!

enter키를 입력하고 나서 커서를 유지하는 방법, h1 태그 등을 적용시키는 방법 등 rich 에디터를 구현하는데 너무 많은 고민을 했었던 것 같습니다ㅠㅠ...
아직도 불안정하다고 생각되고 실제로 고치지 못한 버그도 있는데 위의 동영상을 보면 숫자나 영어로 입력하고 난 후 enter를 입력했을 때 커서가 잘 유지되어서 다음 줄로 넘어가지만,

  • 한글을 입력하고 enter를 입력할 경우 커서가 유지되지 않고 이상하게 동작되는 것을 볼 수 있습니다.
  • 하지만 한글을 입력하고 난 후 화살표 키를 사용해 커서를 오른쪽으로 이동시키면 제대로 동작하는 것을 확인했습니다.
  • 찾아보니 한글 입력 시 조합과 관련된 문제 때문인 것 같아서 isComposing을 적용해봤으나 해결하지 못했습니다. 어떻게 하면 해결할 수 있을지 궁금합니다.

해당 이슈는 저도 겪어보진 못했어서, 조금 더 디버깅을 해봐야겠네요 🤔
slack 채널에도 공유해보고 강사님이나 다른분들께 조언을 구해보는것도 방법일듯합니다.

또, 전체적으로 rich 에디터를 구현하는데 사용한 커서 유지 방법이나 구현된 방식이 어느 부분이 잘못되고 올바르지 않은 코드인지도 궁금합니다!

ContentEditable를 활용했을때 커서 유지는 보편적으로 해당 방법으로 구현하는 것으로 알고 있습니다.
다만 키보드 액션과 함께 다이나믹학 에디터를 구현하고 계셔서 사이드 이펙트 파악이 어려운 것 같습니다.
키보드 액션에대한 엣지케이스가 많기도 한 듯해서,
1차적으로는 위지윅 에디터처럼 버튼 형태로 텍스트 스타일링을 하는 방식으로 스펙을 쪼개가는 것도 방법일 듯 합니다.

src/pages/MainPage/components/DirItem.js Outdated Show resolved Hide resolved
src/pages/MainPage/components/DirItem.js Show resolved Hide resolved
src/pages/MainPage/components/DirItem.js Outdated Show resolved Hide resolved
src/pages/MainPage/components/DirItem.js Outdated Show resolved Hide resolved
src/pages/MainPage/components/DirItem.js Outdated Show resolved Hide resolved
src/services/api.js Show resolved Hide resolved
src/services/router.js Show resolved Hide resolved
src/pages/MainPage/components/DocItem.js Show resolved Hide resolved
src/pages/MainPage/components/DocumentEditor.js Outdated Show resolved Hide resolved
if (doc) {
div.innerHTML = `<span data-id=${doc.id} class="linkToDoc">${doc.title}</span>`;
}
doc = null;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just ask; 처리하신 배경이 있을가요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"/ aaa"를 입력후 "aaa" title을 가진 문서가 존재하는 경우 span 태그로 변하게 됩니다. 그런데 변경된 span태그가 있는 줄에서 enter를 입력하고 문서를 계속 작성할 경우 span태그가 다음 줄에도 적용되는 문제가 발생해서 해결해보려고 작성한 코드였는데 실패했었습니다 ㅎㅎ... ㅠㅠ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants