Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
f83f341
Add template of NewDotHomePage
WojtekBoman Jan 15, 2026
02856ce
Adjust FAB styles
WojtekBoman Jan 19, 2026
f23e863
Add buttons navigating to search sections
WojtekBoman Jan 20, 2026
479e3d4
Rename current home route to inbox
WojtekBoman Jan 26, 2026
795c4f4
move home to protected routes
adamgrzybowski Jan 26, 2026
121d40f
add home in lights and darks
adamgrzybowski Jan 26, 2026
d651a3a
add preload for new home
adamgrzybowski Jan 26, 2026
20ed9e6
remove unnecessary newline
adamgrzybowski Jan 26, 2026
97dc421
Separate NavigationTabBar depends on newDotHome beta
WojtekBoman Jan 26, 2026
89a29ad
Add HOME to SCREENS_WITH_NAVIGATION_TAB_BAR
WojtekBoman Jan 26, 2026
d8d5a30
Display FAB above bottom tab on narrow layout
WojtekBoman Jan 27, 2026
1719370
Update home.svg
WojtekBoman Jan 27, 2026
3292556
Fix FAB styles
WojtekBoman Jan 27, 2026
cc15d6f
Compress home.svg
WojtekBoman Jan 27, 2026
b43438f
Add en and es translations for home page
WojtekBoman Jan 27, 2026
06907a8
Replace /home with /inbox in SidebarLinks
WojtekBoman Jan 27, 2026
f9a5c9c
Hide Home button when users dont have access to beta
WojtekBoman Jan 27, 2026
b1dd17c
Add translations
WojtekBoman Jan 27, 2026
f038b68
Remove test buttons from HomePage
WojtekBoman Jan 27, 2026
1f21531
Fix order of buttons in NavigationTabBar
WojtekBoman Jan 27, 2026
45760e7
Rename routes
WojtekBoman Jan 27, 2026
d97036a
Fix hover styles of home button
WojtekBoman Jan 27, 2026
480a0f6
Change the fallback page to Inbox on web SearchRouterPage
WojtekBoman Jan 27, 2026
9302996
Fix screens order in AuthScreens
WojtekBoman Jan 27, 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
2 changes: 1 addition & 1 deletion assets/images/home.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions contributingGuides/NAVIGATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ import Navigation from '@libs/Navigation/Navigation';
import ROUTES from '@src/ROUTES';

// Basic navigation to a route
Navigation.navigate(ROUTES.HOME);
Navigation.navigate(ROUTES.INBOX);

// Navigation with parameters
Navigation.navigate(
Expand Down Expand Up @@ -1344,7 +1344,7 @@ import {ROUTES} from '@src/ROUTES';
Navigation.goBack();

// Back navigation with fallback
Navigation.goBack(ROUTES.HOME);
Navigation.goBack(ROUTES.INBOX);

const reportID = 123;
// Back navigation to a route with specific params
Expand Down
1 change: 1 addition & 0 deletions src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7944,6 +7944,7 @@ const CONST = {
REPORTS: 'NavigationTabBar-Reports',
WORKSPACES: 'NavigationTabBar-Workspaces',
ACCOUNT: 'NavigationTabBar-Account',
HOME: 'NavigationTabBar-Home',
FLOATING_ACTION_BUTTON: 'NavigationTabBar-FloatingActionButton',
FLOATING_RECEIPT_BUTTON: 'NavigationTabBar-FloatingReceiptButton',
},
Expand Down
4 changes: 3 additions & 1 deletion src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@ const MULTIFACTOR_AUTHENTICATION_PROTECTED_ROUTES = {
const ROUTES = {
...PUBLIC_SCREENS_ROUTES,
// This route renders the list of reports.
HOME: 'home',
INBOX: 'home',
// @TODO: Rename it to 'home' and INBOX to 'inbox' when removing the newDotHome beta
HOME: 'home-page',

// eslint-disable-next-line no-restricted-syntax -- Legacy route generation
WORKSPACES_LIST: {route: 'workspaces', getRoute: (backTo?: string) => getUrlWithBackToParam('workspaces', backTo)},
Expand Down
1 change: 1 addition & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type DeepValueOf from './types/utils/DeepValueOf';

const PROTECTED_SCREENS = {
HOME: 'Home',
INBOX: 'Inbox',
CONCIERGE: 'Concierge',
REPORT_ATTACHMENTS: 'ReportAttachments',
REPORT_ADD_ATTACHMENT: 'ReportAddAttachment',
Expand Down
9 changes: 6 additions & 3 deletions src/components/FloatingActionButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import Animated, {Easing, interpolateColor, useAnimatedStyle, useSharedValue, withTiming} from 'react-native-reanimated';
import Svg, {Path} from 'react-native-svg';
import useLocalize from '@hooks/useLocalize';
import usePermissions from '@hooks/usePermissions';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
Expand All @@ -14,7 +15,7 @@
import CONST from '@src/CONST';
import type WithSentryLabel from '@src/types/utils/SentryLabel';
import Icon from './Icon';
import {PlusCircle} from './Icon/Expensicons';

Check warning on line 18 in src/components/FloatingActionButton.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

'./Icon/Expensicons' import is restricted from being used by a pattern. Direct imports from Icon/Expensicons are deprecated. Please use lazy loading hooks instead. Use `useMemoizedLazyExpensifyIcons` from @hooks/useLazyAsset. See docs/LAZY_ICONS_AND_ILLUSTRATIONS.md for details
import {PressableWithFeedback, PressableWithoutFeedback} from './Pressable';
import Text from './Text';
import Tooltip from './Tooltip';
Expand Down Expand Up @@ -53,6 +54,8 @@
const {shouldUseNarrowLayout} = useResponsiveLayout();
const isLHBVisible = !shouldUseNarrowLayout;
const {translate} = useLocalize();
const {isBetaEnabled} = usePermissions();
const isNewDotHomeEnabled = isBetaEnabled(CONST.BETAS.NEW_DOT_HOME);

const fabSize = isLHBVisible ? variables.iconSizeSmall : variables.iconSizeNormal;

Expand Down Expand Up @@ -94,7 +97,7 @@
onLongPress?.(event);
};

if (isLHBVisible) {
if (isLHBVisible || isNewDotHomeEnabled) {
return (
<Tooltip text={translate('common.create')}>
<PressableWithoutFeedback
Expand All @@ -106,7 +109,7 @@
}}
style={[
styles.navigationTabBarFABItem,

styles.ph0,
// Prevent text selection on touch devices (e.g. on long press)
canUseTouchScreen() && styles.userSelectNone,
styles.flex1,
Expand All @@ -124,7 +127,7 @@

return (
<Animated.View
style={[styles.floatingActionButton, {borderRadius}, styles.floatingActionButtonSmall, animatedStyle]}
style={[styles.floatingActionButton, {borderRadius}, isLHBVisible && styles.floatingActionButtonSmall, animatedStyle]}
testID="fab-animated-container"
>
<Svg
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import Icon from '@components/Icon';
import {PressableWithoutFeedback} from '@components/Pressable';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import usePermissions from '@hooks/usePermissions';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import {startMoneyRequest} from '@libs/actions/IOU';
Expand Down Expand Up @@ -39,6 +40,9 @@ function BaseFloatingCameraButton({icon}: BaseFloatingCameraButtonProps) {
const [allTransactionDrafts] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DRAFT, {canBeMissing: true});
const reportID = useMemo(() => generateReportID(), []);

const {isBetaEnabled} = usePermissions();
const isNewDotHomeEnabled = isBetaEnabled(CONST.BETAS.NEW_DOT_HOME);

const policyChatForActivePolicySelector = useCallback(
(reports: OnyxCollection<OnyxTypes.Report>) => {
if (isEmptyObject(activePolicy) || !activePolicy?.isPolicyExpenseChatEnabled) {
Expand Down Expand Up @@ -71,7 +75,7 @@ function BaseFloatingCameraButton({icon}: BaseFloatingCameraButtonProps) {
styles.ph0,
// Prevent text selection on touch devices (e.g. on long press)
canUseTouchScreen() && styles.userSelectNone,
styles.floatingCameraButton,
isNewDotHomeEnabled ? styles.floatingCameraButtonAboveFab : styles.floatingCameraButton,
]}
accessibilityLabel={translate('sidebarScreen.fabScanReceiptExplained')}
onPress={onPress}
Expand Down
6 changes: 5 additions & 1 deletion src/components/FloatingGPSButton/index.native.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {PressableWithoutFeedback} from '@components/Pressable';
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import usePermissions from '@hooks/usePermissions';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import Navigation from '@libs/Navigation/Navigation';
Expand All @@ -22,6 +23,9 @@ function FloatingGpsButton() {
const {textMutedReversed} = useTheme();
const styles = useThemeStyles();

const {isBetaEnabled} = usePermissions();
const isNewDotHomeEnabled = isBetaEnabled(CONST.BETAS.NEW_DOT_HOME);

if (!gpsDraftDetails?.isTracking) {
return null;
}
Expand All @@ -33,7 +37,7 @@ function FloatingGpsButton() {

return (
<PressableWithoutFeedback
style={[styles.navigationTabBarFABItem, styles.ph0, styles.userSelectNone, styles.floatingGpsButton]}
style={[styles.navigationTabBarFABItem, styles.ph0, styles.userSelectNone, isNewDotHomeEnabled ? styles.floatingGpsButtonAboveFab : styles.floatingGpsButton]}
accessibilityLabel={translate('gps.fabGpsTripExplained')}
onPress={navigateToGpsScreen}
role={CONST.ROLE.BUTTON}
Expand Down
2 changes: 1 addition & 1 deletion src/components/FocusTrap/WIDE_LAYOUT_INACTIVE_SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import SCREENS from '@src/SCREENS';
* focus trap when rendered on a wide screen to allow navigation between them using the keyboard
*/
const WIDE_LAYOUT_INACTIVE_SCREENS: string[] = [
SCREENS.HOME,
SCREENS.INBOX,
SCREENS.SETTINGS.ROOT,
SCREENS.REPORT,
SCREENS.SETTINGS.PROFILE.ROOT,
Expand Down
2 changes: 1 addition & 1 deletion src/components/ImportOnyxState/index.native.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export default function ImportOnyxState({setIsLoading}: ImportOnyxStateProps) {
})
.then(() => {
setIsUsingImportedState(true);
Navigation.navigate(ROUTES.HOME);
Navigation.navigate(ROUTES.INBOX);
})
.catch((error) => {
console.error('Error importing state:', error);
Expand Down
2 changes: 1 addition & 1 deletion src/components/ImportOnyxState/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export default function ImportOnyxState({setIsLoading}: ImportOnyxStateProps) {
})
.then(() => {
setIsUsingImportedState(true);
Navigation.navigate(ROUTES.HOME);
Navigation.navigate(ROUTES.INBOX);
})
.catch((error) => {
console.error('Error importing state:', error);
Expand Down
2 changes: 1 addition & 1 deletion src/components/KYCWall/BaseKYCWall.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ function KYCWall({
if (paymentMethod === CONST.PAYMENT_METHODS.PERSONAL_BANK_ACCOUNT) {
openPersonalBankAccountSetupView({shouldSetUpUSBankAccount: isIOUReport(iouReport)});
} else if (paymentMethod === CONST.PAYMENT_METHODS.DEBIT_CARD) {
Navigation.navigate(addDebitCardRoute ?? ROUTES.HOME);
Navigation.navigate(addDebitCardRoute ?? ROUTES.INBOX);
} else if (paymentMethod === CONST.PAYMENT_METHODS.BUSINESS_BANK_ACCOUNT || policy) {
if (iouReport && isIOUReport(iouReport)) {
const adminPolicy = policies?.[`${ONYXKEYS.COLLECTION.POLICY}${policy?.id}`];
Expand Down
8 changes: 4 additions & 4 deletions src/components/Navigation/DebugTabView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import type {ValueOf} from 'type-fest';
import Button from '@components/Button';
import Icon from '@components/Icon';
import * as Expensicons from '@components/Icon/Expensicons';

Check warning on line 8 in src/components/Navigation/DebugTabView.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

'@components/Icon/Expensicons' import is restricted from being used by a pattern. Direct imports from Icon/Expensicons are deprecated. Please use lazy loading hooks instead. Use `useMemoizedLazyExpensifyIcons` from @hooks/useLazyAsset. See docs/LAZY_ICONS_AND_ILLUSTRATIONS.md for details

Check warning on line 8 in src/components/Navigation/DebugTabView.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

'@components/Icon/Expensicons' import is restricted from being used. Direct imports from @components/Icon/Expensicons are deprecated. Please use lazy loading hooks instead. Use `useMemoizedLazyExpensifyIcons` from @hooks/useLazyAsset. See docs/LAZY_ICONS_AND_ILLUSTRATIONS.md for details
import Text from '@components/Text';
import useIndicatorStatus from '@hooks/useIndicatorStatus';
import useLocalize from '@hooks/useLocalize';
Expand Down Expand Up @@ -110,7 +110,7 @@
const {orderedReportIDs} = useSidebarOrderedReports();

const message = useMemo((): TranslationPaths | undefined => {
if (selectedTab === NAVIGATION_TABS.HOME) {
if (selectedTab === NAVIGATION_TABS.INBOX) {
if (chatTabBrickRoad === CONST.BRICK_ROAD_INDICATOR_STATUS.INFO) {
return 'debug.indicatorStatus.theresAReportAwaitingAction';
}
Expand All @@ -124,7 +124,7 @@
}, [selectedTab, chatTabBrickRoad, status]);

const indicator = useMemo(() => {
if (selectedTab === NAVIGATION_TABS.HOME) {
if (selectedTab === NAVIGATION_TABS.INBOX) {
if (chatTabBrickRoad === CONST.BRICK_ROAD_INDICATOR_STATUS.INFO) {
return theme.success;
}
Expand All @@ -140,7 +140,7 @@
}, [selectedTab, chatTabBrickRoad, theme.success, theme.danger, status, indicatorColor]);

const navigateTo = useCallback(() => {
if (selectedTab === NAVIGATION_TABS.HOME && !!chatTabBrickRoad) {
if (selectedTab === NAVIGATION_TABS.INBOX && !!chatTabBrickRoad) {
const reportID = getChatTabBrickRoadReportID(orderedReportIDs, reportAttributes);

if (reportID) {
Expand All @@ -156,7 +156,7 @@
}
}, [selectedTab, chatTabBrickRoad, orderedReportIDs, reportAttributes, status, reimbursementAccount, policyIDWithErrors]);

if (!([NAVIGATION_TABS.HOME, NAVIGATION_TABS.SETTINGS, NAVIGATION_TABS.WORKSPACES] as string[]).includes(selectedTab ?? '') || !indicator) {
if (!([NAVIGATION_TABS.INBOX, NAVIGATION_TABS.SETTINGS, NAVIGATION_TABS.WORKSPACES] as string[]).includes(selectedTab ?? '') || !indicator) {
return null;
}

Expand Down
Loading
Loading