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 Owner
Current Issue Owner: @DylanDylann
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 Owner
Current Issue Owner: @DylanDylann