fix live timer restarting while duration input is paused

This commit is contained in:
Gregor Vostrak
2026-09-08 17:27:35 +02:00
parent 95ddbf9ead
commit d54296e66a

View File

@@ -1,5 +1,5 @@
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import { computed, ref } from 'vue'; import { computed, ref, watch } from 'vue';
import { api } from '@/packages/api/src'; import { api } from '@/packages/api/src';
import type { TimeEntry } from '@/packages/api/src'; import type { TimeEntry } from '@/packages/api/src';
import dayjs, { Dayjs } from 'dayjs'; import dayjs, { Dayjs } from 'dayjs';
@@ -57,7 +57,6 @@ export const useCurrentTimeEntryStore = defineStore('currentTimeEntry', () => {
const currentTimeEntry = ref<TimeEntry>({ ...emptyTimeEntry }); const currentTimeEntry = ref<TimeEntry>({ ...emptyTimeEntry });
const { handleApiRequestNotifications } = useNotificationsStore(); const { handleApiRequestNotifications } = useNotificationsStore();
const queryClient = useQueryClient(); const queryClient = useQueryClient();
useLocalStorage('solidtime/current-time-entry', currentTimeEntry, { useLocalStorage('solidtime/current-time-entry', currentTimeEntry, {
deep: true, deep: true,
}); });
@@ -89,23 +88,12 @@ export const useCurrentTimeEntryStore = defineStore('currentTimeEntry', () => {
try { try {
const timeEntriesResponse = await api.getMyActiveTimeEntry({}); const timeEntriesResponse = await api.getMyActiveTimeEntry({});
if (timeEntriesResponse?.data) { if (timeEntriesResponse?.data) {
if (timeEntriesResponse.data) { currentTimeEntry.value = timeEntriesResponse.data;
currentTimeEntry.value = timeEntriesResponse.data; } else if (currentTimeEntry.value.id !== '') {
if ( // No active time entry on server
currentTimeEntry.value.start !== '' && // Only reset if we had a previously started timer (has an ID)
currentTimeEntry.value.end === null // Don't reset if user is preparing a new time entry (no ID yet)
) { currentTimeEntry.value = { ...emptyTimeEntry };
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();
}
}
} }
} catch { } catch {
// API error (e.g., 404 when no active time entry) // 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) // Don't reset if user is preparing a new time entry (no ID yet)
if (currentTimeEntry.value.id !== '') { if (currentTimeEntry.value.id !== '') {
currentTimeEntry.value = { ...emptyTimeEntry }; currentTimeEntry.value = { ...emptyTimeEntry };
stopLiveTimer();
} }
} }
} else { } else {
@@ -294,6 +281,18 @@ export const useCurrentTimeEntryStore = defineStore('currentTimeEntry', () => {
return isActive.value && currentTimeEntry.value.type === 'break'; return isActive.value && currentTimeEntry.value.type === 'break';
}); });
watch(
isActive,
(active) => {
if (active) {
startLiveTimer();
} else {
stopLiveTimer();
}
},
{ immediate: true }
);
async function setActiveState(newState: boolean) { async function setActiveState(newState: boolean) {
if (newState) { if (newState) {
startLiveTimer(); startLiveTimer();