import { t, Trans } from "@lingui/macro" import { Box, Divider, Group, Menu, SegmentedControl, SegmentedControlItem, useMantineColorScheme } from "@mantine/core" import { showNotification } from "@mantine/notifications" import { client } from "app/client" import { redirectToAbout, redirectToAdminUsers, redirectToMetrics, redirectToSettings } from "app/slices/redirect" import { changeViewMode } from "app/slices/user" import { useAppDispatch, useAppSelector } from "app/store" import { ViewMode } from "app/types" import { useState } from "react" import { TbChartLine, TbHelp, TbLayoutList, TbList, TbMoon, TbNotes, TbPower, TbSettings, TbSun, TbUsers, TbWorldDownload, } from "react-icons/tb" interface ProfileMenuProps { control: React.ReactElement } interface ViewModeControlItem extends SegmentedControlItem { value: ViewMode } const iconSize = 16 const viewModeData: ViewModeControlItem[] = [ { value: "title", label: ( Compact ), }, { value: "cozy", label: ( Cozy ), }, { value: "expanded", label: ( Expanded ), }, ] export function ProfileMenu(props: ProfileMenuProps) { const [opened, setOpened] = useState(false) const viewMode = useAppSelector(state => state.user.settings?.viewMode) const profile = useAppSelector(state => state.user.profile) const admin = useAppSelector(state => state.user.profile?.admin) const dispatch = useAppDispatch() const { colorScheme, toggleColorScheme } = useMantineColorScheme() const dark = colorScheme === "dark" const logout = () => { window.location.href = "logout" } return ( {props.control} {profile && {profile.name}} } onClick={() => { dispatch(redirectToSettings()) setOpened(false) }} > Settings } onClick={() => client.feed.refreshAll().then(() => { showNotification({ message: t`Your feeds have been queued for refresh.`, color: "green", autoClose: 1000, }) setOpened(false) }) } > Fetch all my feeds now Theme : } onClick={() => toggleColorScheme()}> {dark ? Switch to light theme : Switch to dark theme} Display dispatch(changeViewMode(e as ViewMode))} mb="xs" /> {admin && ( <> Admin } onClick={() => { dispatch(redirectToAdminUsers()) setOpened(false) }} > Manage users } onClick={() => { dispatch(redirectToMetrics()) setOpened(false) }} > Metrics )} } onClick={() => { dispatch(redirectToAbout()) setOpened(false) }} > About } onClick={logout}> Logout ) }