Skip to content

fix: guard leaving the entry form with a confirm#44

Merged
shikaan merged 1 commit intomainfrom
fix/43-prevent-navigation-on-unsaved-changes
Feb 22, 2026
Merged

fix: guard leaving the entry form with a confirm#44
shikaan merged 1 commit intomainfrom
fix/43-prevent-navigation-on-unsaved-changes

Conversation

@shikaan
Copy link
Copy Markdown
Owner

@shikaan shikaan commented Feb 22, 2026

This change introduces dirty guards to navigation, forcing consumers to
explicitly opt out wherever required. Cases where the no-guard checks
were expected because we wanted to issue a re-render have been replaced
with an explicit rerender method.

Closes #43

@shikaan shikaan requested a review from Copilot February 22, 2026 12:47
@shikaan shikaan changed the title fix: guard leaving the form with a Confirm fix: guard leaving the entry form with a confirm Feb 22, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements dirty guards for navigation in a KeePass database TUI application to prevent users from accidentally losing unsaved changes when navigating away from an entry. The implementation centralizes dirty state checking in a new NavigateTo method that displays a confirmation dialog when there are unsaved changes.

Changes:

  • Added dirty guard logic to the navigation system with explicit opt-out mechanism
  • Replaced local dirty checks with centralized navigation guards
  • Introduced RefreshCurrentView() method to re-render views without navigation

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tui/app.go Added NavigateTo with dirty guard, NavigateToWithoutDirtyGuard for explicit bypass, and RefreshCurrentView for re-rendering; introduced lastView field to track current view
tui/entry.go Removed duplicate dirty guard logic for Ctrl+K navigation; replaced refresh() calls with RefreshCurrentView()
tui/groups.go Updated group selection and creation to use NavigateToWithoutDirtyGuard since state changes warrant bypassing the guard; replaced navigation with RefreshCurrentView() after group deletion
tui/layout.go Updated Ctrl+P and Ctrl+N handlers to use appropriate navigation methods (with/without guard)
test/tui_test.go Added test to verify dirty guard triggers on navigation with unsaved changes; removed unrelated password assertion

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

This change introduces dirty guards to navigation, forcing consumers to
explicitly opt out wherever required. Cases where the no-guard checks
were expected because we wanted to issue a re-render have been replaced
with an explicit rerender method.
@shikaan shikaan force-pushed the fix/43-prevent-navigation-on-unsaved-changes branch from d51c245 to 161567c Compare February 22, 2026 12:53
@shikaan shikaan merged commit d8addd5 into main Feb 22, 2026
1 check passed
@shikaan shikaan deleted the fix/43-prevent-navigation-on-unsaved-changes branch February 22, 2026 12:55
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.

Prevent Ctrl+P navigation on unsaved changes

2 participants