|
|
@@ -17,7 +17,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
For commercial licensing, please contact [email protected]
|
|
|
*/
|
|
|
|
|
|
-import React, { useContext, useEffect, useState } from 'react';
|
|
|
+import React, { useContext, useEffect, useRef, useState } from 'react';
|
|
|
import { Link, useNavigate } from 'react-router-dom';
|
|
|
import {
|
|
|
API,
|
|
|
@@ -85,6 +85,9 @@ const RegisterForm = () => {
|
|
|
const [agreedToTerms, setAgreedToTerms] = useState(false);
|
|
|
const [hasUserAgreement, setHasUserAgreement] = useState(false);
|
|
|
const [hasPrivacyPolicy, setHasPrivacyPolicy] = useState(false);
|
|
|
+ const [githubButtonText, setGithubButtonText] = useState('使用 GitHub 继续');
|
|
|
+ const [githubButtonDisabled, setGithubButtonDisabled] = useState(false);
|
|
|
+ const githubTimeoutRef = useRef(null);
|
|
|
|
|
|
const logo = getLogo();
|
|
|
const systemName = getSystemName();
|
|
|
@@ -128,6 +131,14 @@ const RegisterForm = () => {
|
|
|
return () => clearInterval(countdownInterval); // Clean up on unmount
|
|
|
}, [disableButton, countdown]);
|
|
|
|
|
|
+ useEffect(() => {
|
|
|
+ return () => {
|
|
|
+ if (githubTimeoutRef.current) {
|
|
|
+ clearTimeout(githubTimeoutRef.current);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }, []);
|
|
|
+
|
|
|
const onWeChatLoginClicked = () => {
|
|
|
setWechatLoading(true);
|
|
|
setShowWeChatLoginModal(true);
|
|
|
@@ -232,7 +243,20 @@ const RegisterForm = () => {
|
|
|
};
|
|
|
|
|
|
const handleGitHubClick = () => {
|
|
|
+ if (githubButtonDisabled) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
setGithubLoading(true);
|
|
|
+ setGithubButtonDisabled(true);
|
|
|
+ setGithubButtonText(t('正在跳转 GitHub...'));
|
|
|
+ if (githubTimeoutRef.current) {
|
|
|
+ clearTimeout(githubTimeoutRef.current);
|
|
|
+ }
|
|
|
+ githubTimeoutRef.current = setTimeout(() => {
|
|
|
+ setGithubLoading(false);
|
|
|
+ setGithubButtonText(t('请求超时,请刷新页面后重新发起 GitHub 登录'));
|
|
|
+ setGithubButtonDisabled(true);
|
|
|
+ }, 20000);
|
|
|
try {
|
|
|
onGitHubOAuthClicked(status.github_client_id);
|
|
|
} finally {
|
|
|
@@ -347,8 +371,9 @@ const RegisterForm = () => {
|
|
|
icon={<IconGithubLogo size='large' />}
|
|
|
onClick={handleGitHubClick}
|
|
|
loading={githubLoading}
|
|
|
+ disabled={githubButtonDisabled}
|
|
|
>
|
|
|
- <span className='ml-3'>{t('使用 GitHub 继续')}</span>
|
|
|
+ <span className='ml-3'>{githubButtonText}</span>
|
|
|
</Button>
|
|
|
)}
|
|
|
|