Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 8 additions & 27 deletions shared/constants/init/shared.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import type * as UseNotificationsStateType from '@/stores/notifications'
import type * as UsePeopleStateType from '@/stores/people'
import type * as UsePinentryStateType from '@/stores/pinentry'
import type * as UseSettingsPasswordStateType from '@/stores/settings-password'
import type * as UseSignupStateType from '@/stores/signup'
import type * as UseTeamsStateType from '@/stores/teams'
import type * as UseTracker2StateType from '@/stores/tracker'
import type * as UnlockFoldersType from '@/stores/unlock-folders'
Expand All @@ -54,15 +53,15 @@ import {useNotifState} from '@/stores/notifications'
import {useProvisionState} from '@/stores/provision'
import {usePushState} from '@/stores/push'
import {useSettingsContactsState} from '@/stores/settings-contacts'
import {useSettingsEmailState} from '@/stores/settings-email'
import {useSignupState} from '@/stores/signup'
import {useState as useRecoverPasswordState} from '@/stores/recover-password'
import {useTeamsState} from '@/stores/teams'
import {useTrackerState} from '@/stores/tracker'
import {useUsersState} from '@/stores/users'
import {useRouterState} from '@/stores/router'
import * as Util from '@/constants/router'
import {setConvoDefer} from '@/stores/convostate'
import {clearSignupEmail} from '@/people/signup-email'
import {clearSignupDeviceNameDraft} from '@/signup/device-name-draft'

let _emitStartupOnLoadDaemonConnectedOnce: boolean = __DEV__ ? (globalThis.__hmr_startupOnce ?? false) : false

Expand Down Expand Up @@ -325,24 +324,6 @@ export const initRecoverPasswordCallbacks = () => {
})
}

export const initSignupCallbacks = () => {
const currentState = useSignupState.getState()
useSignupState.setState({
dispatch: {
...currentState.dispatch,
defer: {
...currentState.dispatch.defer,
onEditEmail: (p: {email: string; makeSearchable: boolean}) => {
useSettingsEmailState.getState().dispatch.editEmail(p)
},
onShowPermissionsPrompt: (p: {justSignedUp?: boolean}) => {
usePushState.getState().dispatch.showPermissionsPrompt(p)
},
},
},
})
}

export const initTracker2Callbacks = () => {
const currentState = useTrackerState.getState()
useTrackerState.setState({
Expand Down Expand Up @@ -458,6 +439,9 @@ export const initSharedSubscriptions = () => {
if (s.loggedIn) {
ignorePromise(storeRegistry.getState('daemon').dispatch.loadDaemonBootstrapStatus())
storeRegistry.getState('fs').dispatch.checkKbfsDaemonRpcStatus()
} else {
clearSignupEmail()
clearSignupDeviceNameDraft()
}
storeRegistry
.getState('daemon')
Expand Down Expand Up @@ -620,10 +604,9 @@ export const initSharedSubscriptions = () => {
prev &&
Util.getTab(prev) === Tabs.peopleTab &&
next &&
Util.getTab(next) !== Tabs.peopleTab &&
storeRegistry.getState('signup').justSignedUpEmail
Util.getTab(next) !== Tabs.peopleTab
) {
storeRegistry.getState('signup').dispatch.clearJustSignedUpEmail()
clearSignupEmail()
}

if (prev && Util.getTab(prev) === Tabs.peopleTab && next && Util.getTab(next) !== Tabs.peopleTab) {
Expand Down Expand Up @@ -657,7 +640,6 @@ export const initSharedSubscriptions = () => {
initNotificationsCallbacks()
initPushCallbacks()
initRecoverPasswordCallbacks()
initSignupCallbacks()
initTracker2Callbacks()
}

Expand Down Expand Up @@ -736,8 +718,7 @@ export const _onEngineIncoming = (action: EngineGen.Actions) => {
if (emailAddress) {
storeRegistry.getState('settings-email').dispatch.notifyEmailVerified(emailAddress)
}
const {useSignupState} = require('@/stores/signup') as typeof UseSignupStateType
useSignupState.getState().dispatch.onEngineIncomingImpl(action)
clearSignupEmail()
}
break
case 'keybase.1.secretUi.getPassphrase':
Expand Down
4 changes: 2 additions & 2 deletions shared/people/container.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ import isEqual from 'lodash/isEqual'
import People from '.'
import * as T from '@/constants/types'
import {useFollowerState} from '@/stores/followers'
import {useSignupState} from '@/stores/signup'
import {usePeopleState} from '@/stores/people'
import {useCurrentUserState} from '@/stores/current-user'
import type {e164ToDisplay as e164ToDisplayType} from '@/util/phone-numbers'
import {navToProfile} from '@/constants/router'
import {useSignupEmail} from './signup-email'

const getPeopleDataWaitingKey = 'getPeopleData'
const waitToRefresh = 1000 * 60 * 5
Expand Down Expand Up @@ -398,7 +398,7 @@ const PeopleReloadable = () => {
} = usePeoplePageState()
const refreshCount = usePeopleState(s => s.refreshCount)
const username = useCurrentUserState(s => s.username)
const signupEmail = useSignupState(s => s.justSignedUpEmail)
const signupEmail = useSignupEmail()
const waiting = C.Waiting.useAnyWaiting(getPeopleDataWaitingKey)
const lastRefreshRef = React.useRef(0)
const lastSeenRefreshRef = React.useRef(refreshCount)
Expand Down
13 changes: 6 additions & 7 deletions shared/people/index.shared.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import FollowNotification from './follow-notification'
import FollowSuggestions from './follow-suggestions'
import type {Props} from '.'
import Todo from './todo'
import {useSignupState} from '@/stores/signup'
import {clearSignupEmail} from './signup-email'
// import WotTask from './wot-task'

const itemToComponent: (item: T.Immutable<T.People.PeopleScreenItem>, props: Props) => React.ReactNode = (
Expand Down Expand Up @@ -63,16 +63,15 @@ const itemToComponent: (item: T.Immutable<T.People.PeopleScreenItem>, props: Pro
}
}

function EmailVerificationBanner() {
const clearJustSignedUpEmail = useSignupState(s => s.dispatch.clearJustSignedUpEmail)
const signupEmail = useSignupState(s => s.justSignedUpEmail)
function EmailVerificationBanner(props: {signupEmail: string}) {
const {signupEmail} = props
React.useEffect(
() =>
// Only have a cleanup function
() => {
signupEmail && clearJustSignedUpEmail()
signupEmail && clearSignupEmail()
},
[clearJustSignedUpEmail, signupEmail]
[signupEmail]
)

if (!signupEmail) {
Expand Down Expand Up @@ -117,7 +116,7 @@ function ResentEmailVerificationBanner(props: {resentEmail: string; setResentEma
export function PeoplePageList(props: Props) {
return (
<Kb.Box2 direction="vertical" fullWidth={true} relative={true}>
<EmailVerificationBanner />
<EmailVerificationBanner signupEmail={props.signupEmail} />
<ResentEmailVerificationBanner resentEmail={props.resentEmail} setResentEmail={props.setResentEmail} />
{props.newItems
.filter(item => item.type !== 'todo' || item.todoType !== 'verifyAllEmail' || !props.signupEmail)
Expand Down
35 changes: 35 additions & 0 deletions shared/people/signup-email.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import * as React from 'react'

let signupEmail = ''
const listeners = new Set<() => void>()

const notify = () => {
listeners.forEach(listener => listener())
}

const subscribe = (listener: () => void) => {
listeners.add(listener)
return () => {
listeners.delete(listener)
}
}

export const useSignupEmail = () => React.useSyncExternalStore(subscribe, () => signupEmail)

export const getSignupEmail = () => signupEmail

export const setSignupEmail = (email: string) => {
if (signupEmail === email) {
return
}
signupEmail = email
notify()
}

export const clearSignupEmail = () => {
if (!signupEmail) {
return
}
signupEmail = ''
notify()
}
13 changes: 13 additions & 0 deletions shared/signup/device-name-draft.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import * as S from '@/constants/strings'

let devicename = S.defaultDevicename

export const getSignupDeviceNameDraft = () => devicename

export const setSignupDeviceNameDraft = (nextDevicename: string) => {
devicename = nextDevicename
}

export const clearSignupDeviceNameDraft = () => {
devicename = S.defaultDevicename
}
25 changes: 12 additions & 13 deletions shared/signup/device-name.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,27 @@ import * as Kb from '@/common-adapters'
import * as React from 'react'
import {SignupScreen, errorBanner} from './common'
import * as Provision from '@/stores/provision'
import {useSignupState} from '@/stores/signup'
import {usePushState} from '@/stores/push'
import * as T from '@/constants/types'
import {RPCError} from '@/util/errors'
import {ignorePromise} from '@/constants/utils'
import * as Platforms from '@/constants/platform'
import logger from '@/logger'
import type {StaticScreenProps} from '@react-navigation/core'
import {
clearSignupDeviceNameDraft,
getSignupDeviceNameDraft,
setSignupDeviceNameDraft,
} from './device-name-draft'

type Props = StaticScreenProps<{inviteCode?: string; username?: string}>

const ConnectedEnterDevicename = (p: Props) => {
const initialDevicename = useSignupState(s => s.devicename)
const showPermissionsPrompt = usePushState(s => s.dispatch.showPermissionsPrompt)
const initialDevicename = getSignupDeviceNameDraft()
const inviteCode = p.route.params.inviteCode ?? ''
const username = p.route.params.username ?? ''
const waiting = C.Waiting.useAnyWaiting(C.waitingKeySignup)
const {resetState, setDevicename, showPermissionsPrompt} = useSignupState(
C.useShallow(s => ({
resetState: s.dispatch.resetState,
setDevicename: s.dispatch.setDevicename,
showPermissionsPrompt: s.dispatch.defer.onShowPermissionsPrompt,
}))
)
const {navigateAppend, navigateUp} = C.useRouterState(
C.useShallow(s => ({
navigateAppend: s.dispatch.navigateAppend,
Expand All @@ -34,7 +33,7 @@ const ConnectedEnterDevicename = (p: Props) => {
const [error, setError] = React.useState('')
const onContinue = (devicename: string) => {
setError('')
setDevicename(devicename)
setSignupDeviceNameDraft(devicename)
const f = async () => {
try {
await T.RPCGen.deviceCheckDeviceNameFormatRpcPromise({name: devicename}, C.waitingKeySignup)
Expand All @@ -51,7 +50,7 @@ const ConnectedEnterDevicename = (p: Props) => {
}

try {
showPermissionsPrompt?.({justSignedUp: true})
showPermissionsPrompt({justSignedUp: true})
await T.RPCGen.signupSignupRpcListener({
customResponseIncomingCallMap: {
'keybase.1.gpgUi.wantToAddGPGKey': (_, response) => {
Expand Down Expand Up @@ -79,10 +78,10 @@ const ConnectedEnterDevicename = (p: Props) => {
},
waitingKey: C.waitingKeySignup,
})
resetState()
clearSignupDeviceNameDraft()
} catch (error_) {
if (error_ instanceof RPCError) {
showPermissionsPrompt?.({justSignedUp: false})
showPermissionsPrompt({justSignedUp: false})
navigateAppend({
name: 'signupError',
params: {errorCode: error_.code, errorMessage: error_.desc},
Expand Down
7 changes: 3 additions & 4 deletions shared/signup/email.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,16 @@ import * as React from 'react'
import * as Kb from '@/common-adapters'
import {SignupScreen, errorBanner} from './common'
import {useAddEmail} from '@/settings/account/use-add-email'
import {useSignupState} from '@/stores/signup'
import {usePushState} from '@/stores/push'
import {setSignupEmail} from '@/people/signup-email'

const ConnectedEnterEmail = () => {
const _showPushPrompt = usePushState(s => C.isMobile && !s.hasPermissions && s.showPushPrompt)
const {error, submitEmail, waiting} = useAddEmail()
const clearModals = C.useRouterState(s => s.dispatch.clearModals)
const navigateAppend = C.useRouterState(s => s.dispatch.navigateAppend)
const setJustSignedUpEmail = useSignupState(s => s.dispatch.setJustSignedUpEmail)
const _onSkip = () => {
setJustSignedUpEmail(C.noEmail)
setSignupEmail(C.noEmail)
}

const onSkip = () => {
Expand All @@ -23,7 +22,7 @@ const ConnectedEnterEmail = () => {

const onCreate = (email: string, searchable: boolean) => {
submitEmail(email, searchable, addedEmail => {
setJustSignedUpEmail(addedEmail)
setSignupEmail(addedEmail)
_showPushPrompt ? navigateAppend('settingsPushPrompt', true) : clearModals()
})
}
Expand Down
5 changes: 2 additions & 3 deletions shared/signup/routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,18 @@ import * as React from 'react'
import * as C from '@/constants'
import * as Kb from '@/common-adapters'
import {InfoIcon} from './common'
import {useSignupState} from '@/stores/signup'
import {usePushState} from '@/stores/push'
import {setSignupEmail} from '@/people/signup-email'

const EmailSkipButton = () => {
const showPushPrompt = usePushState(s => C.isMobile && !s.hasPermissions && s.showPushPrompt)
const clearModals = C.useRouterState(s => s.dispatch.clearModals)
const navigateAppend = C.useRouterState(s => s.dispatch.navigateAppend)
const setJustSignedUpEmail = useSignupState(s => s.dispatch.setJustSignedUpEmail)
return (
<Kb.Text
type="BodyBigLink"
onClick={() => {
setJustSignedUpEmail(C.noEmail)
setSignupEmail(C.noEmail)
showPushPrompt ? navigateAppend('settingsPushPrompt', true) : clearModals()
}}
>
Expand Down
5 changes: 2 additions & 3 deletions shared/signup/username.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@ import * as C from '@/constants'
import * as Kb from '@/common-adapters'
import * as React from 'react'
import {SignupScreen, errorBanner} from './common'
import {useSignupState} from '@/stores/signup'
import {useProvisionState} from '@/stores/provision'
import * as T from '@/constants/types'
import {RPCError} from '@/util/errors'
import {ignorePromise} from '@/constants/utils'
import logger from '@/logger'
import {isValidUsername} from '@/util/simple-validators'
import type {StaticScreenProps} from '@react-navigation/core'
import {clearSignupDeviceNameDraft} from './device-name-draft'

type Props = StaticScreenProps<{inviteCode?: string; username?: string}>

const ConnectedEnterUsername = (p: Props) => {
const initialUsername = p.route.params.username ?? ''
const inviteCode = p.route.params.inviteCode ?? ''
const resetState = useSignupState(s => s.dispatch.resetState)
const waiting = C.Waiting.useAnyWaiting(C.waitingKeySignup)
const {navigateAppend, navigateUp} = C.useRouterState(
C.useShallow(s => ({
Expand All @@ -25,7 +24,7 @@ const ConnectedEnterUsername = (p: Props) => {
}))
)
const onBack = () => {
resetState()
clearSignupDeviceNameDraft()
navigateUp()
}
const [error, setError] = React.useState('')
Expand Down
Loading