diff --git a/src/App.tsx b/src/App.tsx index 1bf42a54d2a5..e0f8d3ec96cf 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -9,6 +9,7 @@ import {ActionSheetAwareScrollViewProvider} from './components/ActionSheetAwareS import ActiveElementRoleProvider from './components/ActiveElementRoleProvider'; import ColorSchemeWrapper from './components/ColorSchemeWrapper'; import ComposeProviders from './components/ComposeProviders'; +import {CurrentUserPersonalDetailsProvider} from './components/CurrentUserPersonalDetailsProvider'; import CustomStatusBarAndBackground from './components/CustomStatusBarAndBackground'; import CustomStatusBarAndBackgroundContextProvider from './components/CustomStatusBarAndBackground/CustomStatusBarAndBackgroundContextProvider'; import ErrorBoundary from './components/ErrorBoundary'; @@ -88,6 +89,7 @@ function App() { (defaultCurrentUserPersonalDetails); + +function CurrentUserPersonalDetailsProvider({children}: {children: React.ReactNode}) { + const session = useSession(); + const userAccountID = session?.accountID ?? CONST.DEFAULT_NUMBER_ID; + const userAccountSelector = useCallback( + (allPersonalDetails: OnyxEntry): PersonalDetails => { + const personalDetailsForUser = allPersonalDetails?.[userAccountID] ?? ({} as PersonalDetails); + personalDetailsForUser.accountID = userAccountID; + return personalDetailsForUser; + }, + [userAccountID], + ); + const [currentUserPersonalDetails = defaultCurrentUserPersonalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: userAccountSelector, canBeMissing: true}); + + return {children}; +} + +export {CurrentUserPersonalDetailsContext, CurrentUserPersonalDetailsProvider}; diff --git a/src/hooks/useCurrentUserPersonalDetails.ts b/src/hooks/useCurrentUserPersonalDetails.ts index fadab893f113..7ba41727d076 100644 --- a/src/hooks/useCurrentUserPersonalDetails.ts +++ b/src/hooks/useCurrentUserPersonalDetails.ts @@ -1,16 +1,8 @@ -import {useMemo} from 'react'; -import {usePersonalDetails, useSession} from '@components/OnyxListItemProvider'; -import CONST from '@src/CONST'; -import type {PersonalDetails} from '@src/types/onyx'; +import {useContext} from 'react'; +import {CurrentUserPersonalDetailsContext} from '@components/CurrentUserPersonalDetailsProvider'; function useCurrentUserPersonalDetails() { - const session = useSession(); - const personalDetails = usePersonalDetails(); - const accountID = session?.accountID ?? CONST.DEFAULT_NUMBER_ID; - const accountPersonalDetails = personalDetails?.[accountID]; - const currentUserPersonalDetails: PersonalDetails = useMemo(() => ({...accountPersonalDetails, accountID}), [accountPersonalDetails, accountID]); - - return currentUserPersonalDetails; + return useContext(CurrentUserPersonalDetailsContext); } export default useCurrentUserPersonalDetails; diff --git a/tests/ui/PersonalDetailsOnboarding.tsx b/tests/ui/PersonalDetailsOnboarding.tsx index 9436e5543697..e9326a0eab6e 100644 --- a/tests/ui/PersonalDetailsOnboarding.tsx +++ b/tests/ui/PersonalDetailsOnboarding.tsx @@ -4,6 +4,7 @@ import {act, fireEvent, render, screen, waitFor} from '@testing-library/react-na import React from 'react'; import Onyx from 'react-native-onyx'; import ComposeProviders from '@components/ComposeProviders'; +import {CurrentUserPersonalDetailsProvider} from '@components/CurrentUserPersonalDetailsProvider'; import {LocaleContextProvider} from '@components/LocaleContextProvider'; import OnyxListItemProvider from '@components/OnyxListItemProvider'; import {CurrentReportIDContextProvider} from '@hooks/useCurrentReportID'; @@ -41,7 +42,7 @@ const renderOnboardingPersonalDetailsPage = ( initialParams: OnboardingModalNavigatorParamList[typeof SCREENS.ONBOARDING.PERSONAL_DETAILS], ) => { return render( - + diff --git a/tests/ui/components/IOURequestStepConfirmationPageTest.tsx b/tests/ui/components/IOURequestStepConfirmationPageTest.tsx index 4e30c225c83a..f1014384c7e6 100644 --- a/tests/ui/components/IOURequestStepConfirmationPageTest.tsx +++ b/tests/ui/components/IOURequestStepConfirmationPageTest.tsx @@ -1,6 +1,7 @@ import {fireEvent, render, screen} from '@testing-library/react-native'; import React from 'react'; import Onyx from 'react-native-onyx'; +import {CurrentUserPersonalDetailsProvider} from '@components/CurrentUserPersonalDetailsProvider'; import {LocaleContextProvider} from '@components/LocaleContextProvider'; import OnyxListItemProvider from '@components/OnyxListItemProvider'; import {translateLocal} from '@libs/Localize'; @@ -101,22 +102,24 @@ describe('IOURequestStepConfirmationPageTest', () => { render( - - - + + + + + , ); @@ -138,22 +141,24 @@ describe('IOURequestStepConfirmationPageTest', () => { render( - - - + + + + + , ); @@ -182,22 +187,24 @@ describe('IOURequestStepConfirmationPageTest', () => { render( - - - + + + + + , );