Skip to content

fix(favorites): confirm before overwriting dirty editor tab (closes #341) - #465

Merged
EVWorth merged 2 commits into
mainfrom
fix/341-favorite-click-dirty-check
Aug 1, 2026
Merged

fix(favorites): confirm before overwriting dirty editor tab (closes #341)#465
EVWorth merged 2 commits into
mainfrom
fix/341-favorite-click-dirty-check

Conversation

@EVWorth

@EVWorth EVWorth commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Summary

Clicking a favorite while the editor has a dirty query tab silently replaces the tab's content with the favorite's SQL — losing unsaved edits. handleClick checked activeTab.type === 'query' but not isDirty. Adds an isDirty guard that opens a ConfirmDialog.

Files

  • src/components/favorites/QueryFavorites.tsx
  • src/components/favorites/tests/QueryFavorites.test.tsx

Test plan

  • vitest: src/components/favorites/tests/QueryFavorites.test.tsx
  • vitest: src/components/favorites/tests/
  • vitest: full frontend pass
  • tsc --noEmit clean

Closes #341

)

S-scope fix. handleClick in QueryFavorites previously overwrote a dirty query tab's content silently. Adds an isDirty guard that opens a ConfirmDialog ('Replace current tab content? Unsaved changes will be lost.') before replacing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@EVWorth
EVWorth marked this pull request as ready for review August 1, 2026 18:07
Resolves merge conflict with #337 (which was merged via #467). Combines
both fixes:

- Dirty-tab overwrite guard: handleClick (now via openFavorite helper)
  checks isDirty on the active query tab and opens a ConfirmDialog
  ('Replace current tab content? Unsaved changes will be lost.') before
  swapping the editor content for the favorite's SQL.
- Delete-category confirm (from #337 via #467): separate ConfirmDialog
  with 'Delete category X? N favorites will be moved to Uncategorized.'

The two ConfirmDialogs coexist (one driven by pendingFavorite + showConfirm,
one by pendingDelete) and are visually distinct (one danger, one neutral).

Tests: combined suite now exercises both flows with a single elaborate
useContextMenu mock that renders context-menu items as buttons.

Closes #341

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@EVWorth
EVWorth merged commit c5bd448 into main Aug 1, 2026
10 checks passed
@EVWorth
EVWorth deleted the fix/341-favorite-click-dirty-check branch August 1, 2026 18:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[P1/bug] handleClick overwrites dirty tab content silently — no isDirty check

1 participant