Alina Lozowski
Migrating to the React project
e7abd9e
raw
history blame
3.24 kB
import React from "react";
import {
Box,
Typography,
Button,
Chip,
Stack,
Paper,
CircularProgress,
} from "@mui/material";
import HFLogo from "../Logo/HFLogo";
import { useAuth } from "../../hooks/useAuth";
import LogoutIcon from "@mui/icons-material/Logout";
import { useNavigate } from "react-router-dom";
function AuthContainer({ actionText = "DO_ACTION" }) {
const { isAuthenticated, user, login, logout, loading } = useAuth();
const navigate = useNavigate();
const handleLogout = () => {
if (isAuthenticated && logout) {
logout();
navigate("/", { replace: true });
window.location.reload();
}
};
if (loading) {
return (
<Paper
elevation={0}
sx={{
p: 3,
mb: 4,
border: "1px solid",
borderColor: "grey.300",
display: "flex",
flexDirection: "column",
alignItems: "center",
gap: 2,
}}
>
<CircularProgress size={24} />
</Paper>
);
}
if (!isAuthenticated) {
return (
<Paper
elevation={0}
sx={{
p: 3,
mb: 4,
border: "1px solid",
borderColor: "grey.300",
display: "flex",
flexDirection: "column",
alignItems: "center",
gap: 2,
}}
>
<Typography variant="h6" align="center">
Login to {actionText}
</Typography>
<Typography variant="body2" color="text.secondary" align="center">
You need to be logged in with your Hugging Face account to{" "}
{actionText.toLowerCase()}
</Typography>
<Button
variant="contained"
onClick={login}
startIcon={
<Box
sx={{
width: 20,
height: 20,
display: "flex",
alignItems: "center",
}}
>
<HFLogo />
</Box>
}
sx={{
textTransform: "none",
fontWeight: 600,
py: 1,
px: 2,
}}
>
Sign in with Hugging Face
</Button>
</Paper>
);
}
return (
<Paper
elevation={0}
sx={{ p: 2, border: "1px solid", borderColor: "grey.300", mb: 4 }}
>
<Stack
direction="row"
spacing={2}
alignItems="center"
justifyContent="space-between"
>
<Stack direction="row" spacing={1} alignItems="center">
<Typography variant="body1">
Connected as <strong>{user?.username}</strong>
</Typography>
<Chip
label={`Ready to ${actionText}`}
color="success"
size="small"
variant="outlined"
/>
</Stack>
<Button
variant="contained"
onClick={handleLogout}
endIcon={<LogoutIcon />}
color="primary"
sx={{
minWidth: 120,
height: 36,
textTransform: "none",
fontSize: "0.9375rem",
}}
>
Logout
</Button>
</Stack>
</Paper>
);
}
export default AuthContainer;