diff --git a/src/hooks/useContactImport.ts b/src/hooks/useContactImport.ts index 0b071fbc0ce..3590429b3e2 100644 --- a/src/hooks/useContactImport.ts +++ b/src/hooks/useContactImport.ts @@ -7,6 +7,7 @@ import useContactPermissions from '@libs/ContactPermission/useContactPermissions import getContacts from '@libs/ContactUtils'; import type {SearchOption} from '@libs/OptionsListUtils'; import type {PersonalDetails} from '@src/types/onyx'; +import useLocalize from './useLocalize'; /** * Return type of the useContactImport hook. @@ -26,14 +27,15 @@ type UseContactImportResult = { function useContactImport(): UseContactImportResult { const [contactPermissionState, setContactPermissionState] = useState(RESULTS.UNAVAILABLE); const [contacts, setContacts] = useState>>([]); + const {localeCompare} = useLocalize(); const importAndSaveContacts = useCallback(() => { contactImport().then(({contactList, permissionStatus}: ContactImportResult) => { setContactPermissionState(permissionStatus); - const usersFromContact = getContacts(contactList); + const usersFromContact = getContacts(contactList, localeCompare); setContacts(usersFromContact); }); - }, []); + }, [localeCompare]); useContactPermissions({ importAndSaveContacts, diff --git a/src/libs/ContactUtils.ts b/src/libs/ContactUtils.ts index 3fba1a4f8f7..34576062b42 100644 --- a/src/libs/ContactUtils.ts +++ b/src/libs/ContactUtils.ts @@ -1,12 +1,12 @@ +import type {LocaleContextProps} from '@components/LocaleContextProvider'; import CONST from '@src/CONST'; import type {PersonalDetails} from '@src/types/onyx'; import type {DeviceContact, StringHolder} from './ContactImport/types'; -import localeCompare from './LocaleCompare'; import {getUserToInviteContactOption} from './OptionsListUtils'; import type {SearchOption} from './OptionsListUtils'; import RandomAvatarUtils from './RandomAvatarUtils'; -function sortEmailObjects(emails?: StringHolder[]): string[] { +function sortEmailObjects(emails: StringHolder[], localeCompare: LocaleContextProps['localeCompare']): string[] { if (!emails?.length) { return []; } @@ -28,10 +28,10 @@ function sortEmailObjects(emails?: StringHolder[]): string[] { }); } -const getContacts = (deviceContacts: DeviceContact[] | []): Array> => { +const getContacts = (deviceContacts: DeviceContact[] | [], localeCompare: LocaleContextProps['localeCompare']): Array> => { return deviceContacts .map((contact) => { - const email = sortEmailObjects(contact?.emailAddresses ?? [])?.at(0) ?? ''; + const email = sortEmailObjects(contact?.emailAddresses ?? [], localeCompare)?.at(0) ?? ''; // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing const avatarSource = (contact?.imageData || RandomAvatarUtils.getAvatarForContact(`${contact?.firstName}${email}${contact?.lastName}`)) ?? ''; const phoneNumber = contact.phoneNumbers?.[0]?.value ?? ''; @@ -53,3 +53,4 @@ const getContacts = (deviceContacts: DeviceContact[] | []): Array { + describe('sortEmailObjects', () => { + it('Should sort email objects with Expensify emails first', () => { + const emails = [{value: 'user2@gmail.com'}, {value: 'user2@expensify.com'}, {value: 'user1@gmail.com'}, {value: 'user1@expensify.com'}]; + const sortedEmails = sortEmailObjects(emails, localeCompare); + expect(sortedEmails).toEqual(['user1@expensify.com', 'user2@expensify.com', 'user1@gmail.com', 'user2@gmail.com']); + }); + }); +});