|
|
import {useReducer} from "react"; import calculateDiff from "../helpers/diff";
const DEFAULT = { milestones: [], prevDiff: 0, prevLongDiff: 0, };
function reducer(state, {type, payload}) { switch (type) { case "measure": let {prevDiff, prevLongDiff, milestones} = state; const {minutes, seconds, calories, program} = payload;
if (minutes === 0 || seconds !== 0) { return state; }
const isFive = minutes % 5 === 0; const diff = calculateDiff(program, minutes, seconds, calories); let newMilestones = milestones.filter(m => m.minutes !== minutes); newMilestones.push({ minutes, seconds, calories, diff, prevDiff: isFive ? prevLongDiff : prevDiff });
if (isFive) { newMilestones = newMilestones.filter(m => m.minutes % 5 === 0); prevLongDiff = diff; } prevDiff = diff;
return {prevLongDiff, prevDiff, milestones: newMilestones}; case "clear": return {...DEFAULT}; default: throw new Error(`Unknown type: ${type}`) } }
export default function useMilestones() { const [state, msDispatch] = useReducer(reducer, {...DEFAULT}); const {prevLongDiff, prevDiff, milestones} = state || {...DEFAULT};
return {milestones, prevDiff, prevLongDiff, msDispatch}; }
|