Всплывающая подсказка с текстом комментария при наведении #268
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что хотим
При наведении курсора на текст, помеченный комментарием (жёлтая подсветка
.comment-mark), показывать рядом небольшую всплывающую подсказку с текстом комментария — чтобы прочитать комментарий, не открывая боковую панель.Текущее поведение
<span class="comment-mark" data-comment-id="…">(packages/editor-ext/src/lib/comment/comment.ts).ACTIVE_COMMENT_EVENT, который открывает боковую панель (apps/client/src/features/editor/page-editor.tsx). Прочитать текст комментария можно только через панель.["comments", pageId](useCommentsQuery), но грузится только при открытой панели.Зафиксированные решения
page-editor.tsx); read-only / публичные шары / история — вне scope.Предлагаемое решение
Отдельный React-компонент
CommentHoverPreview(без правок вeditor-ext):page-editor.tsx, получаетpageIdиcontainerRef(menuContainerRef, оборачиваетEditorContent).useCommentsQuery({ pageId })строитMap<commentId, IComment>(react-query дедуплицирует запрос с боковой панелью по тому же ключу).mouseover/mouseoutна контейнере: поtarget.closest('.comment-mark[data-comment-id]')достаёт комментарий; пропускает неизвестные/resolved.content), показываетfixed-карточку черезcreatePortal, позиционируя поgetBoundingClientRect()спана (снизу, переворот наверх у края экрана). Карточкаpointer-events: none— не ломает клик и не требует логики наведения на саму карточку.mouseout,scroll,resize; небольшая задержка открытия против мерцания; сброс при смене страницы.Файлы
apps/client/src/features/comment/components/comment-hover-preview.tsx(компонент + хелперcommentContentToText).apps/client/src/features/editor/page-editor.tsx— смонтировать компонент рядом с<EditorContent>.apps/client/src/features/editor/styles/core.css— стиль карточки (либо MantinePaper withBorder shadow).Краевые случаи
resolvedAtи классуresolved.pointer-events: none).Чеклист реализации
CommentHoverPreview+ хелперcommentContentToTextpage-editor.tsx