feat(history): view the transactions involving an address

Adds a "View transactions" action that opens the History tab pre-filtered
to a chosen address. SetTransactionsAddressFilter() stores a pending filter
that RenderTransactionsTab consumes on its next frame — pre-filling the
search box and resetting the type filter to All — then the caller navigates
to NavPage::History. This reuses the existing "prefill + navigate" pattern
(cf. SetSendFromAddress) and all of History's rendering, detail and export.

Triggers:
- Contacts: a context-menu item and a 4th per-row action icon (copy /
  view-transactions / edit / delete; the trailing width is widened to fit).
- Balance address list: a per-address context-menu item (own z/t addresses).
- Receive tab: the recent-received rows now carry their address into the
  filter instead of jumping to History unfiltered.

The History search also now matches from_address, so filtering by one of your
own addresses catches sends FROM it, not only receives INTO it.

Scoping is honest, not exhaustive: transparent is well covered, but shielded
counterparties are private and the transparent sender of received funds is
never recorded on-chain, so this shows transactions *involving* the address.
On Lite, from_address is thin, so own-address send filtering is weaker.

New i18n keys view_transactions / tt_view_transactions translated into all
eight locales (no new glyphs). Builds + test suites pass on both variants.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-10-15 10:13:15 -05:00
co-authored by Claude Opus 4.8
parent 5fcab14e4e
commit 2282f332a6
14 changed files with 78 additions and 9 deletions
+5
View File
@@ -13,6 +13,7 @@
#include "address_transfer_dialog.h"
#include "mining_tab_helpers.h"
#include "send_tab.h"
#include "transactions_tab.h"
#include "../../app.h"
#include "../../config/settings.h"
@@ -693,6 +694,10 @@ void RenderSharedAddressList(App* app, float listH, float availW,
SetSendFromAddress(addr.address);
app->setCurrentPage(NavPage::Send);
}
if (ImGui::MenuItem(TR("view_transactions"))) {
SetTransactionsAddressFilter(addr.address);
app->setCurrentPage(NavPage::History);
}
ImGui::Separator();
if (ImGui::MenuItem(TR("set_label"))) {
AddressLabelDialog::show(app, addr.address, row.isZ);