mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-20 00:08:02 +01:00
4167a60588
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.
31 lines
937 B
TypeScript
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 };
|
|
};
|