129 lines
5.3 KiB
TypeScript
129 lines
5.3 KiB
TypeScript
import { type PropsWithChildren } from 'react'
|
||
import Box from '@mui/material/Box'
|
||
import Container from '@mui/material/Container'
|
||
import Divider from '@mui/material/Divider'
|
||
import Grid from '@mui/material/Grid'
|
||
import Link from '@mui/material/Link'
|
||
import Stack from '@mui/material/Stack'
|
||
import Typography from '@mui/material/Typography'
|
||
import { Link as RouterLink } from 'react-router-dom'
|
||
import { AppHeader } from '@/app/layout/AppHeader'
|
||
import { STORE_EMAIL, STORE_NAME, STORE_PHONE, VK_URL } from '@/shared/config'
|
||
import vkLogoSrc from '@/shared/assets/vk-logo.svg'
|
||
import { ScrollOnNavigate } from '@/shared/ui/ScrollOnNavigate'
|
||
import { ScrollToTop } from '@/shared/ui/ScrollToTop'
|
||
|
||
export function MainLayout({ children }: PropsWithChildren) {
|
||
const year = new Date().getFullYear()
|
||
|
||
return (
|
||
<Box sx={{ display: 'flex', flexDirection: 'column', minHeight: '100vh', minWidth: '500px' }}>
|
||
<ScrollOnNavigate />
|
||
<ScrollToTop />
|
||
<AppHeader />
|
||
|
||
<Box component="main" sx={{ flex: 1, py: { xs: 4, md: 6 } }}>
|
||
<Container maxWidth="lg">{children}</Container>
|
||
</Box>
|
||
|
||
<Box
|
||
component="footer"
|
||
sx={{
|
||
mt: 'auto',
|
||
borderTop: 1,
|
||
borderColor: 'divider',
|
||
bgcolor: 'background.default',
|
||
py: { xs: 4, md: 6 },
|
||
}}
|
||
>
|
||
<Container maxWidth="lg">
|
||
<Grid container spacing={4}>
|
||
<Grid size={{ xs: 12, sm: 6, md: 3 }}>
|
||
<Typography variant="subtitle1" gutterBottom sx={{ fontWeight: 600, letterSpacing: '-0.25px' }}>
|
||
Магазин
|
||
</Typography>
|
||
<Stack spacing={1.5}>
|
||
<Link component={RouterLink} to="/" color="inherit" underline="hover" variant="body2">
|
||
Каталог
|
||
</Link>
|
||
<Typography variant="body2" color="text.secondary">
|
||
Изделия ручной работы: вещи с характером и вниманием к деталям.
|
||
</Typography>
|
||
</Stack>
|
||
</Grid>
|
||
<Grid size={{ xs: 12, sm: 6, md: 3 }}>
|
||
<Typography variant="subtitle1" gutterBottom sx={{ fontWeight: 600, letterSpacing: '-0.25px' }}>
|
||
Покупателям
|
||
</Typography>
|
||
<Stack spacing={1.5}>
|
||
<Link component={RouterLink} to="/me" color="inherit" underline="hover" variant="body2">
|
||
Личный кабинет
|
||
</Link>
|
||
<Link component={RouterLink} to="/info" color="inherit" underline="hover" variant="body2">
|
||
О покупке
|
||
</Link>
|
||
<Link component={RouterLink} to="/about" color="inherit" underline="hover" variant="body2">
|
||
О нас
|
||
</Link>
|
||
</Stack>
|
||
</Grid>
|
||
<Grid size={{ xs: 12, sm: 6, md: 3 }}>
|
||
<Typography variant="subtitle1" gutterBottom sx={{ fontWeight: 600, letterSpacing: '-0.25px' }}>
|
||
Контакты
|
||
</Typography>
|
||
<Stack spacing={1}>
|
||
<Typography variant="body2">
|
||
Email:{' '}
|
||
<Link href={`mailto:${STORE_EMAIL}`} underline="hover">
|
||
{STORE_EMAIL}
|
||
</Link>
|
||
</Typography>
|
||
<Typography variant="body2">
|
||
Телефон:{' '}
|
||
<Link href={`tel:${STORE_PHONE.replace(/\s/g, '')}`} underline="hover">
|
||
{STORE_PHONE}
|
||
</Link>
|
||
</Typography>
|
||
<Link
|
||
href={VK_URL}
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
color="text.secondary"
|
||
sx={{ display: 'inline-flex', alignItems: 'center', gap: 0.5, '&:hover': { color: '#4A76A8' } }}
|
||
>
|
||
<Box
|
||
component="img"
|
||
src={vkLogoSrc}
|
||
alt="VK"
|
||
sx={{ width: 20, height: 20 }}
|
||
/>
|
||
VK
|
||
</Link>
|
||
</Stack>
|
||
</Grid>
|
||
<Grid size={{ xs: 12, sm: 6, md: 3 }}>
|
||
<Typography variant="subtitle1" gutterBottom sx={{ fontWeight: 600, letterSpacing: '-0.25px' }}>
|
||
Юридическая информация
|
||
</Typography>
|
||
<Stack spacing={1.5}>
|
||
<Link component={RouterLink} to="/privacy" color="inherit" underline="hover" variant="body2">
|
||
Политика конфиденциальности
|
||
</Link>
|
||
<Link component={RouterLink} to="/terms" color="inherit" underline="hover" variant="body2">
|
||
Пользовательское соглашение
|
||
</Link>
|
||
</Stack>
|
||
</Grid>
|
||
</Grid>
|
||
<Divider sx={{ my: 3 }} />
|
||
<Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 0.5 }}>
|
||
<Typography variant="caption" color="text.secondary" sx={{ display: 'block', textAlign: 'center' }}>
|
||
© {year} {STORE_NAME}
|
||
</Typography>
|
||
</Box>
|
||
</Container>
|
||
</Box>
|
||
</Box>
|
||
)
|
||
}
|