X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhooks%2Ftracker.js;h=d0fb6b8e028e400bb4f0f3287eeebb3df6e5a1f4;hb=HEAD;hp=30bf2426a7a125781f2aa5579e9e9a389f74511e;hpb=d2e89b06bd80faa5085c454709c7e48c829cc6f2;p=alttp.git diff --git a/resources/js/hooks/tracker.js b/resources/js/hooks/tracker.js index 30bf242..d0fb6b8 100644 --- a/resources/js/hooks/tracker.js +++ b/resources/js/hooks/tracker.js @@ -5,6 +5,7 @@ import { CONFIG, DUNGEONS, applyLogic, + configureDungeons, makeEmptyState, mergeStates, } from '../helpers/tracker'; @@ -20,6 +21,7 @@ export const TrackerProvider = ({ children }) => { const [manualState, setManualState] = React.useState(makeEmptyState()); const [dungeons, setDungeons] = React.useState(DUNGEONS); const [logic, setLogic] = React.useState({}); + const [pins, setPins] = React.useState([]); const saveConfig = React.useCallback((values) => { setConfig(s => { @@ -29,6 +31,17 @@ export const TrackerProvider = ({ children }) => { }); }, []); + const addPin = React.useCallback((pin) => { + setPins(ps => { + const id = ps.length ? ps[ps.length - 1].id + 1 : 1; + return [...ps, { ...pin, id }]; + }); + }, []); + + const removePin = React.useCallback((pin) => { + setPins(ps => ps.filter(p => p.id !== pin.id)); + }, []); + React.useEffect(() => { const savedConfig = localStorage.getItem('tracker.config'); if (savedConfig) { @@ -37,25 +50,7 @@ export const TrackerProvider = ({ children }) => { }, []); React.useEffect(() => { - const newDungeons = DUNGEONS.map(dungeon => { - const newDungeon = JSON.parse(JSON.stringify(dungeon)); - if (config.wildMap && dungeon.map) { - ++newDungeon.items; - } - if (config.wildCompass && dungeon.compass) { - ++newDungeon.items; - } - if (config.wildSmall) { - newDungeon.items += dungeon.sk; - } - if (config.wildBig && dungeon.bk && !dungeon.dropBk) { - ++newDungeon.items; - } - if (!config.bossShuffle && dungeon.boss) { - newDungeon.bosses = [dungeon.boss]; - } - return newDungeon; - }); + const newDungeons = configureDungeons(config); setDungeons(newDungeons); }, [config]); @@ -68,9 +63,19 @@ export const TrackerProvider = ({ children }) => { }, [config, dungeons, state]); const value = React.useMemo(() => { - console.log(logic); - return { config, dungeons, logic, saveConfig, setAutoState, setManualState, state }; - }, [config, dungeons, logic, state]); + return { + addPin, + config, + dungeons, + logic, + pins, + removePin, + saveConfig, + setAutoState, + setManualState, + state, + }; + }, [config, dungeons, logic, pins, state]); return {children}