Skip to content

Commit 17247ce

Browse files
Refactored localeCompare in PolicyUtils
1 parent b73ebe2 commit 17247ce

8 files changed

Lines changed: 28 additions & 13 deletions

File tree

src/hooks/useWorkspaceList.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {useMemo} from 'react';
22
import type {OnyxCollection, OnyxEntry} from 'react-native-onyx';
33
import * as Expensicons from '@components/Icon/Expensicons';
4+
import type {LocaleContextProps} from '@components/LocaleContextProvider';
45
import type {ListItem, SectionListDataType} from '@components/SelectionList/types';
56
import {isPolicyAdmin, shouldShowPolicy, sortWorkspacesBySelected} from '@libs/PolicyUtils';
67
import {getDefaultWorkspaceAvatar} from '@libs/ReportUtils';
@@ -23,10 +24,11 @@ type UseWorkspaceListParams = {
2324
shouldShowPendingDeletePolicy: boolean;
2425
selectedPolicyIDs: string[] | undefined;
2526
searchTerm: string;
27+
localeCompare: LocaleContextProps['localeCompare'];
2628
additionalFilter?: (policy: OnyxEntry<Policy>) => boolean;
2729
};
2830

29-
function useWorkspaceList({policies, currentUserLogin, selectedPolicyIDs, searchTerm, shouldShowPendingDeletePolicy, additionalFilter}: UseWorkspaceListParams) {
31+
function useWorkspaceList({policies, currentUserLogin, selectedPolicyIDs, searchTerm, shouldShowPendingDeletePolicy, localeCompare, additionalFilter}: UseWorkspaceListParams) {
3032
const usersWorkspaces = useMemo(() => {
3133
if (!policies || isEmptyObject(policies)) {
3234
return [];
@@ -61,9 +63,9 @@ function useWorkspaceList({policies, currentUserLogin, selectedPolicyIDs, search
6163
const filteredAndSortedUserWorkspaces = useMemo<WorkspaceListItem[]>(
6264
() =>
6365
tokenizedSearch(usersWorkspaces, searchTerm, (policy) => [policy.text]).sort((policy1, policy2) =>
64-
sortWorkspacesBySelected({policyID: policy1.policyID, name: policy1.text}, {policyID: policy2.policyID, name: policy2.text}, selectedPolicyIDs),
66+
sortWorkspacesBySelected({policyID: policy1.policyID, name: policy1.text}, {policyID: policy2.policyID, name: policy2.text}, selectedPolicyIDs, localeCompare),
6567
),
66-
[searchTerm, usersWorkspaces, selectedPolicyIDs],
68+
[searchTerm, usersWorkspaces, selectedPolicyIDs, localeCompare],
6769
);
6870

6971
const sections = useMemo(() => {

src/libs/PolicyUtils.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import {hasSynchronizationErrorMessage, isAuthenticationError} from './actions/c
3636
import {shouldShowQBOReimbursableExportDestinationAccountError} from './actions/connections/QuickbooksOnline';
3737
import {getCurrentUserAccountID, getCurrentUserEmail} from './actions/Report';
3838
import {getCategoryApproverRule} from './CategoryUtils';
39-
import localeCompare from './LocaleCompare';
4039
import {translateLocal} from './Localize';
4140
import Navigation from './Navigation/Navigation';
4241
import {isOffline as isOfflineNetworkStore} from './Network/NetworkStore';
@@ -1084,6 +1083,7 @@ function getNetSuiteImportCustomFieldLabel(
10841083
policy: Policy | undefined,
10851084
importField: ValueOf<typeof CONST.NETSUITE_CONFIG.IMPORT_CUSTOM_FIELDS>,
10861085
translate: LocaleContextProps['translate'],
1086+
localeCompare: LocaleContextProps['localeCompare'],
10871087
): string | undefined {
10881088
const fieldData = policy?.connections?.netsuite?.options?.config.syncOptions?.[importField] ?? [];
10891089
if (fieldData.length === 0) {
@@ -1194,7 +1194,15 @@ function getSageIntacctCreditCards(policy?: Policy, selectedAccount?: string): S
11941194
* @param workspace2 Details of the second workspace to be compared.
11951195
* @param selectedWorkspaceID ID of the selected workspace which needs to be at the beginning.
11961196
*/
1197-
const sortWorkspacesBySelected = (workspace1: WorkspaceDetails, workspace2: WorkspaceDetails, selectedWorkspaceIDs: string[] | undefined): number => {
1197+
const sortWorkspacesBySelected = (
1198+
workspace1: WorkspaceDetails,
1199+
workspace2: WorkspaceDetails,
1200+
selectedWorkspaceIDs: string[] | undefined,
1201+
localeCompare: LocaleContextProps['localeCompare'],
1202+
): number => {
1203+
if (workspace1.policyID && selectedWorkspaceIDs?.includes(workspace1?.policyID) && workspace2.policyID && selectedWorkspaceIDs?.includes(workspace2.policyID)) {
1204+
return localeCompare(workspace1.name?.toLowerCase() ?? '', workspace2.name?.toLowerCase() ?? '');
1205+
}
11981206
if (workspace1.policyID && selectedWorkspaceIDs?.includes(workspace1?.policyID)) {
11991207
return -1;
12001208
}

src/pages/ReportChangeWorkspacePage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ function ReportChangeWorkspacePage({report, route}: ReportChangeWorkspacePagePro
3131
const {isOffline} = useNetwork();
3232
const styles = useThemeStyles();
3333
const [searchTerm, debouncedSearchTerm, setSearchTerm] = useDebouncedState('');
34-
const {translate} = useLocalize();
34+
const {translate, localeCompare} = useLocalize();
3535

3636
const [policies, fetchStatus] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
3737
const [reportNextStep] = useOnyx(`${ONYXKEYS.COLLECTION.NEXT_STEP}${reportID}`, {canBeMissing: true});
@@ -70,6 +70,7 @@ function ReportChangeWorkspacePage({report, route}: ReportChangeWorkspacePagePro
7070
shouldShowPendingDeletePolicy: false,
7171
selectedPolicyIDs: report.policyID ? [report.policyID] : undefined,
7272
searchTerm: debouncedSearchTerm,
73+
localeCompare,
7374
additionalFilter: (newPolicy) => isWorkspaceEligibleForReportChange(newPolicy, report, policies),
7475
});
7576

src/pages/Search/AdvancedSearchFilters.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,7 @@ function AdvancedSearchFilters() {
587587
shouldShowPendingDeletePolicy: false,
588588
selectedPolicyIDs: undefined,
589589
searchTerm: '',
590+
localeCompare,
590591
});
591592

592593
// When looking if a user has any categories to display, we want to ignore the policies that are of type PERSONAL

src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersWorkspacePage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const updateWorkspaceFilter = (policyID: string[] | null) => {
2727

2828
function SearchFiltersWorkspacePage() {
2929
const styles = useThemeStyles();
30-
const {translate} = useLocalize();
30+
const {translate, localeCompare} = useLocalize();
3131
const {isOffline} = useNetwork();
3232

3333
const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {canBeMissing: true});
@@ -45,6 +45,7 @@ function SearchFiltersWorkspacePage() {
4545
shouldShowPendingDeletePolicy: false,
4646
selectedPolicyIDs: selectedOptions,
4747
searchTerm: debouncedSearchTerm,
48+
localeCompare,
4849
});
4950

5051
const selectWorkspace = useCallback(

src/pages/iou/request/step/IOURequestStepPerDiemWorkspace.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ function IOURequestStepPerDiemWorkspace({
3131
},
3232
transaction,
3333
}: IOURequestStepPerDiemWorkspaceProps) {
34-
const {translate} = useLocalize();
34+
const {translate, localeCompare} = useLocalize();
3535
const {login: currentUserLogin, accountID} = useCurrentUserPersonalDetails();
3636
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
3737

@@ -46,6 +46,7 @@ function IOURequestStepPerDiemWorkspace({
4646
{policyID: policy1.id, name: policy1.name},
4747
{policyID: policy2.id, name: policy2.name},
4848
selectedWorkspace?.policyID ? [selectedWorkspace?.policyID] : [],
49+
localeCompare,
4950
),
5051
)
5152
.map((policy) => ({
@@ -63,7 +64,7 @@ function IOURequestStepPerDiemWorkspace({
6364
],
6465
isSelected: selectedWorkspace?.policyID === policy.id,
6566
}));
66-
}, [allPolicies, currentUserLogin, selectedWorkspace]);
67+
}, [allPolicies, currentUserLogin, selectedWorkspace, localeCompare]);
6768

6869
const selectWorkspace = (item: WorkspaceListItem) => {
6970
const policyExpenseReportID = getPolicyExpenseChat(accountID, item.value)?.reportID;

src/pages/iou/request/step/IOURequestStepSendFrom.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ type IOURequestStepSendFromProps = WithWritableReportOrNotFoundProps<typeof SCRE
2626
WithFullTransactionOrNotFoundProps<typeof SCREENS.MONEY_REQUEST.STEP_SEND_FROM>;
2727

2828
function IOURequestStepSendFrom({route, transaction}: IOURequestStepSendFromProps) {
29-
const {translate} = useLocalize();
29+
const {translate, localeCompare} = useLocalize();
3030
const {transactionID, backTo} = route.params;
3131
const [currentUserLogin] = useOnyx(ONYXKEYS.SESSION, {selector: (session) => session?.email, canBeMissing: false});
3232
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
@@ -42,6 +42,7 @@ function IOURequestStepSendFrom({route, transaction}: IOURequestStepSendFromProp
4242
{policyID: policy1.id, name: policy1.name},
4343
{policyID: policy2.id, name: policy2.name},
4444
selectedWorkspace?.policyID ? [selectedWorkspace?.policyID] : [],
45+
localeCompare,
4546
),
4647
)
4748
.map((policy) => ({
@@ -59,7 +60,7 @@ function IOURequestStepSendFrom({route, transaction}: IOURequestStepSendFromProp
5960
],
6061
isSelected: selectedWorkspace?.policyID === policy.id,
6162
}));
62-
}, [allPolicies, currentUserLogin, selectedWorkspace]);
63+
}, [allPolicies, currentUserLogin, selectedWorkspace, localeCompare]);
6364

6465
const navigateBack = () => {
6566
Navigation.goBack(backTo);

src/pages/workspace/accounting/netsuite/import/NetSuiteImportPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import CONST from '@src/CONST';
1818
import ROUTES from '@src/ROUTES';
1919

2020
function NetSuiteImportPage({policy}: WithPolicyConnectionsProps) {
21-
const {translate} = useLocalize();
21+
const {translate, localeCompare} = useLocalize();
2222
const styles = useThemeStyles();
2323
const {isBetaEnabled} = usePermissions();
2424

@@ -131,7 +131,7 @@ function NetSuiteImportPage({policy}: WithPolicyConnectionsProps) {
131131
shouldDisableStrikeThrough
132132
>
133133
<MenuItemWithTopDescription
134-
title={getNetSuiteImportCustomFieldLabel(policy, importField, translate)}
134+
title={getNetSuiteImportCustomFieldLabel(policy, importField, translate, localeCompare)}
135135
description={translate(`workspace.netsuite.import.importCustomFields.${importField}.title`)}
136136
shouldShowRightIcon
137137
onPress={() => {

0 commit comments

Comments
 (0)