From c227643bb2de8219d522f6e272f6725b227a0832 Mon Sep 17 00:00:00 2001 From: yu-i-i Date: Mon, 22 Sep 2025 15:05:34 +0200 Subject: [PATCH] Fix: comments thread does not necessarily belong to current document --- .../components/review-panel-comment.tsx | 8 ++++---- .../components/review-panel-resolved-thread.tsx | 11 ++++++----- .../review-panel-resolved-threads-menu.tsx | 7 ++++--- .../review-panel/context/threads-context.tsx | 15 ++++++++------- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/services/web/frontend/js/features/review-panel/components/review-panel-comment.tsx b/services/web/frontend/js/features/review-panel/components/review-panel-comment.tsx index c7f60aac35..15b494252d 100644 --- a/services/web/frontend/js/features/review-panel/components/review-panel-comment.tsx +++ b/services/web/frontend/js/features/review-panel/components/review-panel-comment.tsx @@ -44,7 +44,7 @@ export const ReviewPanelComment = memo<{ const handleResolveComment = useCallback(async () => { setProcessing(true) try { - await resolveThread(comment.op.t) + await resolveThread(comment.op.t, docId) } catch (err) { debugConsole.error(err) showGenericMessageModal( @@ -54,7 +54,7 @@ export const ReviewPanelComment = memo<{ } finally { setProcessing(false) } - }, [comment.op.t, resolveThread, showGenericMessageModal, t]) + }, [comment.op.t, docId, resolveThread, showGenericMessageModal, t]) const handleEditMessage = useCallback( async (commentId: CommentId, content: string) => { @@ -110,7 +110,7 @@ export const ReviewPanelComment = memo<{ async (commentId: ThreadId) => { setProcessing(true) try { - await deleteThread(commentId) + await deleteThread(commentId, docId) } catch (err) { debugConsole.error(err) showGenericMessageModal( @@ -121,7 +121,7 @@ export const ReviewPanelComment = memo<{ setProcessing(false) } }, - [deleteThread, showGenericMessageModal, t] + [deleteThread, docId, showGenericMessageModal, t] ) const handleSubmitReply = useCallback( diff --git a/services/web/frontend/js/features/review-panel/components/review-panel-resolved-thread.tsx b/services/web/frontend/js/features/review-panel/components/review-panel-resolved-thread.tsx index e5b4b372b8..0ba2cbfa65 100644 --- a/services/web/frontend/js/features/review-panel/components/review-panel-resolved-thread.tsx +++ b/services/web/frontend/js/features/review-panel/components/review-panel-resolved-thread.tsx @@ -17,7 +17,8 @@ export const ReviewPanelResolvedThread: FC<{ id: ThreadId comment: Change docName: string -}> = ({ id, comment, docName }) => { + docId: string +}> = ({ id, comment, docName, docId }) => { const { t } = useTranslation() const { reopenThread, deleteThread } = useThreadsActionsContext() const [processing, setProcessing] = useState(false) @@ -33,7 +34,7 @@ export const ReviewPanelResolvedThread: FC<{ const handleReopenThread = useCallback(async () => { setProcessing(true) try { - await reopenThread(id) + await reopenThread(id, docId) } catch (err) { debugConsole.error(err) showGenericMessageModal( @@ -43,12 +44,12 @@ export const ReviewPanelResolvedThread: FC<{ } finally { setProcessing(false) } - }, [id, reopenThread, showGenericMessageModal, t]) + }, [id, docId, reopenThread, showGenericMessageModal, t]) const handleDeleteThread = useCallback(async () => { setProcessing(true) try { - await deleteThread(id) + await deleteThread(id, docId) } catch (err) { debugConsole.error(err) showGenericMessageModal( @@ -58,7 +59,7 @@ export const ReviewPanelResolvedThread: FC<{ } finally { setProcessing(false) } - }, [id, deleteThread, showGenericMessageModal, t]) + }, [id, docId, deleteThread, showGenericMessageModal, t]) return (
{ const { projectRanges, loading } = useProjectRanges() const docNameForThread = useMemo(() => { - const docNameForThread = new Map() + const docNameForThread = new Map() const otMigrationStage = getMeta('ol-otMigrationStage') for (const [docId, ranges] of projectRanges?.entries() ?? []) { @@ -28,7 +28,7 @@ export const ReviewPanelResolvedThreadsMenu: FC = () => { if (docName !== undefined) { for (const comment of ranges.comments) { const threadId = comment.op.t - docNameForThread.set(threadId, docName) + docNameForThread.set(threadId, { docId, docName }) } } } @@ -112,7 +112,8 @@ export const ReviewPanelResolvedThreadsMenu: FC = () => { key={thread.id} id={thread.id as ThreadId} comment={comment} - docName={docNameForThread.get(thread.id) ?? t('unknown')} + docName={docNameForThread.get(thread.id)?.docName ?? t('unknown')} + docId={docNameForThread.get(thread.id)?.docId} /> ) })} diff --git a/services/web/frontend/js/features/review-panel/context/threads-context.tsx b/services/web/frontend/js/features/review-panel/context/threads-context.tsx index b3a5d784df..0bf6fef249 100644 --- a/services/web/frontend/js/features/review-panel/context/threads-context.tsx +++ b/services/web/frontend/js/features/review-panel/context/threads-context.tsx @@ -289,23 +289,24 @@ export const ThreadsProvider: FC = ({ children }) => { currentDocument.submitOp(op) }, - async resolveThread(threadId: string) { + async resolveThread(threadId: string, docId: string) { await postJSON( - `/project/${projectId}/doc/${currentDocument.doc_id}/thread/${threadId}/resolve` + `/project/${projectId}/doc/${docId}/thread/${threadId}/resolve` ) sendEvent('rp-comment-resolve', { view: reviewPanelView }) }, - async reopenThread(threadId: string) { + async reopenThread(threadId: string, docId: string) { await postJSON( - `/project/${projectId}/doc/${currentDocument.doc_id}/thread/${threadId}/reopen` + `/project/${projectId}/doc/${docId}/thread/${threadId}/reopen` ) sendEvent('rp-comment-reopen') }, - async deleteThread(threadId: string) { + async deleteThread(threadId: string, docId: string) { await deleteJSON( - `/project/${projectId}/doc/${currentDocument.doc_id}/thread/${threadId}` + `/project/${projectId}/doc/${docId}/thread/${threadId}` ) - currentDocument.ranges?.removeCommentId(threadId) + // Is looks like it's not necessary + // currentDocument.ranges?.removeCommentId(threadId) sendEvent('rp-comment-delete') }, async addMessage(threadId: ThreadId, content: string) {