diff --git a/src/session/__tests__/sessionReducer-test.js b/src/session/__tests__/sessionReducer-test.js index 114f5587d1e..54bb09e52d6 100644 --- a/src/session/__tests__/sessionReducer-test.js +++ b/src/session/__tests__/sessionReducer-test.js @@ -13,7 +13,7 @@ import { DISMISS_SERVER_COMPAT_NOTICE, REGISTER_START, } from '../../actionConstants'; -import sessionReducer from '../sessionReducer'; +import sessionReducer, { initialPerAccountSessionState } from '../sessionReducer'; import * as eg from '../../__tests__/lib/exampleData'; describe('sessionReducer', () => { @@ -25,12 +25,12 @@ describe('sessionReducer', () => { loading: true, }); const newState = sessionReducer(state, eg.action.account_switch); - expect(newState).toEqual({ ...baseState, loading: false }); + expect(newState).toEqual({ ...baseState, ...initialPerAccountSessionState }); }); test('LOGIN_SUCCESS', () => { const newState = sessionReducer(baseState, eg.action.login_success); - expect(newState).toEqual(baseState); + expect(newState).toEqual({ ...baseState, ...initialPerAccountSessionState }); }); test('DEAD_QUEUE', () => { @@ -47,7 +47,7 @@ describe('sessionReducer', () => { const newState = sessionReducer(state, deepFreeze({ type: LOGOUT })); expect(newState).toEqual({ ...baseState, - loading: false, + ...initialPerAccountSessionState, }); }); diff --git a/src/session/sessionReducer.js b/src/session/sessionReducer.js index b31b717a0f4..b461490de59 100644 --- a/src/session/sessionReducer.js +++ b/src/session/sessionReducer.js @@ -117,22 +117,30 @@ export type SessionState = $ReadOnly<{| // PerAccountSessionState is inexact.) (s: SessionState): PerAccountSessionState => s; // eslint-disable-line no-unused-expressions -const initialState: SessionState = { - eventQueueId: null, - +const initialGlobalSessionState: $Exact = { // This will be `null` on startup, while we wait to hear `true` or `false` // from the native module over the RN bridge; so, have it start as `null`. isOnline: null, isHydrated: false, - loading: false, orientation: 'PORTRAIT', - outboxSending: false, pushToken: null, debug: Object.freeze({}), +}; + +/** PRIVATE; exported only for tests. */ +export const initialPerAccountSessionState: $Exact = { + eventQueueId: null, + loading: false, + outboxSending: false, hasDismissedServerCompatNotice: false, }; +const initialState: SessionState = { + ...initialGlobalSessionState, + ...initialPerAccountSessionState, +}; + // eslint-disable-next-line default-param-last export default (state: SessionState = initialState, action: Action): SessionState => { switch (action.type) { @@ -149,6 +157,9 @@ export default (state: SessionState = initialState, action: Action): SessionStat case LOGIN_SUCCESS: return { ...state, + loading: false, + outboxSending: false, + hasDismissedServerCompatNotice: false, // We're about to request a new event queue; no use hanging on to // any old one we might have. @@ -159,6 +170,8 @@ export default (state: SessionState = initialState, action: Action): SessionStat return { ...state, loading: false, + outboxSending: false, + hasDismissedServerCompatNotice: false, // Stop polling this event queue. eventQueueId: null, @@ -168,6 +181,8 @@ export default (state: SessionState = initialState, action: Action): SessionStat return { ...state, loading: false, + outboxSending: false, + hasDismissedServerCompatNotice: false, // Stop polling this event queue. (We'll request a new one soon, // for the new account.)