diff --git a/web/cashtab/src/hooks/useWallet.js b/web/cashtab/src/hooks/useWallet.js --- a/web/cashtab/src/hooks/useWallet.js +++ b/web/cashtab/src/hooks/useWallet.js @@ -18,7 +18,11 @@ checkWalletForTokenInfo, isActiveWebsocket, } from 'utils/cashMethods'; -import { isValidCashtabSettings, isValidContactList } from 'utils/validation'; +import { + isValidCashtabSettings, + isValidContactList, + parseInvalidSettingsForMigration, +} from 'utils/validation'; import localforage from 'localforage'; import { currency } from 'components/Common/Ticker'; import isEmpty from 'lodash.isempty'; @@ -1127,9 +1131,12 @@ setCashtabSettings(localSettings); return localSettings; } - // if not valid, also set cashtabSettings to default - setCashtabSettings(currency.defaultSettings); - return currency.defaultSettings; + // If a settings object is present but invalid, parse to find and add missing keys + let modifiedLocalSettings = + parseInvalidSettingsForMigration(localSettings); + localforage.setItem('settings', modifiedLocalSettings); + setCashtabSettings(modifiedLocalSettings); + return modifiedLocalSettings; }; const loadContactList = async () => { diff --git a/web/cashtab/src/utils/validation.js b/web/cashtab/src/utils/validation.js --- a/web/cashtab/src/utils/validation.js +++ b/web/cashtab/src/utils/validation.js @@ -140,6 +140,21 @@ } }; +export const parseInvalidSettingsForMigration = invalidCashtabSettings => { + // get settings from local storage + let migratedCashtabSettings = invalidCashtabSettings; + // determine if settings are invalid because it is missing a parameter + for (let param in currency.defaultSettings) { + if ( + !Object.prototype.hasOwnProperty.call(invalidCashtabSettings, param) + ) { + // adds the default setting for only that parameter + migratedCashtabSettings[param] = currency.defaultSettings[param]; + } + } + return migratedCashtabSettings; +}; + export const isValidContactList = contactList => { /* A valid contact list is an array of objects