+ {media || header ? (
+
+ {media}
+ {header ? {header} : null}
+
+ ) : null}
{buttons.length || content ? (
{content || null}
diff --git a/web/src/components/NavigationDrawer.jsx b/web/src/components/NavigationDrawer.jsx
index fc6d08d6e..768b8db71 100644
--- a/web/src/components/NavigationDrawer.jsx
+++ b/web/src/components/NavigationDrawer.jsx
@@ -49,10 +49,12 @@ export function Destination({ className = '', href, text, ...other }) {
: 'class']: 'block p-2 text-sm font-semibold text-gray-900 rounded hover:bg-blue-500 dark:text-gray-200 hover:text-white dark:hover:text-white focus:outline-none ring-opacity-50 focus:ring-2 ring-blue-300',
};
+ const El = external ? 'a' : Link;
+
return (
-
+
{text}
-
+
);
}
diff --git a/web/src/components/TextField.jsx b/web/src/components/TextField.jsx
index a66159dcc..a57d43d7d 100644
--- a/web/src/components/TextField.jsx
+++ b/web/src/components/TextField.jsx
@@ -60,8 +60,12 @@ export default function TextField({
}`}
ref={inputRef}
>
-
{helpText ?
{helpText}
: null}
diff --git a/web/src/context/index.jsx b/web/src/context/index.jsx
index 09ceba80d..cbe8e840d 100644
--- a/web/src/context/index.jsx
+++ b/web/src/context/index.jsx
@@ -80,3 +80,37 @@ export function DrawerProvider({ children }) {
export function useDrawer() {
return useContext(Drawer);
}
+
+export function usePersistence(key, defaultValue = undefined) {
+ const [value, setInternalValue] = useState(defaultValue);
+ const [loaded, setLoaded] = useState(false);
+
+ const setValue = useCallback(
+ (value) => {
+ setInternalValue(value);
+ async function update() {
+ await setData(key, value);
+ }
+
+ update();
+ },
+ [key]
+ );
+
+ useEffect(() => {
+ setLoaded(false);
+ setInternalValue(defaultValue);
+
+ async function load() {
+ const value = await getData(key);
+ if (typeof value !== 'undefined') {
+ setValue(value);
+ }
+ setLoaded(true);
+ }
+
+ load();
+ }, [key]);
+
+ return [value, setValue, loaded];
+}
diff --git a/web/src/icons/ArrowDropdown.jsx b/web/src/icons/ArrowDropdown.jsx
index f053006d6..abb59a464 100644
--- a/web/src/icons/ArrowDropdown.jsx
+++ b/web/src/icons/ArrowDropdown.jsx
@@ -2,7 +2,7 @@ import { h } from 'preact';
export default function ArrowDropdown() {
return (
-