···1-import {STALE} from '#/state/queries'
2-import {useServiceConfigQuery} from '#/state/queries/email-verification-required'
3-import {useProfileQuery} from '#/state/queries/profile'
4-import {useSession} from '#/state/session'
5-import {BSKY_SERVICE} from '../constants'
6-import {getHostnameFromUrl} from '../strings/url-helpers'
7-8-export function useEmail() {
9- const {currentAccount} = useSession()
10-11- const {data: serviceConfig} = useServiceConfigQuery()
12- const {data: profile} = useProfileQuery({
13- did: currentAccount?.did,
14- staleTime: STALE.INFINITY,
15- })
16-17- const checkEmailConfirmed = !!serviceConfig?.checkEmailConfirmed
18-19- // Date set for 11 AM PST on the 18th of November
20- const isNewEnough =
21- !!profile?.createdAt &&
22- Date.parse(profile.createdAt) >= Date.parse('2024-11-18T19:00:00.000Z')
23-24- const isSelfHost =
25- currentAccount &&
26- getHostnameFromUrl(currentAccount.service) !==
27- getHostnameFromUrl(BSKY_SERVICE)
28-29- const needsEmailVerification =
30- !isSelfHost &&
31- checkEmailConfirmed &&
32- !currentAccount?.emailConfirmed &&
33- isNewEnough
34-35- return {needsEmailVerification}
36-}
···000000000000000000000000000000000000
+2-2
src/lib/hooks/useOpenComposer.tsx
···2import {Trans} from '@lingui/macro'
34import {useRequireEmailVerification} from '#/lib/hooks/useRequireEmailVerification'
5-import {useOpenComposer as rootUseOpenComposer} from '#/state/shell/composer'
67export function useOpenComposer() {
8- const {openComposer} = rootUseOpenComposer()
9 const requireEmailVerification = useRequireEmailVerification()
10 return useMemo(() => {
11 return {
···2import {Trans} from '@lingui/macro'
34import {useRequireEmailVerification} from '#/lib/hooks/useRequireEmailVerification'
5+import {useOpenComposer as useRootOpenComposer} from '#/state/shell/composer'
67export function useOpenComposer() {
8+ const {openComposer} = useRootOpenComposer()
9 const requireEmailVerification = useRequireEmailVerification()
10 return useMemo(() => {
11 return {
+1-1
src/lib/hooks/useRequireEmailVerification.tsx
···1import {useCallback} from 'react'
2import {Keyboard} from 'react-native'
34-import {useEmail} from '#/lib/hooks/useEmail'
5import {useRequireAuth, useSession} from '#/state/session'
6import {useCloseAllActiveElements} from '#/state/util'
7import {
···1import {useCallback} from 'react'
2import {Keyboard} from 'react-native'
34+import {useEmail} from '#/state/email-verification'
5import {useRequireAuth, useSession} from '#/state/session'
6import {useCloseAllActiveElements} from '#/state/util'
7import {
+1-1
src/screens/Messages/Conversation.tsx
···15} from '@react-navigation/native'
16import {type NativeStackScreenProps} from '@react-navigation/native-stack'
1718-import {useEmail} from '#/lib/hooks/useEmail'
19import {useEnableKeyboardControllerScreen} from '#/lib/hooks/useEnableKeyboardController'
20import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
21import {
···24} from '#/lib/routes/types'
25import {isWeb} from '#/platform/detection'
26import {type Shadow, useMaybeProfileShadow} from '#/state/cache/profile-shadow'
027import {ConvoProvider, isConvoActive, useConvo} from '#/state/messages/convo'
28import {ConvoStatus} from '#/state/messages/convo/types'
29import {useCurrentConvoId} from '#/state/messages/current-convo-id'
···15} from '@react-navigation/native'
16import {type NativeStackScreenProps} from '@react-navigation/native-stack'
17018import {useEnableKeyboardControllerScreen} from '#/lib/hooks/useEnableKeyboardController'
19import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
20import {
···23} from '#/lib/routes/types'
24import {isWeb} from '#/platform/detection'
25import {type Shadow, useMaybeProfileShadow} from '#/state/cache/profile-shadow'
26+import {useEmail} from '#/state/email-verification'
27import {ConvoProvider, isConvoActive, useConvo} from '#/state/messages/convo'
28import {ConvoStatus} from '#/state/messages/convo/types'
29import {useCurrentConvoId} from '#/state/messages/current-convo-id'
+1-1
src/screens/Messages/components/MessageInput.tsx
···1819import {HITSLOP_10, MAX_DM_GRAPHEME_LENGTH} from '#/lib/constants'
20import {useHaptics} from '#/lib/haptics'
21-import {useEmail} from '#/lib/hooks/useEmail'
22import {isIOS, isWeb} from '#/platform/detection'
023import {
24 useMessageDraft,
25 useSaveMessageDraft,
···1819import {HITSLOP_10, MAX_DM_GRAPHEME_LENGTH} from '#/lib/constants'
20import {useHaptics} from '#/lib/haptics'
021import {isIOS, isWeb} from '#/platform/detection'
22+import {useEmail} from '#/state/email-verification'
23import {
24 useMessageDraft,
25 useSaveMessageDraft,
···5import {StackActions, useNavigation} from '@react-navigation/native'
6import {useQueryClient} from '@tanstack/react-query'
78-import {useEmail} from '#/lib/hooks/useEmail'
9import {type NavigationProp} from '#/lib/routes/types'
10import {useProfileShadow} from '#/state/cache/profile-shadow'
011import {useAcceptConversation} from '#/state/queries/messages/accept-conversation'
12import {precacheConvoQuery} from '#/state/queries/messages/conversation'
13import {useLeaveConvo} from '#/state/queries/messages/leave-conversation'
···5import {StackActions, useNavigation} from '@react-navigation/native'
6import {useQueryClient} from '@tanstack/react-query'
708import {type NavigationProp} from '#/lib/routes/types'
9import {useProfileShadow} from '#/state/cache/profile-shadow'
10+import {useEmail} from '#/state/email-verification'
11import {useAcceptConversation} from '#/state/queries/messages/accept-conversation'
12import {precacheConvoQuery} from '#/state/queries/messages/conversation'
13import {useLeaveConvo} from '#/state/queries/messages/leave-conversation'