diff --git a/lib/reducers/holder-reducer.js b/lib/reducers/holder-reducer.js --- a/lib/reducers/holder-reducer.js +++ b/lib/reducers/holder-reducer.js @@ -1,5 +1,6 @@ // @flow +import { setClientDBStoreActionType } from '../actions/client-db-store-actions.js'; import { processHoldersActionTypes, storeEstablishedHolderActionType, @@ -17,6 +18,33 @@ holderStatuses, } from '../types/holder-types.js'; import type { BaseAction } from '../types/redux-types.js'; +import { getMessageForException } from '../utils/errors.js'; +import { assertObjectsAreEqual } from '../utils/objects.js'; + +function assertHolderStoresAreEqual( + processedHolderStore: HolderStore, + expectedHolderStore: HolderStore, + location: string, + onStateDifference?: (message: string) => mixed, +) { + try { + assertObjectsAreEqual( + processedHolderStore, + expectedHolderStore, + `HolderStore - ${location}`, + ); + } catch (e) { + console.log( + 'Error processing HolderStore ops', + processedHolderStore, + expectedHolderStore, + ); + const message = `Error processing HolderStore ops ${ + getMessageForException(e) ?? '{no exception message}' + }`; + onStateDifference?.(message); + } +} const mapResultsToHolderItems: ( status: HolderStatus, @@ -41,6 +69,7 @@ function reduceHolderStore( store: HolderStore, action: BaseAction, + onStateDifference?: (message: string) => mixed, ): ReduceHolderStoreResult { if (action.type === storeEstablishedHolderActionType) { const { blobHash, holder } = action.payload; @@ -123,6 +152,20 @@ holderStore: processHolderStoreOperations(store, holderStoreOperations), holderStoreOperations, }; + } else if (action.type === setClientDBStoreActionType) { + const newHolderStore = action.payload.holders ?? {}; + + assertHolderStoresAreEqual( + { ...store, storedHolders: newHolderStore }, + store, + action.type, + onStateDifference, + ); + + return { + holderStore: store, + holderStoreOperations: [], + }; } return { holderStore: store, holderStoreOperations: [] }; } diff --git a/lib/reducers/master-reducer.js b/lib/reducers/master-reducer.js --- a/lib/reducers/master-reducer.js +++ b/lib/reducers/master-reducer.js @@ -226,7 +226,11 @@ const { store: queuedDMOperations, operations: dmOperationStoreOperations } = reduceDMOperationsQueue(state.queuedDMOperations, action); - const { holderStore } = reduceHolderStore(state.holderStore, action); + const { holderStore } = reduceHolderStore( + state.holderStore, + action, + onStateDifferenceForStaff, + ); let storeOperations = { draftStoreOperations,