@@ -6,7 +6,6 @@ import type {Ref} from 'react';
66import type { GestureResponderEvent } from 'react-native' ;
77import { InteractionManager } from 'react-native' ;
88import { RESULTS } from 'react-native-permissions' ;
9- import type { PermissionStatus } from 'react-native-permissions' ;
109import Button from '@components/Button' ;
1110import ContactPermissionModal from '@components/ContactPermissionModal' ;
1211import EmptySelectionListContent from '@components/EmptySelectionListContent' ;
@@ -19,6 +18,7 @@ import ReferralProgramCTA from '@components/ReferralProgramCTA';
1918import SelectionList from '@components/SelectionList' ;
2019import InviteMemberListItem from '@components/SelectionList/InviteMemberListItem' ;
2120import type { SelectionListHandle } from '@components/SelectionList/types' ;
21+ import useContactImport from '@hooks/useContactImport' ;
2222import useDebouncedState from '@hooks/useDebouncedState' ;
2323import useDismissedReferralBanners from '@hooks/useDismissedReferralBanners' ;
2424import useLocalize from '@hooks/useLocalize' ;
@@ -27,17 +27,13 @@ import useOnyx from '@hooks/useOnyx';
2727import usePolicy from '@hooks/usePolicy' ;
2828import useScreenWrapperTransitionStatus from '@hooks/useScreenWrapperTransitionStatus' ;
2929import useThemeStyles from '@hooks/useThemeStyles' ;
30- import contactImport from '@libs/ContactImport' ;
31- import type { ContactImportResult } from '@libs/ContactImport/types' ;
32- import useContactPermissions from '@libs/ContactPermission/useContactPermissions' ;
33- import getContacts from '@libs/ContactUtils' ;
3430import { canUseTouchScreen } from '@libs/DeviceCapabilities' ;
3531import getPlatform from '@libs/getPlatform' ;
3632import goToSettings from '@libs/goToSettings' ;
3733import { isMovingTransactionFromTrackExpense } from '@libs/IOUUtils' ;
3834import memoize from '@libs/memoize' ;
3935import Navigation from '@libs/Navigation/Navigation' ;
40- import type { Option , SearchOption , Section } from '@libs/OptionsListUtils' ;
36+ import type { Option , Section } from '@libs/OptionsListUtils' ;
4137import {
4238 filterAndOrderOptions ,
4339 formatSectionsFromSearchTerm ,
@@ -59,7 +55,6 @@ import type {IOUAction, IOUType} from '@src/CONST';
5955import CONST from '@src/CONST' ;
6056import ONYXKEYS from '@src/ONYXKEYS' ;
6157import ROUTES from '@src/ROUTES' ;
62- import type { PersonalDetails } from '@src/types/onyx' ;
6358import type { Participant } from '@src/types/onyx/IOU' ;
6459import { isEmptyObject } from '@src/types/utils/EmptyObject' ;
6560import ImportContactButton from './ImportContactButton' ;
@@ -105,7 +100,7 @@ function MoneyRequestParticipantsSelector(
105100 const { translate} = useLocalize ( ) ;
106101 const styles = useThemeStyles ( ) ;
107102 const [ betas ] = useOnyx ( ONYXKEYS . BETAS , { canBeMissing : true } ) ;
108- const [ contactPermissionState , setContactPermissionState ] = useState < PermissionStatus > ( RESULTS . UNAVAILABLE ) ;
103+ const { contactPermissionState, contacts , setContactPermissionState, importAndSaveContacts } = useContactImport ( ) ;
109104 const platform = getPlatform ( ) ;
110105 const isNative = platform === CONST . PLATFORM . ANDROID || platform === CONST . PLATFORM . IOS ;
111106 const showImportContacts = isNative && ! ( contactPermissionState === RESULTS . GRANTED || contactPermissionState === RESULTS . LIMITED ) ;
@@ -123,7 +118,7 @@ function MoneyRequestParticipantsSelector(
123118 shouldInitialize : didScreenTransitionEnd ,
124119 } ) ;
125120 const [ reportAttributesDerived ] = useOnyx ( ONYXKEYS . DERIVED . REPORT_ATTRIBUTES , { canBeMissing : true , selector : ( val ) => val ?. reports } ) ;
126- const [ contacts , setContacts ] = useState < Array < SearchOption < PersonalDetails > > > ( [ ] ) ;
121+
127122 const [ textInputAutoFocus , setTextInputAutoFocus ] = useState < boolean > ( ! isNative ) ;
128123 const selectionListRef = useRef < SelectionListHandle | null > ( null ) ;
129124 const cleanSearchTerm = useMemo ( ( ) => debouncedSearchTerm . trim ( ) . toLowerCase ( ) , [ debouncedSearchTerm ] ) ;
@@ -136,14 +131,6 @@ function MoneyRequestParticipantsSelector(
136131 const hasBeenAddedToNudgeMigration = ! ! tryNewDot ?. nudgeMigration ?. timestamp ;
137132 const canShowManagerMcTest = useMemo ( ( ) => ! hasBeenAddedToNudgeMigration && action !== CONST . IOU . ACTION . SUBMIT , [ hasBeenAddedToNudgeMigration , action ] ) ;
138133
139- const importAndSaveContacts = useCallback ( ( ) => {
140- contactImport ( ) . then ( ( { contactList, permissionStatus} : ContactImportResult ) => {
141- setContactPermissionState ( permissionStatus ) ;
142- const usersFromContact = getContacts ( contactList ) ;
143- setContacts ( usersFromContact ) ;
144- } ) ;
145- } , [ ] ) ;
146-
147134 useEffect ( ( ) => {
148135 searchInServer ( debouncedSearchTerm . trim ( ) ) ;
149136 } , [ debouncedSearchTerm ] ) ;
@@ -154,13 +141,6 @@ function MoneyRequestParticipantsSelector(
154141 initializeOptions ( ) ;
155142 } , [ initializeOptions ] ) ;
156143
157- useContactPermissions ( {
158- importAndSaveContacts,
159- setContacts,
160- contactPermissionState,
161- setContactPermissionState,
162- } ) ;
163-
164144 const defaultOptions = useMemo ( ( ) => {
165145 if ( ! areOptionsInitialized || ! didScreenTransitionEnd ) {
166146 return {
0 commit comments