fix: patch refresh token logic (#1665)

This commit is contained in:
Himself65
2023-03-23 00:12:20 -05:00
committed by GitHub
parent 059d9e5de2
commit 2551785451
3 changed files with 58 additions and 21 deletions

View File

@@ -1,8 +1,11 @@
import { toast } from '@affine/component';
import type { MessageCode } from '@affine/datacenter';
import { MessageCode } from '@affine/datacenter';
import { messages } from '@affine/datacenter';
import type React from 'react';
import { useEffect } from 'react';
import { memo, useEffect, useState } from 'react';
import { useOnGoogleLogout } from '../../../hooks/use-on-google-logout';
import { apis } from '../../../shared/apis';
declare global {
interface DocumentEventMap {
@@ -12,20 +15,42 @@ declare global {
}
}
export const MessageCenter: React.FC = () => {
export const MessageCenter: React.FC = memo(function MessageCenter() {
const [popup, setPopup] = useState(false);
const onLogout = useOnGoogleLogout();
useEffect(() => {
const listener = (
event: CustomEvent<{
code: MessageCode;
}>
) => {
toast(messages[event.detail.code].message);
// fixme: need refactor
// - login and refresh refresh logic should be refactored
// - error message should be refactored
if (
!popup &&
(event.detail.code === MessageCode.refreshTokenError ||
event.detail.code === MessageCode.loginError)
) {
setPopup(true);
apis
.signInWithGoogle()
.then(() => {
setPopup(false);
})
.catch(() => {
setPopup(false);
onLogout();
});
} else {
toast(messages[event.detail.code].message);
}
};
document.addEventListener('affine-error', listener);
return () => {
document.removeEventListener('affine-error', listener);
};
}, []);
}, [onLogout, popup]);
return null;
};
});