0
0
Fork
You've already forked sharedinbox
0

feat(undo-log): hyperlink email rows in Undo Log Detail (#474) #547

Merged
guettli merged 3 commits from issue-474-undo-log-email-link into main 2026年06月10日 13:15:51 +02:00
Collaborator
Copy link

Summary

  • Each email row in the Undo Log Detail "Emails" section is now tappable.
  • Tapping resolves the email via EmailRepository.findEmailByMessageId(accountId, messageId) and navigates to its current location, so the link survives the move/snooze that changed its IMAP UID.
  • If the email has no Message-ID, or no row matches the lookup (e.g. hard-deleted), a SnackBar explains the situation instead of navigating.

A chevron_right trailing icon was added to signal the rows are now navigable.

Closes #474

Test plan

  • New widget test test/widget/undo_log_detail_screen_test.dart covers:
    • tap on a row whose lookup hits → navigates to /accounts/<acc>/mailboxes/<encoded>/emails/<encoded> with the current mailbox/id
    • tap when lookup returns null → "Email no longer exists" SnackBar, no navigation
    • tap when the original row has no Message-ID → "no Message-ID" SnackBar, no navigation
## Summary - Each email row in the **Undo Log Detail** "Emails" section is now tappable. - Tapping resolves the email via `EmailRepository.findEmailByMessageId(accountId, messageId)` and navigates to its **current** location, so the link survives the move/snooze that changed its IMAP UID. - If the email has no Message-ID, or no row matches the lookup (e.g. hard-deleted), a SnackBar explains the situation instead of navigating. A `chevron_right` trailing icon was added to signal the rows are now navigable. Closes #474 ## Test plan - [x] New widget test `test/widget/undo_log_detail_screen_test.dart` covers: - tap on a row whose lookup hits → navigates to `/accounts/<acc>/mailboxes/<encoded>/emails/<encoded>` with the **current** mailbox/id - tap when lookup returns `null` → "Email no longer exists" SnackBar, no navigation - tap when the original row has no Message-ID → "no Message-ID" SnackBar, no navigation
feat(undo-log): make email rows in detail view tappable
Some checks failed
CI / Full Project Check (pull_request) Failing after 2m0s
317cac7e0a
Each row of the Undo Log Detail "Emails" section now navigates to the
corresponding email's current location. Because move/snooze change the
IMAP UID (and thus the stored Email.id), the tile resolves the email
via EmailRepository.findEmailByMessageId so the link stays valid after
the action that produced the undo entry.
When the email cannot be located (no Message-ID on the original row, or
already hard-deleted), a snackbar explains the situation instead of
navigating.
Closes #474
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Merge branch 'main' into issue-474-undo-log-email-link
Some checks failed
CI / Full Project Check (pull_request) Failing after 2m0s
68f0a17781
style(undo-log): apply dart format to email tile mapper
All checks were successful
CI / Full Project Check (pull_request) Successful in 2m36s
54c1aa054c
`dart format --set-exit-if-changed` is part of CI's check pipeline.
Collapse the now-fitting `_EmailTile` call back onto one line so it
matches the formatter output.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
guettli deleted branch issue-474-undo-log-email-link 2026年06月10日 13:15:53 +02:00
Sign in to join this conversation.
No reviewers
Labels
Clear labels
automerge
Eligible for automatic merge by CI
ci-failure
Issue opened by agentloop to track a failing CI workflow; used for deduplication.
do-not-merge
Plan PR — review only, do not merge.
loop
code
Add to run the built-in "code" prompt; override at prompts/code.md.
loop/code-ci-pending
Prompt "code" finished; waiting for the PR's CI to pass before advancing.
loop
code-done
Prompt "code" finished successfully.
loop/code-in-process
Agent for the "code" prompt is currently running on this issue.
loop/merge
Managed by agentloop
loop/merge-done
Managed by agentloop
loop/merge-in-process
Managed by agentloop
loop
plan
Add to run the built-in "plan" prompt; override at prompts/plan.md.
loop
plan-done
Prompt "plan" finished successfully.
loop/plan-in-process
Agent for the "plan" prompt is currently running on this issue.
NeedSupervisor
Issue escalated to a human supervisor; agentloop will skip it until cleared.
State
InProgress
State
Later
State
Planned
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
guettli/sharedinbox!547
Reference in a new issue
guettli/sharedinbox
No description provided.
Delete branch "issue-474-undo-log-email-link"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?