import { HeaderToggleButton } from './Header'; import { ThemeMode, useThemeConfig } from '@/components/Layout/ThemeProvider'; import { usePopoverState } from '@/hooks'; import { MoonOutlined, SunOutlined } from '@ant-design/icons'; import { ClickAwayListener, List, ListItemButton, Paper, Popper, Typography, useTheme } from '@mui/material'; import { Transitions } from '@/components/@extended'; import { MainCard } from '@/components/MainCard'; import { Brightness6 } from '@mui/icons-material'; import { useCallback } from 'react'; import { useTranslate } from 'ra-core'; type ThemeModePopoverProps = { open: boolean; anchorEl: HTMLElement | null; handleClose: () => void; theme: any; mode: ThemeMode; toggleThemeMode: (theme: ThemeMode) => void; }; function ThemeModePopover({ open, anchorEl, handleClose, theme, mode, toggleThemeMode }: ThemeModePopoverProps) { const translate = useTranslate(); return ( {({ TransitionProps }) => ( toggleThemeMode('light')}> {translate('ra.preferences.theme.light')} toggleThemeMode('dark')}> {translate('ra.preferences.theme.dark')} toggleThemeMode('auto')}> {translate('ra.preferences.theme.auto')} )} ); } function ThemeToggler(): JSX.Element { const theme = useTheme(); const { mode, setMode } = useThemeConfig(); const { open, anchorEl, handleToggle, handleClose } = usePopoverState(); const toggleThemeMode = useCallback( (theme: ThemeMode) => { setMode(theme); }, [setMode] ); const ThemeIcon = useCallback(() => { switch (mode) { case 'light': return ; case 'dark': return ; default: return ; } }, [mode]); return ( {open ? ( ) : null} ); } export { ThemeToggler };