|
|
import { Code } from "@mui/icons-material"; |
|
|
import { Tooltip } from "@mui/material"; |
|
|
import React, { useEffect } from "react"; |
|
|
import { UserInfo } from "../types"; |
|
|
import { LoginButton } from "./LoginButton"; |
|
|
|
|
|
|
|
|
const DEV_USER_INFO: UserInfo = { |
|
|
sub: "dev-user-123", |
|
|
email: "dev@example.com", |
|
|
name: "Development User", |
|
|
preferred_username: "devuser", |
|
|
}; |
|
|
const DEV_ACCESS_TOKEN = "dev-mock-token-123"; |
|
|
|
|
|
interface DevModeLoginButtonProps { |
|
|
userInfo: UserInfo | null; |
|
|
accessToken: string | null; |
|
|
loginLabel: string; |
|
|
isDisabled?: boolean; |
|
|
onLoginStateChange: ( |
|
|
userInfo: UserInfo | null, |
|
|
accessToken: string | null, |
|
|
loginLabel: string, |
|
|
) => void; |
|
|
} |
|
|
|
|
|
export const DevModeLoginButton: React.FC<DevModeLoginButtonProps> = ({ |
|
|
userInfo, |
|
|
accessToken, |
|
|
loginLabel, |
|
|
isDisabled = false, |
|
|
onLoginStateChange, |
|
|
}) => { |
|
|
|
|
|
useEffect(() => { |
|
|
if (!userInfo && !accessToken) { |
|
|
onLoginStateChange(null, null, "Dev Mode Login"); |
|
|
} |
|
|
}, [userInfo, accessToken, onLoginStateChange]); |
|
|
|
|
|
const handleLoginClick = () => { |
|
|
if (userInfo) { |
|
|
|
|
|
onLoginStateChange(null, null, "Dev Mode Login"); |
|
|
} else { |
|
|
|
|
|
const label = |
|
|
DEV_USER_INFO.email || |
|
|
DEV_USER_INFO.name || |
|
|
DEV_USER_INFO.preferred_username || |
|
|
"Dev User"; |
|
|
onLoginStateChange(DEV_USER_INFO, DEV_ACCESS_TOKEN, label); |
|
|
} |
|
|
}; |
|
|
|
|
|
const displayLabel = userInfo |
|
|
? `${loginLabel} (Dev Mode)` |
|
|
: loginLabel === "Login with Hugging Face" |
|
|
? "Dev Mode Login" |
|
|
: loginLabel; |
|
|
const isLoggedIn = !!userInfo?.sub; |
|
|
return ( |
|
|
<Tooltip title={isLoggedIn ? "Log out" : ""} placement="right"> |
|
|
<LoginButton |
|
|
icon={<Code />} |
|
|
onClick={handleLoginClick} |
|
|
isLoggedIn={isLoggedIn} |
|
|
disabled={isDisabled} |
|
|
> |
|
|
{displayLabel} |
|
|
</LoginButton> |
|
|
</Tooltip> |
|
|
); |
|
|
}; |
|
|
|