From 5ddcaf4051e62d6c73afa1f92a5bb5b55239e458 Mon Sep 17 00:00:00 2001
From: Alexander Onnikov <Alexander.Onnikov@gmail.com>
Date: Thu, 28 Dec 2023 10:33:44 +0700
Subject: [PATCH] UBERF-4777 Fix redundant updates from collaborator (#4280)

Signed-off-by: Alexander Onnikov <alexander.onnikov@xored.com>
---
 .../src/components/CollaborativeTextEditor.svelte    | 12 ++++++++++--
 server/collaborator/src/extensions/storage.ts        |  9 ++++++---
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/packages/text-editor/src/components/CollaborativeTextEditor.svelte b/packages/text-editor/src/components/CollaborativeTextEditor.svelte
index 0dba1ea1fb..9b40e1847e 100644
--- a/packages/text-editor/src/components/CollaborativeTextEditor.svelte
+++ b/packages/text-editor/src/components/CollaborativeTextEditor.svelte
@@ -314,7 +314,11 @@
     </div>
   {/if}
 
-  <div class="text-editor-toolbar buttons-group xsmall-gap mb-4" bind:this={textToolbarElement}>
+  <div
+    class="text-editor-toolbar buttons-group xsmall-gap mb-4"
+    bind:this={textToolbarElement}
+    style="visibility: hidden;"
+  >
     {#if showTextStyleToolbar}
       <TextEditorStyleToolbar
         textEditor={editor}
@@ -326,7 +330,11 @@
     {/if}
   </div>
 
-  <div class="text-editor-toolbar buttons-group xsmall-gap mb-4" bind:this={imageToolbarElement}>
+  <div
+    class="text-editor-toolbar buttons-group xsmall-gap mb-4"
+    bind:this={imageToolbarElement}
+    style="visibility: hidden;"
+  >
     <ImageStyleToolbar textEditor={editor} formatButtonSize={buttonSize} on:focus={handleFocus} />
   </div>
 
diff --git a/server/collaborator/src/extensions/storage.ts b/server/collaborator/src/extensions/storage.ts
index 0f61aad03e..9d6c542921 100644
--- a/server/collaborator/src/extensions/storage.ts
+++ b/server/collaborator/src/extensions/storage.ts
@@ -54,13 +54,14 @@ export class StorageExtension implements Extension {
 
   async onStoreDocument ({ context, documentName, document }: withContext<onStoreDocumentPayload>): Promise<void> {
     const collaborators = this.collaborators.get(documentName)
+
     if (collaborators === undefined || collaborators.size === 0) {
       console.log('no changes for document', documentName)
       return
     }
 
+    this.collaborators.delete(documentName)
     await this.configuration.ctx.with('store-document', {}, async () => {
-      this.collaborators.delete(documentName)
       await this.storeDocument(documentName, document, context)
     })
   }
@@ -68,12 +69,14 @@ export class StorageExtension implements Extension {
   async onDisconnect ({ context, documentName, document }: withContext<onDisconnectPayload>): Promise<any> {
     const { connectionId } = context
     const collaborators = this.collaborators.get(documentName)
-    if (collaborators === undefined || !this.collaborators.has(connectionId)) {
+
+    if (collaborators === undefined || !collaborators.has(connectionId)) {
       console.log('no changes for document', documentName)
+      return
     }
 
+    this.collaborators.delete(documentName)
     await this.configuration.ctx.with('store-document', {}, async () => {
-      this.collaborators.get(documentName)?.delete(connectionId)
       await this.storeDocument(documentName, document, context)
     })
   }