Skip to content

Commit c90a042

Browse files
authored
Merge pull request Expensify#67400 from shubham1206agra/refactor-onyx-12
2 parents 8a2d7be + 40edd4f commit c90a042

3 files changed

Lines changed: 21 additions & 6 deletions

File tree

src/hooks/useContactImport.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import useContactPermissions from '@libs/ContactPermission/useContactPermissions
77
import getContacts from '@libs/ContactUtils';
88
import type {SearchOption} from '@libs/OptionsListUtils';
99
import type {PersonalDetails} from '@src/types/onyx';
10+
import useLocalize from './useLocalize';
1011

1112
/**
1213
* Return type of the useContactImport hook.
@@ -26,14 +27,15 @@ type UseContactImportResult = {
2627
function useContactImport(): UseContactImportResult {
2728
const [contactPermissionState, setContactPermissionState] = useState<PermissionStatus>(RESULTS.UNAVAILABLE);
2829
const [contacts, setContacts] = useState<Array<SearchOption<PersonalDetails>>>([]);
30+
const {localeCompare} = useLocalize();
2931

3032
const importAndSaveContacts = useCallback(() => {
3133
contactImport().then(({contactList, permissionStatus}: ContactImportResult) => {
3234
setContactPermissionState(permissionStatus);
33-
const usersFromContact = getContacts(contactList);
35+
const usersFromContact = getContacts(contactList, localeCompare);
3436
setContacts(usersFromContact);
3537
});
36-
}, []);
38+
}, [localeCompare]);
3739

3840
useContactPermissions({
3941
importAndSaveContacts,

src/libs/ContactUtils.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1+
import type {LocaleContextProps} from '@components/LocaleContextProvider';
12
import CONST from '@src/CONST';
23
import type {PersonalDetails} from '@src/types/onyx';
34
import type {DeviceContact, StringHolder} from './ContactImport/types';
4-
import localeCompare from './LocaleCompare';
55
import {getUserToInviteContactOption} from './OptionsListUtils';
66
import type {SearchOption} from './OptionsListUtils';
77
import RandomAvatarUtils from './RandomAvatarUtils';
88

9-
function sortEmailObjects(emails?: StringHolder[]): string[] {
9+
function sortEmailObjects(emails: StringHolder[], localeCompare: LocaleContextProps['localeCompare']): string[] {
1010
if (!emails?.length) {
1111
return [];
1212
}
@@ -28,10 +28,10 @@ function sortEmailObjects(emails?: StringHolder[]): string[] {
2828
});
2929
}
3030

31-
const getContacts = (deviceContacts: DeviceContact[] | []): Array<SearchOption<PersonalDetails>> => {
31+
const getContacts = (deviceContacts: DeviceContact[] | [], localeCompare: LocaleContextProps['localeCompare']): Array<SearchOption<PersonalDetails>> => {
3232
return deviceContacts
3333
.map((contact) => {
34-
const email = sortEmailObjects(contact?.emailAddresses ?? [])?.at(0) ?? '';
34+
const email = sortEmailObjects(contact?.emailAddresses ?? [], localeCompare)?.at(0) ?? '';
3535
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
3636
const avatarSource = (contact?.imageData || RandomAvatarUtils.getAvatarForContact(`${contact?.firstName}${email}${contact?.lastName}`)) ?? '';
3737
const phoneNumber = contact.phoneNumbers?.[0]?.value ?? '';
@@ -53,3 +53,4 @@ const getContacts = (deviceContacts: DeviceContact[] | []): Array<SearchOption<P
5353
};
5454

5555
export default getContacts;
56+
export {sortEmailObjects};

tests/unit/ContactUtilsTest.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import {sortEmailObjects} from '@src/libs/ContactUtils';
2+
import {localeCompare} from '../utils/TestHelper';
3+
4+
describe('ContactUtils', () => {
5+
describe('sortEmailObjects', () => {
6+
it('Should sort email objects with Expensify emails first', () => {
7+
const emails = [{value: 'user2@gmail.com'}, {value: 'user2@expensify.com'}, {value: 'user1@gmail.com'}, {value: 'user1@expensify.com'}];
8+
const sortedEmails = sortEmailObjects(emails, localeCompare);
9+
expect(sortedEmails).toEqual(['user1@expensify.com', 'user2@expensify.com', 'user1@gmail.com', 'user2@gmail.com']);
10+
});
11+
});
12+
});

0 commit comments

Comments
 (0)