-
Notifications
You must be signed in to change notification settings - Fork 4k
Expand file tree
/
Copy pathuseReviewDuplicatesNavigation.tsx
More file actions
96 lines (87 loc) · 4.42 KB
/
Copy pathuseReviewDuplicatesNavigation.tsx
File metadata and controls
96 lines (87 loc) · 4.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
import Navigation from '@libs/Navigation/Navigation';
import CONST from '@src/CONST';
import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES';
import type {Route} from '@src/ROUTES';
import {useEffect, useMemo, useState} from 'react';
type StepName = 'description' | 'merchant' | 'category' | 'billable' | 'tag' | 'taxCode' | 'reimbursable' | 'confirmation';
function useReviewDuplicatesNavigation(stepNames: string[], currentScreenName: StepName, threadReportID: string, backTo?: string) {
const [nextScreen, setNextScreen] = useState<StepName>();
const [prevScreen, setPrevScreen] = useState<StepName>();
const [currentScreenIndex, setCurrentScreenIndex] = useState(0);
const intersection = useMemo(() => CONST.REVIEW_DUPLICATES_ORDER.filter((element) => stepNames.includes(element)), [stepNames]);
useEffect(() => {
if (currentScreenName === 'confirmation') {
setPrevScreen(intersection.at(-1));
return;
}
const currentIndex = intersection.indexOf(currentScreenName);
const nextScreenIndex = currentIndex + 1;
const prevScreenIndex = currentIndex - 1;
setCurrentScreenIndex(currentIndex);
setNextScreen(intersection.at(nextScreenIndex));
setPrevScreen(prevScreenIndex !== -1 ? intersection.at(prevScreenIndex) : undefined);
}, [currentScreenName, intersection]);
const goBack = () => {
switch (prevScreen) {
case 'merchant':
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_MERCHANT.path));
break;
case 'category':
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_CATEGORY.path));
break;
case 'tag':
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG.path));
break;
case 'description':
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION.path));
break;
case 'taxCode':
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE.path));
break;
case 'reimbursable':
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE.path));
break;
case 'billable':
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE.path));
break;
default:
if (backTo) {
Navigation.goBack(backTo as Route);
return;
}
Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_PAGE.getRoute(threadReportID));
break;
}
};
const navigateToNextScreen = () => {
switch (nextScreen) {
case 'merchant':
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_MERCHANT.path));
break;
case 'category':
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_CATEGORY.path));
break;
case 'tag':
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG.path));
break;
case 'description':
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION.path));
break;
case 'taxCode':
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE.path));
break;
case 'reimbursable':
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE.path));
break;
case 'billable':
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE.path));
break;
default:
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_CONFIRMATION.path));
break;
}
};
return {navigateToNextScreen, goBack, currentScreenIndex};
}
export default useReviewDuplicatesNavigation;