1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-23 15:29:42 +02:00

refactor(portainer): move to react [EE-3350] (#7915)

This commit is contained in:
Chaim Lev-Ari 2022-11-13 10:10:18 +02:00 committed by GitHub
parent 30e23ea5b4
commit 78dcba614d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
192 changed files with 200 additions and 211 deletions

View file

@ -0,0 +1,46 @@
import { useState, useCallback, useMemo } from 'react';
const localStoragePrefix = 'portainer';
export function keyBuilder(key: string) {
return `${localStoragePrefix}.${key}`;
}
export function useLocalStorage<T>(
key: string,
defaultValue: T,
storage = localStorage
): [T, (value: T) => void] {
const [value, setValue] = useState(get<T>(key, defaultValue, storage));
const handleChange = useCallback(
(value) => {
setValue(value);
set<T>(key, value, storage);
},
[key, storage]
);
return useMemo(() => [value, handleChange], [value, handleChange]);
}
export function get<T>(
key: string,
defaultValue: T,
storage = localStorage
): T {
const value = storage.getItem(keyBuilder(key));
if (!value) {
return defaultValue;
}
try {
return JSON.parse(value);
} catch (e) {
return defaultValue;
}
}
export function set<T>(key: string, value: T, storage = localStorage) {
storage.setItem(keyBuilder(key), JSON.stringify(value));
}