fix: fix lang local storage after logout

1. Retain the lang value in LocalStorage when logging out
2. Add clearLocalStorage func && add unit test

Change-Id: I84cf361bfcaa40d2a6d80f687d02f43665cef3d3
This commit is contained in:
Jingwei.Zhang 2022-08-02 16:16:43 +08:00
parent 1ded7c2312
commit 4643795bcb
3 changed files with 47 additions and 4 deletions

View File

@ -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']);
}
}

View File

@ -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);
}
});
};

View File

@ -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();
});
});