diff --git a/src/mergeable-store.ts b/src/mergeable-store.ts index e24852b4f6a..26f66dbbe4e 100644 --- a/src/mergeable-store.ts +++ b/src/mergeable-store.ts @@ -10,7 +10,7 @@ import { Time, createMergeableStore as createMergeableStoreDecl, } from './types/mergeable-store'; -import {IdMap, mapEnsure, mapGet} from './common/map'; +import {IdMap, mapEnsure, mapGet, mapToObj} from './common/map'; import { IdObj, objEnsure, @@ -26,6 +26,7 @@ import { hashStampMapToObj, hashStampNewMap, hashStampNewThing, + hashStampToStamp, stampNew, stampNewObj, updateHashStamp, @@ -306,18 +307,18 @@ export const createMergeableStore = ((id: Id): MergeableStore => { const getMergeableValuesDelta = ( valuesHsm: HashStamp>>, relativeTo: HashStamp>>, - ): Stamp>> => { - if (valuesHsm[2] == relativeTo?.[2]) { - return stampNewObj(); - } - const valuesDelta = {} as IdObj>; - collForEach(valuesHsm[1], (valueHsm, valueId) => - valueHsm[2] === relativeTo?.[1]?.[valueId]?.[2] - ? 0 - : (valuesDelta[valueId] = [valueHsm[0], valueHsm[1]]), - ); - return [valuesHsm[0], valuesDelta]; - }; + ): Stamp>> => + valuesHsm[2] == relativeTo?.[2] + ? stampNewObj() + : [ + valuesHsm[0], + mapToObj( + valuesHsm[1], + hashStampToStamp, + (valueHsm, valueId) => + valueHsm[2] === relativeTo?.[1]?.[valueId]?.[2], + ), + ]; const setMergeableContent = ( mergeableContent: MergeableContent, diff --git a/src/mergeable-store/stamps.ts b/src/mergeable-store/stamps.ts index 4ed1dbe3fa2..f19f3684a3f 100644 --- a/src/mergeable-store/stamps.ts +++ b/src/mergeable-store/stamps.ts @@ -5,6 +5,11 @@ import {EMPTY_STRING} from '../common/strings'; import {Id} from '../types/common'; import {getHash} from './hash'; +export const hashStampToStamp = ([ + time, + value, +]: HashStamp): Stamp => [time, value]; + const cloneHashStamp = ( [time, value, hash]: HashStamp, _id: Id = EMPTY_STRING,