|
|
import {useContext, useEffect, useMemo, useReducer, useState} from "react"; import RuntimeContext from "../contexts/RuntimeContext"; import {Milestone} from "../models/Milestone"; import {ValueKey} from "../models/Shared";
export function useCurrentMilestone(showOld: boolean = false): Milestone | null { const {lastEvent} = useContext(RuntimeContext);
const [milestone, setMilestone] = useState<Milestone | null>(null);
useEffect(() => { if (lastEvent?.milestone) { setMilestone(lastEvent.milestone); }
if (showOld && lastEvent?.oldMilestones) { for (const milestone of lastEvent.oldMilestones) { setMilestone(milestone); } } }, [showOld, lastEvent]);
useEffect(() => { const handle = setTimeout(() => setMilestone(null), 1000);
return () => clearTimeout(handle); }, [milestone]);
return milestone; }
export function useLastMilestoneValue(valueKey: ValueKey, primaryKey: ValueKey) { const [value, setValue] = useState<number>(0); const current = useCurrentMilestone(true);
useEffect(() => { if (current && current.primaryKey === primaryKey) { setValue(prev => current.current[valueKey] || prev); } }, [current, primaryKey, valueKey]);
return value; }
|