fix: Invite link registration not navigating to homepage (#30766)
Co-authored-by: Douglas Fabris <27704687+dougfabris@users.noreply.github.com>pull/30833/head^2
parent
14fc38e60e
commit
7da1edf866
@ -0,0 +1,6 @@ |
||||
--- |
||||
"@rocket.chat/ui-contexts": patch |
||||
"@rocket.chat/web-ui-registration": patch |
||||
--- |
||||
|
||||
Fixed an issue in the invite registration flow in which the user would not be automatically redirected to the homepage upon succesfully submiting the user registration form. |
||||
@ -0,0 +1,35 @@ |
||||
import { useEndpoint, useRouter, useToastMessageDispatch, useTranslation } from '@rocket.chat/ui-contexts'; |
||||
import { useMutation } from '@tanstack/react-query'; |
||||
|
||||
export const useInviteTokenMutation = () => { |
||||
const t = useTranslation(); |
||||
const router = useRouter(); |
||||
|
||||
const dispatchToastMessage = useToastMessageDispatch(); |
||||
|
||||
const getInviteRoom = useEndpoint('POST', '/v1/useInviteToken'); |
||||
|
||||
const { mutate } = useMutation({ |
||||
mutationFn: (token: string) => getInviteRoom({ token }), |
||||
onSuccess: (result) => { |
||||
if (!result.room.name) { |
||||
dispatchToastMessage({ type: 'error', message: t('Failed_to_activate_invite_token') }); |
||||
router.navigate('/home'); |
||||
return; |
||||
} |
||||
|
||||
if (result.room.t === 'p') { |
||||
router.navigate(`/group/${result.room.name}`); |
||||
return; |
||||
} |
||||
|
||||
router.navigate(`/channel/${result.room.name}`); |
||||
}, |
||||
onError: () => { |
||||
dispatchToastMessage({ type: 'error', message: t('Failed_to_activate_invite_token') }); |
||||
router.navigate('/home'); |
||||
}, |
||||
}); |
||||
|
||||
return mutate; |
||||
}; |
||||
@ -0,0 +1,53 @@ |
||||
import { useEndpoint, useSessionDispatch, useSetting, useToastMessageDispatch, useTranslation } from '@rocket.chat/ui-contexts'; |
||||
import { useQuery } from '@tanstack/react-query'; |
||||
|
||||
import { useInviteTokenMutation } from './useInviteTokenMutation'; |
||||
|
||||
export const useValidateInviteQuery = (userId: string | null, token: string | undefined) => { |
||||
const t = useTranslation(); |
||||
|
||||
const registrationForm = useSetting('Accounts_RegistrationForm'); |
||||
|
||||
const setLoginDefaultState = useSessionDispatch('loginDefaultState'); |
||||
const dispatchToastMessage = useToastMessageDispatch(); |
||||
const getInviteRoomMutation = useInviteTokenMutation(); |
||||
|
||||
const handleValidateInviteToken = useEndpoint('POST', '/v1/validateInviteToken'); |
||||
|
||||
return useQuery( |
||||
['invite', token], |
||||
async () => { |
||||
if (!token) { |
||||
return false; |
||||
} |
||||
|
||||
try { |
||||
const { valid } = await handleValidateInviteToken({ token }); |
||||
|
||||
return valid; |
||||
} catch (error) { |
||||
dispatchToastMessage({ type: 'error', message: t('Failed_to_validate_invite_token') }); |
||||
return false; |
||||
} |
||||
}, |
||||
{ |
||||
onSuccess: async (valid) => { |
||||
if (!token) { |
||||
return; |
||||
} |
||||
|
||||
if (registrationForm !== 'Disabled') { |
||||
setLoginDefaultState('register'); |
||||
} else { |
||||
setLoginDefaultState('login'); |
||||
} |
||||
|
||||
if (!valid || !userId) { |
||||
return; |
||||
} |
||||
|
||||
return getInviteRoomMutation(token); |
||||
}, |
||||
}, |
||||
); |
||||
}; |
||||
Loading…
Reference in new issue