Skip to content

Commit 8acb8d6

Browse files
committed
feat: render timed sets
Signed-off-by: Matt Gleich <git@mattglei.ch>
1 parent f1a430d commit 8acb8d6

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

src/lib/index/sections/workouts/lift.svelte

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script lang="ts">
22
import type { Workout } from '$lib/lcp/workouts';
3+
import { renderDuration } from '$lib/time';
34
import { Scrolling } from '@gleich/ui';
45
import { onMount } from 'svelte';
56
@@ -40,9 +41,13 @@
4041
{set.type === 'warmup' ? 'Warmup' : `Set #${setIndex + 1}`}
4142
</div>
4243
<div class="set-value">
43-
{imperialUnits
44-
? `${Math.round(set.weight_kg * 2.2046226218)} lbs`
45-
: `${Math.round(set.weight_kg)}} kg`} × {set.reps} reps
44+
{#if set.duration_seconds}
45+
{renderDuration(set.duration_seconds)}
46+
{:else}
47+
{imperialUnits
48+
? `${Math.round(set.weight_kg * 2.2046226218)} lbs`
49+
: `${Math.round(set.weight_kg)}} kg`} × {set.reps} reps
50+
{/if}
4651
</div>
4752
</div>
4853
{/each}

src/lib/lcp/workouts.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,5 @@ export interface HevySet {
8080
weight_kg: number;
8181
reps: number;
8282
type: string;
83+
duration_seconds?: number;
8384
}

src/lib/time.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -85,23 +85,27 @@ export function fromNow(date: Dayjs, currentTime: Dayjs): string {
8585

8686
export function renderDuration(seconds: number): string {
8787
const duration = dayjs.duration(seconds, 'seconds');
88-
let formattedDuration: string;
89-
9088
const totalHours = Math.floor(duration.asHours());
9189
const minutes = duration.minutes();
90+
const remainingS = duration.seconds();
91+
const milliseconds = Math.round((seconds - Math.floor(seconds)) * 1000);
92+
93+
let formattedDuration: string;
94+
9295
if (totalHours > 0) {
9396
formattedDuration = `${totalHours}hr`;
94-
if (minutes > 0) {
95-
formattedDuration += ` ${minutes}m`;
96-
}
97-
} else if (seconds < 3660 && seconds > 3540) {
97+
if (minutes > 0) formattedDuration += ` ${minutes}m`;
98+
} else if (seconds > 3540 && seconds < 3660) {
9899
formattedDuration = '1hr';
100+
} else if (seconds < 60) {
101+
formattedDuration =
102+
(remainingS > 0 ? `${remainingS}s` : '') +
103+
(milliseconds > 0 || remainingS === 0 ? ` ${milliseconds}ms` : '');
104+
formattedDuration = formattedDuration.trim();
99105
} else {
100-
const remainingSeconds = duration.seconds();
101106
formattedDuration = `${minutes}m`;
102-
if (remainingSeconds > 0) {
103-
formattedDuration += ` ${remainingSeconds}s`;
104-
}
107+
if (remainingS > 0) formattedDuration += ` ${remainingS}s`;
105108
}
109+
106110
return formattedDuration;
107111
}

0 commit comments

Comments
 (0)