Skip to content

Commit 44d8ae5

Browse files
Merge pull request Expensify#65527 from allroundexperts/feat-64367
[NO QA] [Distance Tracking] - Add routes for the distance request
2 parents db60c0d + 1660173 commit 44d8ae5

16 files changed

Lines changed: 750 additions & 8 deletions

src/CONST/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2667,6 +2667,8 @@ const CONST = {
26672667
MANUAL: 'manual',
26682668
SCAN: 'scan',
26692669
PER_DIEM: 'per-diem',
2670+
DISTANCE_MAP: 'distance-map',
2671+
DISTANCE_MANUAL: 'distance-manual',
26702672
},
26712673
EXPENSE_TYPE: {
26722674
DISTANCE: 'distance',
@@ -2675,6 +2677,8 @@ const CONST = {
26752677
PER_DIEM: 'per-diem',
26762678
EXPENSIFY_CARD: 'expensifyCard',
26772679
PENDING_EXPENSIFY_CARD: 'pendingExpensifyCard',
2680+
DISTANCE_MAP: 'distance-map',
2681+
DISTANCE_MANUAL: 'distance-manual',
26782682
},
26792683
REPORT_ACTION_TYPE: {
26802684
PAY: 'pay',
@@ -5089,6 +5093,8 @@ const CONST = {
50895093
SCAN: 'scan',
50905094
DISTANCE: 'distance',
50915095
PER_DIEM: 'per-diem',
5096+
DISTANCE_MAP: 'distance-map',
5097+
DISTANCE_MANUAL: 'distance-manual',
50925098
},
50935099

50945100
STATUS_TEXT_MAX_LENGTH: 100,

src/ROUTES.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -926,6 +926,21 @@ const ROUTES = {
926926
label ? `${backTo || state ? '&' : '?'}label=${encodeURIComponent(label)}` : ''
927927
}` as const,
928928
},
929+
DISTANCE_REQUEST_CREATE: {
930+
route: ':action/:iouType/start/:transactionID/:reportID/distance-new/:backToReport?',
931+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backToReport?: string) =>
932+
`${action as string}/${iouType as string}/start/${transactionID}/${reportID}/distance-new/${backToReport ?? ''}` as const,
933+
},
934+
DISTANCE_REQUEST_CREATE_TAB_MAP: {
935+
route: 'map/:backToReport?',
936+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backToReport?: string) =>
937+
`${action as string}/${iouType as string}/start/${transactionID}/${reportID}/distance-new/map/${backToReport ?? ''}` as const,
938+
},
939+
DISTANCE_REQUEST_CREATE_TAB_MANUAL: {
940+
route: 'manual/:backToReport?',
941+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backToReport?: string) =>
942+
`${action as string}/${iouType as string}/start/${transactionID}/${reportID}/distance-new/manual/${backToReport ?? ''}` as const,
943+
},
929944
IOU_SEND_ADD_BANK_ACCOUNT: 'pay/new/add-bank-account',
930945
IOU_SEND_ADD_DEBIT_CARD: 'pay/new/add-debit-card',
931946
IOU_SEND_ENABLE_PAYMENTS: 'pay/new/enable-payments',

src/SCREENS.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,9 @@ const SCREENS = {
275275
EDIT_REPORT: 'Money_Request_Edit_Report',
276276
SPLIT_EXPENSE: 'Money_Request_Split_Expense',
277277
SPLIT_EXPENSE_EDIT: 'Money_Request_Split_Expense_Edit',
278+
DISTANCE_CREATE: 'Money_Request_Distance_Create',
279+
STEP_DISTANCE_MAP: 'Money_Request_Step_Distance_Map',
280+
STEP_DISTANCE_MANUAL: 'Money_Request_Step_Distance_Manual',
278281
},
279282

280283
TRANSACTION_DUPLICATE: {

src/libs/IOUUtils.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ function navigateToStartMoneyRequestStep(requestType: IOURequestType, iouType: I
3030
case CONST.IOU.REQUEST_TYPE.DISTANCE:
3131
Navigation.goBack(ROUTES.MONEY_REQUEST_CREATE_TAB_DISTANCE.getRoute(CONST.IOU.ACTION.CREATE, iouType, transactionID, reportID), {compareParams: false});
3232
break;
33+
case CONST.IOU.REQUEST_TYPE.DISTANCE_MAP:
34+
Navigation.goBack(ROUTES.DISTANCE_REQUEST_CREATE_TAB_MAP.getRoute(CONST.IOU.ACTION.CREATE, iouType, transactionID, reportID), {compareParams: false});
35+
break;
36+
case CONST.IOU.REQUEST_TYPE.DISTANCE_MANUAL:
37+
Navigation.goBack(ROUTES.DISTANCE_REQUEST_CREATE_TAB_MANUAL.getRoute(CONST.IOU.ACTION.CREATE, iouType, transactionID, reportID), {compareParams: false});
38+
break;
3339
case CONST.IOU.REQUEST_TYPE.SCAN:
3440
Navigation.goBack(ROUTES.MONEY_REQUEST_CREATE_TAB_SCAN.getRoute(CONST.IOU.ACTION.CREATE, iouType, transactionID, reportID), {compareParams: false});
3541
break;

src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,9 @@ const MoneyRequestModalStackNavigator = createModalStackNavigator<MoneyRequestNa
127127
[SCREENS.MONEY_REQUEST.RECEIPT_VIEW_MODAL]: () => require<ReactComponentModule>('../../../../pages/iou/request/step/IOURequestStepScan/ReceiptViewModal').default,
128128
[SCREENS.MONEY_REQUEST.SPLIT_EXPENSE]: () => require<ReactComponentModule>('../../../../pages/iou/SplitExpensePage').default,
129129
[SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT]: () => require<ReactComponentModule>('../../../../pages/iou/SplitExpenseEditPage').default,
130+
[SCREENS.MONEY_REQUEST.DISTANCE_CREATE]: () => require<ReactComponentModule>('../../../../pages/iou/request/DistanceRequestStartPage').default,
131+
[SCREENS.MONEY_REQUEST.STEP_DISTANCE_MAP]: () => require<ReactComponentModule>('../../../../pages/iou/request/step/IOURequestStepDistanceMap').default,
132+
[SCREENS.MONEY_REQUEST.STEP_DISTANCE_MANUAL]: () => require<ReactComponentModule>('../../../../pages/iou/request/step/IOURequestStepDistanceManual').default,
130133
});
131134

132135
const TravelModalStackNavigator = createModalStackNavigator<TravelNavigatorParamList>({

src/libs/Navigation/linkingConfig/config.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,6 +1347,18 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
13471347
},
13481348
},
13491349
},
1350+
[SCREENS.MONEY_REQUEST.DISTANCE_CREATE]: {
1351+
path: ROUTES.DISTANCE_REQUEST_CREATE.route,
1352+
exact: true,
1353+
screens: {
1354+
map: {
1355+
path: ROUTES.DISTANCE_REQUEST_CREATE_TAB_MAP.route,
1356+
},
1357+
manual: {
1358+
path: ROUTES.DISTANCE_REQUEST_CREATE_TAB_MANUAL.route,
1359+
},
1360+
},
1361+
},
13501362
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_ROOT]: ROUTES.SETTINGS_CATEGORIES_ROOT.route,
13511363
[SCREENS.SETTINGS_TAGS.SETTINGS_TAGS_ROOT]: ROUTES.SETTINGS_TAGS_ROOT.route,
13521364
[SCREENS.MONEY_REQUEST.EDIT_REPORT]: ROUTES.MONEY_REQUEST_EDIT_REPORT.route,

src/libs/Navigation/types.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,6 +1515,35 @@ type MoneyRequestNavigatorParamList = {
15151515
pageIndex: string;
15161516
transactionID: string;
15171517
};
1518+
[SCREENS.MONEY_REQUEST.DISTANCE_CREATE]: {
1519+
iouType: IOUType;
1520+
reportID: string;
1521+
transactionID: string;
1522+
1523+
// These are not used in the screen, but are needed for the navigation
1524+
// for IOURequestStepDistanceManual and IOURequestStepDistanceMap components
1525+
backTo: never;
1526+
action: never;
1527+
currency: never;
1528+
pageIndex?: string;
1529+
backToReport?: string;
1530+
};
1531+
[SCREENS.MONEY_REQUEST.STEP_DISTANCE_MANUAL]: {
1532+
action: IOUAction;
1533+
iouType: IOUType;
1534+
transactionID: string;
1535+
reportID: string;
1536+
backTo: Routes;
1537+
backToReport?: string;
1538+
};
1539+
[SCREENS.MONEY_REQUEST.STEP_DISTANCE_MAP]: {
1540+
action: IOUAction;
1541+
iouType: IOUType;
1542+
transactionID: string;
1543+
reportID: string;
1544+
backTo: Routes;
1545+
backToReport?: string;
1546+
};
15181547
};
15191548

15201549
type WorkspaceConfirmationNavigatorParamList = {

src/libs/TransactionUtils/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ Onyx.connect({
149149
function isDistanceRequest(transaction: OnyxEntry<Transaction>): boolean {
150150
// This is used during the expense creation flow before the transaction has been saved to the server
151151
if (lodashHas(transaction, 'iouRequestType')) {
152-
return transaction?.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE;
152+
return transaction?.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE || transaction?.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE_MAP;
153153
}
154154

155155
// This is the case for transaction objects once they have been saved to the server

src/libs/actions/IOU.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,7 @@ function initMoneyRequest({reportID, policy, isFromGlobalCreate, currentIouReque
937937
let requestCategory: string | null = null;
938938

939939
// Add initial empty waypoints when starting a distance expense
940-
if (newIouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE) {
940+
if (newIouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE || newIouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE_MAP) {
941941
comment.waypoints = {
942942
waypoint0: {keyForList: 'start_waypoint'},
943943
waypoint1: {keyForList: 'stop_waypoint'},
@@ -1020,6 +1020,20 @@ function startMoneyRequest(iouType: ValueOf<typeof CONST.IOU.TYPE>, reportID: st
10201020
}
10211021
}
10221022

1023+
function startDistanceRequest(iouType: ValueOf<typeof CONST.IOU.TYPE>, reportID: string, requestType?: IOURequestType, skipConfirmation = false, backToReport?: string) {
1024+
clearMoneyRequest(CONST.IOU.OPTIMISTIC_TRANSACTION_ID, skipConfirmation);
1025+
switch (requestType) {
1026+
case CONST.IOU.REQUEST_TYPE.DISTANCE_MAP:
1027+
Navigation.navigate(ROUTES.DISTANCE_REQUEST_CREATE_TAB_MAP.getRoute(CONST.IOU.ACTION.CREATE, iouType, CONST.IOU.OPTIMISTIC_TRANSACTION_ID, reportID, backToReport));
1028+
return;
1029+
case CONST.IOU.REQUEST_TYPE.DISTANCE_MANUAL:
1030+
Navigation.navigate(ROUTES.DISTANCE_REQUEST_CREATE_TAB_MANUAL.getRoute(CONST.IOU.ACTION.CREATE, iouType, CONST.IOU.OPTIMISTIC_TRANSACTION_ID, reportID, backToReport));
1031+
return;
1032+
default:
1033+
Navigation.navigate(ROUTES.DISTANCE_REQUEST_CREATE.getRoute(CONST.IOU.ACTION.CREATE, iouType, CONST.IOU.OPTIMISTIC_TRANSACTION_ID, reportID, backToReport));
1034+
}
1035+
}
1036+
10231037
function setMoneyRequestAmount(transactionID: string, amount: number, currency: string, shouldShowOriginalAmount = false) {
10241038
Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}`, {amount, currency, shouldShowOriginalAmount});
10251039
}
@@ -3355,7 +3369,8 @@ function getMoneyRequestInformation(moneyRequestInformation: MoneyRequestInforma
33553369
}
33563370

33573371
// STEP 3: Build an optimistic transaction with the receipt
3358-
const isDistanceRequest = existingTransaction && existingTransaction.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE;
3372+
const isDistanceRequest =
3373+
existingTransaction && (existingTransaction.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE || existingTransaction.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE_MAP);
33593374
let optimisticTransaction = buildOptimisticTransaction({
33603375
existingTransactionID,
33613376
existingTransaction,
@@ -12162,5 +12177,6 @@ export {
1216212177
updateSplitExpenseField,
1216312178
reopenReport,
1216412179
retractReport,
12180+
startDistanceRequest,
1216512181
};
1216612182
export type {GPSPoint as GpsPoint, IOURequestType, StartSplitBilActionParams, CreateTrackExpenseParams, RequestMoneyInformation, ReplaceReceipt};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type SCREENS from '@src/SCREENS';
2+
import type {SelectedTabRequest} from '@src/types/onyx';
3+
import type {WithWritableReportOrNotFoundProps} from './step/withWritableReportOrNotFound';
4+
5+
type DistanceRequestStartPageProps = WithWritableReportOrNotFoundProps<typeof SCREENS.MONEY_REQUEST.DISTANCE_CREATE> & {
6+
// eslint-disable-next-line react/no-unused-prop-types
7+
defaultSelectedTab: SelectedTabRequest;
8+
};
9+
10+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
11+
function DistanceRequestStartPage(props: DistanceRequestStartPageProps) {
12+
return null;
13+
}
14+
15+
DistanceRequestStartPage.displayName = 'DistanceRequestStartPage';
16+
17+
export default DistanceRequestStartPage;

0 commit comments

Comments
 (0)