import { useEffect, FC } from 'react'; import { KEY_LOCAL_MAGIC_TOKEN } from "../../app/config"; import { useLoginMutation } from "../../app/services/auth"; import toast from "react-hot-toast"; import { FetchBaseQueryError } from "@reduxjs/toolkit/dist/query"; export type GithubLoginSource = "widget" | "webapp" type Props = { code: string, from?: GithubLoginSource } const GithubCallback: FC = ({ code, from = "webapp" }) => { //拿本地存的magic token const magic_token = localStorage.getItem(KEY_LOCAL_MAGIC_TOKEN); const [login, { isLoading, isSuccess, error }] = useLoginMutation(); useEffect(() => { if (code) { login({ magic_token, code, type: "github" }); } }, [code]); useEffect(() => { if (isSuccess) { toast.success("Login Successfully"); // 通知widget if (from == 'widget') { localStorage.setItem("widget", `${new Date().getTime()}`); } // webapp 跳回首页 if (from == 'webapp') { location.href = "/"; } } }, [isSuccess, from]); useEffect(() => { if (error) { // todo: why? switch ((error as FetchBaseQueryError).status) { case 410: toast.error( "No associated account found, please contact user admin for an invitation link to join." ); break; default: toast.error("Something Error"); break; } return; } }, [error]); if (error) return Something Error; return
{isSuccess && from == 'widget' &&

Please close this window and return widget window

} {isLoading ? "Github Logging in..." : "Github Login Success!"}
; }; export default GithubCallback;