X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhooks%2Ftracker.js;h=d0fb6b8e028e400bb4f0f3287eeebb3df6e5a1f4;hb=e0925d5b97ab0804222195eb4231c63b33703942;hp=ce01c4b94079dd646e17f9263882a85544bc3153;hpb=abdc2ea1ade1fb12ceacc28660890750e69ae36f;p=alttp.git diff --git a/resources/js/hooks/tracker.js b/resources/js/hooks/tracker.js index ce01c4b..d0fb6b8 100644 --- a/resources/js/hooks/tracker.js +++ b/resources/js/hooks/tracker.js @@ -21,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 => { @@ -30,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) { @@ -51,8 +63,19 @@ export const TrackerProvider = ({ children }) => { }, [config, dungeons, state]); const value = React.useMemo(() => { - 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}