2022-05-14 01:27:11 +04:00
|
|
|
|
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'
|
2022-01-19 06:35:04 +04:00
|
|
|
|
|
|
|
|
|
|
import {styled} from '@mui/material/styles'
|
2020-12-17 09:06:05 +01:00
|
|
|
|
|
2022-05-14 01:27:11 +04:00
|
|
|
|
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'
|
2020-12-13 23:20:07 +01:00
|
|
|
|
|
2022-01-19 06:35:04 +04:00
|
|
|
|
const PREFIX = 'denye-teks'
|
2022-05-14 01:27:11 +04:00
|
|
|
|
const TEKS_PREFIX = 'teks-kat'
|
|
|
|
|
|
const KAT_ARRAY = Array.from({length: 6})
|
2022-01-19 06:35:04 +04:00
|
|
|
|
|
|
|
|
|
|
const classes = {
|
|
|
|
|
|
container: `${PREFIX}-container`
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-14 01:27:11 +04:00
|
|
|
|
const teksClasses = {
|
|
|
|
|
|
root: `${TEKS_PREFIX}-root`,
|
|
|
|
|
|
media: `${TEKS_PREFIX}-media`
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-19 06:35:04 +04:00
|
|
|
|
const Root = styled('div')(() => ({
|
|
|
|
|
|
[`&.${classes.container}`]: {
|
2022-05-08 23:48:54 +04:00
|
|
|
|
marginTop: '1em',
|
|
|
|
|
|
marginBottom: '2em'
|
2020-12-13 23:20:07 +01:00
|
|
|
|
}
|
|
|
|
|
|
}))
|
|
|
|
|
|
|
2022-05-14 01:27:11 +04:00
|
|
|
|
const StyledGrid = styled(Grid)({
|
|
|
|
|
|
[`& .${teksClasses.root}`]: {
|
|
|
|
|
|
maxWidth: 345
|
|
|
|
|
|
},
|
|
|
|
|
|
[`& .${teksClasses.media}`]: {
|
|
|
|
|
|
height: 240,
|
|
|
|
|
|
objectFit: 'contain'
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
const Alert = forwardRef(function Alert(props, ref) {
|
|
|
|
|
|
return <MuiAlert ref={ref} elevation={6} variant='filled' {...props} />
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-12-13 23:20:07 +01:00
|
|
|
|
return (
|
2022-01-19 06:35:04 +04:00
|
|
|
|
<Root className={classes.container}>
|
2020-12-17 09:06:05 +01:00
|
|
|
|
<Container>
|
|
|
|
|
|
<Grid container spacing={3}>
|
2022-05-14 01:27:11 +04:00
|
|
|
|
{error && (
|
|
|
|
|
|
<Snackbar open={isOpen} autoHideDuration={3000} onClose={handleClose}>
|
|
|
|
|
|
<Alert severity='error' onClose={handleClose}>
|
|
|
|
|
|
<strong>Les éléments ne peuvent pas s’afficher</strong> : <i>{error.message}</i>
|
|
|
|
|
|
</Alert>
|
|
|
|
|
|
</Snackbar>
|
|
|
|
|
|
)}
|
|
|
|
|
|
{!error && KAT_ARRAY.map((kat, index) => (
|
|
|
|
|
|
<StyledGrid key={index} item xs={12} sm={6} md={4}> {/* eslint-disable-line react/no-array-index-key */}
|
|
|
|
|
|
<Card className={classes.root}>
|
|
|
|
|
|
{isLoading || teks.length === 0 ? (
|
|
|
|
|
|
<CardContent>
|
|
|
|
|
|
<Skeleton variant='rectangular' width='100%' height={isMobile ? 250 : 352} />
|
|
|
|
|
|
<Skeleton />
|
|
|
|
|
|
<Skeleton width='30%' />
|
|
|
|
|
|
<Skeleton width='10%' />
|
|
|
|
|
|
<Skeleton width='30%' />
|
|
|
|
|
|
</CardContent>
|
|
|
|
|
|
) : (
|
|
|
|
|
|
<CardActionArea onClick={() => handleClick(teks[index].slug)}>
|
|
|
|
|
|
<Image
|
|
|
|
|
|
src={teks[index].kouveti ? `${process.env.NEXT_PUBLIC_API_URL}${teks[index].kouveti.url}` : noImageUrl}
|
|
|
|
|
|
alt={teks[index].tit}
|
|
|
|
|
|
width={500}
|
|
|
|
|
|
height={500}
|
|
|
|
|
|
placeholder='blur'
|
|
|
|
|
|
blurDataURL='data:image/png;base64,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
|
|
|
|
|
|
/>
|
|
|
|
|
|
<CardContent>
|
|
|
|
|
|
<Typography display='inline' style={{marginRight: 5}} variant='h6' component='h2'>
|
|
|
|
|
|
{teks[index].tit}
|
|
|
|
|
|
</Typography>
|
|
|
|
|
|
{teks[index].eksplisit && (
|
|
|
|
|
|
<ExplicitIcon style={{marginRight: 5}} color='secondary' fontSize='small' />
|
|
|
|
|
|
)}
|
|
|
|
|
|
<Typography variant='caption'>
|
|
|
|
|
|
{teks[index].user && (
|
|
|
|
|
|
<>
|
|
|
|
|
|
(<i>texte soumis par {teks[index].user.username}</i>)
|
|
|
|
|
|
</>
|
|
|
|
|
|
)}
|
|
|
|
|
|
{teks[index].userAdmin && !teks[index].user && (
|
|
|
|
|
|
<>
|
|
|
|
|
|
(<i>texte soumis par {teks[index].userAdmin}</i>)
|
|
|
|
|
|
</>
|
|
|
|
|
|
)}
|
|
|
|
|
|
</Typography>
|
|
|
|
|
|
<Typography variant='body2' color='textSecondary' component='p'>
|
|
|
|
|
|
{new Intl.ListFormat('fr').format(teks[index].awtis.map(({alias}) => alias))}
|
|
|
|
|
|
</Typography>
|
|
|
|
|
|
<Typography variant='body2' color='textSecondary' component='p'>
|
|
|
|
|
|
{teks[index].lanne}
|
|
|
|
|
|
</Typography>
|
|
|
|
|
|
<Typography align='center' style={{marginTop: '0.5em'}} variant='body1' color='textSecondary' component='p'>
|
|
|
|
|
|
Publié le : {formatDate(teks[index].published_at)}
|
|
|
|
|
|
</Typography>
|
|
|
|
|
|
</CardContent>
|
|
|
|
|
|
</CardActionArea>
|
|
|
|
|
|
)}
|
|
|
|
|
|
</Card>
|
|
|
|
|
|
</StyledGrid>
|
|
|
|
|
|
))}
|
2020-12-17 09:06:05 +01:00
|
|
|
|
</Grid>
|
|
|
|
|
|
</Container>
|
2022-01-19 06:35:04 +04:00
|
|
|
|
</Root>
|
2020-12-13 23:20:07 +01:00
|
|
|
|
)
|
|
|
|
|
|
}
|
2022-05-14 01:27:11 +04:00
|
|
|
|
|
|
|
|
|
|
DenyeTeks.defaultProps = {
|
|
|
|
|
|
error: null
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DenyeTeks.propTypes = {
|
|
|
|
|
|
error: PropTypes.object,
|
|
|
|
|
|
setError: PropTypes.func.isRequired
|
|
|
|
|
|
}
|