You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

43 lines
1.2 KiB

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