]> git.localhorst.tv Git - alttp.git/commitdiff
save tracker config
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 26 Mar 2024 13:04:18 +0000 (14:04 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 26 Mar 2024 13:04:18 +0000 (14:04 +0100)
resources/js/components/tracker/Toolbar.js
resources/js/hooks/tracker.js

index 169d7bc3bce7eedc6ff72e77dba50c7faeb4251e..c7545b3106c0898afe0ed8224a78fe7b91ce4c85 100644 (file)
@@ -13,17 +13,17 @@ const mapWild = {
 };
 
 const Toolbar = () => {
-       const { config, setConfig } = useTracker();
+       const { config, saveConfig } = useTracker();
 
        const controller = React.useMemo(() => ({
                getActive: (state, icons) => config[mapWild[icons[0]]] ? icons[0] : null,
                getDefault: (state, icons) => icons[0],
                handlePrimary: (state, setState, icons) => {
                        const prop = mapWild[icons[0]];
-                       setConfig(c => ({ ...c, [prop]: !c[prop] }));
+                       saveConfig({ [prop]: !config[prop] });
                },
                handleSecondary: () => null,
-       }), [config, setConfig]);
+       }), [config, saveConfig]);
 
        return <Navbar bg="dark" className="tracker-toolbar" variant="dark">
                <Container fluid>
index 249a34bfe283bb8dfb000812c43d8d86cbaacfa8..b77ee58dbf48233524feee501facad34a7242ab9 100644 (file)
@@ -14,6 +14,21 @@ export const TrackerProvider = ({ children }) => {
        const [manualState, setManualState] = React.useState(makeEmptyState());
        const [dungeons, setDungeons] = React.useState(DUNGEONS);
 
+       const saveConfig = React.useCallback((values) => {
+               setConfig(s => {
+                       const newConfig = { ...s, ...values };
+                       localStorage.setItem('tracker.config', JSON.stringify(newConfig));
+                       return newConfig;
+               });
+       }, []);
+
+       React.useEffect(() => {
+               const savedConfig = localStorage.getItem('tracker.config');
+               if (savedConfig) {
+                       setConfig(JSON.parse(savedConfig));
+               }
+       }, []);
+
        React.useEffect(() => {
                const newDungeons = DUNGEONS.map(dungeon => {
                        const newDungeon = JSON.parse(JSON.stringify(dungeon));
@@ -42,7 +57,7 @@ export const TrackerProvider = ({ children }) => {
        }, [autoState, manualState]);
 
        const value = React.useMemo(() => {
-               return { config, setConfig, dungeons, setAutoState, setManualState, state };
+               return { config, saveConfig, dungeons, setAutoState, setManualState, state };
        }, [config, dungeons, state]);
 
        return <context.Provider value={value}>