Sfoglia il codice sorgente

Only dispatch doc:changed event for insert or delete operations (#23779)

GitOrigin-RevId: b3425d4edffb045b2a15e5fc5cb69210d9e97203
Alf Eaton 1 anno fa
parent
commit
a7e00e19e2

+ 9 - 4
services/web/frontend/js/features/ide-react/editor/document-container.ts

@@ -18,6 +18,7 @@ import {
 import {
   isCommentOperation,
   isDeleteOperation,
+  isEditOperation,
   isInsertOperation,
 } from '@/utils/operations'
 import { decodeUtf8 } from '@/utils/decode-utf8'
@@ -584,10 +585,14 @@ export class DocumentContainer extends EventEmitter {
           window.clearTimeout(docChangedTimeout)
         }
         docChangedTimeout = window.setTimeout(() => {
-          window.dispatchEvent(
-            new CustomEvent('doc:changed', { detail: { id: this.doc_id } })
-          )
-          this.ideEventEmitter.emit('doc:changed', { doc_id: this.doc_id })
+          if (ops.some(isEditOperation)) {
+            window.dispatchEvent(
+              new CustomEvent('doc:changed', { detail: { id: this.doc_id } })
+            )
+            this.ideEventEmitter.emit('doc:changed', {
+              doc_id: this.doc_id,
+            })
+          }
         }, 50)
       }
     )

+ 3 - 0
services/web/frontend/js/utils/operations.ts

@@ -15,6 +15,9 @@ export const isCommentOperation = (op: Operation): op is CommentOperation =>
 export const isDeleteOperation = (op: Operation): op is DeleteOperation =>
   'd' in op
 
+export const isEditOperation = (op: Operation): op is EditOperation =>
+  isInsertOperation(op) || isDeleteOperation(op)
+
 export const isInsertChange = (
   change: Change<EditOperation>
 ): change is Change<InsertOperation> => isInsertOperation(change.op)