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:
parent
30e23ea5b4
commit
78dcba614d
192 changed files with 200 additions and 211 deletions
46
app/react/hooks/useLocalStorage.ts
Normal file
46
app/react/hooks/useLocalStorage.ts
Normal 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));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue