fix(web): guard invite-settings activate button against double-click (#38337)

This commit is contained in:
Yuzi 2026-07-08 14:28:43 +08:00 committed by GitHub
parent 503d80be1d
commit 3523da508f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -61,6 +61,7 @@ export default function InviteSettingsPage() {
const token = decodeURIComponent(searchParams.get('invite_token') as string) const token = decodeURIComponent(searchParams.get('invite_token') as string)
const locale = useLocale() const locale = useLocale()
const [name, setName] = useState('') const [name, setName] = useState('')
const [isActivating, setIsActivating] = useState(false)
const [language, setLanguage] = useState(() => getInitialLanguage(locale)) const [language, setLanguage] = useState(() => getInitialLanguage(locale))
const [timezone, setTimezone] = useState(() => getBrowserTimezone() || 'America/Los_Angeles') const [timezone, setTimezone] = useState(() => getBrowserTimezone() || 'America/Los_Angeles')
const selectedLanguage = LANGUAGE_OPTIONS.find(item => item.value === language) const selectedLanguage = LANGUAGE_OPTIONS.find(item => item.value === language)
@ -93,6 +94,7 @@ export default function InviteSettingsPage() {
toast.error(t('enterYourName', { ns: 'login' })) toast.error(t('enterYourName', { ns: 'login' }))
return return
} }
setIsActivating(true)
const body = requiresAccountSetup const body = requiresAccountSetup
? { ? {
token, token,
@ -118,8 +120,9 @@ export default function InviteSettingsPage() {
} }
catch { catch {
recheck() recheck()
setIsActivating(false)
} }
}, [language, name, queryClient, recheck, requiresAccountSetup, searchParams, timezone, token, router, t]) }, [isActivating, language, name, queryClient, recheck, requiresAccountSetup, searchParams, timezone, token, router, t])
if (!checkRes) if (!checkRes)
return <Loading /> return <Loading />
@ -228,6 +231,8 @@ export default function InviteSettingsPage() {
variant="primary" variant="primary"
className="w-full" className="w-full"
onClick={handleActivate} onClick={handleActivate}
loading={isActivating}
disabled={isActivating}
> >
{`${t('join', { ns: 'login' })} ${checkRes?.data?.workspace_name}`} {`${t('join', { ns: 'login' })} ${checkRes?.data?.workspace_name}`}
</Button> </Button>