diff --git a/src/stores/root.js b/src/stores/root.js index 0a608d09..aad2144b 100644 --- a/src/stores/root.js +++ b/src/stores/root.js @@ -17,7 +17,7 @@ import { RouterStore } from 'mobx-react-router'; import { parse } from 'qs'; import client from 'client'; import { getQueryString } from 'utils/index'; -import { setLocalStorageItem } from 'utils/local-storage'; +import { setLocalStorageItem, clearLocalStorage } from 'utils/local-storage'; import { isEmpty, values } from 'lodash'; export class RootStore { @@ -258,8 +258,8 @@ export class RootStore { stores.forEach((store) => { store.clearData(); }); - // clear keystone_token in the local storage - localStorage.clear(); + // clear all local storage expect language + clearLocalStorage(['lang']); } } diff --git a/src/utils/local-storage.js b/src/utils/local-storage.js index 38d1a0ee..6adf423f 100644 --- a/src/utils/local-storage.js +++ b/src/utils/local-storage.js @@ -44,3 +44,16 @@ export const setLocalStorageItem = ( ); } catch (e) {} }; + +export const clearLocalStorage = (expectKeys = []) => { + if (!expectKeys.length) { + localStorage.clear(); + return; + } + const keys = Object.keys(localStorage); + keys.forEach((key) => { + if (!expectKeys.includes(key)) { + localStorage.removeItem(key); + } + }); +}; diff --git a/src/utils/local-storage.spec.js b/src/utils/local-storage.spec.js index ac599d39..a2623ff3 100644 --- a/src/utils/local-storage.spec.js +++ b/src/utils/local-storage.spec.js @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { getLocalStorageItem, setLocalStorageItem } from './local-storage'; +import { + getLocalStorageItem, + setLocalStorageItem, + clearLocalStorage, +} from './local-storage'; describe('test localstorage', () => { it('getLocalStorageItem', () => { @@ -41,4 +45,30 @@ describe('test localstorage', () => { expect(getLocalStorageItem('key')).toBe(null); localStorage.clear(); }); + + it('clearLocalStorage - clear all', () => { + expect(getLocalStorageItem('key1')).toBe(null); + expect(getLocalStorageItem('key2')).toBe(null); + setLocalStorageItem('key1', 'value1'); + setLocalStorageItem('key2', 'value2'); + expect(getLocalStorageItem('key1')).toBe('value1'); + expect(getLocalStorageItem('key2')).toBe('value2'); + clearLocalStorage(); + expect(getLocalStorageItem('key1')).toBe(null); + expect(getLocalStorageItem('key2')).toBe(null); + localStorage.clear(); + }); + + it('clearLocalStorage - clear with expect', () => { + expect(getLocalStorageItem('key1')).toBe(null); + expect(getLocalStorageItem('key2')).toBe(null); + setLocalStorageItem('key1', 'value1'); + setLocalStorageItem('key2', 'value2'); + expect(getLocalStorageItem('key1')).toBe('value1'); + expect(getLocalStorageItem('key2')).toBe('value2'); + clearLocalStorage(['key1']); + expect(getLocalStorageItem('key1')).toBe('value1'); + expect(getLocalStorageItem('key2')).toBe(null); + localStorage.clear(); + }); });