35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
|
import { Project } from "../models/project";
|
||
|
import { useState, useEffect } from "preact/hooks";
|
||
|
import { getProjectWeightedMean, getProjectStandardDeviation } from "../util/stat";
|
||
|
|
||
|
export interface Estimation {
|
||
|
e: number
|
||
|
sd: number
|
||
|
}
|
||
|
|
||
|
export interface ProjetEstimations {
|
||
|
p99: Estimation
|
||
|
p90: Estimation
|
||
|
p68: Estimation
|
||
|
}
|
||
|
|
||
|
export function useProjectEstimations(p :Project): ProjetEstimations {
|
||
|
const [ estimations, setEstimations ] = useState({
|
||
|
p99: { e: 0, sd: 0 },
|
||
|
p90: { e: 0, sd: 0 },
|
||
|
p68: { e: 0, sd: 0 },
|
||
|
});
|
||
|
|
||
|
useEffect(() => {
|
||
|
const projectWeightedMean = getProjectWeightedMean(p)
|
||
|
const projectStandardDeviation = getProjectStandardDeviation(p);
|
||
|
|
||
|
setEstimations({
|
||
|
p99: { e: projectWeightedMean, sd: (projectStandardDeviation * 3) },
|
||
|
p90: { e: projectWeightedMean, sd: (projectStandardDeviation * 1.645) },
|
||
|
p68: { e: projectWeightedMean, sd: (projectStandardDeviation) },
|
||
|
})
|
||
|
}, [p.tasks]);
|
||
|
|
||
|
return estimations;
|
||
|
}
|