idlewinn 5 лет назад
Родитель
Сommit
a0669f874e
2 измененных файлов с 12 добавлено и 0 удалено
  1. 6 0
      src/components/App.tsx
  2. 6 0
      src/element/mutateElement.ts

+ 6 - 0
src/components/App.tsx

@@ -263,9 +263,14 @@ export class App extends React.Component<any, AppState> {
                 sceneAppState || getDefaultAppState(),
                 { scrollToContent: true },
               );
+              // Perform reconciliation - in collaboration, if we encounter
+              // elements with more staler versions than ours, ignore them
+              // and keep ours.
               if (elements == null || elements.length === 0) {
                 elements = restoredState.elements;
               } else {
+                // create a map of ids so we don't have to iterate
+                // over the array more than once.
                 const elementMap = elements.reduce(
                   (
                     acc: { [key: string]: ExcalidrawElement },
@@ -276,6 +281,7 @@ export class App extends React.Component<any, AppState> {
                   },
                   {},
                 );
+                // Reconcile
                 elements = restoredState.elements.map(element => {
                   if (
                     elementMap.hasOwnProperty(element.id) &&

+ 6 - 0
src/element/mutateElement.ts

@@ -3,6 +3,9 @@ import {
   MutableExcalidrawTextElement,
 } from "./types";
 
+// This function tracks updates of text elements for the purposes for collaboration.
+// The version is used to compare updates when more than one user is working in
+// the same drawing.
 export function mutateElement(
   element: MutableExcalidrawElement,
   callback: (mutatableElement: MutableExcalidrawElement) => void,
@@ -11,6 +14,9 @@ export function mutateElement(
   callback(element);
 }
 
+// This function tracks updates of text elements for the purposes for collaboration.
+// The version is used to compare updates when more than one user is working in
+// the same document.
 export function mutateTextElement(
   element: MutableExcalidrawTextElement,
   callback: (mutatableElement: MutableExcalidrawTextElement) => void,