Skip to content

Commit 117eec1

Browse files
committed
[#128] fix: Title에 caret 버그 수정사항 반영
1 parent 36f9b0f commit 117eec1

File tree

1 file changed

+10
-13
lines changed
  • frontend/src/components/molecules/Title

1 file changed

+10
-13
lines changed

frontend/src/components/molecules/Title/Title.tsx

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import { jsx, css } from '@emotion/react';
44

55
import { useRecoilState, useSetRecoilState } from 'recoil';
66
import { pagesState, pageState } from '@/stores';
7-
import { ChangeEvent, useEffect, useRef } from 'react';
7+
import { ChangeEvent, useRef } from 'react';
88
import { debounce, refreshPages, updatePage } from '@/utils';
99
import { Page } from '@/schemes';
10+
import { useManager } from '@/hooks';
1011

1112
const wrapperCss = () => css`
1213
padding-left: calc(96px + env(safe-area-inset-left));
@@ -49,27 +50,22 @@ const titleCss = () => css`
4950
function Title(): JSX.Element {
5051
const [selectedPage, setSelectedPage] = useRecoilState(pageState);
5152
const setPages = useSetRecoilState(pagesState);
52-
const caretRef = useRef(0);
53+
const [, { setCaretOffset }] = useManager(selectedPage.rootId);
5354
const updateSelectedPage = useRef(
5455
debounce(async (page: Page) => {
55-
caretRef.current = window.getSelection().focusOffset;
56-
5756
const { page: updatedPage } = await updatePage(page);
5857
const updatedPages = await refreshPages();
58+
const { focusOffset } = window.getSelection();
59+
setTimeout(() => {
60+
setCaretOffset(focusOffset);
61+
});
62+
titleRef.current.blur();
5963

6064
setSelectedPage(updatedPage);
6165
setPages(updatedPages);
6266
}, 300),
6367
).current;
64-
65-
useEffect(() => {
66-
const selection = window.getSelection();
67-
const nodeLength = selection.focusNode?.nodeValue?.length ?? 0;
68-
if (caretRef.current > nodeLength) {
69-
caretRef.current = nodeLength;
70-
}
71-
selection.collapse(selection.focusNode, caretRef.current);
72-
}, [selectedPage]);
68+
const titleRef = useRef(null);
7369

7470
const handleChange = async (event: ChangeEvent<HTMLDivElement>) =>
7571
updateSelectedPage({
@@ -81,6 +77,7 @@ function Title(): JSX.Element {
8177
<div css={wrapperCss()}>
8278
<div css={titlePaddingTopCss()} />
8379
<div
80+
ref={titleRef}
8481
contentEditable
8582
suppressContentEditableWarning
8683
css={titleCss()}

0 commit comments

Comments
 (0)