// @flow strict import type { ScoreBarColorMap, ScoreBarLabelMap, } from '../../components/ScoreBar'; const getValidRange = ( score: number, totalBars: number, keys: Array, ): string => { const scorePercentage = (100 * score) / totalBars; for (const key of keys) { if (scorePercentage <= Number(key)) { return key; } } return [...keys].pop() || ''; }; export const getColorByScorePercentage = ( totalBars: number, score: number, currentBarNumber: number, colorMap: ScoreBarColorMap, ): string => { if (score <= 0) { return colorMap.inactive; } const validRange = getValidRange(score, totalBars, Object.keys(colorMap)); const validColor = colorMap[validRange]; return currentBarNumber < score ? validColor : colorMap.inactive; }; export const getLabelByScorePercentage = ( score: number, totalBars: number, labelMap?: ScoreBarLabelMap, ): string => { if (!labelMap) { return ''; } const validRange = getValidRange(score, totalBars, Object.keys(labelMap)); const validLabel = labelMap[validRange]; return validLabel || ''; }; export const SCORE_BAR_ERRORS = Object.freeze({ INVALID_BAR_COUNT: { type: 'INVALID_BAR_COUNT', description: 'totalBars can not be less than 1', }, });