Quellcode durchsuchen

Merge pull request #15965 from overleaf/ii-ide-page-prototype-review-panel-delete-comment

[web] React ide page delete comment

GitOrigin-RevId: e9ab2afeb7e0053481ccaf3655f8f700707a24f1
ilkin-overleaf vor 2 Jahren
Ursprung
Commit
8ec2b2b42d

+ 23 - 2
services/web/frontend/js/features/ide-react/context/review-panel/hooks/use-review-panel-state.ts

@@ -820,8 +820,6 @@ function useReviewPanelState(): ReviewPanelStateReactIde {
 
 
   const [submitNewComment] =
   const [submitNewComment] =
     useScopeValue<ReviewPanel.UpdaterFn<'submitNewComment'>>('submitNewComment')
     useScopeValue<ReviewPanel.UpdaterFn<'submitNewComment'>>('submitNewComment')
-  const [deleteComment] =
-    useScopeValue<ReviewPanel.UpdaterFn<'deleteComment'>>('deleteComment')
   const [gotoEntry] =
   const [gotoEntry] =
     useScopeValue<ReviewPanel.UpdaterFn<'gotoEntry'>>('gotoEntry')
     useScopeValue<ReviewPanel.UpdaterFn<'gotoEntry'>>('gotoEntry')
   const [submitReplyAngular] =
   const [submitReplyAngular] =
@@ -959,6 +957,28 @@ function useReviewPanelState(): ReviewPanelStateReactIde {
     [projectId]
     [projectId]
   )
   )
 
 
+  const onCommentDeleted = useCallback(
+    (threadId: ThreadId, commentId: CommentId) => {
+      setCommentThreads(prevState => {
+        const thread = { ...getThread(threadId) }
+        thread.messages = thread.messages.filter(m => m.id !== commentId)
+        return { ...prevState, [threadId]: thread }
+      })
+    },
+    [getThread]
+  )
+
+  const deleteComment = useCallback(
+    (threadId: ThreadId, commentId: CommentId) => {
+      onCommentDeleted(threadId, commentId)
+      deleteJSON(
+        `/project/${projectId}/thread/${threadId}/messages/${commentId}`
+      ).catch(debugConsole.error)
+      handleLayoutChange({ async: true })
+    },
+    [onCommentDeleted, projectId]
+  )
+
   const refreshRanges = useCallback(() => {
   const refreshRanges = useCallback(() => {
     type Doc = {
     type Doc = {
       id: DocId
       id: DocId
@@ -1091,6 +1111,7 @@ function useReviewPanelState(): ReviewPanelStateReactIde {
   useSocketListener(socket, 'delete-thread', onThreadDeleted)
   useSocketListener(socket, 'delete-thread', onThreadDeleted)
   useSocketListener(socket, 'resolve-thread', onCommentResolved)
   useSocketListener(socket, 'resolve-thread', onCommentResolved)
   useSocketListener(socket, 'edit-message', onCommentEdited)
   useSocketListener(socket, 'edit-message', onCommentEdited)
+  useSocketListener(socket, 'delete-message', onCommentDeleted)
 
 
   const values = useMemo<ReviewPanelStateReactIde['values']>(
   const values = useMemo<ReviewPanelStateReactIde['values']>(
     () => ({
     () => ({

+ 0 - 1
services/web/frontend/js/features/ide-react/scope-adapters/review-panel-context-adapter.ts

@@ -7,7 +7,6 @@ export default function populateReviewPanelScope(store: ReactScopeValueStore) {
   store.set('reviewPanel.layoutToLeft', false)
   store.set('reviewPanel.layoutToLeft', false)
   store.set('reviewPanel.rendererData.lineHeight', 0)
   store.set('reviewPanel.rendererData.lineHeight', 0)
   store.set('submitNewComment', async () => {})
   store.set('submitNewComment', async () => {})
-  store.set('deleteComment', () => {})
   store.set('gotoEntry', () => {})
   store.set('gotoEntry', () => {})
   store.set('acceptChanges', () => {})
   store.set('acceptChanges', () => {})
   store.set('rejectChanges', () => {})
   store.set('rejectChanges', () => {})