Forráskód Böngészése

Fix bug in correspondence model reducer + documentation.

Joeri Exelmans 2 éve
szülő
commit
b5c6c8087f
1 módosított fájl, 9 hozzáadás és 2 törlés
  1. 9 2
      src/frontend/correspondence.ts

+ 9 - 2
src/frontend/correspondence.ts

@@ -16,11 +16,11 @@ function getGraphState(version: Version): GraphState {
 }
 
 export function newCorrespondence({generateUUID, primitiveRegistry, cs, as}) {
-  // const cs = newVersionedModel({readonly, generateUUID, primitiveRegistry});
   const {initialState, getReducer: getReducerOrig} = newVersionedModel({readonly: true, generateUUID, primitiveRegistry});
 
   const parser = new TrivialParser(primitiveRegistry, generateUUID);
 
+  // Mapping from correspondence model version to CS and AS model version.
   const corrMap: Map<Version,{csVersion:Version,asVersion:Version}> = new Map([
     [initialState.version, {csVersion: cs.initialState.version, asVersion: as.initialState.version}]
   ]);
@@ -42,13 +42,17 @@ export function newCorrespondence({generateUUID, primitiveRegistry, cs, as}) {
       const {corrDeltas, asDeltas} = parser.parse(csDeltas, csGS, corrGS, asGS);
 
       const csVersionPromise = new Promise<Version>(resolve => {
+        // createAndGotoNewVersion will create a new Version in a callback passed to React's setState.
+        // Therefore, we can only get the newly created Version by passing a callback ourselves ('resolve') that will be called when the new Version is created.
         csReducer.callbacks.createAndGotoNewVersion(csDeltas, description, resolve);
       });
       const corrVersionPromise = new Promise<Version>(resolve => {
+        // See comment about 'createAndGotoNewVersion' above.
         createAndGotoNewVersion(corrDeltas, description, resolve);
       });
       const asVersionPromise = new Promise<Version>(resolve => {
         if (asDeltas.length > 0) {
+          // See comment about 'createAndGotoNewVersion' above.
           asReducer.callbacks.createAndGotoNewVersion(asDeltas, "parse:"+description, resolve);
         } else {
           resolve(asReducer.state.version);
@@ -66,16 +70,19 @@ export function newCorrespondence({generateUUID, primitiveRegistry, cs, as}) {
       const {corrDeltas, csDeltas} = parser.render(asDeltas, csGS, corrGS, asGS);
 
       const csVersionPromise = new Promise<Version>(resolve => {
-        if (asDeltas.length > 0) {
+        if (csDeltas.length > 0) {
+          // See comment about 'createAndGotoNewVersion' above.
           csReducer.callbacks.createAndGotoNewVersion(csDeltas, "render:"+description, resolve);
         } else {
           resolve(csReducer.state.version);
         }
       });
       const corrVersionPromise = new Promise<Version>(resolve => {
+        // See comment about 'createAndGotoNewVersion' above.
         createAndGotoNewVersion(corrDeltas, description, resolve);
       });
       const asVersionPromise = new Promise<Version>(resolve => {
+        // See comment about 'createAndGotoNewVersion' above.
         asReducer.callbacks.createAndGotoNewVersion(asDeltas, description, resolve);
       });