Merge branch 'refactor'

This commit is contained in:
@kirill.komarov
2026-05-13 22:07:46 +05:00
parent 3c9797af4a
commit a06f9cf2c4
85 changed files with 3762 additions and 2072 deletions
@@ -0,0 +1,100 @@
import Box from '@mui/material/Box'
import Button from '@mui/material/Button'
import Divider from '@mui/material/Divider'
import Drawer from '@mui/material/Drawer'
import type { SelectChangeEvent } from '@mui/material/Select'
import Typography from '@mui/material/Typography'
import { STORE_NAME } from '@/shared/config'
import type { AuthUser } from '@/shared/model/auth'
import { BearLogo } from '@/shared/ui/BearLogo'
type ThemeControls = {
scheme: string
mode: string
resolvedMode: 'light' | 'dark'
onSchemeChange: (e: SelectChangeEvent<string>) => void
onModeChange: (e: SelectChangeEvent<string>) => void
onCycleMode: () => void
}
type Props = {
open: boolean
onClose: () => void
user: AuthUser | null
isAdmin: boolean
navItems: { label: string; to: string }[]
themeControls: ThemeControls
onNavigate: (to: string) => void
onLogout: () => void
ThemeControlsMobile: React.ComponentType<ThemeControls>
}
export function NavigationDrawer({
open,
onClose,
user,
isAdmin,
navItems,
themeControls,
onNavigate,
onLogout,
ThemeControlsMobile,
}: Props) {
const go = (to: string) => {
onClose()
onNavigate(to)
}
return (
<Drawer
open={open}
onClose={onClose}
slotProps={{ paper: { sx: { width: 320, maxWidth: '85vw' } } }}
ModalProps={{ keepMounted: true }}
>
<Box sx={{ p: 2 }}>
<Box sx={{ mb: 2, display: 'flex', alignItems: 'center', gap: 1 }}>
<BearLogo sx={{ fontSize: 28 }} />
<Typography variant="h6">{STORE_NAME}</Typography>
</Box>
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
{navItems.map((i) => (
<Button key={i.to} variant="text" onClick={() => go(i.to)} sx={{ justifyContent: 'flex-start' }}>
{i.label}
</Button>
))}
{!isAdmin && (
<Button variant="text" onClick={() => go(user ? '/cart' : '/auth')} sx={{ justifyContent: 'flex-start' }}>
Корзина
</Button>
)}
{user && !isAdmin && (
<Button variant="text" onClick={() => go('/me/orders')} sx={{ justifyContent: 'flex-start' }}>
Заказы
</Button>
)}
{!isAdmin && (
<Button variant="text" onClick={() => go(user ? '/me' : '/auth')} sx={{ justifyContent: 'flex-start' }}>
{user ? 'Профиль' : 'Вход / регистрация'}
</Button>
)}
{!user && isAdmin && (
<Button variant="text" onClick={() => go('/auth')} sx={{ justifyContent: 'flex-start' }}>
Вход / регистрация
</Button>
)}
{user && (
<Button variant="text" color="error" onClick={onLogout} sx={{ justifyContent: 'flex-start' }}>
Выход
</Button>
)}
</Box>
<Divider sx={{ my: 2 }} />
<ThemeControlsMobile {...themeControls} />
</Box>
</Drawer>
)
}