1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-20 00:08:02 +01:00
unleash.unleash/frontend/src/utils/createLocalStorage.ts
Nuno Góis 4167a60588
feat: biome lint frontend (#4903)
Follows up on https://github.com/Unleash/unleash/pull/4853 to add Biome
to the frontend as well.


![image](https://github.com/Unleash/unleash/assets/14320932/1906faf1-fc29-4172-a4d4-b2716d72cd65)

Added a few `biome-ignore` to speed up the process but we may want to
check and fix them in the future.
2023-10-02 13:25:46 +01:00

31 lines
937 B
TypeScript

import { basePath } from './formatPath';
import { getLocalStorageItem, setLocalStorageItem } from './storage';
export const createLocalStorage = <T extends object>(
key: string,
initialValue: T,
) => {
const internalKey = `${basePath}:${key}:localStorage:v2`;
const value = (() => {
const state = getLocalStorageItem<T>(internalKey);
if (state === undefined) {
return initialValue;
}
return state;
})();
const onUpdate = (newValue: T | ((prev: T) => T)): T => {
if (newValue instanceof Function) {
const previousValue = getLocalStorageItem<T>(internalKey);
const output = newValue(previousValue ?? initialValue);
setLocalStorageItem(internalKey, output);
return output;
}
setLocalStorageItem(internalKey, newValue);
return newValue;
};
return { value, setValue: onUpdate };
};