Skip to content

Commit 7a30ca9

Browse files
authored
Merge pull request Expensify#67386 from shubham1206agra/refactor-onyx-9
Refactored localeCompare in TaxOptionsListUtils and TaxRate actions
2 parents da5f193 + 1845ef5 commit 7a30ca9

File tree

7 files changed

+25
-16
lines changed

7 files changed

+25
-16
lines changed

src/components/TaxPicker.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,19 @@ type TaxPickerProps = {
4343
};
4444

4545
function TaxPicker({selectedTaxRate = '', policyID, transactionID, onSubmit, action, iouType, onDismiss = Navigation.goBack, addBottomSafeAreaPadding}: TaxPickerProps) {
46-
const {translate} = useLocalize();
46+
const {translate, localeCompare} = useLocalize();
4747
const [searchValue, setSearchValue] = useState('');
48-
const [splitDraftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`);
48+
const [splitDraftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, {canBeMissing: true});
4949

50-
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`);
50+
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {canBeMissing: true});
5151
const [transaction] = useOnyx(
5252
(() => {
5353
if (shouldUseTransactionDraft(action)) {
5454
return `${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}` as `${typeof ONYXKEYS.COLLECTION.TRANSACTION}${string}`;
5555
}
5656
return `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`;
5757
})(),
58+
{canBeMissing: true},
5859
);
5960

6061
const isEditing = action === CONST.IOU.ACTION.EDIT;
@@ -86,10 +87,11 @@ function TaxPicker({selectedTaxRate = '', policyID, transactionID, onSubmit, act
8687
getTaxRatesSection({
8788
policy,
8889
searchValue,
90+
localeCompare,
8991
selectedOptions,
9092
transaction: currentTransaction,
9193
}),
92-
[searchValue, selectedOptions, policy, currentTransaction],
94+
[searchValue, selectedOptions, policy, currentTransaction, localeCompare],
9395
);
9496

9597
const headerMessage = getHeaderMessageForNonUserList((sections.at(0)?.data?.length ?? 0) > 0, searchValue);

src/libs/TaxOptionsListUtils.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import type {OnyxEntry} from 'react-native-onyx';
2+
import type {LocaleContextProps} from '@components/LocaleContextProvider';
23
import CONST from '@src/CONST';
34
import type {Policy, TaxRate, TaxRates, Transaction} from '@src/types/onyx';
45
import type * as OnyxCommon from '@src/types/onyx/OnyxCommon';
5-
import localeCompare from './LocaleCompare';
66
import tokenizedSearch from './tokenizedSearch';
77
import {transformedTaxRates} from './TransactionUtils';
88

@@ -32,7 +32,7 @@ type TaxSection = {
3232
/**
3333
* Sorts tax rates alphabetically by name.
3434
*/
35-
function sortTaxRates(taxRates: TaxRates): TaxRate[] {
35+
function sortTaxRates(taxRates: TaxRates, localeCompare: LocaleContextProps['localeCompare']): TaxRate[] {
3636
const sortedTaxRates = Object.values(taxRates).sort((a, b) => localeCompare(a.name, b.name));
3737
return sortedTaxRates;
3838
}
@@ -59,19 +59,21 @@ function getTaxRatesOptions(taxRates: Array<Partial<TaxRate>>): TaxRatesOption[]
5959
function getTaxRatesSection({
6060
policy,
6161
searchValue,
62+
localeCompare,
6263
selectedOptions = [],
6364
transaction,
6465
}: {
6566
policy: OnyxEntry<Policy> | undefined;
6667
searchValue: string;
68+
localeCompare: LocaleContextProps['localeCompare'];
6769
selectedOptions?: Tax[];
6870
transaction?: OnyxEntry<Transaction>;
6971
}): TaxSection[] {
7072
const policyRatesSections = [];
7173

7274
const taxes = transformedTaxRates(policy, transaction);
7375

74-
const sortedTaxRates = sortTaxRates(taxes);
76+
const sortedTaxRates = sortTaxRates(taxes, localeCompare);
7577
const selectedOptionNames = selectedOptions.map((selectedOption) => selectedOption.modifiedName);
7678
const enabledTaxRates = sortedTaxRates.filter((taxRate) => !taxRate.isDisabled);
7779
const enabledTaxRatesNames = enabledTaxRates.map((tax) => tax.modifiedName);

src/libs/actions/TaxRate.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type {NullishDeep, OnyxCollection, OnyxEntry} from 'react-native-onyx';
22
import Onyx from 'react-native-onyx';
33
import type {FormOnyxValues} from '@components/Form/types';
4+
import type {LocaleContextProps} from '@components/LocaleContextProvider';
45
import * as API from '@libs/API';
56
import type {
67
CreatePolicyTaxParams,
@@ -11,7 +12,6 @@ import type {
1112
UpdatePolicyTaxValueParams,
1213
} from '@libs/API/parameters';
1314
import {WRITE_COMMANDS} from '@libs/API/types';
14-
import localeCompare from '@libs/LocaleCompare';
1515
import {translateLocal} from '@libs/Localize';
1616
import {getDistanceRateCustomUnit} from '@libs/PolicyUtils';
1717
import {getFieldRequiredErrors, isExistingTaxCode, isExistingTaxName, isValidPercentage} from '@libs/ValidationUtils';
@@ -296,7 +296,7 @@ type TaxRateDeleteMap = Record<
296296
| null
297297
>;
298298

299-
function deletePolicyTaxes(policy: OnyxEntry<Policy>, taxesToDelete: string[]) {
299+
function deletePolicyTaxes(policy: OnyxEntry<Policy>, taxesToDelete: string[], localeCompare: LocaleContextProps['localeCompare']) {
300300
const policyTaxRates = policy?.taxRates?.taxes;
301301
const foreignTaxDefault = policy?.taxRates?.foreignTaxDefault;
302302
const firstTaxID = Object.keys(policyTaxRates ?? {})

src/pages/workspace/taxes/WorkspaceEditTaxPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function WorkspaceEditTaxPage({
3434
policy,
3535
}: WorkspaceEditTaxPageBaseProps) {
3636
const styles = useThemeStyles();
37-
const {translate} = useLocalize();
37+
const {translate, localeCompare} = useLocalize();
3838
const currentTaxID = getCurrentTaxID(policy, taxID);
3939
const currentTaxRate = currentTaxID && policy?.taxRates?.taxes?.[currentTaxID];
4040
const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false);
@@ -60,7 +60,7 @@ function WorkspaceEditTaxPage({
6060
if (!policyID) {
6161
return;
6262
}
63-
deletePolicyTaxes(policy, [taxID]);
63+
deletePolicyTaxes(policy, [taxID], localeCompare);
6464
setIsDeleteModalVisible(false);
6565
Navigation.goBack();
6666
};

src/pages/workspace/taxes/WorkspaceTaxesPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,13 +245,13 @@ function WorkspaceTaxesPage({
245245
if (!policy?.id) {
246246
return;
247247
}
248-
deletePolicyTaxes(policy, selectedTaxesIDs);
248+
deletePolicyTaxes(policy, selectedTaxesIDs, localeCompare);
249249
setIsDeleteModalVisible(false);
250250

251251
InteractionManager.runAfterInteractions(() => {
252252
setSelectedTaxesIDs([]);
253253
});
254-
}, [policy, selectedTaxesIDs]);
254+
}, [policy, selectedTaxesIDs, localeCompare]);
255255

256256
const toggleTaxes = useCallback(
257257
(isEnabled: boolean) => {

tests/actions/PolicyTaxTest.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ describe('actions/PolicyTax', () => {
680680
const taxID = 'id_TAX_RATE_1';
681681

682682
mockFetch?.pause?.();
683-
deletePolicyTaxes(fakePolicy, [taxID]);
683+
deletePolicyTaxes(fakePolicy, [taxID], TestHelper.localeCompare);
684684
return waitForBatchedUpdates()
685685
.then(
686686
() =>
@@ -734,7 +734,7 @@ describe('actions/PolicyTax', () => {
734734
},
735735
};
736736
mockFetch?.pause?.();
737-
deletePolicyTaxes(fakePolicyWithForeignTaxDefault, [taxID]);
737+
deletePolicyTaxes(fakePolicyWithForeignTaxDefault, [taxID], TestHelper.localeCompare);
738738
return waitForBatchedUpdates()
739739
.then(
740740
() =>
@@ -781,7 +781,7 @@ describe('actions/PolicyTax', () => {
781781
const taxID = 'id_TAX_RATE_1';
782782

783783
mockFetch?.pause?.();
784-
deletePolicyTaxes(fakePolicy, [taxID]);
784+
deletePolicyTaxes(fakePolicy, [taxID], TestHelper.localeCompare);
785785
return waitForBatchedUpdates()
786786
.then(
787787
() =>

tests/unit/TaxOptionsListUtilsTest.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type {Section} from '@libs/OptionsListUtils';
22
import {getTaxRatesSection} from '@libs/TaxOptionsListUtils';
33
import IntlStore from '@src/languages/IntlStore';
44
import type {Policy, TaxRatesWithDefault, Transaction} from '@src/types/onyx';
5+
import {localeCompare} from '../utils/TestHelper';
56
import waitForBatchedUpdates from '../utils/waitForBatchedUpdates';
67

78
describe('TaxOptionsListUtils', () => {
@@ -121,6 +122,7 @@ describe('TaxOptionsListUtils', () => {
121122
const result = getTaxRatesSection({
122123
policy,
123124
searchValue: emptySearch,
125+
localeCompare,
124126
transaction,
125127
});
126128

@@ -129,20 +131,23 @@ describe('TaxOptionsListUtils', () => {
129131
const searchResult = getTaxRatesSection({
130132
policy,
131133
searchValue: search,
134+
localeCompare,
132135
transaction,
133136
});
134137
expect(searchResult).toStrictEqual(searchResultList);
135138

136139
const tokenizeSearchResult = getTaxRatesSection({
137140
policy,
138141
searchValue: tokenizeSearch,
142+
localeCompare,
139143
transaction,
140144
});
141145
expect(tokenizeSearchResult).toStrictEqual(searchResultList);
142146

143147
const wrongSearchResult = getTaxRatesSection({
144148
policy,
145149
searchValue: wrongSearch,
150+
localeCompare,
146151
transaction,
147152
});
148153
expect(wrongSearchResult).toStrictEqual(wrongSearchResultList);

0 commit comments

Comments
 (0)