Use persistence for live layout (#10114)

* Use persistence for live layout

* Fix typing

* Fix persistence typing

* remove type

* More type fixing
This commit is contained in:
Nicolas Mowen
2024-02-28 07:16:16 -07:00
committed by GitHub
parent 485057abc1
commit 8072ce25c6
5 changed files with 21 additions and 17 deletions

View File

@@ -1,21 +1,21 @@
import { useEffect, useState, useCallback } from "react";
import { get as getData, set as setData } from "idb-keyval";
type usePersistenceReturn = [
value: any | undefined,
setValue: (value: string | boolean) => void,
type usePersistenceReturn<S> = [
value: S | undefined,
setValue: (value: S) => void,
loaded: boolean,
];
export function usePersistence(
export function usePersistence<S>(
key: string,
defaultValue: any | undefined = undefined
): usePersistenceReturn {
const [value, setInternalValue] = useState<any | undefined>(defaultValue);
defaultValue: S | undefined = undefined
): usePersistenceReturn<S> {
const [value, setInternalValue] = useState<S | undefined>(defaultValue);
const [loaded, setLoaded] = useState<boolean>(false);
const setValue = useCallback(
(value: string | boolean) => {
(value: S) => {
setInternalValue(value);
async function update() {
await setData(key, value);