import { FC, useEffect } from "react"; import IconGithub from "@/assets/icons/github.svg"; import Button from "./styled/Button"; import { useTranslation } from "react-i18next"; type Props = { source?: "widget" | "webapp", client_id?: string; type?: "login" | "register"; }; const GithubLoginButton: FC = ({ type = "login", source = "webapp", client_id }) => { const { t } = useTranslation("auth"); useEffect(() => { const handleGithubLoginStatusChange = (evt: StorageEvent) => { const { key, newValue } = evt; if (key == 'widget' && !!newValue) { console.log("github logged in"); localStorage.removeItem("widget"); if (window.location !== window.parent.location) { // in iframe const parentWindow = window.parent; if (parentWindow) { parentWindow.postMessage("RELOAD_WITH_OPEN", '*'); } } else { // 刷新页面 location.reload(); } } }; if (source == "widget") { window.addEventListener("storage", handleGithubLoginStatusChange); } return () => { if (source == "widget") { window.removeEventListener("storage", handleGithubLoginStatusChange); } }; }, [source]); const handleGithubLogin = () => { const redirectUrl = `https://github.com/login/oauth/authorize?client_id=${client_id}&redirect_uri=${location.origin}/github/cb/${source}.html`; if (source == "webapp") { location.href = redirectUrl; } else { window.open(redirectUrl); } }; return ( ); }; export default GithubLoginButton;