feat: redesign artist page layout and social icons
This commit is contained in:
@@ -12,6 +12,7 @@ import Button from '@mui/material/Button'
|
||||
import CardActionArea from '@mui/material/CardActionArea'
|
||||
import Chip from '@mui/material/Chip'
|
||||
import Container from '@mui/material/Container'
|
||||
import Divider from '@mui/material/Divider'
|
||||
import Grid from '@mui/material/Grid'
|
||||
import Paper from '@mui/material/Paper'
|
||||
import Card from '@mui/material/Card'
|
||||
@@ -20,6 +21,7 @@ import Typography from '@mui/material/Typography'
|
||||
import {green} from '@mui/material/colors'
|
||||
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
|
||||
import KeyboardBackspaceIcon from '@mui/icons-material/KeyboardBackspace'
|
||||
import MusicNoteIcon from '@mui/icons-material/MusicNote'
|
||||
import VerifiedIcon from '@mui/icons-material/Verified'
|
||||
|
||||
import {formatKuveti} from '../../lib/kuveti'
|
||||
@@ -51,28 +53,32 @@ export default function AwtisDetay({anAwtis}) {
|
||||
: null
|
||||
|
||||
return (
|
||||
<Container>
|
||||
<Box sx={{mt: 8, mb: 2}}>
|
||||
<Typography sx={{textAlign: 'center'}} variant='h6' component='h1'>
|
||||
{alias}
|
||||
</Typography>
|
||||
<Container maxWidth='sm'>
|
||||
<Box sx={{mt: 2, mb: 1}}>
|
||||
<Link passHref href='/awtis'>
|
||||
<Button size='small' variant='text' startIcon={<KeyboardBackspaceIcon />} sx={{color: 'text.secondary'}}>
|
||||
Retour aux artistes
|
||||
</Button>
|
||||
</Link>
|
||||
</Box>
|
||||
|
||||
<Box sx={{display: 'flex', justifyContent: 'center', mb: 2}}>
|
||||
{/* Héro */}
|
||||
<Box sx={{display: 'flex', flexDirection: 'column', alignItems: 'center', pt: 2, pb: 3}}>
|
||||
<Box sx={{
|
||||
width: 200, height: 200,
|
||||
width: 150, height: 150,
|
||||
borderRadius: '50%',
|
||||
border: `2px solid ${green[500]}`,
|
||||
border: `3px solid ${green[500]}`,
|
||||
overflow: 'hidden',
|
||||
position: 'relative',
|
||||
flexShrink: 0,
|
||||
mb: 2,
|
||||
}}>
|
||||
{photoUrl ? (
|
||||
<Image
|
||||
src={photoUrl}
|
||||
alt={`Photo ${alias}`}
|
||||
width={200}
|
||||
height={200}
|
||||
width={150}
|
||||
height={150}
|
||||
placeholder='blur'
|
||||
blurDataURL={BLUR_DATA_URL}
|
||||
style={{objectFit: 'cover', width: '100%', height: '100%'}}
|
||||
@@ -81,32 +87,44 @@ export default function AwtisDetay({anAwtis}) {
|
||||
<Box sx={{width: '100%', height: '100%', bgcolor: 'grey.300'}} />
|
||||
)}
|
||||
</Box>
|
||||
|
||||
<Typography variant='h5' component='h1' sx={{fontWeight: 700, mb: 1, textAlign: 'center'}}>
|
||||
{alias}
|
||||
</Typography>
|
||||
|
||||
{rezoSosyal?.length > 0 && (
|
||||
<Box sx={{display: 'flex', gap: 0.75, flexWrap: 'wrap', justifyContent: 'center', mb: 1.5}}>
|
||||
{rezoSosyal.map((rezo, i) => (
|
||||
<SocialButton key={i} rezo={rezo} />
|
||||
))}
|
||||
</Box>
|
||||
)}
|
||||
|
||||
{isExclusiveArtist && (
|
||||
<Box sx={{display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 0.5}}>
|
||||
<Chip
|
||||
icon={<VerifiedIcon sx={{fontSize: 16}} />}
|
||||
label={`Artiste ${EXCLUSIVE_LABEL}`}
|
||||
size='small'
|
||||
sx={{bgcolor: '#FFD700', color: '#000', fontWeight: 700, '& .MuiChip-icon': {color: '#000'}}}
|
||||
/>
|
||||
<Typography variant='caption' sx={{color: 'text.secondary', textAlign: 'center', maxWidth: 340}}>
|
||||
Certains morceaux sont publiés en exclusivité sur PAWÒL-NU, avant toute sortie sur les plateformes de streaming.
|
||||
</Typography>
|
||||
</Box>
|
||||
)}
|
||||
</Box>
|
||||
|
||||
{isExclusiveArtist && (
|
||||
<Box sx={{display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 0.75, mb: 2}}>
|
||||
<Chip
|
||||
icon={<VerifiedIcon sx={{fontSize: 16}} />}
|
||||
label={`Artiste ${EXCLUSIVE_LABEL}`}
|
||||
size='small'
|
||||
sx={{bgcolor: '#FFD700', color: '#000', fontWeight: 700, '& .MuiChip-icon': {color: '#000'}}}
|
||||
/>
|
||||
<Typography variant='caption' sx={{color: 'text.secondary', textAlign: 'center'}}>
|
||||
Certains morceaux sont publiés en exclusivité sur PAWÒL-NU, avant toute sortie sur les plateformes de streaming.
|
||||
</Typography>
|
||||
</Box>
|
||||
)}
|
||||
|
||||
<Grid sx={{alignItems: 'center'}} container direction='column' spacing={3}>
|
||||
<Grid container direction='column' spacing={2}>
|
||||
{biyo && (
|
||||
<Grid size={{xs: 12, md: 6}}>
|
||||
<Card sx={{minWidth: 300}}>
|
||||
<Grid size={12}>
|
||||
<Card>
|
||||
<CardActionArea onClick={() => meteEsByografiOuve(true)}>
|
||||
<CardContent>
|
||||
<Typography gutterBottom variant='body1' component='h2'>
|
||||
<strong>Biographie</strong>
|
||||
<Typography gutterBottom variant='body2' sx={{fontWeight: 700, textTransform: 'uppercase', color: 'text.secondary', letterSpacing: 0.5}}>
|
||||
Biographie
|
||||
</Typography>
|
||||
<Typography textalign='justify' variant='subtitle1' component='h3'>
|
||||
<Typography variant='body1'>
|
||||
{biyo}
|
||||
</Typography>
|
||||
</CardContent>
|
||||
@@ -114,13 +132,21 @@ export default function AwtisDetay({anAwtis}) {
|
||||
</Card>
|
||||
</Grid>
|
||||
)}
|
||||
|
||||
{hasStreaming && (
|
||||
<Grid size={{xs: 12, md: 6}}>
|
||||
<Grid size={12}>
|
||||
<Card sx={{overflow: 'hidden'}}>
|
||||
<Box sx={{px: 2, pt: 1.5, pb: 0.5, display: 'flex', alignItems: 'center', gap: 0.75}}>
|
||||
<MusicNoteIcon sx={{fontSize: 14, color: 'text.secondary'}} />
|
||||
<Typography variant='caption' sx={{fontWeight: 700, textTransform: 'uppercase', color: 'text.secondary', letterSpacing: 0.5}}>
|
||||
Titre phare
|
||||
</Typography>
|
||||
</Box>
|
||||
<Divider />
|
||||
<Grid container>
|
||||
{coverUrl && (
|
||||
<Grid size={{xs: 12, sm: 4}}>
|
||||
<Box sx={{position: 'relative', minHeight: 140, height: '100%'}}>
|
||||
<Box sx={{position: 'relative', minHeight: 130, height: '100%'}}>
|
||||
<Image
|
||||
src={coverUrl}
|
||||
alt={titrePhare.titre}
|
||||
@@ -138,7 +164,7 @@ export default function AwtisDetay({anAwtis}) {
|
||||
<Typography variant='subtitle1' sx={{fontWeight: 700}} gutterBottom>
|
||||
{titrePhare.titre}
|
||||
</Typography>
|
||||
<Typography variant='caption' sx={{color: 'text.secondary', display: 'block', mb: 1.5}}>
|
||||
<Typography variant='caption' sx={{color: 'text.secondary', display: 'block', mb: 1}}>
|
||||
Écouter sur
|
||||
</Typography>
|
||||
<Box sx={{display: 'flex', flexWrap: 'wrap', gap: 1}}>
|
||||
@@ -152,56 +178,42 @@ export default function AwtisDetay({anAwtis}) {
|
||||
</Card>
|
||||
</Grid>
|
||||
)}
|
||||
{rezoSosyal?.length > 0 && (
|
||||
<Grid size={{xs: 12, md: 6}}>
|
||||
<Box sx={{display: 'flex', flexWrap: 'wrap', gap: 1, justifyContent: 'center'}}>
|
||||
{rezoSosyal.map((rezo, i) => (
|
||||
<SocialButton key={i} rezo={rezo} />
|
||||
))}
|
||||
|
||||
<Grid size={12}>
|
||||
{paroles.length > 1 ? (
|
||||
<Accordion>
|
||||
<AccordionSummary expandIcon={<ExpandMoreIcon />} aria-controls='panel-teks-content' id='panel-teks-header'>
|
||||
<Typography sx={{marginRight: 2}} variant='body1'><strong>Liste des paroles</strong></Typography>
|
||||
<Chip color='primary' label={paroles.length} size='small' variant='contained' />
|
||||
</AccordionSummary>
|
||||
<AccordionDetails sx={{paddingInline: 0}}>
|
||||
{sortedTeks.map(anPawol => {
|
||||
const {couverture} = anPawol
|
||||
const kuvetiFormat = couverture?.formats?.thumbnail || formatKuveti(couverture)
|
||||
return (
|
||||
<Box key={anPawol.id} sx={{paddingBlock: 0.5}}>
|
||||
<MizikLyen anPawol={anPawol} kuveti={kuvetiFormat} />
|
||||
</Box>
|
||||
)
|
||||
})}
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
) : paroles.length === 0 ? (
|
||||
<Typography textAlign='center' variant='body1' color='text.secondary'>
|
||||
Aucune parole pour le moment
|
||||
</Typography>
|
||||
) : (
|
||||
<Box>
|
||||
<Typography gutterBottom variant='body1'><strong>Parole</strong></Typography>
|
||||
<Paper sx={{paddingBlock: 2}}>
|
||||
<MizikLyen anPawol={paroles[0]} kuveti={paroles[0].couverture?.formats?.thumbnail || formatKuveti(paroles[0].couverture)} />
|
||||
</Paper>
|
||||
</Box>
|
||||
</Grid>
|
||||
)}
|
||||
<Grid size={{xs: 12, md: 6}}>
|
||||
<Box marginbottom={3}>
|
||||
{paroles.length > 1 ? (
|
||||
<Accordion>
|
||||
<AccordionSummary
|
||||
expandIcon={<ExpandMoreIcon />}
|
||||
aria-controls='panel-teks-content'
|
||||
id='panel-teks-header'
|
||||
>
|
||||
<Typography sx={{marginRight: 2, textAlign: 'center'}} variant='body1' component='h2'><strong>Liste des paroles</strong></Typography>
|
||||
<Chip color='primary' label={paroles.length} size='small' variant='contained' />
|
||||
</AccordionSummary>
|
||||
<AccordionDetails sx={{paddingInline: 0}}>
|
||||
{sortedTeks.map(anPawol => {
|
||||
const {couverture} = anPawol
|
||||
const kuvetiFormat = couverture?.formats?.thumbnail || formatKuveti(couverture)
|
||||
return (
|
||||
<Box key={anPawol.id} sx={{paddingBlock: 0.5}}>
|
||||
<MizikLyen anPawol={anPawol} kuveti={kuvetiFormat} />
|
||||
</Box>
|
||||
)
|
||||
})}
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
) : (
|
||||
paroles.length === 0 ? (
|
||||
<Typography gutterBottom textAlign='center' variant='body1' component='h2'><strong>Aucune parole pour le moment</strong></Typography>
|
||||
) : (
|
||||
<Box>
|
||||
<Typography gutterBottom textalign='center' variant='body1' component='h2'><strong>Parole</strong></Typography>
|
||||
<Paper sx={{height: '100%', paddingBlock: 2}}>
|
||||
<MizikLyen anPawol={paroles[0]} kuveti={paroles[0].couverture?.formats?.thumbnail || formatKuveti(paroles[0].couverture)} />
|
||||
</Paper>
|
||||
</Box>
|
||||
)
|
||||
)}
|
||||
</Box>
|
||||
)}
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<Box sx={{textAlign: 'center', marginBlock: 3}}>
|
||||
<Box sx={{textAlign: 'center', my: 4}}>
|
||||
<Link passHref href='/awtis'>
|
||||
<Button variant='outlined' startIcon={<KeyboardBackspaceIcon />}>
|
||||
Retour aux artistes
|
||||
|
||||
Reference in New Issue
Block a user