Skip to content

Commit 9168f58

Browse files
authored
Merge pull request #59386 from software-mansion-labs/@szymczak/create-report-flow-follow-up
Create report flow follow ups
2 parents a8ea179 + 2ab2cb1 commit 9168f58

19 files changed

+860
-686
lines changed

src/components/MoneyRequestReportView/MoneyRequestReportView.tsx

Lines changed: 84 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
1-
import React from 'react';
2-
import {View} from 'react-native';
1+
import React, {useCallback} from 'react';
2+
import {InteractionManager, View} from 'react-native';
33
import type {OnyxEntry} from 'react-native-onyx';
44
import {useOnyx} from 'react-native-onyx';
55
import HeaderGap from '@components/HeaderGap';
66
import MoneyReportHeader from '@components/MoneyReportHeader';
7+
import OfflineWithFeedback from '@components/OfflineWithFeedback';
78
import ReportActionsSkeletonView from '@components/ReportActionsSkeletonView';
89
import ReportHeaderSkeletonView from '@components/ReportHeaderSkeletonView';
10+
import useActiveWorkspace from '@hooks/useActiveWorkspace';
911
import useNetwork from '@hooks/useNetwork';
1012
import usePaginatedReportActions from '@hooks/usePaginatedReportActions';
1113
import useThemeStyles from '@hooks/useThemeStyles';
14+
import {removeFailedReport} from '@libs/actions/Report';
1215
import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID';
16+
import Log from '@libs/Log';
17+
import navigationRef from '@libs/Navigation/navigationRef';
1318
import {isMoneyRequestAction} from '@libs/ReportActionsUtils';
1419
import {canEditReportAction, getReportOfflinePendingActionAndErrors} from '@libs/ReportUtils';
20+
import {buildCannedSearchQuery} from '@libs/SearchQueryUtils';
1521
import Navigation from '@navigation/Navigation';
1622
import ReportFooter from '@pages/home/report/ReportFooter';
23+
import NAVIGATORS from '@src/NAVIGATORS';
1724
import ONYXKEYS from '@src/ONYXKEYS';
1825
import type {Route} from '@src/ROUTES';
26+
import ROUTES from '@src/ROUTES';
1927
import type {ThemeStyles} from '@src/styles';
2028
import type * as OnyxTypes from '@src/types/onyx';
2129
import MoneyRequestReportActionsList from './MoneyRequestReportActionsList';
@@ -37,6 +45,24 @@ type MoneyRequestReportViewProps = {
3745
backToRoute: Route | undefined;
3846
};
3947

48+
function goBackFromSearchMoneyRequest(policyID: string | undefined) {
49+
const rootState = navigationRef.getRootState();
50+
const lastRoute = rootState.routes.at(-1);
51+
52+
if (lastRoute?.name !== NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR) {
53+
Log.hmmm('[goBackFromSearchMoneyRequest()] goBackFromSearchMoneyRequest was called from a different navigator than SearchFullscreenNavigator.');
54+
return;
55+
}
56+
57+
if (rootState.routes.length > 1) {
58+
Navigation.goBack();
59+
return;
60+
}
61+
62+
const query = buildCannedSearchQuery({policyID});
63+
Navigation.goBack(ROUTES.SEARCH_ROOT.getRoute({query}));
64+
}
65+
4066
function InitialLoadingSkeleton({styles}: {styles: ThemeStyles}) {
4167
return (
4268
<View style={[styles.flex1]}>
@@ -58,11 +84,12 @@ function getParentReportAction(parentReportActions: OnyxEntry<OnyxTypes.ReportAc
5884
function MoneyRequestReportView({report, policy, reportMetadata, shouldDisplayReportFooter, backToRoute}: MoneyRequestReportViewProps) {
5985
const styles = useThemeStyles();
6086
const {isOffline} = useNetwork();
87+
const {activeWorkspaceID} = useActiveWorkspace();
6188

6289
const reportID = report?.reportID;
6390
const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP);
6491
const [isComposerFullSize] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_IS_COMPOSER_FULL_SIZE}${reportID}`, {initialValue: false});
65-
const {reportPendingAction} = getReportOfflinePendingActionAndErrors(report);
92+
const {reportPendingAction, reportErrors} = getReportOfflinePendingActionAndErrors(report);
6693

6794
const {reportActions, hasNewerActions, hasOlderActions} = usePaginatedReportActions(reportID);
6895

@@ -74,6 +101,11 @@ function MoneyRequestReportView({report, policy, reportMetadata, shouldDisplayRe
74101
const lastReportAction = [...reportActions, parentReportAction].find((action) => canEditReportAction(action) && !isMoneyRequestAction(action));
75102
const isLoadingInitialReportActions = reportMetadata?.isLoadingInitialReportActions;
76103

104+
const dismissReportCreationError = useCallback(() => {
105+
goBackFromSearchMoneyRequest(activeWorkspaceID);
106+
InteractionManager.runAfterInteractions(() => removeFailedReport(reportID));
107+
}, [activeWorkspaceID, reportID]);
108+
77109
if (isLoadingInitialReportActions && reportActions.length === 0 && !isOffline) {
78110
return <InitialLoadingSkeleton styles={styles} />;
79111
}
@@ -88,41 +120,55 @@ function MoneyRequestReportView({report, policy, reportMetadata, shouldDisplayRe
88120

89121
return (
90122
<View style={styles.flex1}>
91-
<HeaderGap />
92-
{!isLoadingApp ? (
93-
<MoneyReportHeader
94-
report={report}
95-
policy={policy}
96-
reportActions={[]}
97-
transactionThreadReportID={undefined}
98-
shouldDisplayBackButton
99-
onBackButtonPress={() => {
100-
Navigation.goBack(backToRoute);
101-
}}
102-
/>
103-
) : (
104-
<ReportHeaderSkeletonView />
105-
)}
106-
{!isLoadingApp ? (
107-
<MoneyRequestReportActionsList
108-
report={report}
109-
reportActions={reportActions}
110-
hasOlderActions={hasOlderActions}
111-
hasNewerActions={hasNewerActions}
112-
/>
113-
) : (
114-
<ReportActionsSkeletonView />
115-
)}
116-
{shouldDisplayReportFooter ? (
117-
<ReportFooter
118-
report={report}
119-
reportMetadata={reportMetadata}
120-
policy={policy}
121-
pendingAction={reportPendingAction}
122-
isComposerFullSize={!!isComposerFullSize}
123-
lastReportAction={lastReportAction}
124-
/>
125-
) : null}
123+
<OfflineWithFeedback
124+
pendingAction={reportPendingAction}
125+
errors={reportErrors}
126+
onClose={dismissReportCreationError}
127+
needsOffscreenAlphaCompositing
128+
style={styles.flex1}
129+
contentContainerStyle={styles.flex1}
130+
errorRowStyles={[styles.ph5, styles.mv2]}
131+
>
132+
<HeaderGap />
133+
{!isLoadingApp ? (
134+
<MoneyReportHeader
135+
report={report}
136+
policy={policy}
137+
reportActions={[]}
138+
transactionThreadReportID={undefined}
139+
shouldDisplayBackButton
140+
onBackButtonPress={() => {
141+
if (!backToRoute) {
142+
goBackFromSearchMoneyRequest(activeWorkspaceID);
143+
return;
144+
}
145+
Navigation.goBack(backToRoute);
146+
}}
147+
/>
148+
) : (
149+
<ReportHeaderSkeletonView />
150+
)}
151+
{!isLoadingApp ? (
152+
<MoneyRequestReportActionsList
153+
report={report}
154+
reportActions={reportActions}
155+
hasOlderActions={hasOlderActions}
156+
hasNewerActions={hasNewerActions}
157+
/>
158+
) : (
159+
<ReportActionsSkeletonView />
160+
)}
161+
{shouldDisplayReportFooter ? (
162+
<ReportFooter
163+
report={report}
164+
reportMetadata={reportMetadata}
165+
policy={policy}
166+
pendingAction={reportPendingAction}
167+
isComposerFullSize={!!isComposerFullSize}
168+
lastReportAction={lastReportAction}
169+
/>
170+
) : null}
171+
</OfflineWithFeedback>
126172
</View>
127173
);
128174
}

src/components/ReportActionItem/MoneyRequestView.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333
canEditFieldOfMoneyRequest,
3434
canEditMoneyRequest,
3535
canUserPerformWriteAction as canUserPerformWriteActionReportUtils,
36-
getAddWorkspaceRoomOrChatReportErrors,
36+
getCreationReportErrors,
3737
getTransactionDetails,
3838
getTripIDFromTransactionParentReportID,
3939
isInvoiceReport,
@@ -489,7 +489,7 @@ function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = fals
489489
return;
490490
}
491491
if (transaction?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) {
492-
if (chatReport?.reportID && getAddWorkspaceRoomOrChatReportErrors(chatReport)) {
492+
if (chatReport?.reportID && getCreationReportErrors(chatReport)) {
493493
navigateToConciergeChatAndDeleteReport(chatReport.reportID, true, true);
494494
return;
495495
}

src/libs/DebugUtils.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,7 @@ function validateReportDraftProperty(key: keyof Report | keyof ReportNameValuePa
627627
preview: CONST.RED_BRICK_ROAD_PENDING_ACTION,
628628
welcomeMessage: CONST.RED_BRICK_ROAD_PENDING_ACTION,
629629
errors: CONST.RED_BRICK_ROAD_PENDING_ACTION,
630+
createReport: CONST.RED_BRICK_ROAD_PENDING_ACTION,
630631
});
631632
}
632633
}

src/libs/OptionsListUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import type DeepValueOf from '@src/types/utils/DeepValueOf';
3232
import {isEmptyObject} from '@src/types/utils/EmptyObject';
3333
import Timing from './actions/Timing';
3434
import filterArrayByMatch from './filterArrayByMatch';
35+
import {isReportMessageAttachment} from './isReportMessageAttachment';
3536
import {formatPhoneNumber} from './LocalePhoneNumber';
3637
import {translate, translateLocal} from './Localize';
3738
import {appendCountryCode, getPhoneNumberWithoutSpecialChars} from './LoginUtils';
@@ -114,7 +115,6 @@ import {
114115
isIOUOwnedByCurrentUser,
115116
isMoneyRequest,
116117
isPolicyAdmin,
117-
isReportMessageAttachment,
118118
isUnread,
119119
isAdminRoom as reportUtilsIsAdminRoom,
120120
isAnnounceRoom as reportUtilsIsAnnounceRoom,

src/libs/ReportActionsUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {convertToDisplayString} from './CurrencyUtils';
2222
import DateUtils from './DateUtils';
2323
import {getEnvironmentURL} from './Environment/Environment';
2424
import getBase62ReportID from './getBase62ReportID';
25-
import isReportMessageAttachment from './isReportMessageAttachment';
25+
import {isReportMessageAttachment} from './isReportMessageAttachment';
2626
import {toLocaleOrdinal} from './LocaleDigitUtils';
2727
import {formatPhoneNumber} from './LocalePhoneNumber';
2828
import {formatMessageElementList, translateLocal} from './Localize';

0 commit comments

Comments
 (0)