UNPKG

@jpedro002/react-body-highlighter

Version:

React.js component for highlighting muscles on a body model

44 lines (37 loc) 1.28 kB
import type { IExerciseData, IMuscleData, Muscle } from '../component/metadata'; import { DEFAULT_MUSCLE_DATA } from '../constants'; /* * Utility function for choosing backup value if first value is undefined */ export const ensure = <T>(value: T | undefined, backupValue: T): T => { return value == null ? backupValue : value; }; /** * Function which determines color of muscle based on how often it has been exercised */ export const fillIntensityColor = ( activityMap: Record<Muscle, IMuscleData>, highlightedColors: string[], muscle: Muscle ): string | undefined => { const frequency = activityMap[muscle]?.frequency; if (frequency == null || frequency === 0) { return undefined; } return highlightedColors[Math.min(highlightedColors.length - 1, frequency - 1)]; }; /** * Function which generates object with muscle data */ export const fillMuscleData = (data: IExerciseData[]): Record<Muscle, IMuscleData> => { return data.reduce( (acc, exercise: IExerciseData) => { for (const muscle of exercise.muscles) { acc[muscle].exercises = [...acc[muscle].exercises, exercise.name]; acc[muscle].frequency += exercise.frequency || 1; } return acc; }, JSON.parse(JSON.stringify(DEFAULT_MUSCLE_DATA)) ); };