From 9c042411fb5d5e7197e3da6b5712d26faa48a06a Mon Sep 17 00:00:00 2001 From: mace Date: Mon, 14 Sep 2026 18:05:24 +0200 Subject: [PATCH] Show a sync-in-progress spinner in the header next to the feed filter activeSyncCount/isSyncing() in useFeeds.js already refcounted both boot reload (fetchData) and manual sync() but wasn't reactive. Make it a ref + computed and expose it so AppNav can render a small spinner next to the feed filter whenever a sync is in flight. The spinner sits outside the filter's own v-if so it also shows during a manual sync from pages other than /feeds, and its box is always reserved (visibility toggle, not v-if) so the one-time --app-nav-height measurement stays correct. --- vue/src/components/AppNav.vue | 35 +++++++- vue/src/components/__tests__/AppNav.spec.js | 42 +++++++++ .../composables/__tests__/useFeeds.spec.js | 88 ++++++++++++++++++- vue/src/composables/useFeeds.js | 19 ++-- 4 files changed, 171 insertions(+), 13 deletions(-) diff --git a/vue/src/components/AppNav.vue b/vue/src/components/AppNav.vue index f22943e..a9e387a 100644 --- a/vue/src/components/AppNav.vue +++ b/vue/src/components/AppNav.vue @@ -5,7 +5,7 @@ import { useFeeds, logout as logoutSession } from '@/composables/useFeeds' const router = useRouter() const route = useRoute() -const { sync, viewMode, toggleViewMode, layout, toggleLayout, markAllRead, feedFilter, feedTitles, setFeedFilter, unreadCount, displayedFeedUnreadCounts, refreshUnreadDisplay, lastProgrammaticScroll } = useFeeds() +const { sync, viewMode, toggleViewMode, layout, toggleLayout, markAllRead, feedFilter, feedTitles, setFeedFilter, unreadCount, displayedFeedUnreadCounts, refreshUnreadDisplay, lastProgrammaticScroll, isSyncing } = useFeeds() const headerRef = ref(null) @@ -161,6 +161,11 @@ function handleToggleLayout() {
RSS Reader ({{ unreadCount }}) +