Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7901430
feat(MUSD-741, MUSD-743): polish Money Home header
Kureev May 4, 2026
b9ad446
feat(MUSD-744): render global tab bar on Money Home
Kureev May 4, 2026
0a44b30
feat(MUSD-744): route wallet Cash entry to Money tab so tab bar stays…
Kureev May 4, 2026
ec9e3b5
fix(MUSD-744): drop always-on Add money footer to avoid stacking with…
Kureev May 4, 2026
b9374e0
fix(MUSD-744): unpin Add money button so it flows inside scroll content
Kureev May 4, 2026
e152695
fix(MUSD-744): unpin Add money button and give it breathing room
Kureev May 4, 2026
6370d24
fix(MUSD-744): fix divider rhythm around Add money footer
Kureev May 4, 2026
bdc4c9d
fix(MUSD-744): replace trailing Divider with scroll content paddingBo…
Kureev May 4, 2026
2b3eb4f
fix(MUSD-744): swap Money tab icon to coin to match Figma
Kureev May 4, 2026
c7e4d9d
fix(MUSD-744): rewire tab nav inside MainNavigator to avoid DS files
Kureev May 4, 2026
be2bcf0
fix(MUSD-744): update Money tab test for new Tab.Screen registration
Kureev May 5, 2026
e270466
chore(MUSD-741): remove orphan MoneyFooter.styles.ts
Kureev May 5, 2026
8f04072
feat(MUSD-744): set explicit initialRouteName on MoneyScreenStack
Kureev May 6, 2026
8e1bd23
fix(MUSD-741): align Money title with options menu via HeaderStandard…
Kureev May 6, 2026
f61c9a7
fix(MUSD-741): left-align Money title via HeaderBaseVariant.Display
Kureev May 6, 2026
46b5efe
fix(MUSD-741): use HeaderBase directly so Money title left-aligns
Kureev May 6, 2026
9f9bd30
fix(MUSD-741): add 16px horizontal padding to Money header
Kureev May 6, 2026
01598d3
Merge remote-tracking branch 'origin/main' into kureev/MUSD-741-743-m…
Kureev May 6, 2026
488d5e6
revert(MUSD-744): drop floating Add money footer in favour of static …
Kureev May 6, 2026
a742e0d
fix(MUSD-744): inline Add money footer as last ScrollView child
Kureev May 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions app/components/Nav/Main/MainNavigator.js
Original file line number Diff line number Diff line change
Expand Up @@ -867,9 +867,9 @@ const HomeTabs = () => {
{/* Activity Tab (replaced by Money when feature flag is on) */}
{isMoneyHomeScreenEnabled ? (
<Tab.Screen
name={Routes.MONEY.HOME}
name={Routes.MONEY.ROOT}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's add initialRouteName={Routes.MONEY.HOME] to the MoneyScreenStack. This way we explicitly navigate to the home screen first. Right now this behaviour is implicit due to the Money Home route being first in the list.

options={options.money}
component={WalletTabModalFlow}
component={MoneyScreenStack}
/>
) : (
<Tab.Screen
Expand Down Expand Up @@ -1223,11 +1223,6 @@ const MainNavigator = () => {
/>
{isMoneyHomeScreenEnabled && (
<>
<Stack.Screen
name={Routes.MONEY.ROOT}
component={MoneyScreenStack}
options={{ headerShown: false, ...slideFromRightAnimation }}
/>
<Stack.Screen
name={Routes.MONEY.MODALS.ROOT}
component={MoneyModalStack}
Expand Down
53 changes: 29 additions & 24 deletions app/components/Nav/Main/MainNavigator.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1446,45 +1446,50 @@ describe('MainNavigator', () => {
});

describe('Money home screen conditional rendering', () => {
it('includes Money route when feature flag is enabled', () => {
mockSelectMoneyHomeScreenEnabledFlag.mockReturnValue(true);

const container = renderWithProvider(<MainNavigator />, {
const getHomeTabsScreenNames = (): string[] => {
const { root: mainRoot } = renderWithProvider(<MainNavigator />, {
state: initialRootState,
});

const screenProps = container.root.children
const homeScreen = mainRoot.findAll(
(node: ReactTestInstance) =>
node.type?.toString?.() === 'Screen' && node.props?.name === 'Home',
)[0];
const HomeTabs = homeScreen?.props?.component as React.ComponentType<
Record<string, unknown>
>;
const { root: homeRoot } = renderWithProvider(
<HomeTabs route={{ params: {} }} />,
{ state: initialRootState },
);
const tabNavigatorNode = homeRoot.findAll(
(node: ReactTestInstance) =>
node.type?.toString?.() === 'TabNavigator',
)[0];
return (tabNavigatorNode?.children ?? [])
.filter(
(child): child is ReactTestInstance =>
typeof child === 'object' &&
'type' in child &&
'props' in child &&
child.type?.toString() === 'Screen',
typeof child.props?.name === 'string',
)
.map((child) => child.props.name);
.map((child) => child.props.name as string);
};

it('includes Money route when feature flag is enabled', () => {
mockSelectMoneyHomeScreenEnabledFlag.mockReturnValue(true);

expect(screenProps).toContain(Routes.MONEY.ROOT);
const tabScreenNames = getHomeTabsScreenNames();

expect(tabScreenNames).toContain(Routes.MONEY.ROOT);
mockSelectMoneyHomeScreenEnabledFlag.mockReturnValue(false);
});

it('excludes Money route when feature flag is disabled', () => {
mockSelectMoneyHomeScreenEnabledFlag.mockReturnValue(false);

const container = renderWithProvider(<MainNavigator />, {
state: initialRootState,
});

const screenProps = container.root.children
.filter(
(child): child is ReactTestInstance =>
typeof child === 'object' &&
'type' in child &&
'props' in child &&
child.type?.toString() === 'Screen',
)
.map((child) => child.props.name);
const tabScreenNames = getHomeTabsScreenNames();

expect(screenProps).not.toContain(Routes.MONEY.ROOT);
expect(tabScreenNames).not.toContain(Routes.MONEY.ROOT);
});
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,8 @@ const styleSheet = (params: { theme: Theme }) =>
flex: 1,
backgroundColor: params.theme.colors.background.default,
},
footerOverlay: {
position: 'absolute',
left: 0,
right: 0,
bottom: 0,
scrollContent: {
paddingBottom: 40,
},
});

Expand Down
Loading
Loading