···6161import {ThemeProvider as Alf} from '#/alf'
6262import {useColorModeTheme} from '#/alf/util/useColorModeTheme'
6363import {Provider as ContextMenuProvider} from '#/components/ContextMenu'
6464-import {NuxDialogs} from '#/components/dialogs/nuxs'
6564import {useStarterPackEntry} from '#/components/hooks/useStarterPackEntry'
6665import {Provider as IntentDialogProvider} from '#/components/intents/IntentDialogs'
6766import {Provider as PolicyUpdateOverlayProvider} from '#/components/PolicyUpdateOverlay'
···165164 <IntentDialogProvider>
166165 <TestCtrls />
167166 <Shell />
168168- <NuxDialogs />
169167 <ToastOutlet />
170168 </IntentDialogProvider>
171169 </GlobalGestureEventsProvider>
-2
src/App.web.tsx
···4848import {ThemeProvider as Alf} from '#/alf'
4949import {useColorModeTheme} from '#/alf/util/useColorModeTheme'
5050import {Provider as ContextMenuProvider} from '#/components/ContextMenu'
5151-import {NuxDialogs} from '#/components/dialogs/nuxs'
5251import {useStarterPackEntry} from '#/components/hooks/useStarterPackEntry'
5352import {Provider as IntentDialogProvider} from '#/components/intents/IntentDialogs'
5453import {Provider as PolicyUpdateOverlayProvider} from '#/components/PolicyUpdateOverlay'
···138137 <HideBottomBarBorderProvider>
139138 <IntentDialogProvider>
140139 <Shell />
141141- <NuxDialogs />
142140 <ToastOutlet />
143141 </IntentDialogProvider>
144142 </HideBottomBarBorderProvider>
+33-30
src/ageAssurance/components/NoAccessScreen.tsx
···99 useCreateSupportLink,
1010} from '#/lib/hooks/useCreateSupportLink'
1111import {dateDiff, useGetTimeAgo} from '#/lib/hooks/useTimeAgo'
1212-import {isAppPassword} from '#/lib/jwt'
1312import {logger} from '#/logger'
1413import {isWeb} from '#/platform/detection'
1514import {isNative} from '#/platform/detection'
1615import {useIsBirthdateUpdateAllowed} from '#/state/birthdate'
1717-import {useSession, useSessionApi} from '#/state/session'
1616+import {useSessionApi} from '#/state/session'
1817import {atoms as a, useBreakpoints, useTheme, web} from '#/alf'
1918import {Admonition} from '#/components/Admonition'
2019import {AgeAssuranceAppealDialog} from '#/components/ageAssurance/AgeAssuranceAppealDialog'
···3029import {createStaticClick, SimpleInlineLinkText} from '#/components/Link'
3130import {Outlet as PortalOutlet} from '#/components/Portal'
3231import * as Toast from '#/components/Toast'
3333-import {Span, Text} from '#/components/Typography'
3232+import {Text} from '#/components/Typography'
3433import {BottomSheetOutlet} from '#/../modules/bottom-sheet'
3534import {useAgeAssurance} from '#/ageAssurance'
3635import {useAgeAssuranceDataContext} from '#/ageAssurance/data'
···5453 const isBirthdateUpdateAllowed = useIsBirthdateUpdateAllowed()
5554 const {logoutCurrentAccount} = useSessionApi()
5655 const createSupportLink = useCreateSupportLink()
5757-5858- const {currentAccount} = useSession()
5959- const isUsingAppPassword = isAppPassword(currentAccount?.accessJwt || '')
60566157 const aa = useAgeAssurance()
6258 const isBlocked = aa.state.status === aa.Status.Blocked
···8985 logoutCurrentAccount('AgeAssuranceNoAccessScreen')
9086 }, [logoutCurrentAccount])
91879292- const birthdateUpdateText = canUpdateBirthday ? (
9393- <Text style={[textStyles]}>
8888+ const orgAdmonition = (
8989+ <Admonition type="tip">
9490 <Trans>
9595- If you believe your birthdate is incorrect, you can update it by{' '}
9696- <SimpleInlineLinkText
9797- label={_(msg`Click here to update your birthdate`)}
9898- style={[textStyles]}
9999- {...createStaticClick(() => {
100100- logger.metric('ageAssurance:noAccessScreen:openBirthdateDialog', {})
101101- birthdateControl.open()
102102- })}>
103103- clicking here
104104- </SimpleInlineLinkText>
105105- .
9191+ For organizational accounts, use the birthdate of the person who is
9292+ responsible for the account.
10693 </Trans>
107107- </Text>
9494+ </Admonition>
9595+ )
9696+9797+ const birthdateUpdateText = canUpdateBirthday ? (
9898+ <>
9999+ <Text style={[textStyles]}>
100100+ <Trans>
101101+ If you believe your birthdate is incorrect, you can update it by{' '}
102102+ <SimpleInlineLinkText
103103+ label={_(msg`Click here to update your birthdate`)}
104104+ style={[textStyles]}
105105+ {...createStaticClick(() => {
106106+ logger.metric(
107107+ 'ageAssurance:noAccessScreen:openBirthdateDialog',
108108+ {},
109109+ )
110110+ birthdateControl.open()
111111+ })}>
112112+ clicking here
113113+ </SimpleInlineLinkText>
114114+ .
115115+ </Trans>
116116+ </Text>
117117+118118+ {orgAdmonition}
119119+ </>
108120 ) : (
109121 <Text style={[textStyles]}>
110122 <Trans>
···211223 </ButtonText>
212224 </Button>
213225214214- {isUsingAppPassword && (
215215- <Admonition type="info">
216216- <Trans>
217217- Hmm, it looks like you're logged in with an{' '}
218218- <Span style={[a.italic]}>App Password</Span>. To set your
219219- birthdate, you'll need to log in with your main account
220220- password, or ask whomever controls this account to do so.
221221- </Trans>
222222- </Admonition>
223223- )}
226226+ {orgAdmonition}
224227 </View>
225228 )}
226229
···1818 'IT',
1919] satisfies CountryCode[] as string[]
20202121-export function isFindContactsFeatureEnabled(countryCode: string): boolean {
2121+export function isFindContactsFeatureEnabled(countryCode?: string): boolean {
2222+ if (IS_DEV) return true
2323+2424+ /*
2525+ * This should never happen unless geolocation fails entirely. In that
2626+ * case, let the user try, since it should work as long as they have a
2727+ * phone number from one of the allow-listed countries.
2828+ */
2929+ if (!countryCode) return true
3030+2231 return FIND_CONTACTS_FEATURE_COUNTRY_ALLOWLIST.includes(
2332 countryCode.toUpperCase(),
2433 )
···26352736export function useIsFindContactsFeatureEnabledBasedOnGeolocation() {
2837 const location = useGeolocation()
2929-3030- if (IS_DEV) return true
3131-3232- // they can try, by they'll need a phone number
3333- // from one of the allowlisted countries
3434- if (!location.countryCode) return true
3535-3638 return isFindContactsFeatureEnabled(location.countryCode)
3739}
···3232import {InAppBrowserConsentDialog} from '#/components/dialogs/InAppBrowserConsent'
3333import {LinkWarningDialog} from '#/components/dialogs/LinkWarning'
3434import {MutedWordsDialog} from '#/components/dialogs/MutedWords'
3535+import {NuxDialogs} from '#/components/dialogs/nuxs'
3536import {SigninDialog} from '#/components/dialogs/Signin'
3637import {
3738 Outlet as PolicyUpdateOverlayPortalOutlet,
···110111 <InAppBrowserConsentDialog />
111112 <LinkWarningDialog />
112113 <Lightbox />
114114+ <NuxDialogs />
113115114116 {/* Until policy update has been completed by the user, don't render anything that is portaled */}
115117 {policyUpdateState.completed && (
+2
src/view/shell/index.web.tsx
···2222import {EmailDialog} from '#/components/dialogs/EmailDialog'
2323import {LinkWarningDialog} from '#/components/dialogs/LinkWarning'
2424import {MutedWordsDialog} from '#/components/dialogs/MutedWords'
2525+import {NuxDialogs} from '#/components/dialogs/nuxs'
2526import {SigninDialog} from '#/components/dialogs/Signin'
2627import {useWelcomeModal} from '#/components/hooks/useWelcomeModal'
2728import {
···119120 <AgeAssuranceRedirectDialog />
120121 <LinkWarningDialog />
121122 <Lightbox />
123123+ <NuxDialogs />
122124123125 {welcomeModalControl.isOpen && (
124126 <WelcomeModal control={welcomeModalControl} />