FitTrackee/fittrackee_client/src/utils/workouts.ts

81 lines
1.9 KiB
TypeScript
Raw Normal View History

2021-09-26 08:59:17 +02:00
import {
IWorkout,
2021-09-26 08:59:17 +02:00
IWorkoutApiChartData,
IWorkoutChartData,
TCoordinates,
2021-09-26 08:59:17 +02:00
TWorkoutDatasets,
} from '@/types/workouts'
import { convertStatsDistance } from '@/utils/units'
2021-09-26 08:59:17 +02:00
export const getDatasets = (
chartData: IWorkoutApiChartData[],
t: CallableFunction,
useImperialUnits: boolean
2021-09-26 08:59:17 +02:00
): IWorkoutChartData => {
const datasets: TWorkoutDatasets = {
speed: {
label: t('workouts.SPEED'),
backgroundColor: ['#FFFFFF'],
borderColor: ['#8884d8'],
borderWidth: 2,
data: [],
yAxisID: 'ySpeed',
},
elevation: {
label: t('workouts.ELEVATION'),
backgroundColor: ['#e5e5e5'],
borderColor: ['#cccccc'],
borderWidth: 1,
fill: true,
data: [],
yAxisID: 'yElevation',
},
}
const distance_labels: unknown[] = []
const duration_labels: unknown[] = []
const coordinates: TCoordinates[] = []
2021-09-26 08:59:17 +02:00
chartData.map((data) => {
distance_labels.push(data.distance)
duration_labels.push(data.duration)
datasets.speed.data.push(
convertStatsDistance('km', data.speed, useImperialUnits)
)
datasets.elevation.data.push(
convertStatsDistance('m', data.elevation, useImperialUnits)
)
coordinates.push({ latitude: data.latitude, longitude: data.longitude })
2021-09-26 08:59:17 +02:00
})
return { distance_labels, duration_labels, datasets, coordinates }
2021-09-26 08:59:17 +02:00
}
export const getDonutDatasets = (
workouts: IWorkout[]
): Record<number, Record<string, number>> => {
const total = workouts.length
if (total === 0) {
return {}
}
const datasets: Record<number, Record<string, number>> = {}
workouts.map((workout) => {
if (!datasets[workout.sport_id]) {
datasets[workout.sport_id] = {
count: 0,
percentage: 0,
}
}
datasets[workout.sport_id].count += 1
datasets[workout.sport_id].percentage =
datasets[workout.sport_id].count / total
})
return datasets
}
2021-11-02 12:24:31 +01:00
export const defaultOrder = {
order: 'desc',
order_by: 'workout_date',
}