Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
51648b0
adjust more button in money request header
adamgrzybowski Aug 4, 2025
8521797
hide receipt image on the right panel on wide rhp
adamgrzybowski Aug 4, 2025
bd2de6e
add report prop
adamgrzybowski Aug 4, 2025
3c5965a
add receipt view to report screen
adamgrzybowski Aug 4, 2025
fc36c60
make size of receipt images flexible
adamgrzybowski Aug 6, 2025
285d09f
fix size of loading receipt image
adamgrzybowski Aug 6, 2025
716c1d1
fix condition for showing wide RHP
adamgrzybowski Aug 8, 2025
dd86365
fix thumbnails sizing
adamgrzybowski Aug 14, 2025
712c687
fix empty div in MoneyRequestHeader
adamgrzybowski Aug 14, 2025
fc2daa8
fix spacing around empty receipt image
adamgrzybowski Aug 14, 2025
0acb7c2
fix spacing around empty receipt image v2
adamgrzybowski Aug 14, 2025
f93c7a4
make wide RHP responsive in range 800px to 840px
adamgrzybowski Aug 18, 2025
84629f8
add optimistic marking reportID as expense
adamgrzybowski Aug 18, 2025
25c1b48
add optimistic marking reportID as expense v2
adamgrzybowski Aug 19, 2025
a534abf
fix more button
adamgrzybowski Aug 20, 2025
c553792
extend condition for showing wide rhp
adamgrzybowski Aug 20, 2025
2d27e5b
fix wrong report for receipt view
adamgrzybowski Aug 20, 2025
959ecf4
fix more button v2
adamgrzybowski Aug 22, 2025
c6906ef
Fix dismissing modal when creating transaction from wide rhp
WojtekBoman Aug 25, 2025
461b9d0
fix loader
adamgrzybowski Aug 25, 2025
cf6194b
fix image with loading name
adamgrzybowski Aug 27, 2025
8a6da0e
implement borderless loader for receipt images
adamgrzybowski Aug 27, 2025
6d387df
Add onLoad prop to EReceipt
WojtekBoman Sep 1, 2025
eeea17c
fix cropped ereceipt wide rhp
adamgrzybowski Sep 4, 2025
a9f8508
remove unused style
adamgrzybowski Sep 5, 2025
a0a128f
improve comments v3
adamgrzybowski Sep 10, 2025
bde71b9
fix after merge conflicts
adamgrzybowski Sep 10, 2025
8f1bfe9
fix typescript
adamgrzybowski Sep 10, 2025
9d490d7
check if id is defined
adamgrzybowski Sep 11, 2025
bd59e0a
fix route type for ReportScreen
adamgrzybowski Sep 11, 2025
05bebe9
improve readability
adamgrzybowski Sep 11, 2025
ac6250c
apply change requests
adamgrzybowski Sep 11, 2025
d81aa3e
Merge branch 'main' into @adamgrzybowski/better-rhp-view-v4-use-wide-…
adamgrzybowski Sep 12, 2025
372296a
improve onLoad
adamgrzybowski Sep 12, 2025
662f8f6
improve handling many RHPs
adamgrzybowski Sep 17, 2025
0c763b1
Merge branch 'main' into @adamgrzybowski/better-rhp-view-v4-use-wide-…
adamgrzybowski Sep 17, 2025
8e0f1ae
fix marking task as expense
adamgrzybowski Sep 17, 2025
5b2fd65
stick audit message to receipt image
adamgrzybowski Sep 17, 2025
04e86e7
Fix navigation theme on narrow layout
WojtekBoman Sep 18, 2025
c0ce5da
Fix navigation theme on narrow layout
WojtekBoman Sep 18, 2025
f973af5
Add shouldCalculateAspectRatioForWideImage prop to Image component
WojtekBoman Sep 17, 2025
e6c3146
Add shouldCalculateAspectRatioForWideImage prop to Image component
WojtekBoman Sep 18, 2025
d5a7d83
Merge branch 'main' into @adamgrzybowski/better-rhp-view-v4-use-wide-…
adamgrzybowski Sep 18, 2025
d707096
fix wrong spacing receipt audit message
adamgrzybowski Sep 18, 2025
9121098
Fix reading receipt pane rhp width in overlayStyles
WojtekBoman Sep 19, 2025
f179e9d
fix empty scrollbar issue
jmusial Sep 19, 2025
181cfbb
fix help pane with wide rhp
adamgrzybowski Sep 19, 2025
218733e
fix prettier
adamgrzybowski Sep 19, 2025
aa1aaef
Merge branch 'main' into @adamgrzybowski/better-rhp-view-v4-use-wide-…
adamgrzybowski Sep 22, 2025
bdd55b9
fix condition for report screen wide screen
adamgrzybowski Sep 22, 2025
a3e5042
Merge branch 'main' into @adamgrzybowski/better-rhp-view-v4-use-wide-…
adamgrzybowski Sep 23, 2025
f3c9fb9
fix last visible rhp route condition
adamgrzybowski Sep 23, 2025
ca45210
Calculate receipt image size without using aspectRatio
WojtekBoman Sep 25, 2025
0ea7528
Fix showing loading indicator
WojtekBoman Sep 26, 2025
eae295c
Merge remote-tracking branch 'origin' into @adamgrzybowski/better-rhp…
WojtekBoman Sep 26, 2025
e1a3a95
Fix imports in ImageWithLoading
WojtekBoman Sep 26, 2025
1503e99
Prevent showing empty receipt before loading
WojtekBoman Sep 26, 2025
ea61251
Merge remote-tracking branch 'origin' into @adamgrzybowski/better-rhp…
WojtekBoman Sep 29, 2025
4631140
Remove styles.fullHeight
WojtekBoman Sep 30, 2025
7c1f3e0
Add comment explaining dismissing wide RHP and navigating to ROUTES.S…
WojtekBoman Sep 30, 2025
ec47491
Merge remote-tracking branch 'origin' into @adamgrzybowski/better-rhp…
WojtekBoman Sep 30, 2025
80b222c
Merge remote-tracking branch 'origin' into @adamgrzybowski/better-rhp…
WojtekBoman Oct 1, 2025
1a78690
Don't display wide rhp for invoices
WojtekBoman Oct 1, 2025
aa4cf2a
Fix displaying empty receipt state after deleting receipt
WojtekBoman Oct 1, 2025
263c289
Set marginBottom:20 for receipt empty state
WojtekBoman Oct 1, 2025
1d82b73
Fix empty receipt state size when error is displayed
WojtekBoman Oct 2, 2025
dfa8435
Hide audit message when loading bar is displayed
WojtekBoman Oct 3, 2025
9e0651e
Merge remote-tracking branch 'origin' into @adamgrzybowski/better-rhp…
WojtekBoman Oct 6, 2025
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
17 changes: 15 additions & 2 deletions src/components/EReceipt.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, {useEffect, useRef} from 'react';
import {View} from 'react-native';
import useEReceipt from '@hooks/useEReceipt';
import useLocalize from '@hooks/useLocalize';
Expand Down Expand Up @@ -29,11 +29,14 @@ type EReceiptProps = {

/** Where it is the preview */
isThumbnail?: boolean;

/** Callback to be called when the image loads */
onLoad?: () => void;
};

const receiptMCCSize: number = variables.eReceiptMCCHeightWidthMedium;
const backgroundImageMinWidth: number = variables.eReceiptBackgroundImageMinWidth;
function EReceipt({transactionID, transactionItem, isThumbnail = false}: EReceiptProps) {
function EReceipt({transactionID, transactionItem, onLoad, isThumbnail = false}: EReceiptProps) {
const styles = useThemeStyles();
const StyleUtils = useStyleUtils();
const {translate} = useLocalize();
Expand All @@ -43,6 +46,8 @@ function EReceipt({transactionID, transactionItem, isThumbnail = false}: EReceip

const {primaryColor, secondaryColor, titleColor, MCCIcon, tripIcon, backgroundImage} = useEReceipt(transactionItem ?? transaction);

const isLoadedRef = useRef(false);

const {
amount: transactionAmount,
currency: transactionCurrency,
Expand All @@ -59,6 +64,14 @@ function EReceipt({transactionID, transactionItem, isThumbnail = false}: EReceip
const primaryTextColorStyle = primaryColor ? StyleUtils.getColorStyle(primaryColor) : undefined;
const titleTextColorStyle = titleColor ? StyleUtils.getColorStyle(titleColor) : undefined;

useEffect(() => {
if (isLoadedRef.current) {
return;
}
isLoadedRef.current = true;
onLoad?.();
}, [onLoad]);

return (
<View
style={[
Expand Down
3 changes: 3 additions & 0 deletions src/components/EReceiptWithSizeCalculation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ type EReceiptWithSizeCalculationProps = {

/** Whether the eReceipt should preserve aspect ratio */
shouldUseAspectRatio?: boolean;

/** Callback to be called when the image loads */
onLoad?: () => void;
};

const eReceiptAspectRatio = variables.eReceiptBGHWidth / variables.eReceiptBGHeight;
Expand Down
29 changes: 25 additions & 4 deletions src/components/Image/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ import type {ImageOnLoadEvent, ImageProps} from './types';

function Image({
source: propsSource,
shouldCalculateAspectRatioForWideImage = false,
isAuthTokenRequired = false,
onLoad,
objectPosition = CONST.IMAGE_OBJECT_POSITION.INITIAL,
style,
loadingIconSize,
loadingIndicatorStyles,
imageWidthToCalculateHeight,
...forwardedProps
}: ImageProps) {
const [aspectRatio, setAspectRatio] = useState<string | number | null>(null);
Expand All @@ -24,20 +26,35 @@ function Image({

const {shouldSetAspectRatioInStyle} = useContext(ImageBehaviorContext);

const aspectRatioStyle = useMemo(() => {
if (!shouldSetAspectRatioInStyle || !aspectRatio) {
return {};
}

if (!!imageWidthToCalculateHeight && typeof aspectRatio === 'number') {
return {
width: '100%',
height: imageWidthToCalculateHeight / aspectRatio,
};
}

return {aspectRatio, height: 'auto'};
}, [shouldSetAspectRatioInStyle, aspectRatio, imageWidthToCalculateHeight]);

const updateAspectRatio = useCallback(
(width: number, height: number) => {
if (!isObjectPositionTop) {
return;
}

if (width > height) {
if (width > height && !shouldCalculateAspectRatioForWideImage) {
setAspectRatio(1);
return;
}

setAspectRatio(height ? width / height : 'auto');
},
[isObjectPositionTop],
[isObjectPositionTop, shouldCalculateAspectRatioForWideImage],
);

const handleLoad = useCallback(
Expand Down Expand Up @@ -146,17 +163,21 @@ function Image({
/>
);
}

return (
<BaseImage
// eslint-disable-next-line react/jsx-props-no-spreading
{...forwardedProps}
onLoad={handleLoad}
style={[style, shouldSetAspectRatioInStyle && aspectRatio ? {aspectRatio, height: 'auto'} : {}, shouldOpacityBeZero && {opacity: 0}]}
style={[style, aspectRatioStyle, shouldOpacityBeZero && {opacity: 0}]}
source={source}
/>
);
}

Image.displayName = 'Image';

export default React.memo(Image, (prevProps: ImageProps, nextProps: ImageProps) => prevProps.source === nextProps.source);
export default React.memo(
Image,
(prevProps: ImageProps, nextProps: ImageProps) => prevProps.source === nextProps.source && prevProps.imageWidthToCalculateHeight === nextProps.imageWidthToCalculateHeight,
);
6 changes: 6 additions & 0 deletions src/components/Image/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ type BaseImageProps = {
};

type ImageOwnProps = BaseImageProps & {
/** By default, when the image width is greater than its height, its aspectRatio is set to 1. If you want the aspectRatio to be calculated instead of set to 1 in these cases, set the value of this prop to true */
shouldCalculateAspectRatioForWideImage?: boolean;

/** Should an auth token be included in the image request */
isAuthTokenRequired?: boolean;

Expand Down Expand Up @@ -63,6 +66,9 @@ type ImageOwnProps = BaseImageProps & {
* cf https://github.com/Expensify/App/issues/51888
*/
waitForSession?: () => void;

/** If you want to calculate the image height dynamically instead of using aspectRatio, pass the width in this property */
imageWidthToCalculateHeight?: number;
};

type ImageProps = ImageOwnProps;
Expand Down
17 changes: 12 additions & 5 deletions src/components/ImageWithLoading.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import delay from 'lodash/delay';
import React, {useEffect, useRef, useState} from 'react';
import type {StyleProp, ViewStyle} from 'react-native';
import type {LayoutChangeEvent, StyleProp, ViewStyle} from 'react-native';
import {View} from 'react-native';
import useNetwork from '@hooks/useNetwork';
import useThemeStyles from '@hooks/useThemeStyles';
Expand All @@ -21,9 +21,12 @@ type ImageWithSizeLoadingProps = {

/** Whether to show offline indicator */
shouldShowOfflineIndicator?: boolean;

/** Invoked on mount and layout changes */
onLayout?: (event: LayoutChangeEvent) => void;
} & ImageProps;

function ImageWithSizeCalculation({
function ImageWithLoading({
onError,
containerStyles,
shouldShowOfflineIndicator = true,
Expand All @@ -32,6 +35,7 @@ function ImageWithSizeCalculation({
loadingIndicatorStyles,
resizeMode,
onLoad,
onLayout,
...rest
}: ImageWithSizeLoadingProps) {
const styles = useThemeStyles();
Expand Down Expand Up @@ -74,7 +78,10 @@ function ImageWithSizeCalculation({
}, [isLoading]);

return (
<View style={[styles.w100, styles.h100, containerStyles]}>
<View
style={[styles.w100, styles.h100, containerStyles]}
onLayout={onLayout}
>
<Image
// eslint-disable-next-line react/jsx-props-no-spreading
{...rest}
Expand Down Expand Up @@ -111,5 +118,5 @@ function ImageWithSizeCalculation({
);
}

ImageWithSizeCalculation.displayName = 'ImageWithSizeCalculation';
export default React.memo(ImageWithSizeCalculation);
ImageWithLoading.displayName = 'ImageWithLoading';
export default React.memo(ImageWithLoading);
5 changes: 5 additions & 0 deletions src/components/ImageWithSizeCalculation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ type ImageWithSizeCalculationProps = {

/** The style of the loading indicator */
loadingIndicatorStyles?: StyleProp<ViewStyle>;

/** Callback to be called when the image loads */
onLoad?: (event: {nativeEvent: {width: number; height: number}}) => void;
};

/**
Expand All @@ -61,6 +64,7 @@ function ImageWithSizeCalculation({
objectPosition = CONST.IMAGE_OBJECT_POSITION.INITIAL,
loadingIconSize,
loadingIndicatorStyles,
onLoad,
}: ImageWithSizeCalculationProps) {
const styles = useThemeStyles();

Expand All @@ -85,6 +89,7 @@ function ImageWithSizeCalculation({
width: event.nativeEvent.width,
height: event.nativeEvent.height,
});
onLoad?.(event);
}}
objectPosition={objectPosition}
loadingIconSize={loadingIconSize}
Expand Down
9 changes: 6 additions & 3 deletions src/components/MoneyReportHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ import ProcessMoneyReportHoldMenu from './ProcessMoneyReportHoldMenu';
import {useSearchContext} from './Search/SearchContext';
import AnimatedSettlementButton from './SettlementButton/AnimatedSettlementButton';
import Text from './Text';
import {WideRHPContext} from './WideRHPContextProvider';

type MoneyReportHeaderProps = {
/** The report currently being looked at */
Expand Down Expand Up @@ -303,6 +304,9 @@ function MoneyReportHeader({

const {selectedTransactionIDs, removeTransaction, clearSelectedTransactions, currentSearchQueryJSON, currentSearchKey} = useSearchContext();

const {wideRHPRouteKeys} = useContext(WideRHPContext);
const shouldDisplayNarrowMoreButton = !shouldDisplayNarrowVersion || (wideRHPRouteKeys.length > 0 && !isSmallScreenWidth);

const beginExportWithTemplate = useCallback(
(templateName: string, templateType: string, transactionIDList: string[], policyID?: string) => {
if (!moneyRequestReport) {
Expand Down Expand Up @@ -1200,7 +1204,7 @@ function MoneyReportHeader({
shouldShowBorderBottom={false}
shouldEnableDetailPageNavigation
>
{!shouldDisplayNarrowVersion && (
{shouldDisplayNarrowMoreButton && (
<View style={[styles.flexRow, styles.gap2]}>
{!!primaryAction && !shouldShowSelectedTransactionsButton && primaryActionsImplementation[primaryAction]}
{!!applicableSecondaryActions.length && !shouldShowSelectedTransactionsButton && KYCMoreDropdown}
Expand All @@ -1218,8 +1222,7 @@ function MoneyReportHeader({
</View>
)}
</HeaderWithBackButton>

{shouldDisplayNarrowVersion &&
{!shouldDisplayNarrowMoreButton &&
(shouldShowSelectedTransactionsButton ? (
<View style={[styles.dFlex, styles.w100, styles.ph5]}>
<ButtonWithDropdownMenu
Expand Down
10 changes: 7 additions & 3 deletions src/components/MoneyRequestHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ import type {MoneyRequestHeaderStatusBarProps} from './MoneyRequestHeaderStatusB
import MoneyRequestHeaderStatusBar from './MoneyRequestHeaderStatusBar';
import MoneyRequestReportTransactionsNavigation from './MoneyRequestReportView/MoneyRequestReportTransactionsNavigation';
import {useSearchContext} from './Search/SearchContext';
import {WideRHPContext} from './WideRHPContextProvider';

type MoneyRequestHeaderProps = {
/** The report currently being looked at */
Expand Down Expand Up @@ -121,6 +122,8 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
// If the parent report is a selfDM, it should always be opened in the Inbox tab
const shouldOpenParentReportInCurrentTab = !isSelfDM(parentReport);

const {wideRHPRouteKeys} = useContext(WideRHPContext);

const markAsCash = useCallback(() => {
markAsCashAction(transaction?.transactionID, reportID);
}, [reportID, transaction?.transactionID]);
Expand Down Expand Up @@ -349,6 +352,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
};

const applicableSecondaryActions = secondaryActions.map((action) => secondaryActionsImplementation[action]);
const shouldDisplayNarrowMoreButton = !shouldUseNarrowLayout || (wideRHPRouteKeys.length > 0 && !isSmallScreenWidth);

return (
<View style={[styles.pl0, styles.borderBottom]}>
Expand All @@ -372,8 +376,8 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
shouldEnableDetailPageNavigation
openParentReportInCurrentTab={shouldOpenParentReportInCurrentTab}
>
{!shouldUseNarrowLayout && (
<View style={[styles.flexRow, styles.gap2]}>
{shouldDisplayNarrowMoreButton && (
<View style={[styles.flexRow, styles.gap2, shouldDisplayTransactionNavigation && styles.mr3]}>
{!!primaryAction && primaryActionImplementation[primaryAction]}
{!!applicableSecondaryActions.length && (
<ButtonWithDropdownMenu
Expand All @@ -389,7 +393,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
)}
{shouldDisplayTransactionNavigation && <MoneyRequestReportTransactionsNavigation currentReportID={reportID} />}
</HeaderWithBackButton>
{shouldUseNarrowLayout && (
{!shouldDisplayNarrowMoreButton && (
<View style={[styles.flexRow, styles.gap2, styles.pb3, styles.ph5, styles.w100, styles.alignItemsCenter, styles.justifyContentCenter]}>
{!!primaryAction && <View style={[styles.flexGrow4]}>{primaryActionImplementation[primaryAction]}</View>}
{!!applicableSecondaryActions.length && (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {useFocusEffect} from '@react-navigation/native';
import isEmpty from 'lodash/isEmpty';
import React, {memo, useCallback, useMemo, useState} from 'react';
import React, {memo, useCallback, useContext, useMemo, useState} from 'react';
import {View} from 'react-native';
import type {TupleToUnion} from 'type-fest';
import Checkbox from '@components/Checkbox';
Expand All @@ -11,6 +11,7 @@ import {usePersonalDetails, useSession} from '@components/OnyxListItemProvider';
import {useSearchContext} from '@components/Search/SearchContext';
import type {SearchColumnType, SortOrder} from '@components/Search/types';
import Text from '@components/Text';
import {WideRHPContext} from '@components/WideRHPContextProvider';
import useCopySelectionHelper from '@hooks/useCopySelectionHelper';
import useLocalize from '@hooks/useLocalize';
import useMobileSelectionMode from '@hooks/useMobileSelectionMode';
Expand Down Expand Up @@ -139,6 +140,7 @@ function MoneyRequestReportTransactionList({
const {translate, localeCompare} = useLocalize();
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
const {shouldUseNarrowLayout, isSmallScreenWidth, isMediumScreenWidth} = useResponsiveLayout();
const {markReportIDAsExpense} = useContext(WideRHPContext);
const [isModalVisible, setIsModalVisible] = useState(false);
const [selectedTransactionID, setSelectedTransactionID] = useState<string>('');

Expand Down Expand Up @@ -229,10 +231,13 @@ function MoneyRequestReportTransactionList({
// to display prev/next arrows in RHP for navigation
const sortedSiblingTransactionReportIDs = getThreadReportIDsForTransactions(reportActions, sortedTransactions);
setActiveTransactionThreadIDs(sortedSiblingTransactionReportIDs).then(() => {
if (reportIDToNavigate) {
markReportIDAsExpense(reportIDToNavigate);
}
Comment thread
adamgrzybowski marked this conversation as resolved.
Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute(routeParams));
});
},
[report, reportActions, sortedTransactions],
[report, reportActions, sortedTransactions, markReportIDAsExpense],
);

const {amountColumnSize, dateColumnSize, taxAmountColumnSize} = useMemo(() => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {findFocusedRoute} from '@react-navigation/native';
import React, {useEffect, useMemo} from 'react';
import React, {useContext, useEffect, useMemo} from 'react';
import PrevNextButtons from '@components/PrevNextButtons';
import {WideRHPContext} from '@components/WideRHPContextProvider';
import useOnyx from '@hooks/useOnyx';
import {clearActiveTransactionThreadIDs} from '@libs/actions/TransactionThreadNavigation';
import Navigation from '@navigation/Navigation';
Expand All @@ -19,6 +20,8 @@ function MoneyRequestReportTransactionsNavigation({currentReportID}: MoneyReques
canBeMissing: true,
});

const {markReportIDAsExpense} = useContext(WideRHPContext);

const {prevReportID, nextReportID} = useMemo(() => {
if (!reportIDsList || reportIDsList.length < 2) {
return {prevReportID: undefined, nextReportID: undefined};
Expand Down Expand Up @@ -57,11 +60,17 @@ function MoneyRequestReportTransactionsNavigation({currentReportID}: MoneyReques
onNext={(e) => {
const backTo = Navigation.getActiveRoute();
e?.preventDefault();
if (nextReportID) {
markReportIDAsExpense(nextReportID);
}
Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID: nextReportID, backTo}), {forceReplace: true});
}}
onPrevious={(e) => {
const backTo = Navigation.getActiveRoute();
e?.preventDefault();
if (prevReportID) {
markReportIDAsExpense(prevReportID);
}
Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID: prevReportID, backTo}), {forceReplace: true});
}}
/>
Expand Down
Loading
Loading