diff --git a/lib/reducers/keyserver-reducer.js b/lib/reducers/keyserver-reducer.js --- a/lib/reducers/keyserver-reducer.js +++ b/lib/reducers/keyserver-reducer.js @@ -49,7 +49,10 @@ export default function reduceKeyserverStore( state: KeyserverStore, action: BaseAction, -): KeyserverStore { +): { + keyserverStore: KeyserverStore, + keyserverStoreOperations: $ReadOnlyArray, +} { if (action.type === addKeyserverActionType) { const replaceOperation: ReplaceKeyserverOperation = { type: 'replace_keyserver', @@ -62,8 +65,13 @@ }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [replaceOperation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [ + replaceOperation, + ]), + }, + keyserverStoreOperations: [replaceOperation], }; } else if (action.type === removeKeyserverActionType) { const removeOperation: RemoveKeyserversOperation = { @@ -74,8 +82,13 @@ }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [removeOperation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [ + removeOperation, + ]), + }, + keyserverStoreOperations: [removeOperation], }; } else if (action.type === resetUserStateActionType) { // this action is only dispatched on native @@ -98,8 +111,14 @@ } return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, replaceOperations), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps( + state.keyserverInfos, + replaceOperations, + ), + }, + keyserverStoreOperations: replaceOperations, }; } else if (action.type === setNewSessionActionType) { const { keyserverID, sessionChange } = action.payload; @@ -110,7 +129,10 @@ `but keyserver ${keyserverID} is not in KeyserverStore!`, ); } - return state; + return { + keyserverStore: state, + keyserverStoreOperations: [], + }; } let newKeyserverInfo = { @@ -148,8 +170,11 @@ } return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, operations), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, operations), + }, + keyserverStoreOperations: operations, }; } else if ( action.type === logInActionTypes.success || @@ -173,8 +198,11 @@ }); } return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, operations), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, operations), + }, + keyserverStoreOperations: operations, }; } else if (action.type === fullStateSyncActionType) { const { keyserverID } = action.payload; @@ -190,8 +218,11 @@ }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === incrementalStateSyncActionType) { const { keyserverID } = action.payload; @@ -218,8 +249,11 @@ }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === processUpdatesActionType) { const { keyserverID } = action.payload; @@ -238,8 +272,11 @@ }, }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === setURLPrefix) { const operation: ReplaceKeyserverOperation = { @@ -253,8 +290,11 @@ }, }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === updateLastCommunicatedPlatformDetailsActionType) { const { keyserverID, platformDetails } = action.payload; @@ -269,8 +309,11 @@ }, }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === keyserverRegisterActionTypes.success) { const operation: ReplaceKeyserverOperation = { @@ -284,8 +327,11 @@ }, }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === updateConnectionStatusActionType) { const { keyserverID, status } = action.payload; @@ -304,8 +350,11 @@ }, }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === unsupervisedBackgroundActionType) { const { keyserverID } = action.payload; @@ -324,8 +373,11 @@ }, }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === queueActivityUpdatesActionType) { const { activityUpdates, keyserverID } = action.payload; @@ -362,8 +414,11 @@ }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === updateActivityActionTypes.success) { const { activityUpdates } = action.payload; @@ -388,8 +443,11 @@ }); } return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, operations), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, operations), + }, + keyserverStoreOperations: operations, }; } else if ( action.type === logOutActionTypes.success || @@ -417,8 +475,11 @@ }); return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, operations), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, operations), + }, + keyserverStoreOperations: operations, }; } else if (action.type === deleteKeyserverAccountActionTypes.success) { const operations: KeyserverStoreOperation[] = [ @@ -448,8 +509,11 @@ } return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, operations), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, operations), + }, + keyserverStoreOperations: operations, }; } else if (action.type === setLateResponseActionType) { const { messageID, isLate, keyserverID } = action.payload; @@ -476,8 +540,11 @@ }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === updateDisconnectedBarActionType) { const { keyserverID } = action.payload; @@ -495,8 +562,11 @@ }, }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } else if (action.type === setDeviceTokenActionTypes.success) { const { deviceTokens } = action.payload; @@ -514,8 +584,11 @@ }); } return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, operations), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, operations), + }, + keyserverStoreOperations: operations, }; } else if (action.type === setConnectionIssueActionType) { const { connectionIssue, keyserverID } = action.payload; @@ -533,10 +606,16 @@ }, }; return { - ...state, - keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + keyserverStore: { + ...state, + keyserverInfos: processStoreOps(state.keyserverInfos, [operation]), + }, + keyserverStoreOperations: [operation], }; } - return state; + return { + keyserverStore: state, + keyserverStoreOperations: [], + }; } diff --git a/lib/reducers/keyserver-reducer.test.js b/lib/reducers/keyserver-reducer.test.js --- a/lib/reducers/keyserver-reducer.test.js +++ b/lib/reducers/keyserver-reducer.test.js @@ -36,7 +36,8 @@ }; expect( - reduceKeyserverStore(oldKeyserverStore, deleteAccountAction), + reduceKeyserverStore(oldKeyserverStore, deleteAccountAction) + .keyserverStore, ).toEqual({ keyserverInfos: { ['0']: defaultKeyserverInfo('url1') } }); }); it('update keyserverInfo with ashoatKeyserverID', () => { @@ -75,7 +76,8 @@ expect( reduceKeyserverStore(oldKeyserverStore, deleteAccountAction) - .keyserverInfos[ashoatKeyserverID].connection.connectionIssue, + .keyserverStore.keyserverInfos[ashoatKeyserverID].connection + .connectionIssue, ).toEqual(null); }); @@ -115,7 +117,8 @@ expect( reduceKeyserverStore(oldKeyserverStore, deleteAccountAction) - .keyserverInfos[ashoatKeyserverID].connection.connectionIssue, + .keyserverStore.keyserverInfos[ashoatKeyserverID].connection + .connectionIssue, ).toEqual('not_logged_in_error'); }); }); 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 @@ -77,7 +77,7 @@ reduceMessageStore(state.messageStore, action, threadInfos); let messageStore = reducedMessageStore; - let keyserverStore = reduceKeyserverStore(state.keyserverStore, action); + let { keyserverStore } = reduceKeyserverStore(state.keyserverStore, action); if ( action.type !== incrementalStateSyncActionType &&