Skip to content

[Due for payment 2026-05-15] Decompose OptionRowLHN alternate text and action badge #89275

@JS00001

Description

@JS00001

Explanation of Change
Extracts two self-contained subtrees out of OptionRowLHN into dedicated child components, mirroring the pattern from #89087 (OptionRowAvatar):

OptionRowAlternateText owns the alternate-text plus the custom-emoji branch (containsCustomEmoji + containsOnlyCustomEmoji + TextWithEmojiFragment). Removes the useMemo for alternateTextContainsCustomEmojiWithText from the parent.
OptionRowActionBadge owns the RBR/GBR badge JSX (the Badge + DotIndicator Icon variants). Owns its own useTheme/useThemeStyles and reads DotIndicator via useMemoizedLazyExpensifyIcons so the parent's lazy-icon set shrinks from ['Pencil', 'DotIndicator', 'Pin'] to ['Pencil', 'Pin'].
The parent OptionRowLHN keeps its React.memo wrapper and load-bearing manual memoization per the React Compiler RC-6 exception. Both new components compile cleanly with React Compiler.

Measured impact
Perf-neutral. ManualNavigateToInboxTab measurements on Android are within noise of main; this is a readability/composition refactor, not a perf win. Shipping it as prep so future extractions in this file (e.g. status badge) start from a smaller parent.

PR: #89274

Issue OwnerCurrent Issue Owner: @DylanDylann

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionDailyKSv2

Type

No type
No fields configured for issues without a type.

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions