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}; }