]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/hooks/tracker.js
merge manual and computed state
[alttp.git] / resources / js / hooks / tracker.js
index be5a52f063604aad4eaeb7d88dcd650df2c4f87d..249a34bfe283bb8dfb000812c43d8d86cbaacfa8 100644 (file)
@@ -1,7 +1,7 @@
 import PropTypes from 'prop-types';
 import React from 'react';
 
-import { CONFIG, DUNGEONS, makeEmptyState } from '../helpers/tracker';
+import { CONFIG, DUNGEONS, makeEmptyState, mergeStates } from '../helpers/tracker';
 
 const context = React.createContext({});
 
@@ -10,6 +10,8 @@ export const useTracker = () => React.useContext(context);
 export const TrackerProvider = ({ children }) => {
        const [config, setConfig] = React.useState(CONFIG);
        const [state, setState] = React.useState(makeEmptyState());
+       const [autoState, setAutoState] = React.useState(makeEmptyState());
+       const [manualState, setManualState] = React.useState(makeEmptyState());
        const [dungeons, setDungeons] = React.useState(DUNGEONS);
 
        React.useEffect(() => {
@@ -35,8 +37,12 @@ export const TrackerProvider = ({ children }) => {
                setDungeons(newDungeons);
        }, [config]);
 
+       React.useEffect(() => {
+               setState(mergeStates(autoState, manualState));
+       }, [autoState, manualState]);
+
        const value = React.useMemo(() => {
-               return { config, setConfig, dungeons, setState, state };
+               return { config, setConfig, dungeons, setAutoState, setManualState, state };
        }, [config, dungeons, state]);
 
        return <context.Provider value={value}>