'use client' import {useState} from 'react' import Link from 'next/link' import PropTypes from 'prop-types' import Accordion from '@mui/material/Accordion' import AccordionDetails from '@mui/material/AccordionDetails' import AccordionSummary from '@mui/material/AccordionSummary' import Box from '@mui/material/Box' import Button from '@mui/material/Button' import CardActionArea from '@mui/material/CardActionArea' import CardMedia from '@mui/material/CardMedia' import Chip from '@mui/material/Chip' import Container from '@mui/material/Container' import Grid from '@mui/material/Grid' import Paper from '@mui/material/Paper' import Card from '@mui/material/Card' import CardContent from '@mui/material/CardContent' import Avatar from '@mui/material/Avatar' 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 VerifiedIcon from '@mui/icons-material/Verified' import {formatKuveti} from '../../lib/kuveti' import {PLATFORM_CONFIG, StreamButtonComponent} from '../streaming-buttons' import AwtisBiyografi from './awtis-biyografi' import MizikLyen from './mizik-lyen' const IMAGE_URL = process.env.NEXT_PUBLIC_API_URL_ROOT || 'http://localhost:1337' const noImageUrl = 'https://place-hold.it/140x140?text=Indisponible' const sortTeks = paroles => paroles.sort((a, b) => a.titre.localeCompare(b.titre, 'fr', {sensitivity: 'base'})) function StreamButton({lyen}) { const config = PLATFORM_CONFIG[lyen.plateforme] || {label: lyen.plateforme, bg: '#555', color: '#fff', Icon: null} const PlatformIcon = config.Icon return ( ) } export default function AwtisDetay({anAwtis}) { const [esByografiOuve, meteEsByografiOuve] = useState(false) const {alias, biographie, paroles, photo, isOKIAwtis, titrePhare} = anAwtis const sortedTeks = sortTeks(paroles) const gwanBiyo = biographie && biographie.length > 100 const biyo = gwanBiyo ? `${biographie.slice(0, 100)}...` : biographie const hasStreaming = isOKIAwtis && titrePhare?.streamAudio?.length > 0 const coverUrl = titrePhare?.couverture ? `${IMAGE_URL}${titrePhare.couverture.formats?.small?.url || titrePhare.couverture.formats?.thumbnail?.url || titrePhare.couverture.url}` : null return ( {alias} {isOKIAwtis && ( } label='Artiste OKI Exclusif' size='small' sx={{bgcolor: '#FFD700', color: '#000', fontWeight: 700, '& .MuiChip-icon': {color: '#000'}}} /> Paroles publiées en exclusivité sur PAWÒL-NU, avant toute sortie sur les plateformes de streaming. )} {biyo && ( meteEsByografiOuve(true)}> Biographie {biyo} )} {hasStreaming && ( {coverUrl && ( )} {titrePhare.titre} Écouter sur {titrePhare.streamAudio.map((lyen, i) => ( ))} )} {paroles.length > 1 ? ( } aria-controls='panel-teks-content' id='panel-teks-header' > Liste des paroles {sortedTeks.map(anPawol => { const {couverture} = anPawol const kuvetiFormat = couverture?.formats?.thumbnail || formatKuveti(couverture) return ( ) })} ) : ( paroles.length === 0 ? ( Aucune parole pour le moment ) : ( Parole ) )} {esByografiOuve && ( )} ) } AwtisDetay.propTypes = { anAwtis: PropTypes.object.isRequired }