From b7d07324eee4235cbcea219701fd3c602090b2a5 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 6 Jun 2026 20:48:01 -0400 Subject: [PATCH] fix(subs): stop the lock/reload on source actions + regroup the row buttons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lock/reload: every inline source action (check / backfill / recover / toggle / remove) ended by refetching the WHOLE subscription list (store.loadAll / refresh), which blocked the UI and re-rendered the table — collapsing the expanded row, which read as "locks then resets." The action APIs already return the updated source, so the store now patches that one row in place (_patchSource / _dropSource); the post-action loadAll/refresh calls are gone. Toggling enabled, starting/stopping a backfill, recovering, and removing are now instant and leave the expansion intact. Button regroup (operator-flagged: tiny, mis-clickable, not grouped by function): - New shared SourceActions.vue used by desktop SourceRow + mobile SourceCard. - Frequent actions stay as size="small" buttons: Check, Backfill/Stop. - Low-frequency / destructive actions move into a labelled overflow (⋮) menu — Preview backfill, Recover dropped near-duplicates, Remove source — so they can't be fat-fingered, and the labels spell out recover-vs-backfill. - Edit moves next to the source URL (its identity), out of the action cluster where it sat beside Remove. - Single-source Remove now confirms (it had no guard before). Tests: store patches/drops in place without dropping the cache. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../subscriptions/SourceActions.vue | 91 +++++++++++++++++ .../components/subscriptions/SourceCard.vue | 80 +++++---------- .../components/subscriptions/SourceRow.vue | 98 +++++++------------ .../subscriptions/SubscriptionsTab.vue | 25 +++-- frontend/src/stores/sources.js | 35 ++++++- frontend/test/sources.spec.js | 35 +++++++ 6 files changed, 238 insertions(+), 126 deletions(-) create mode 100644 frontend/src/components/subscriptions/SourceActions.vue diff --git a/frontend/src/components/subscriptions/SourceActions.vue b/frontend/src/components/subscriptions/SourceActions.vue new file mode 100644 index 0000000..94b2a02 --- /dev/null +++ b/frontend/src/components/subscriptions/SourceActions.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/frontend/src/components/subscriptions/SourceCard.vue b/frontend/src/components/subscriptions/SourceCard.vue index 0e0617b..c8f5fb2 100644 --- a/frontend/src/components/subscriptions/SourceCard.vue +++ b/frontend/src/components/subscriptions/SourceCard.vue @@ -12,10 +12,19 @@ /> - {{ source.url }} +
+ {{ source.url }} + + mdi-pencil + Edit source + +
Last {{ formatRelative(source.last_checked_at) }} @@ -42,61 +51,20 @@
- - mdi-play - Check now - - - {{ source.backfill_state === 'running' ? 'mdi-stop' : 'mdi-magnify-scan' }} - - {{ source.backfill_state === 'running' - ? (source.backfill_bypass_seen ? 'Stop recovery' : 'Stop backfill') - : 'Backfill full history' }} - - - - mdi-eye-outline - - Preview — count what a backfill would download (no download) - - - - mdi-backup-restore - - Recover — re-fetch dropped near-dups & re-evaluate under the current threshold - - - - mdi-pencil - Edit - - - mdi-close - Remove - +