diff --git a/lib/actions/backup-actions.js b/lib/actions/backup-actions.js --- a/lib/actions/backup-actions.js +++ b/lib/actions/backup-actions.js @@ -25,8 +25,13 @@ failed: 'RESTORE_USER_DATA_STEP_FAILED', }); +const resetBackupRestoreStateActionType = 'RESET_BACKUP_RESTOTE_STATE'; +const markBackupAsRestoredActionType = 'MARK_BACKUP_AS_RESTORED'; + export { createUserKeysBackupActionTypes, createUserDataBackupActionTypes, restoreUserDataStepActionTypes, + resetBackupRestoreStateActionType, + markBackupAsRestoredActionType, }; diff --git a/lib/reducers/backup-reducer.js b/lib/reducers/backup-reducer.js --- a/lib/reducers/backup-reducer.js +++ b/lib/reducers/backup-reducer.js @@ -6,9 +6,12 @@ createUserDataBackupActionTypes, createUserKeysBackupActionTypes, restoreUserDataStepActionTypes, + markBackupAsRestoredActionType, + resetBackupRestoreStateActionType, } from '../actions/backup-actions.js'; import { changeIdentityUserPasswordActionTypes, + logOutActionTypes, restoreUserActionTypes, } from '../actions/user-actions.js'; import { @@ -60,7 +63,22 @@ return store; } - if (action.type === restoreUserActionTypes.success) { + if ( + action.type === resetBackupRestoreStateActionType || + action.type === logOutActionTypes.success + ) { + return { + ...store, + status: 'no_backup', + payload: {}, + }; + } else if (action.type === markBackupAsRestoredActionType) { + return { + ...store, + status: 'user_data_restore_completed', + payload: { forced: true }, + }; + } else if (action.type === restoreUserActionTypes.success) { invariant( store.status === 'no_backup', `Restore protocol dispatched but backup state was '${store.status}'`, diff --git a/lib/types/backup-types.js b/lib/types/backup-types.js --- a/lib/types/backup-types.js +++ b/lib/types/backup-types.js @@ -93,53 +93,55 @@ export type RestoreBackupState = | { - status: 'no_backup', - payload: {}, + +status: 'no_backup', + +payload: {}, } | { - status: 'user_keys_backup_started', - payload: {}, + +status: 'user_keys_backup_started', + +payload: {}, } | { - status: 'user_keys_backup_success', - payload: {}, + +status: 'user_keys_backup_success', + +payload: {}, } | { - status: 'user_keys_backup_failed', - payload: {}, + +status: 'user_keys_backup_failed', + +payload: {}, } | { - status: 'user_data_backup_started', - payload: {}, + +status: 'user_data_backup_started', + +payload: {}, } | { - status: 'user_data_backup_success', - payload: {}, + +status: 'user_data_backup_success', + +payload: {}, } | { - status: 'user_data_backup_failed', - payload: {}, + +status: 'user_data_backup_failed', + +payload: {}, } | { - status: 'user_data_restore_started', - payload: { - step: RestoreUserDataStep, + +status: 'user_data_restore_started', + +payload: { + +step: RestoreUserDataStep, }, } | { - status: 'user_data_restore_step_completed', - payload: { - step: RestoreUserDataStep, + +status: 'user_data_restore_step_completed', + +payload: { + +step: RestoreUserDataStep, }, } | { - status: 'user_data_restore_failed', - payload: { - step: RestoreUserDataStep, - error: Error, + +status: 'user_data_restore_failed', + +payload: { + +step: RestoreUserDataStep, + +error: Error, }, } | { - status: 'user_data_restore_completed', - payload: {}, + +status: 'user_data_restore_completed', + +payload: { + +forced?: boolean, + }, }; diff --git a/lib/types/redux-types.js b/lib/types/redux-types.js --- a/lib/types/redux-types.js +++ b/lib/types/redux-types.js @@ -1679,6 +1679,14 @@ +payload: RestoreProtocolResult, +loadingInfo: LoadingInfo, } + | { + +type: 'RESET_BACKUP_RESTOTE_STATE', + +payload?: void, + } + | { + +type: 'MARK_BACKUP_AS_RESTORED', + +payload?: void, + } | { +type: 'SAVE_UNSUPPORTED_DM_OPERATION', +payload: SaveUnsupportedOperationPayload,