23 lines
828 B
TypeScript
23 lines
828 B
TypeScript
export type WorkReviewDecision = 'approved' | 'revision_required'
|
|
export type WorkReviewReviewerRole = 'manager' | 'final_reviewer'
|
|
|
|
export function deriveWorkReviewDecision(
|
|
decisions: ReadonlyArray<{ decision: WorkReviewDecision }>,
|
|
): WorkReviewDecision {
|
|
return decisions.some((item) => item.decision === 'revision_required')
|
|
? 'revision_required'
|
|
: 'approved'
|
|
}
|
|
|
|
export function deriveCompletedWorkReviewStatus(
|
|
reviews: ReadonlyArray<{
|
|
reviewerRole: string
|
|
decision: WorkReviewDecision
|
|
}>,
|
|
): WorkReviewDecision | null {
|
|
const manager = reviews.find((review) => review.reviewerRole === 'manager')
|
|
const finalReviewer = reviews.find((review) => review.reviewerRole === 'final_reviewer')
|
|
if (!manager || !finalReviewer) return null
|
|
return deriveWorkReviewDecision([manager, finalReviewer])
|
|
}
|