Part of
#89946 — OptionRowLHN compound component decomposition
Step
12 of 12 — depends on all previous steps (#89947 through #89957).
What
Final assembly PR:
- Rewrite
OptionRowLHN.tsx to ≤30 LOC of JSX wiring only — composes OptionRow.Provider → OptionRow.OfflineWrapper → OptionRow.Container → leaf subcomponents
- Delete
OptionRowLHNCore (if it exists as a separate file by this point) — all logic lives in leaves or the provider
- Add
ArchivedOptionRowLHN.tsx — sibling variant with no badges (ErrorBadge, InfoBadge, OnboardingBadge), no ProductTrainingTooltip layer, and no indicators (DraftIndicator, PinIndicator); uses the same OptionRow.Provider
- Update
LHNOptionsList.tsx consumer to pick OptionRowLHN vs ArchivedOptionRowLHN based on optionItem.private_isArchived
- Rename leaf files to drop the
OptionRow prefix on any that weren't renamed in their individual steps (e.g. OptionRowPressable.tsx → Pressable.tsx)
- Update the barrel / index export so external consumers import from
LHNOptionsList unchanged
Why
Closes the decomposition by producing the ≤30 LOC main component and the explicit archived variant, fulfilling all design decisions agreed with the team.
Acceptance criteria
OptionRowLHN.tsx is ≤30 LOC of JSX, zero inline logic
ArchivedOptionRowLHN composes only the subset of leaves appropriate for archived rows
LHNOptionsList picks the correct variant based on private_isArchived
- All leaf files follow the no-
OptionRow-prefix naming convention
- No visible behavior or style changes
Issue Owner
Current Issue Owner: @DylanDylann
Part of
#89946 — OptionRowLHN compound component decomposition
Step
12 of 12 — depends on all previous steps (#89947 through #89957).
What
Final assembly PR:
OptionRowLHN.tsxto ≤30 LOC of JSX wiring only — composesOptionRow.Provider→OptionRow.OfflineWrapper→OptionRow.Container→ leaf subcomponentsOptionRowLHNCore(if it exists as a separate file by this point) — all logic lives in leaves or the providerArchivedOptionRowLHN.tsx— sibling variant with no badges (ErrorBadge,InfoBadge,OnboardingBadge), noProductTrainingTooltiplayer, and no indicators (DraftIndicator,PinIndicator); uses the sameOptionRow.ProviderLHNOptionsList.tsxconsumer to pickOptionRowLHNvsArchivedOptionRowLHNbased onoptionItem.private_isArchivedOptionRowprefix on any that weren't renamed in their individual steps (e.g.OptionRowPressable.tsx→Pressable.tsx)LHNOptionsListunchangedWhy
Closes the decomposition by producing the ≤30 LOC main component and the explicit archived variant, fulfilling all design decisions agreed with the team.
Acceptance criteria
OptionRowLHN.tsxis ≤30 LOC of JSX, zero inline logicArchivedOptionRowLHNcomposes only the subset of leaves appropriate for archived rowsLHNOptionsListpicks the correct variant based onprivate_isArchivedOptionRow-prefix naming conventionIssue Owner
Current Issue Owner: @DylanDylann