import React, { useState, useEffect } from 'react'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; import Box from '@mui/material/Box'; import { useNavigate, useLocation } from 'react-router-dom'; import { Paper, Button, useTheme, Modal, Typography, Stack, Divider } from "@mui/material"; import { AutoAwesome, VpnKey, Usb, CloudQueue, Description, Favorite, SlowMotionVideo, PlayArrow, ArrowForwardIos, Star } from "@mui/icons-material"; import { useTranslation } from 'react-i18next'; interface MainMenuProps { value: string; handleChangeContent: (newValue: string) => void; } export const MainMenu = ({ value = 'robots', handleChangeContent }: MainMenuProps) => { const theme = useTheme(); const { t } = useTranslation(); const navigate = useNavigate(); const location = useLocation(); const [sponsorModalOpen, setSponsorModalOpen] = useState(false); const [docModalOpen, setDocModalOpen] = useState(false); const [starCount, setStarCount] = useState(null); const [isLoading, setIsLoading] = useState(false); useEffect(() => { const fetchStarCount = async () => { setIsLoading(true); try { const response = await fetch('https://api.github.com/repos/getmaxun/maxun', { headers: { 'Accept': 'application/vnd.github.v3+json' } }); if (response.ok) { const data = await response.json(); setStarCount(data.stargazers_count); } else { console.error('Failed to fetch GitHub star count'); } } catch (error) { console.error('Error fetching GitHub star count:', error); } finally { setIsLoading(false); } }; fetchStarCount(); // Optional: Refresh star count every 5 minutes const intervalId = setInterval(fetchStarCount, 5 * 60 * 1000); return () => clearInterval(intervalId); }, []); const handleChange = (event: React.SyntheticEvent, newValue: string) => { navigate(`/${newValue}`); handleChangeContent(newValue); }; const handleRobotsClick = () => { if (location.pathname !== '/robots') { navigate('/robots'); handleChangeContent('robots'); } }; const defaultcolor = theme.palette.mode === 'light' ? 'black' : 'white'; const buttonStyles = { justifyContent: 'flex-start', textAlign: 'left', fontSize: '15px', letterSpacing: '0.02857em', padding: '20px 20px 20px 22px', minHeight: '48px', minWidth: '100%', display: 'flex', alignItems: 'center', textTransform: 'none', color: theme.palette.mode === 'light' ? '#6C6C6C' : 'inherit', '&:hover': { color: theme.palette.mode === 'light' ? '#6C6C6C' : 'inherit', backgroundColor: theme.palette.mode === 'light' ? '#f5f5f5' : 'inherit', }, }; const starButtonStyles = { justifyContent: 'flex-start', textAlign: 'left', fontSize: '15px', padding: '12px 20px 12px 22px', minHeight: '48px', minWidth: '100%', display: 'flex', alignItems: 'center', textTransform: 'none', color: theme.palette.mode === 'light' ? '#6C6C6C' : 'inherit', backgroundColor: theme.palette.mode === 'light' ? '#fafafa' : 'rgba(255, 255, 255, 0.04)', '&:hover': { color: theme.palette.mode === 'light' ? '#6C6C6C' : 'inherit', backgroundColor: theme.palette.mode === 'light' ? '#f0f0f0' : 'rgba(255, 255, 255, 0.08)', }, }; return ( <> } iconPosition="start" disableRipple={true} sx={{ justifyContent: 'flex-start', textAlign: 'left', fontSize: '16px' }} onClick={handleRobotsClick} /> } iconPosition="start" disableRipple={true} sx={{ justifyContent: 'flex-start', textAlign: 'left', fontSize: '16px' }} /> } iconPosition="start" disableRipple={true} sx={{ justifyContent: 'flex-start', textAlign: 'left', fontSize: '16px' }} /> } iconPosition="start" disableRipple={true} sx={{ justifyContent: 'flex-start', textAlign: 'left', fontSize: '16px' }} /> setDocModalOpen(false)}> setSponsorModalOpen(false)}> Support Maxun Open Source Maxun is built by a small, full-time team. Your donations directly contribute to making it better.
Thank you for your support! 🩷
); };