2020-04-21 14:10:50 +02:00
|
|
|
import { Project } from "../models/project";
|
|
|
|
import { useState, useEffect } from "preact/hooks";
|
|
|
|
import { getProjectWeightedMean, getProjectStandardDeviation } from "../util/stat";
|
|
|
|
|
|
|
|
export interface Estimation {
|
2020-05-03 18:34:44 +02:00
|
|
|
e: number
|
|
|
|
sd: number
|
2020-04-21 14:10:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface ProjetEstimations {
|
2020-05-03 18:34:44 +02:00
|
|
|
p99: Estimation
|
|
|
|
p90: Estimation
|
|
|
|
p68: Estimation
|
2020-04-21 14:10:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export function useProjectEstimations(p :Project): ProjetEstimations {
|
2020-05-03 18:34:44 +02:00
|
|
|
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;
|
2020-04-21 14:10:50 +02:00
|
|
|
}
|