Skip to content

Commit 0236d46

Browse files
authored
Merge pull request #88463 from software-mansion-labs/jakubstec/remove-onyx-connect-policy-tags-in-IOU-replaceReceipt
Remove Onyx.connect() usage for ONYXKEYS.COLLECTION.POLICY_TAGS in replaceReceipt function from src/libs/actions/IOU/index.ts
2 parents ad0c295 + 45d6c2d commit 0236d46

11 files changed

Lines changed: 396 additions & 143 deletions

File tree

__mocks__/reportData/violations.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const receiptErrorsR14932: ReceiptErrors = {
3333
transactionID: RECEIPT_ERRORS_TRANSACTION_ID_R14932,
3434
source: CONST.POLICY.ID_FAKE,
3535
transactionPolicy: undefined,
36+
transactionPolicyTagList: undefined,
3637
},
3738
},
3839
};

src/components/ReportActionItem/MoneyRequestReceiptView.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ function MoneyRequestReceiptView({
172172
const deviceHasHoverSupport = hasHoverSupport();
173173
const lazyIcons = useMemoizedLazyExpensifyIcons(['Expand', 'ReceiptPlus']);
174174

175+
const [policyTagList] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policy?.id}`);
176+
175177
// Browsers don't fire mouseenter when an element mounts under the cursor
176178
useEffect(() => {
177179
if (isLoading) {
@@ -441,7 +443,14 @@ function MoneyRequestReceiptView({
441443
return;
442444
}
443445
const source = URL.createObjectURL(file as Blob);
444-
replaceReceipt({transactionID: linkedTransactionID, file: file as File, source, transactionPolicy: policy, transactionPolicyCategories: policyCategories});
446+
replaceReceipt({
447+
transactionID: linkedTransactionID,
448+
file: file as File,
449+
source,
450+
transactionPolicy: policy,
451+
transactionPolicyCategories: policyCategories,
452+
transactionPolicyTagList: policyTagList,
453+
});
445454
};
446455

447456
// For empty receipt should be fullHeight

src/libs/actions/IOU/Receipt.ts

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,9 @@ import type {SearchResultDataType} from '@src/types/onyx/SearchResults';
2121
import type {ReceiptSource} from '@src/types/onyx/Transaction';
2222
import {isEmptyObject} from '@src/types/utils/EmptyObject';
2323
import type {ReplaceReceipt} from '.';
24-
import {getAllReports, getAllTransactions, getAllTransactionViolations, getPolicyTags} from '.';
24+
import {getAllReports, getAllTransactions, getAllTransactionViolations} from '.';
2525
import {getReceiptError} from './MoneyRequestBuilder';
2626

27-
/**
28-
* @deprecated This function uses Onyx.connect and should be replaced with useOnyx for reactive data access.
29-
* TODO: remove `getPolicyTagsData` from this file https://github.com/Expensify/App/issues/80048
30-
*/
31-
function getPolicyTagsData(policyID: string | undefined) {
32-
const allPolicyTags = getPolicyTags();
33-
return allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`] ?? {};
34-
}
35-
3627
function detachReceipt(
3728
transactionID: string | undefined,
3829
transactionPolicy: OnyxEntry<OnyxTypes.Policy>,
@@ -171,7 +162,7 @@ function detachReceipt(
171162
);
172163
}
173164

174-
function replaceReceipt({transactionID, file, source, state, transactionPolicy, transactionPolicyCategories, isSameReceipt}: ReplaceReceipt) {
165+
function replaceReceipt({transactionID, file, source, state, transactionPolicy, transactionPolicyCategories, isSameReceipt, transactionPolicyTagList}: ReplaceReceipt) {
175166
if (!file) {
176167
return;
177168
}
@@ -190,7 +181,7 @@ function replaceReceipt({transactionID, file, source, state, transactionPolicy,
190181
filename: file.name,
191182
};
192183
const newTransaction = transaction && {...transaction, receipt: receiptOptimistic};
193-
const retryParams: ReplaceReceipt = {transactionID, file: undefined, source, transactionPolicy, transactionPolicyCategories};
184+
const retryParams: ReplaceReceipt = {transactionID, file: undefined, source, transactionPolicy, transactionPolicyCategories, transactionPolicyTagList};
194185
const currentSearchQueryJSON = getCurrentSearchQueryJSON();
195186

196187
const optimisticData: Array<OnyxUpdate<typeof ONYXKEYS.COLLECTION.TRANSACTION | typeof ONYXKEYS.COLLECTION.SNAPSHOT | typeof ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS>> = [
@@ -234,16 +225,14 @@ function replaceReceipt({transactionID, file, source, state, transactionPolicy,
234225
];
235226

236227
if (transactionPolicy && isPaidGroupPolicy(transactionPolicy) && newTransaction) {
237-
// TODO: Replace getPolicyTagsData (https://github.com/Expensify/App/issues/72721) and getPolicyRecentlyUsedTagsData (https://github.com/Expensify/App/issues/71491) with useOnyx hook
238-
const policyTagList = getPolicyTagsData(transactionPolicy.id);
239228
const currentTransactionViolations = allTransactionViolations[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`] ?? [];
240229
const violationsOnyxData = ViolationsUtils.getViolationsOnyxData(
241230
newTransaction,
242231
currentTransactionViolations,
243232
transactionPolicy,
244-
policyTagList ?? {},
233+
transactionPolicyTagList ?? {},
245234
transactionPolicyCategories ?? {},
246-
hasDependentTags(transactionPolicy, policyTagList ?? {}),
235+
hasDependentTags(transactionPolicy, transactionPolicyTagList ?? {}),
247236
isInvoiceReportReportUtils(expenseReport),
248237
);
249238
optimisticData.push(violationsOnyxData);

src/libs/actions/IOU/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ type ReplaceReceipt = {
100100
transactionPolicyCategories?: OnyxEntry<OnyxTypes.PolicyCategories>;
101101
transactionPolicy: OnyxEntry<OnyxTypes.Policy>;
102102
isSameReceipt?: boolean;
103+
transactionPolicyTagList?: OnyxEntry<OnyxTypes.PolicyTagLists>;
103104
};
104105

105106
let allTransactions: NonNullable<OnyxCollection<OnyxTypes.Transaction>> = {};

src/pages/inbox/report/ReportActionCompose/useReceiptDrop.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ function useReceiptDrop({reportID, report, shouldAddOrReplaceReceipt, transactio
3737
const [hasOnlyPersonalPolicies = true] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: hasOnlyPersonalPoliciesUtil});
3838
const [userBillingGracePeriodEnds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_USER_BILLING_GRACE_PERIOD_END);
3939
const [draftTransactionIDs] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DRAFT, {selector: validTransactionDraftIDsSelector});
40+
const [policyTagList] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policy?.id}`);
4041

4142
const onFilesValidated = (files: FileObject[]) => {
4243
if (files.length === 0) {
@@ -45,7 +46,14 @@ function useReceiptDrop({reportID, report, shouldAddOrReplaceReceipt, transactio
4546

4647
if (shouldAddOrReplaceReceipt && transactionID) {
4748
const source = URL.createObjectURL(files.at(0) as Blob);
48-
replaceReceipt({transactionID, file: files.at(0) as File, source, transactionPolicy: policy, transactionPolicyCategories: policyCategories});
49+
replaceReceipt({
50+
transactionID,
51+
file: files.at(0) as File,
52+
source,
53+
transactionPolicy: policy,
54+
transactionPolicyCategories: policyCategories,
55+
transactionPolicyTagList: policyTagList,
56+
});
4957
return;
5058
}
5159

src/pages/iou/request/step/IOURequestStepScan/index.native.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ function IOURequestStepScan({
106106
const policy = usePolicy(report?.policyID);
107107

108108
const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${report?.policyID}`);
109+
const [policyTagList] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policy?.id}`);
109110

110111
const {handleCameraInitialized} = useCameraInitTelemetry({cameraPermissionStatus, device});
111112

@@ -124,9 +125,16 @@ function IOURequestStepScan({
124125
} else {
125126
navigateBack();
126127
}
127-
replaceReceipt({transactionID: initialTransactionID, file: file as File, source, transactionPolicy: policy, transactionPolicyCategories: policyCategories});
128+
replaceReceipt({
129+
transactionID: initialTransactionID,
130+
file: file as File,
131+
source,
132+
transactionPolicy: policy,
133+
transactionPolicyCategories: policyCategories,
134+
transactionPolicyTagList: policyTagList,
135+
});
128136
},
129-
[initialTransactionID, policy, policyCategories, backTo, navigateBack],
137+
[initialTransactionID, policy, policyCategories, backTo, navigateBack, policyTagList],
130138
);
131139

132140
const getSource = useCallback((file: FileObject) => file.uri ?? '', []);

src/pages/iou/request/step/IOURequestStepScan/index.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ function IOURequestStepScan({
3939
const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${report?.policyID}`);
4040
const [draftTransactionIDs] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DRAFT, {selector: validTransactionDraftIDsSelector});
4141

42+
const [policyTagList] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policy?.id}`);
43+
4244
// End telemetry spans on mount for web (no camera init tracking needed)
4345
useEffect(() => {
4446
endSpan(CONST.TELEMETRY.SPAN_OPEN_CREATE_EXPENSE);
@@ -58,10 +60,17 @@ function IOURequestStepScan({
5860

5961
const updateScanAndNavigate = useCallback(
6062
(file: FileObject, source: string) => {
61-
replaceReceipt({transactionID: initialTransactionID, file: file as File, source, transactionPolicy: policy, transactionPolicyCategories: policyCategories});
63+
replaceReceipt({
64+
transactionID: initialTransactionID,
65+
file: file as File,
66+
source,
67+
transactionPolicy: policy,
68+
transactionPolicyCategories: policyCategories,
69+
transactionPolicyTagList: policyTagList,
70+
});
6271
navigateBack();
6372
},
64-
[initialTransactionID, navigateBack, policy, policyCategories],
73+
[initialTransactionID, navigateBack, policy, policyCategories, policyTagList],
6574
);
6675

6776
const getSource = useCallback((file: FileObject) => file.uri ?? URL.createObjectURL(file as Blob), []);

src/pages/media/AttachmentModalScreen/routes/TransactionReceiptModalContent.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,12 +302,13 @@ function TransactionReceiptModalContent({navigation, route}: AttachmentModalScre
302302
source: durableUri,
303303
transactionPolicyCategories: policyCategories,
304304
transactionPolicy: policy,
305+
transactionPolicyTagList: policyTagList,
305306
...(isSameReceipt ? {state: transaction?.receipt?.state, isSameReceipt: true} : {}),
306307
});
307308
}
308309
});
309310
},
310-
[transaction, isDraftTransaction, isOdometerImage, isEditingConfirmation, imageType, fileType, policyCategories, policy],
311+
[transaction, isDraftTransaction, isOdometerImage, isEditingConfirmation, imageType, fileType, policyCategories, policy, policyTagList],
311312
);
312313

313314
const rotateReceipt = useCallback(() => {

0 commit comments

Comments
 (0)