Files
element-call/src/UserMenu.jsx

69 lines
1.7 KiB
React
Raw Normal View History

2021-12-03 16:42:29 -08:00
import React, { useCallback, useMemo } from "react";
import { ButtonTooltip, HeaderButton } from "./RoomButton";
2021-12-06 17:34:10 -08:00
import { PopoverMenuTrigger } from "./PopoverMenu";
2021-12-03 16:42:29 -08:00
import { ReactComponent as UserIcon } from "./icons/User.svg";
import { ReactComponent as LoginIcon } from "./icons/Login.svg";
import { ReactComponent as LogoutIcon } from "./icons/Logout.svg";
import styles from "./UserMenu.module.css";
2021-12-06 17:34:10 -08:00
import { Item } from "@react-stately/collections";
import { Menu } from "./Menu";
2021-12-03 16:42:29 -08:00
export function UserMenu({ userName, signedIn, onLogin, onLogout }) {
const onAction = useCallback((value) => {
switch (value) {
case "user":
break;
case "logout":
onLogout();
break;
case "login":
onLogin();
break;
}
});
const items = useMemo(() => {
if (signedIn) {
return [
{
key: "user",
icon: UserIcon,
label: userName,
},
{
key: "logout",
label: "Sign Out",
icon: LogoutIcon,
},
];
} else {
return [
{
key: "login",
label: "Sign In",
icon: LoginIcon,
},
];
}
}, [signedIn, userName]);
return (
2021-12-06 17:34:10 -08:00
<PopoverMenuTrigger onAction={onAction} placement="bottom right">
2021-12-06 12:19:38 -08:00
<HeaderButton className={styles.userButton}>
2021-12-03 16:42:29 -08:00
<ButtonTooltip>Profile</ButtonTooltip>
2021-12-06 12:19:38 -08:00
<UserIcon />
2021-12-03 16:42:29 -08:00
</HeaderButton>
{(props) => (
2021-12-06 17:34:10 -08:00
<Menu {...props} label="User menu">
2021-12-03 16:42:29 -08:00
{items.map(({ key, icon: Icon, label }) => (
2021-12-06 17:34:10 -08:00
<Item key={key} textValue={label}>
2021-12-03 16:42:29 -08:00
<Icon />
<span>{label}</span>
2021-12-06 17:34:10 -08:00
</Item>
2021-12-03 16:42:29 -08:00
))}
2021-12-06 17:34:10 -08:00
</Menu>
2021-12-03 16:42:29 -08:00
)}
2021-12-06 17:34:10 -08:00
</PopoverMenuTrigger>
2021-12-03 16:42:29 -08:00
);
}