You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Due for payment 2026-04-30] [$250] Workspace - Missing subheader under “Select features to copy” in duplication flow #88255
The subheader <Text> at WorkspaceDuplicateSelectFeaturesForm.tsx:353 uses styles.webViewStyles.baseFontStyle, which is a style designed for react-native-render-html — not regular <Text> components. That style includes flex: 1 (index.ts:247), which causes the text to collapse to zero height on Android inside the auto-height parent <View>.
What changes do you think we should make in order to solve the problem?
Remove styles.webViewStyles.baseFontStyle from the subheader's style array at line 353 and use only styles.textSupporting (plus styles.mt1 for a small top margin), matching the pattern used by other similar screens (e.g., WorkspaceCompanyCardAddWorkEmailPage.tsx:143).
What alternative solutions did you explore? (Optional)
Could override flex: 1 by adding flex: undefined to the style array, but that's a workaround. The correct fix is to not use a WebView-specific style on a regular Text component.
Next Steps for Contributor+ team: Reply with @MelvinBot implement this to create a draft PR, @MelvinBot <your feedback> to refine this analysis, or explain why you are rejecting Melvin's proposal.
changed the title [-]Workspace - Missing subheader under “Select features to copy” in duplication flow[/-][+][$250] Workspace - Missing subheader under “Select features to copy” in duplication flow[/+]on Apr 18, 2026
Please re-state the problem that we are trying to solve in this issue.
During the workspace duplication flow, the subheader text "Which features do you want to copy over to your new workspace?" is missing beneath the "Select features to copy" heading on Android.
What is the root cause of that problem?
The subheader <Text> component on line 353 of WorkspaceDuplicateSelectFeaturesForm.tsx is styled with styles.webViewStyles.baseFontStyle, which includes flex: 1. This style was designed for use in WebView/HTML rendering contexts (it is the base style passed to TRenderEngineProvider), not for plain React Native <Text> components. When flex: 1 is applied to a <Text> inside a <View> that has no constrained height, React Native on Android distributes flex space by collapsing the text to zero visible height, effectively making it invisible. The issue does not reproduce on iOS because iOS handles flex: 1 on <Text> elements more permissively.
What changes do you think we should make in order to solve the problem?
Replace styles.webViewStyles.baseFontStyle with styles.textNormal on the subheader <Text> at line 353. styles.textNormal provides the same font size and family without flex: 1, making it safe to use in standard React Native layout contexts. styles.textSupporting is already applied for the muted color, so we only need a style that contributes font sizing — styles.textNormal is appropriate.
The missing subheader is rendered in src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx, but it uses styles.webViewStyles.baseFontStyle on a normal Text component.
That style is intended for rendered HTML base text, not a regular React Native Text. On Android, applying flex: 1 to this Text inside the auto-height header View causes the text layout to collapse, so the translated subheader is present in code but not visible.
What changes do you think we should make in order to solve the problem?
The original code in src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx applies the HTML base style directly to the subheader Text.
Replace the WebView/HTML style with the Text component's existing typography defaults and pass only the supporting color through the component API. The shared Text component already defaults to normal font size, normal line height, and the app's normal font family.
diff --git a/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx b/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx
@@
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import usePolicy from '@hooks/usePolicy';
+import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
@@
function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateFormProps) {
const styles = useThemeStyles();
+ const theme = useTheme();
const {translate} = useLocalize();
@@
- <Text style={[styles.webViewStyles.baseFontStyle, styles.textSupporting]}>{translate('workspace.duplicateWorkspace.whichFeatures')}</Text>+ <Text color={theme.textSupporting}>{translate('workspace.duplicateWorkspace.whichFeatures')}</Text>
This removes the invalid flex: 1 from the subheader while preserving the same normal supporting-text appearance. The subheader can then take its natural height on Android and render under the "Select features to copy" title.
What alternative solutions did you explore? (Optional)
I considered replacing styles.webViewStyles.baseFontStyle with styles.textNormal plus styles.textSupporting. That also removes flex: 1, but it duplicates defaults that the shared Text component already provides.
I also considered using styles.textSupportingNormal. That is valid, but it still solves the issue by swapping one text style for another. Passing color={theme.textSupporting} is more explicit here because the only behavior we need beyond the Text defaults is the supporting color.
I considered overriding the bad style with flex: undefined or flex: 0, but that keeps an HTML-rendering style on a normal Text and hides the real problem.
[Contributor] The offending PR and associated issue have been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake.
[Contributor] If the regression was CRITICAL (e.g. interrupts a core flow) A discussion in #expensify-open-source has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner.
Link to discussion: N/A
[Contributor] If it was decided to create a regression test for the bug, please propose the regression test steps using the template below to ensure the same bug will not reach production again.
[BugZero Assignee] Create a GH issue for creating/updating the regression test once above steps have been agreed upon.
Activity
MelvinBot commentedon Apr 18, 2026
Proposal
What is the root cause of that problem?
The subheader
<Text>atWorkspaceDuplicateSelectFeaturesForm.tsx:353usesstyles.webViewStyles.baseFontStyle, which is a style designed forreact-native-render-html— not regular<Text>components. That style includesflex: 1(index.ts:247), which causes the text to collapse to zero height on Android inside the auto-height parent<View>.What changes do you think we should make in order to solve the problem?
Remove
styles.webViewStyles.baseFontStylefrom the subheader's style array at line 353 and use onlystyles.textSupporting(plusstyles.mt1for a small top margin), matching the pattern used by other similar screens (e.g.,WorkspaceCompanyCardAddWorkEmailPage.tsx:143).Change:
to:
What alternative solutions did you explore? (Optional)
Could override
flex: 1by addingflex: undefinedto the style array, but that's a workaround. The correct fix is to not use a WebView-specific style on a regular Text component.Next Steps for Contributor+ team: Reply with
@MelvinBot implement thisto create a draft PR,@MelvinBot <your feedback>to refine this analysis, or explain why you are rejecting Melvin's proposal.melvin-bot commentedon Apr 18, 2026
Triggered auto assignment to Contributor-plus team member for initial proposal review - @dukenv0307 (
External)[-]Workspace - Missing subheader under “Select features to copy” in duplication flow[/-][+][$250] Workspace - Missing subheader under “Select features to copy” in duplication flow[/+]melvin-bot commentedon Apr 18, 2026
Job added to Upwork: https://www.upwork.com/jobs/~022045521476047714281
MobileMage commentedon Apr 18, 2026
Proposal
Please re-state the problem that we are trying to solve in this issue.
During the workspace duplication flow, the subheader text "Which features do you want to copy over to your new workspace?" is missing beneath the "Select features to copy" heading on Android.
What is the root cause of that problem?
The subheader
<Text>component on line 353 ofWorkspaceDuplicateSelectFeaturesForm.tsxis styled withstyles.webViewStyles.baseFontStyle, which includesflex: 1. This style was designed for use in WebView/HTML rendering contexts (it is the base style passed toTRenderEngineProvider), not for plain React Native<Text>components. Whenflex: 1is applied to a<Text>inside a<View>that has no constrained height, React Native on Android distributes flex space by collapsing the text to zero visible height, effectively making it invisible. The issue does not reproduce on iOS because iOS handlesflex: 1on<Text>elements more permissively.App/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx
Lines 351 to 354 in 03023c1
What changes do you think we should make in order to solve the problem?
Replace
styles.webViewStyles.baseFontStylewithstyles.textNormalon the subheader<Text>at line 353.styles.textNormalprovides the same font size and family withoutflex: 1, making it safe to use in standard React Native layout contexts.styles.textSupportingis already applied for the muted color, so we only need a style that contributes font sizing —styles.textNormalis appropriate.App/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx
Line 353 in 03023c1
What alternative solutions did you explore? (Optional)
N/A
emkhalid commentedon Apr 19, 2026
Proposal
What is the root cause of that problem?
The missing subheader is rendered in
src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx, but it usesstyles.webViewStyles.baseFontStyleon a normalTextcomponent.App/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx
Lines 351 to 354 in 03023c1
styles.webViewStyles.baseFontStyleis defined insrc/styles/index.tsand includesflex: 1.App/src/styles/index.ts
Lines 243 to 250 in 03023c1
That style is intended for rendered HTML base text, not a regular React Native
Text. On Android, applyingflex: 1to thisTextinside the auto-height headerViewcauses the text layout to collapse, so the translated subheader is present in code but not visible.What changes do you think we should make in order to solve the problem?
The original code in
src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsxapplies the HTML base style directly to the subheaderText.App/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx
Line 353 in 03023c1
Replace the WebView/HTML style with the
Textcomponent's existing typography defaults and pass only the supporting color through the component API. The sharedTextcomponent already defaults to normal font size, normal line height, and the app's normal font family.App/src/components/Text.tsx
Lines 39 to 54 in 03023c1
This removes the invalid
flex: 1from the subheader while preserving the same normal supporting-text appearance. The subheader can then take its natural height on Android and render under the "Select features to copy" title.What alternative solutions did you explore? (Optional)
I considered replacing
styles.webViewStyles.baseFontStylewithstyles.textNormalplusstyles.textSupporting. That also removesflex: 1, but it duplicates defaults that the sharedTextcomponent already provides.I also considered using
styles.textSupportingNormal. That is valid, but it still solves the issue by swapping one text style for another. Passingcolor={theme.textSupporting}is more explicit here because the only behavior we need beyond theTextdefaults is the supporting color.I considered overriding the bad style with
flex: undefinedorflex: 0, but that keeps an HTML-rendering style on a normalTextand hides the real problem.fixed_sub_header_workspace.mp4
dukenv0307 commentedon Apr 20, 2026
@MelvinBot Implement this
MelvinBot commentedon Apr 20, 2026
🤖 Draft PR created: #88299
Please mark it as "Ready for review" when it is ready for review.
13 remaining items
dukenv0307 commentedon Apr 26, 2026
BugZero Checklist:
[Contributor] The offending PR and associated issue have been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake.
Link to the comment on the PR: https://github.com/Expensify/App/pull/69146/changes#r3142909935
Link to the comment on the Issue: [Due for payment 2025-09-19] [Due for payment 2025-09-04] Implement Duplicate Workspace feature #67289 (comment)
[Contributor] If the regression was CRITICAL (e.g. interrupts a core flow) A discussion in #expensify-open-source has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner.
Link to discussion: N/A
[Contributor] If it was decided to create a regression test for the bug, please propose the regression test steps using the template below to ensure the same bug will not reach production again.
[BugZero Assignee] Create a GH issue for creating/updating the regression test once above steps have been agreed upon.
Link to issue: https://github.com/Expensify/Expensify/issues/631775
Regression Test Proposal
Precondition:
Test:
Do we agree 👍 or 👎
Zapier Logs
Run ID: 00040eee-7bd5-aee8-48cd-ff1c299f1db4melvin-bot commentedon Apr 30, 2026
Payment Summary
Upwork Job
BugZero Checklist (@mallenexpensify)
mallenexpensify commentedon Apr 30, 2026
Payment Summary
Contributor+: @dukenv0307 due $250 via NewDot
^ Test case created
quinthar commentedon May 12, 2026
Approved $250 to @dukenv0307