Clarify campaign review interventions
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
export type BuildReviewProgressInput = {
|
||||
blocking: number;
|
||||
individualRequired: number;
|
||||
individualReviewed: number;
|
||||
groupRequired: number;
|
||||
reviewComplete: boolean;
|
||||
};
|
||||
|
||||
export type BuildReviewProgress = {
|
||||
blocking: number;
|
||||
individualRequired: number;
|
||||
individualReviewed: number;
|
||||
individualRemaining: number;
|
||||
groupRequired: number;
|
||||
groupReviewed: number;
|
||||
groupRemaining: number;
|
||||
required: number;
|
||||
reviewed: number;
|
||||
remaining: number;
|
||||
};
|
||||
|
||||
function count(value: number): number {
|
||||
return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0;
|
||||
}
|
||||
|
||||
export function calculateBuildReviewProgress(input: BuildReviewProgressInput): BuildReviewProgress {
|
||||
const blocking = count(input.blocking);
|
||||
const individualRequired = count(input.individualRequired);
|
||||
const groupRequired = count(input.groupRequired);
|
||||
const individualReviewed = input.reviewComplete
|
||||
? individualRequired
|
||||
: Math.min(individualRequired, count(input.individualReviewed));
|
||||
const groupReviewed = input.reviewComplete ? groupRequired : 0;
|
||||
const individualRemaining = individualRequired - individualReviewed;
|
||||
const groupRemaining = groupRequired - groupReviewed;
|
||||
|
||||
return {
|
||||
blocking,
|
||||
individualRequired,
|
||||
individualReviewed,
|
||||
individualRemaining,
|
||||
groupRequired,
|
||||
groupReviewed,
|
||||
groupRemaining,
|
||||
required: individualRequired + groupRequired,
|
||||
reviewed: individualReviewed + groupReviewed,
|
||||
remaining: individualRemaining + groupRemaining
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user