From d54296e66a2657ff263efd7b2b515c9d4d04ef1e Mon Sep 17 00:00:00 2001 From: Gregor Vostrak Date: Tue, 8 Sep 2026 17:27:35 +0200 Subject: [PATCH] fix live timer restarting while duration input is paused --- resources/js/utils/useCurrentTimeEntry.ts | 39 +++++++++++------------ 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/resources/js/utils/useCurrentTimeEntry.ts b/resources/js/utils/useCurrentTimeEntry.ts index 2508e329..74ddb150 100644 --- a/resources/js/utils/useCurrentTimeEntry.ts +++ b/resources/js/utils/useCurrentTimeEntry.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia'; -import { computed, ref } from 'vue'; +import { computed, ref, watch } from 'vue'; import { api } from '@/packages/api/src'; import type { TimeEntry } from '@/packages/api/src'; import dayjs, { Dayjs } from 'dayjs'; @@ -57,7 +57,6 @@ export const useCurrentTimeEntryStore = defineStore('currentTimeEntry', () => { const currentTimeEntry = ref({ ...emptyTimeEntry }); const { handleApiRequestNotifications } = useNotificationsStore(); const queryClient = useQueryClient(); - useLocalStorage('solidtime/current-time-entry', currentTimeEntry, { deep: true, }); @@ -89,23 +88,12 @@ export const useCurrentTimeEntryStore = defineStore('currentTimeEntry', () => { try { const timeEntriesResponse = await api.getMyActiveTimeEntry({}); if (timeEntriesResponse?.data) { - if (timeEntriesResponse.data) { - currentTimeEntry.value = timeEntriesResponse.data; - if ( - currentTimeEntry.value.start !== '' && - currentTimeEntry.value.end === null - ) { - startLiveTimer(); - } - } else { - // No active time entry on server - // Only reset if we had a previously started timer (has an ID) - // Don't reset if user is preparing a new time entry (no ID yet) - if (currentTimeEntry.value.id !== '') { - currentTimeEntry.value = { ...emptyTimeEntry }; - stopLiveTimer(); - } - } + currentTimeEntry.value = timeEntriesResponse.data; + } else if (currentTimeEntry.value.id !== '') { + // No active time entry on server + // Only reset if we had a previously started timer (has an ID) + // Don't reset if user is preparing a new time entry (no ID yet) + currentTimeEntry.value = { ...emptyTimeEntry }; } } catch { // API error (e.g., 404 when no active time entry) @@ -113,7 +101,6 @@ export const useCurrentTimeEntryStore = defineStore('currentTimeEntry', () => { // Don't reset if user is preparing a new time entry (no ID yet) if (currentTimeEntry.value.id !== '') { currentTimeEntry.value = { ...emptyTimeEntry }; - stopLiveTimer(); } } } else { @@ -294,6 +281,18 @@ export const useCurrentTimeEntryStore = defineStore('currentTimeEntry', () => { return isActive.value && currentTimeEntry.value.type === 'break'; }); + watch( + isActive, + (active) => { + if (active) { + startLiveTimer(); + } else { + stopLiveTimer(); + } + }, + { immediate: true } + ); + async function setActiveState(newState: boolean) { if (newState) { startLiveTimer();