Skip to content

Commit fcf218e

Browse files
WIP
1 parent 3dadd09 commit fcf218e

3 files changed

Lines changed: 31 additions & 69 deletions

File tree

shared/stores/teams.tsx

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as S from '@/constants/strings'
2-
import {ignorePromise, wrapErrors} from '@/constants/utils'
2+
import {ignorePromise} from '@/constants/utils'
33
import * as T from '@/constants/types'
44
import type * as EngineGen from '@/constants/rpc'
55
import {
@@ -836,9 +836,6 @@ export type State = Store & {
836836
) => void
837837
onUsersUpdates?: (updates: ReadonlyArray<{name: string; info: Partial<T.Users.UserInfo>}>) => void
838838
}
839-
dynamic: {
840-
respondToInviteLink?: (accept: boolean) => void
841-
}
842839
addMembersWizardPushMembers: (members: Array<T.Teams.AddingMember>) => void
843840
addMembersWizardRemoveMember: (assertion: string) => void
844841
addMembersWizardSetDefaultChannels: (
@@ -942,7 +939,6 @@ export type State = Store & {
942939
selected: boolean,
943940
clearAll?: boolean
944941
) => void
945-
setRespondToInviteLink: (respondToInviteLink?: (accept: boolean) => void) => void
946942
setNewTeamInfo: (
947943
deletedTeams: ReadonlyArray<T.RPCGen.DeletedTeamInfo>,
948944
newTeams: Set<T.Teams.TeamID>,
@@ -1377,9 +1373,6 @@ export const useTeamsState = Z.createZustand<State>('teams', (set, get) => {
13771373
}
13781374
ignorePromise(f())
13791375
},
1380-
dynamic: {
1381-
respondToInviteLink: undefined,
1382-
},
13831376
eagerLoadTeams: () => {
13841377
if (get().teamMetaSubscribeCount > 0) {
13851378
logger.info('eagerly reloading')
@@ -1701,18 +1694,12 @@ export const useTeamsState = Z.createZustand<State>('teams', (set, get) => {
17011694
},
17021695
joinTeam: teamname => {
17031696
const f = async () => {
1697+
let handedOffToInvite = false
17041698
try {
17051699
await T.RPCGen.teamsTeamAcceptInviteOrRequestAccessRpcListener({
17061700
customResponseIncomingCallMap: {
17071701
'keybase.1.teamsUi.confirmInviteLinkAccept': (params, response) => {
1708-
set(s => {
1709-
s.dispatch.dynamic.respondToInviteLink = wrapErrors((accept: boolean) => {
1710-
set(s => {
1711-
s.dispatch.dynamic.respondToInviteLink = undefined
1712-
})
1713-
response.result(accept)
1714-
})
1715-
})
1702+
handedOffToInvite = true
17161703
navigateAppend(
17171704
{
17181705
name: 'teamInviteLinkJoin',
@@ -1723,20 +1710,20 @@ export const useTeamsState = Z.createZustand<State>('teams', (set, get) => {
17231710
},
17241711
true
17251712
)
1713+
response.result(false)
17261714
},
17271715
},
17281716
incomingCallMap: {},
17291717
params: {tokenOrName: teamname},
17301718
waitingKey: S.waitingKeyTeamsJoinTeam,
17311719
})
17321720
} catch (error) {
1721+
if (handedOffToInvite) {
1722+
return
1723+
}
17331724
if (error instanceof RPCError) {
17341725
logger.info(error.message)
17351726
}
1736-
} finally {
1737-
set(s => {
1738-
s.dispatch.dynamic.respondToInviteLink = undefined
1739-
})
17401727
}
17411728
}
17421729
ignorePromise(f())
@@ -2288,11 +2275,6 @@ export const useTeamsState = Z.createZustand<State>('teams', (set, get) => {
22882275
}
22892276
})
22902277
},
2291-
setRespondToInviteLink: respondToInviteLink => {
2292-
set(s => {
2293-
s.dispatch.dynamic.respondToInviteLink = respondToInviteLink
2294-
})
2295-
},
22962278
setNewTeamInfo: (deletedTeams, newTeams, teamIDToResetUsers) => {
22972279
set(s => {
22982280
s.deletedTeams = T.castDraft(deletedTeams)

shared/teams/join-team/container.tsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import * as C from '@/constants'
22
import * as T from '@/constants/types'
3-
import {wrapErrors} from '@/constants/utils'
43
import * as Kb from '@/common-adapters'
54
import type {RootParamList} from '@/router-v2/route-params'
6-
import {useTeamsState} from '@/stores/teams'
75
import {RPCError} from '@/util/errors'
86
import type {NativeStackNavigationProp} from '@react-navigation/native-stack'
97
import upperFirst from 'lodash/upperFirst'
@@ -30,11 +28,11 @@ const Container = ({initialTeamname, success: successParam}: OwnProps) => {
3028
const [open, setOpen] = React.useState(false)
3129
const [successTeamName, setSuccessTeamName] = React.useState('')
3230
const [name, _setName] = React.useState(initialTeamname ?? '')
33-
const setRespondToInviteLink = useTeamsState(s => s.dispatch.setRespondToInviteLink)
3431
const joinTeam = C.useRPC(T.RPCGen.teamsTeamAcceptInviteOrRequestAccessRpcListener)
3532
const navigation = useNavigation<NativeStackNavigationProp<RootParamList, 'teamJoinTeamDialog'>>()
3633
const navigateUp = C.Router2.navigateUp
3734
const success = !!successParam
35+
const handoffToInviteRef = React.useRef(false)
3836

3937
const setName = (n: string) => _setName(n.toLowerCase())
4038
const onBack = () => navigateUp()
@@ -58,12 +56,7 @@ const Container = ({initialTeamname, success: successParam}: OwnProps) => {
5856
{
5957
customResponseIncomingCallMap: {
6058
'keybase.1.teamsUi.confirmInviteLinkAccept': (params, response) => {
61-
setRespondToInviteLink(
62-
wrapErrors((accept: boolean) => {
63-
setRespondToInviteLink(undefined)
64-
response.result(accept)
65-
})
66-
)
59+
handoffToInviteRef.current = true
6760
C.Router2.navigateAppend(
6861
{
6962
name: 'teamInviteLinkJoin',
@@ -74,6 +67,7 @@ const Container = ({initialTeamname, success: successParam}: OwnProps) => {
7467
},
7568
true
7669
)
70+
response.result(false)
7771
},
7872
},
7973
incomingCallMap: {},
@@ -87,6 +81,10 @@ const Container = ({initialTeamname, success: successParam}: OwnProps) => {
8781
navigation.setParams({initialTeamname, success: true})
8882
},
8983
error => {
84+
if (handoffToInviteRef.current) {
85+
handoffToInviteRef.current = false
86+
return
87+
}
9088
setErrorText(upperFirst(getJoinTeamError(error)))
9189
}
9290
)

shared/teams/join-team/join-from-invite.tsx

Lines changed: 17 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as C from '@/constants'
22
import * as T from '@/constants/types'
33
import * as Kb from '@/common-adapters'
4-
import {useTeamsState} from '@/stores/teams'
54
import {RPCError} from '@/util/errors'
65
import * as React from 'react'
76
import {useSafeNavigation} from '@/util/safe-navigation'
@@ -31,27 +30,19 @@ const getInviteError = (error: unknown, missingKey: boolean) => {
3130
const JoinFromInvite = ({inviteDetails: initialInviteDetails, inviteID = '', inviteKey = ''}: Props) => {
3231
const [details, setDetails] = React.useState(initialInviteDetails)
3332
const [error, setError] = React.useState('')
34-
const [localRespondToInviteLink, setLocalRespondToInviteLink] = React.useState<
35-
((accept: boolean) => void) | undefined
36-
>()
37-
const storedRespondToInviteLink = useTeamsState(s => s.dispatch.dynamic.respondToInviteLink)
38-
const respondToInviteLink = localRespondToInviteLink ?? storedRespondToInviteLink
3933
const loaded = details !== undefined || !!error
4034
const joinTeam = C.useRPC(T.RPCGen.teamsTeamAcceptInviteOrRequestAccessRpcListener)
4135
const requestInviteLinkDetails = C.useRPC(T.RPCGen.teamsGetInviteLinkDetailsRpcPromise)
4236
const [clickedJoin, setClickedJoin] = React.useState(false)
4337
const [showSuccess, setShowSuccess] = React.useState(false)
4438
const rpcWaiting = C.Waiting.useAnyWaiting(C.waitingKeyTeamsJoinTeam)
4539
const waiting = rpcWaiting && clickedJoin
46-
const wasWaitingRef = React.useRef(waiting)
4740

4841
React.useEffect(() => {
4942
setDetails(initialInviteDetails)
5043
setError('')
51-
setLocalRespondToInviteLink(undefined)
5244
setClickedJoin(false)
5345
setShowSuccess(false)
54-
wasWaitingRef.current = false
5546
}, [initialInviteDetails, inviteID, inviteKey])
5647

5748
React.useEffect(() => {
@@ -69,52 +60,43 @@ const JoinFromInvite = ({inviteDetails: initialInviteDetails, inviteID = '', inv
6960
setError(getInviteError(rpcError, true))
7061
}
7162
)
72-
return
7363
}
64+
}, [inviteID, inviteKey, loaded, requestInviteLinkDetails])
65+
66+
const nav = useSafeNavigation()
7467

68+
const onNavUp = () => nav.safeNavigateUp()
69+
const onJoinTeam = () => {
70+
if (!inviteKey) {
71+
return
72+
}
73+
setClickedJoin(true)
74+
setError('')
7575
joinTeam(
7676
[
7777
{
7878
customResponseIncomingCallMap: {
7979
'keybase.1.teamsUi.confirmInviteLinkAccept': (params, response) => {
8080
setDetails(params.details)
81-
setLocalRespondToInviteLink(() => accept => {
82-
setLocalRespondToInviteLink(undefined)
83-
response.result(accept)
84-
})
81+
response.result(true)
8582
},
8683
},
8784
incomingCallMap: {},
8885
params: {tokenOrName: inviteKey},
8986
waitingKey: C.waitingKeyTeamsJoinTeam,
9087
},
9188
],
92-
() => {},
89+
() => {
90+
setClickedJoin(false)
91+
setShowSuccess(true)
92+
},
9393
rpcError => {
94-
setLocalRespondToInviteLink(undefined)
94+
setClickedJoin(false)
9595
setError(getInviteError(rpcError, false))
9696
}
9797
)
98-
}, [inviteID, inviteKey, joinTeam, loaded, requestInviteLinkDetails])
99-
100-
const nav = useSafeNavigation()
101-
102-
const onNavUp = () => nav.safeNavigateUp()
103-
const onJoinTeam = () => {
104-
setClickedJoin(true)
105-
respondToInviteLink?.(true)
106-
}
107-
const onClose = () => {
108-
respondToInviteLink?.(true)
109-
onNavUp()
11098
}
111-
React.useEffect(() => {
112-
wasWaitingRef.current = waiting
113-
}, [waiting])
114-
115-
React.useEffect(() => {
116-
setShowSuccess(wasWaitingRef.current && !waiting && !error)
117-
}, [waiting, error])
99+
const onClose = () => onNavUp()
118100

119101
const teamname = (details?.teamName.parts || []).join('.')
120102

0 commit comments

Comments
 (0)