From 8e92ae6073b851360bf9b22cbd911a0f0a5cccd3 Mon Sep 17 00:00:00 2001 From: derekc Date: Tue, 31 Mar 2026 08:43:44 -0700 Subject: [PATCH] Fix meeting alert catch-up window and skip redundant block switch - Extend start-time trigger window from 15s to 5 min so opening the dashboard late still marks the meeting as started - Only play chime and show TV overlay when within 30s of start time - Skip switchBlock call when the session is already on that block Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/composables/useMeetingAlerts.js | 20 ++++++++++++-------- frontend/src/views/DashboardView.vue | 1 + 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/frontend/src/composables/useMeetingAlerts.js b/frontend/src/composables/useMeetingAlerts.js index ea9647e..ae79a17 100644 --- a/frontend/src/composables/useMeetingAlerts.js +++ b/frontend/src/composables/useMeetingAlerts.js @@ -104,17 +104,21 @@ export function useMeetingAlerts(onMeetingStart = null) { } } - // At start time: full-screen TV alert, clear dashboard toasts - if (secs <= 0 && secs >= -15 && !triggered.has(keyStart)) { + // At start time: full-screen TV alert, clear dashboard toasts. + // Use a 5-minute catch-up window so opening the dashboard late still triggers. + if (secs <= 0 && secs >= -300 && !triggered.has(keyStart)) { triggered.add(keyStart) dashboardAlerts.value = dashboardAlerts.value.filter(a => a.blockId !== block.id) - playChime(false) - if (onMeetingStart) onMeetingStart(block.id) - tvAlert.value = { - blockId: block.id, - label: blockLabel(block), - autoDismissAt: new Date(Date.now() + 30000), + // Only play chime and show TV overlay when meeting just started (within 30s) + if (secs >= -30) { + playChime(false) + tvAlert.value = { + blockId: block.id, + label: blockLabel(block), + autoDismissAt: new Date(Date.now() + 30000), + } } + if (onMeetingStart) onMeetingStart(block.id) } }) }, 1000) diff --git a/frontend/src/views/DashboardView.vue b/frontend/src/views/DashboardView.vue index 6045622..7e5d28f 100644 --- a/frontend/src/views/DashboardView.vue +++ b/frontend/src/views/DashboardView.vue @@ -283,6 +283,7 @@ const scheduleStore = useScheduleStore() const activeChild = computed(() => childrenStore.activeChild) const meetingAlerts = useMeetingAlerts((blockId) => { if (!scheduleStore.session) return + if (scheduleStore.session.current_block_id === blockId) return scheduleStore.switchBlock(scheduleStore.session.id, blockId) })