ne minor, a ebat fix
This commit is contained in:
@ -19,6 +19,7 @@ import { fetchPlayer } from './../api';
|
||||
import CalendarMonthIcon from '@mui/icons-material/CalendarMonth';
|
||||
import EmojiEventsIcon from '@mui/icons-material/EmojiEvents';
|
||||
import PersonIcon from '@mui/icons-material/Person';
|
||||
import SettingsIcon from '@mui/icons-material/Settings';
|
||||
declare global {
|
||||
interface Window {
|
||||
electron: {
|
||||
@ -64,10 +65,14 @@ export default function TopBar({ onRegister, username }: TopBarProps) {
|
||||
}, []);
|
||||
|
||||
const [skinUrl, setSkinUrl] = useState<string>('');
|
||||
const [skinVersion, setSkinVersion] = useState(0);
|
||||
const [avatarAnchorEl, setAvatarAnchorEl] = useState<null | HTMLElement>(
|
||||
null,
|
||||
);
|
||||
|
||||
const path = location.pathname || '';
|
||||
const isAuthPage = path.startsWith('/login') || path.startsWith('/registration');
|
||||
|
||||
const TAB_ROUTES: Array<{
|
||||
value: number;
|
||||
match: (p: string) => boolean;
|
||||
@ -219,18 +224,47 @@ export default function TopBar({ onRegister, username }: TopBarProps) {
|
||||
navigate('/login');
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const savedConfig = localStorage.getItem('launcher_config');
|
||||
const loadSkin = useCallback(async () => {
|
||||
if (!isAuthed) {
|
||||
setSkinUrl('');
|
||||
return;
|
||||
}
|
||||
|
||||
const savedConfig = localStorage.getItem('launcher_config');
|
||||
if (!savedConfig) return;
|
||||
|
||||
const config = JSON.parse(savedConfig);
|
||||
const uuid = config.uuid;
|
||||
let cfg: any = null;
|
||||
try {
|
||||
cfg = JSON.parse(savedConfig);
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
|
||||
const uuid = cfg?.uuid;
|
||||
if (!uuid) return;
|
||||
|
||||
fetchPlayer(uuid)
|
||||
.then((player) => setSkinUrl(player.skin_url))
|
||||
.catch((e) => console.error('Не удалось получить скин:', e));
|
||||
}, []);
|
||||
try {
|
||||
const player = await fetchPlayer(uuid);
|
||||
setSkinUrl(player.skin_url || '');
|
||||
} catch (e) {
|
||||
console.error('Не удалось получить скин:', e);
|
||||
setSkinUrl('');
|
||||
}
|
||||
}, [isAuthed]);
|
||||
|
||||
useEffect(() => {
|
||||
loadSkin();
|
||||
}, [loadSkin, location.pathname]);
|
||||
|
||||
useEffect(() => {
|
||||
const handler = () => {
|
||||
setSkinVersion((v) => v + 1);
|
||||
loadSkin();
|
||||
};
|
||||
|
||||
window.addEventListener('skin-updated', handler as EventListener);
|
||||
return () => window.removeEventListener('skin-updated', handler as EventListener);
|
||||
}, [loadSkin]);
|
||||
|
||||
return (
|
||||
<Box
|
||||
@ -251,10 +285,10 @@ export default function TopBar({ onRegister, username }: TopBarProps) {
|
||||
// убрать если не оч
|
||||
|
||||
// стиль как в Registration
|
||||
background:
|
||||
'linear-gradient(71deg, rgba(242,113,33,0.18) 0%, rgba(233,64,205,0.14) 70%, rgba(138,35,135,0.16) 100%)',
|
||||
backdropFilter: 'blur(10px)',
|
||||
boxShadow: '0 8px 30px rgba(0,0,0,0.35)',
|
||||
background: isAuthPage ?
|
||||
'none' : 'linear-gradient(71deg, rgba(242,113,33,0.18) 0%, rgba(233,64,205,0.14) 70%, rgba(138,35,135,0.16) 100%)',
|
||||
backdropFilter: isAuthPage ? 'none' : 'blur(10px)',
|
||||
boxShadow: isAuthPage ? 'none' : '0 8px 30px rgba(0,0,0,0.35)',
|
||||
}}
|
||||
>
|
||||
{/* Левая часть */}
|
||||
@ -433,6 +467,7 @@ export default function TopBar({ onRegister, username }: TopBarProps) {
|
||||
<HeadAvatar
|
||||
skinUrl={skinUrl}
|
||||
size={44}
|
||||
version={skinVersion}
|
||||
style={{
|
||||
borderRadius: '3vw',
|
||||
cursor: 'pointer',
|
||||
@ -530,6 +565,7 @@ export default function TopBar({ onRegister, username }: TopBarProps) {
|
||||
<HeadAvatar
|
||||
skinUrl={skinUrl}
|
||||
size={40}
|
||||
version={skinVersion}
|
||||
style={{ borderRadius: '3vw' }}
|
||||
/>
|
||||
|
||||
@ -547,7 +583,7 @@ export default function TopBar({ onRegister, username }: TopBarProps) {
|
||||
username={username}
|
||||
size="medium"
|
||||
autoUpdate={true}
|
||||
showTooltip={true}
|
||||
showTooltip={false}
|
||||
sx={{
|
||||
border: 'none',
|
||||
padding: '0vw',
|
||||
@ -615,12 +651,31 @@ export default function TopBar({ onRegister, username }: TopBarProps) {
|
||||
<EmojiEventsIcon sx={{ fontSize: '2vw' }} /> Ежедневная награда
|
||||
</MenuItem>
|
||||
|
||||
<MenuItem
|
||||
onClick={() => {
|
||||
handleAvatarMenuClose();
|
||||
navigate('/settings');
|
||||
}}
|
||||
sx={{
|
||||
fontFamily: 'Benzin-Bold',
|
||||
fontSize: '1.5vw',
|
||||
gap: '0.5vw',
|
||||
py: '0.7vw',
|
||||
'&:hover': {
|
||||
bgcolor: 'rgba(255,77,77,0.15)',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<SettingsIcon sx={{ fontSize: '2vw' }} /> Настройки
|
||||
</MenuItem>
|
||||
|
||||
<Divider sx={{ my: '0.4vw', borderColor: 'rgba(255,255,255,0.08)' }} />
|
||||
{!isLoginPage && !isRegistrationPage && username && (
|
||||
<Button
|
||||
variant="outlined"
|
||||
color="primary"
|
||||
onClick={() => {
|
||||
handleAvatarMenuClose();
|
||||
logout();
|
||||
}}
|
||||
sx={{
|
||||
|
||||
Reference in New Issue
Block a user