Skip to content

Commit 0023995

Browse files
MelvinBotsuneox
andcommitted
Remove client-side receipt normalization logic, let BE handle it
The paired receipt rule normalization (forcing receipts/itemized receipts to match) is now handled by the backend. Also updated parseCsvReceiptValue to return undefined instead of null so parsed values can be submitted directly. Co-authored-by: Cong Pham <suneox@users.noreply.github.com>
1 parent ed9ea6f commit 0023995

1 file changed

Lines changed: 6 additions & 15 deletions

File tree

src/pages/workspace/categories/ImportedCategoriesPage.tsx

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,17 @@ import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue';
2525

2626
/**
2727
* Parses a CSV cell value for receipt requirement columns.
28-
* Mirrors the OD import logic: "default" → null, "required"/"always_required" → 0,
28+
* Mirrors the OD import logic: "required"/"always_required" → 0,
2929
* "not_required" → DISABLED_MAX_EXPENSE_VALUE, numeric string → number.
30+
* Returns undefined for unmapped columns, empty/default values, or invalid input.
3031
*/
31-
function parseCsvReceiptValue(raw: string | undefined): number | null | undefined {
32+
function parseCsvReceiptValue(raw: string | undefined): number | undefined {
3233
if (raw === undefined) {
3334
return undefined;
3435
}
3536
const trimmed = raw.trim().toLowerCase();
3637
if (!trimmed || trimmed === 'default') {
37-
return null;
38+
return undefined;
3839
}
3940
if (trimmed === 'required' || trimmed === 'always_required') {
4041
return 0;
@@ -145,23 +146,13 @@ function ImportedCategoriesPage({route}: ImportedCategoriesPageProps) {
145146
const parsedMaxAmountNoItemizedReceipt =
146147
categoriesMaxAmountNoItemizedReceiptColumn !== -1 ? parseCsvReceiptValue(categoriesMaxAmountNoItemizedReceipt?.[dataIndex]?.toString()) : undefined;
147148

148-
// Apply normalization: if itemized receipts required but receipts not required, force both to required
149-
let normalizedMaxAmountNoReceipt = parsedMaxAmountNoReceipt;
150-
let normalizedMaxAmountNoItemizedReceipt = parsedMaxAmountNoItemizedReceipt;
151-
if (normalizedMaxAmountNoReceipt === CONST.DISABLED_MAX_EXPENSE_VALUE && normalizedMaxAmountNoItemizedReceipt !== undefined) {
152-
normalizedMaxAmountNoItemizedReceipt = CONST.DISABLED_MAX_EXPENSE_VALUE;
153-
}
154-
if (normalizedMaxAmountNoItemizedReceipt === 0 && normalizedMaxAmountNoReceipt !== undefined) {
155-
normalizedMaxAmountNoReceipt = 0;
156-
}
157-
158149
return {
159150
name,
160151
enabled: categoriesEnabledColumn !== -1 ? ['true', 'yes'].includes(categoriesEnabled?.[dataIndex]?.toString().trim().toLowerCase() ?? '') : true,
161152
// eslint-disable-next-line @typescript-eslint/naming-convention
162153
'GL Code': categoriesGLCodeColumn !== -1 ? (categoriesGLCode?.[dataIndex] ?? '') : existingGLCodeOrDefault,
163-
...(normalizedMaxAmountNoReceipt !== undefined && {maxAmountNoReceipt: normalizedMaxAmountNoReceipt}),
164-
...(normalizedMaxAmountNoItemizedReceipt !== undefined && {maxAmountNoItemizedReceipt: normalizedMaxAmountNoItemizedReceipt}),
154+
...(parsedMaxAmountNoReceipt !== undefined && {maxAmountNoReceipt: parsedMaxAmountNoReceipt}),
155+
...(parsedMaxAmountNoItemizedReceipt !== undefined && {maxAmountNoItemizedReceipt: parsedMaxAmountNoItemizedReceipt}),
165156
};
166157
});
167158

0 commit comments

Comments
 (0)