import React from 'react';
import {
- BOSSES,
CONFIG,
DUNGEONS,
applyLogic,
+ configureDungeons,
makeEmptyState,
mergeStates,
} from '../helpers/tracker';
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 => {
});
}, []);
+ 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) {
}, []);
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 (dungeon.boss) {
- newDungeon.bosses = config.bossShuffle ? BOSSES : [dungeon.boss];
- }
- return newDungeon;
- });
+ const newDungeons = configureDungeons(config);
setDungeons(newDungeons);
}, [config]);
}, [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 <context.Provider value={value}>
{children}