diff --git a/packages/ra-core/src/store/localStorageStore.spec.ts b/packages/ra-core/src/store/localStorageStore.spec.ts index 17cd46453f9..9a2d5f7a790 100644 --- a/packages/ra-core/src/store/localStorageStore.spec.ts +++ b/packages/ra-core/src/store/localStorageStore.spec.ts @@ -1,6 +1,6 @@ import expect from 'expect'; -import { localStorageStore } from './localStorageStore'; +import { localStorageStore, getStorage } from './localStorageStore'; describe('localStorageStore', () => { it('should allow to store and retrieve a value', () => { @@ -40,4 +40,32 @@ describe('localStorageStore', () => { expect(store.getItem('foo')).toEqual(undefined); }); }); + describe('reset preserving items outside Ra-Store', () => { + it('should reset the store', () => { + const store = localStorageStore(); + store.setItem('foo', 'bar'); + getStorage().setItem('baz', 'baz'); //set custom item in localstorage + store.reset(); + expect(getStorage().getItem('baz')).toEqual('baz'); //expect not to be wiped on store reset + expect(store.getItem('foo')).toEqual(undefined); + }); + }); + describe('changing version preserve localStorage items', () => { + it('should preserve localStorage items', () => { + const store = localStorageStore('1'); + store.setItem('foo', 'bar'); + getStorage().setItem('baz', 'baz'); //set custom item in localstorage + //change the localStorageStore version + //because actually the RA_STORE const is not exported, i search for the string "version" that is actually hardcoded in the keys + //also providing an actual default + const storeVersionName = + Object.getOwnPropertyNames(getStorage()).find( + i => i.indexOf('.version') > 0 + ) || 'RaStore.version'; + getStorage().setItem(storeVersionName, '2'); + store.setup(); + expect(getStorage().getItem('baz')).toEqual('baz'); //expect not to be wiped on store reset + expect(store.getItem('foo')).toEqual(undefined); //deleted during setup + }); + }); }); diff --git a/packages/ra-core/src/store/localStorageStore.ts b/packages/ra-core/src/store/localStorageStore.ts index 863bf9cbb2b..f032d81310e 100644 --- a/packages/ra-core/src/store/localStorageStore.ts +++ b/packages/ra-core/src/store/localStorageStore.ts @@ -83,7 +83,12 @@ export const localStorageStore = ( if (localStorageAvailable) { const storedVersion = getStorage().getItem(`${prefix}.version`); if (storedVersion && storedVersion !== version) { - getStorage().clear(); + const storage = getStorage(); + Object.keys(storage).forEach(key => { + if (key.startsWith(prefix)) { + storage.removeItem(key); + } + }); } getStorage().setItem(`${prefix}.version`, version); window.addEventListener('storage', onLocalStorageChange);