Drag to reorder/resize cameras in camera groups (#11279)

* draggable/resizable cameras in camera groups on desktop/tablets

* fix edit button location on tablets

* assume 1rem is 16px
This commit is contained in:
Josh Hawkins
2024-05-07 09:28:10 -05:00
committed by GitHub
parent 08e5c791c8
commit ff2948a76b
9 changed files with 714 additions and 59 deletions

View File

@@ -33,14 +33,15 @@ export function useOverlayState<S>(
export function usePersistedOverlayState<S extends string>(
key: string,
defaultValue: S | undefined = undefined,
): [S | undefined, (value: S | undefined, replace?: boolean) => void] {
const [persistedValue, setPersistedValue] = usePersistence<S>(
key,
defaultValue,
);
): [
S | undefined,
(value: S | undefined, replace?: boolean) => void,
() => void,
] {
const [persistedValue, setPersistedValue, , deletePersistedValue] =
usePersistence<S>(key, defaultValue);
const location = useLocation();
const navigate = useNavigate();
const currentLocationState = useMemo(() => location.state, [location]);
const setOverlayStateValue = useCallback(
@@ -63,6 +64,7 @@ export function usePersistedOverlayState<S extends string>(
return [
overlayStateValue ?? persistedValue ?? defaultValue,
setOverlayStateValue,
deletePersistedValue,
];
}

View File

@@ -1,10 +1,11 @@
import { useEffect, useState, useCallback } from "react";
import { get as getData, set as setData } from "idb-keyval";
import { get as getData, set as setData, del as delData } from "idb-keyval";
type usePersistenceReturn<S> = [
value: S | undefined,
setValue: (value: S | undefined) => void,
loaded: boolean,
deleteValue: () => void,
];
export function usePersistence<S>(
@@ -26,6 +27,11 @@ export function usePersistence<S>(
[key],
);
const deleteValue = useCallback(async () => {
await delData(key);
setInternalValue(defaultValue);
}, [key, defaultValue]);
useEffect(() => {
setLoaded(false);
setInternalValue(defaultValue);
@@ -41,5 +47,5 @@ export function usePersistence<S>(
load();
}, [key, defaultValue, setValue]);
return [value, setValue, loaded];
return [value, setValue, loaded, deleteValue];
}