import {useState, useEffect, forwardRef} from 'react' import {useRouter} from 'next/router' import PropTypes from 'prop-types' import Container from '@mui/material/Container' import Grid from '@mui/material/Grid' import Skeleton from '@mui/material/Skeleton' import Card from '@mui/material/Card' import CardActionArea from '@mui/material/CardActionArea' import CardContent from '@mui/material/CardContent' import Typography from '@mui/material/Typography' import MuiAlert from '@mui/material/Alert' import Snackbar from '@mui/material/Snackbar' import ExplicitIcon from '@mui/icons-material/Explicit' import {styled} from '@mui/material/styles' import {format} from 'date-fns' import {fr} from 'date-fns/locale' import Image from 'next/image' import {useMediaQuery} from '@mui/material' import {jwennDenyeTeks} from '../../lib/oki-api' const PREFIX = 'denye-teks' const TEKS_PREFIX = 'teks-kat' const KAT_ARRAY = Array.from({length: 6}) const classes = { container: `${PREFIX}-container` } const teksClasses = { root: `${TEKS_PREFIX}-root`, media: `${TEKS_PREFIX}-media` } const Root = styled('div')(() => ({ [`&.${classes.container}`]: { marginTop: '1em', marginBottom: '2em' } })) const StyledGrid = styled(Grid)({ [`& .${teksClasses.root}`]: { maxWidth: 345 }, [`& .${teksClasses.media}`]: { height: 240, objectFit: 'contain' } }) const Alert = forwardRef(function Alert(props, ref) { return }) export default function DenyeTeks({error, setError}) { const router = useRouter() const [teks, setTeks] = useState([]) const [isLoading, setIsLoading] = useState(true) const isMobile = useMediaQuery('(max-width:527px)') const [isOpen, setIsOpen] = useState(false) const handleClick = slug => { router.push(`/paroles/${slug}#${slug}`).then(() => window.scrollTo(0, 0)) } const noImageUrl = 'https://place-hold.it/140x140?text=Image%20indisponible' const formatDate = date => format(new Date(date), 'P', {locale: fr}) useEffect(() => { const getTeks = async () => { try { const denyeTeks = await jwennDenyeTeks() setTeks(denyeTeks) } catch (error_) { setIsOpen(true) setError(error_) setIsLoading(false) } } getTeks() setIsLoading(false) }, [setError]) const handleClose = (event, reason) => { if (reason === 'clickaway') { return } setIsOpen(false) } return ( {error && ( Les éléments ne peuvent pas s’afficher : {error.message} )} {!error && KAT_ARRAY.map((kat, index) => ( {/* eslint-disable-line react/no-array-index-key */} {isLoading || teks.length === 0 ? ( ) : ( handleClick(teks[index].slug)}> {teks[index].tit} {teks[index].tit} {teks[index].eksplisit && ( )} {teks[index].user && ( <> (texte soumis par {teks[index].user.username}) )} {teks[index].userAdmin && !teks[index].user && ( <> (texte soumis par {teks[index].userAdmin}) )} {new Intl.ListFormat('fr').format(teks[index].awtis.map(({alias}) => alias))} {teks[index].lanne} Publié le : {formatDate(teks[index].published_at)} )} ))} ) } DenyeTeks.defaultProps = { error: null } DenyeTeks.propTypes = { error: PropTypes.object, setError: PropTypes.func.isRequired }