mergeOptimisticRecords()

in src/devtools/store.js [190:226]


  mergeOptimisticRecords(id: number, newRecords: ?StoreRecords) {
    if (newRecords == null) {
      return;
    }
    const oldRecords = this._environmentStoreOptimisticData.get(id);
    if (oldRecords == null) {
      this._environmentStoreOptimisticData.set(id, newRecords);
      return;
    }
    const dataIDs = Object.keys(newRecords);

    for (let ii = 0; ii < dataIDs.length; ii++) {
      const dataID = dataIDs[ii];
      const oldRecord = oldRecords[dataID];
      const newRecord = newRecords[dataID];
      if (oldRecord && newRecord) {
        let updated: Record | null = null;
        const keys = Object.keys(newRecord);
        for (let iii = 0; iii < keys.length; iii++) {
          const key = keys[iii];
          if (updated || oldRecord[key] !== newRecord[key]) {
            updated = updated !== null ? updated : { ...oldRecord };
            updated[key] = newRecord[key];
          }
        }
        updated = updated !== null ? updated : oldRecord;
        if (updated !== newRecord) {
          oldRecords[dataID] = updated;
        }
      } else if (oldRecord == null) {
        oldRecords[dataID] = newRecord;
      } else if (newRecord == null) {
        delete oldRecords[dataID];
      }
    }
    this._environmentStoreOptimisticData.set(id, oldRecords);
  }