-
Notifications
You must be signed in to change notification settings - Fork 2.9k
/
EditSplitBillPage.js
155 lines (137 loc) · 5.75 KB
/
EditSplitBillPage.js
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import lodashGet from 'lodash/get';
import PropTypes from 'prop-types';
import React from 'react';
import {withOnyx} from 'react-native-onyx';
import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView';
import transactionPropTypes from '@components/transactionPropTypes';
import * as CurrencyUtils from '@libs/CurrencyUtils';
import Navigation from '@libs/Navigation/Navigation';
import * as ReportUtils from '@libs/ReportUtils';
import * as IOU from '@userActions/IOU';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import EditRequestAmountPage from './EditRequestAmountPage';
import EditRequestCreatedPage from './EditRequestCreatedPage';
import EditRequestDescriptionPage from './EditRequestDescriptionPage';
import EditRequestMerchantPage from './EditRequestMerchantPage';
const propTypes = {
/** Route from navigation */
route: PropTypes.shape({
/** Params from the route */
params: PropTypes.shape({
/** The transaction field we are editing */
field: PropTypes.string,
/** The chat reportID of the split */
reportID: PropTypes.string,
/** reportActionID of the split action */
reportActionID: PropTypes.string,
}),
}).isRequired,
/** The current transaction */
transaction: transactionPropTypes.isRequired,
/** The draft transaction that holds data to be persisted on the current transaction */
draftTransaction: transactionPropTypes,
};
const defaultProps = {
draftTransaction: undefined,
};
function EditSplitBillPage({route, transaction, draftTransaction}) {
const fieldToEdit = lodashGet(route, ['params', 'field'], '');
const reportID = lodashGet(route, ['params', 'reportID'], '');
const reportActionID = lodashGet(route, ['params', 'reportActionID'], '');
const {
amount: transactionAmount,
currency: transactionCurrency,
comment: transactionDescription,
merchant: transactionMerchant,
created: transactionCreated,
} = draftTransaction ? ReportUtils.getTransactionDetails(draftTransaction) : ReportUtils.getTransactionDetails(transaction);
const defaultCurrency = lodashGet(route, 'params.currency', '') || transactionCurrency;
function navigateBackToSplitDetails() {
Navigation.navigate(ROUTES.SPLIT_BILL_DETAILS.getRoute(reportID, reportActionID));
}
function setDraftSplitTransaction(transactionChanges) {
IOU.setDraftSplitTransaction(transaction.transactionID, transactionChanges);
navigateBackToSplitDetails();
}
if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.DESCRIPTION) {
return (
<EditRequestDescriptionPage
defaultDescription={transactionDescription}
onSubmit={(transactionChanges) => {
setDraftSplitTransaction({
comment: transactionChanges.comment.trim(),
});
}}
/>
);
}
if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.DATE) {
return (
<EditRequestCreatedPage
defaultCreated={transactionCreated}
defaultAmount={transactionAmount}
reportID={reportID}
onSubmit={(transactionChanges) => {
setDraftSplitTransaction({
created: transactionChanges.created,
});
}}
/>
);
}
if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.AMOUNT) {
return (
<EditRequestAmountPage
defaultAmount={transactionAmount}
defaultCurrency={defaultCurrency}
reportID={reportID}
isEdittingSplitBill
onSubmit={(transactionChanges) => {
const amount = CurrencyUtils.convertToBackendAmount(Number.parseFloat(transactionChanges));
setDraftSplitTransaction({
amount,
currency: defaultCurrency,
});
}}
onNavigateToCurrency={() => {
const activeRoute = encodeURIComponent(Navigation.getActiveRouteWithoutParams());
Navigation.navigate(ROUTES.EDIT_SPLIT_BILL_CURRENCY.getRoute(reportID, reportActionID, defaultCurrency, activeRoute));
}}
/>
);
}
if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.MERCHANT) {
return (
<EditRequestMerchantPage
defaultMerchant={transactionMerchant}
onSubmit={(transactionChanges) => {
setDraftSplitTransaction({merchant: transactionChanges.merchant.trim()});
}}
/>
);
}
return <FullPageNotFoundView shouldShow />;
}
EditSplitBillPage.displayName = 'EditSplitBillPage';
EditSplitBillPage.propTypes = propTypes;
EditSplitBillPage.defaultProps = defaultProps;
export default withOnyx({
reportActions: {
key: ({route}) => `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${route.params.reportID}`,
canEvict: false,
},
transaction: {
key: ({route, reportActions}) => {
const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
return `${ONYXKEYS.COLLECTION.TRANSACTION}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
},
},
draftTransaction: {
key: ({route, reportActions}) => {
const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
return `${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
},
},
})(EditSplitBillPage);