added theme icon and login button when user is unauthenticated

This commit is contained in:
Carter 2024-11-01 11:10:20 -06:00
parent 5977aa8edf
commit f64e5ad231
3 changed files with 107 additions and 20 deletions

View file

@ -19,6 +19,15 @@ const reducer = (state: GlobalState, action: GlobalStateAction): GlobalState =>
};
};
const globalDefault = {
user: User.create(),
team: Team.create(),
as: "",
showErrors: false,
userTeamPermissions: [],
backgroundTasksComplete: false
}
export default function UserWrapper() {
const [count, setCount] = useState(0)
const [loading, setLoading] = useState(false)
@ -47,17 +56,13 @@ export default function UserWrapper() {
})
}).catch(err => {
console.log(err.toString())
if (err.toString().includes("CORS")) {
setMessage("CORS error")
} else {
setMessage("Loading failed, refresh may help")
}
setGlobal(globalDefault)
})
.finally(() => {
setLoading(false)
hasFetched.current = true;
})
}, [])
}, [setGlobal, setUser])
useEffect(() => {
if (loading) return;

44
src/common/ThemeIcon.tsx Normal file
View file

@ -0,0 +1,44 @@
import { Tooltip, useTheme } from "@mui/material";
import DarkThemeIcon from "@mui/icons-material/Brightness3"
import LightThemeIcon from "@mui/icons-material/Brightness7";
import classNames from "classnames";
import { makeStyles } from "@mui/styles";
const useStyles = makeStyles(() => ({
darkThemeIcon: {
borderRadius: "50%",
padding: "1px",
backgroundColor: "#003366",
color: "#fefcd7 !important"
},
lightThemeIcon: {
color: "#fdb813 !important"
}
}));
export default function ThemeIcon() {
const classes = useStyles();
const theme = useTheme();
const lightThemeIcon = () => (
<DarkThemeIcon className={classNames(classes.darkThemeIcon)} fontSize="small" />
);
const darkThemeIcon = () => (
<LightThemeIcon className={classNames(classes.lightThemeIcon)} fontSize="small" />
);
if (theme.palette.mode === "light") {
return (
<Tooltip title="Switch to Dark Theme" placement="bottom-end">
{darkThemeIcon()}
</Tooltip>
);
} else {
return (
<Tooltip title="Switch to Light Theme" placement="bottom-end">
{lightThemeIcon()}
</Tooltip>
);
}
}

View file

@ -1,10 +1,12 @@
import { Avatar, Box, Button, PaletteColor, Theme, Typography, useTheme } from "@mui/material";
import { Avatar, Box, Button, IconButton, PaletteColor, Theme, Typography, useTheme } from "@mui/material";
import { useGlobalState } from "../providers/StateContainer";
import { getSecondaryColour, getSignatureAccentColour } from "../services/whiteLabel";
import { makeStyles } from "@mui/styles";
import { Person } from "@mui/icons-material";
import { useEffect } from "react";
import { LockOpen, Person, Lock, } from "@mui/icons-material";
import { useEffect, useState } from "react";
import UserTeamName from "./UserTeamName";
import React from "react";
import ThemeIcon from "../common/ThemeIcon";
const useStyles = makeStyles((theme: Theme) => ({
userAvatar: {
@ -29,7 +31,14 @@ const useStyles = makeStyles((theme: Theme) => ({
},
red: {
color: "var(--status-alert)"
}
},
rightIcon: {
marginLeft: theme.spacing(1)
},
signIn: {
color: getSignatureAccentColour(),
borderColor: getSignatureAccentColour()
},
}));
interface Props {
@ -45,17 +54,46 @@ export default function UserMenu(props: Props) {
const name = user.name();
const picture = user.settings.avatar;
const hasAdmin = user.hasFeature ? user.hasFeature("admin") : false;
const allowedToCopyToken = user.allowedTo("copy-token");
const hasTeams = user.hasFeature ? user.hasFeature("teams") : false;
console.log(hasTeams)
// const hasBilling = user.settings.useTeam
// ? userTeamPermissions.includes(pond.Permission.PERMISSION_BILLING)
// : true;
const [lockIsHovered, setLockIsHovered] = useState<boolean>(false);
// const hasAdmin = user.hasFeature ? user.hasFeature("admin") : false;
// const allowedToCopyToken = user.allowedTo("copy-token");
// const hasTeams = user.hasFeature ? user.hasFeature("teams") : false;
useEffect(() => {
console.log(user)
}, [user])
const lockHover = () => {
setLockIsHovered(true);
};
const lockNoHover = () => {
setLockIsHovered(false);
};
const unauthenticatedUserMenu = () => {
return (
<React.Fragment>
<Button
variant="outlined"
aria-label="Sign In"
// onClick={handleLogin}
onMouseEnter={lockHover}
onMouseLeave={lockNoHover}
size="small"
className={classes.signIn}>
Sign In
{lockIsHovered ? (
<LockOpen className={classes.rightIcon} fontSize="small" />
) : (
<Lock className={classes.rightIcon} fontSize="small" />
)}
</Button>
<IconButton onClick={toggleTheme} className={classes.rightIcon} aria-label="Toggle Theme">
<ThemeIcon />
</IconButton>
</React.Fragment>
);
};
if (user.id().length < 1) return unauthenticatedUserMenu()
return (
<Button