Skip to content

[Due for payment 2026-06-12] perf: feed stable report projection to transaction list to avoid read-state re-renders #92491

@mountiny

Description

@mountiny

Problem

getStableReportSelector/reportStable already produce a stable report projection in MoneyRequestReportActionsList by omitting read-state heartbeat fields (lastReadTime, lastVisibleActionCreated, lastMessageText, etc.). The full report object was still passed to MoneyRequestReportTransactionList, so every last* field mutation (e.g. marking a report as read, receiving a message) re-rendered the entire transaction-list subtree even though nothing inside it reads those fields.

Solution

Pass reportStable (typed as StableReport) to MoneyRequestReportTransactionList instead of the full report. StableReport is structurally assignable to Report because the omitted fields are optional, so downstream row components and utility calls need no changes. The existing !!reportStable guard preserves conditional rendering. Read-state churn no longer triggers transaction-list re-renders; behavior stays the same. export type {StableReport} is added to src/selectors/Report.ts for import from the selector module.

PR

#92485

Issue OwnerCurrent Issue Owner: @aimane-chnaif

Metadata

Metadata

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions