Files
pawol.nu/components/teks/pataje.js
T

132 lines
4.1 KiB
JavaScript
Raw Normal View History

'use client'
2022-01-18 09:08:26 +04:00
import {useState} from 'react'
2021-06-02 02:22:43 +02:00
import PropTypes from 'prop-types'
2022-01-19 07:06:26 +04:00
import {styled} from '@mui/material/styles'
import SpeedDial from '@mui/material/SpeedDial'
import SpeedDialIcon from '@mui/material/SpeedDialIcon'
import SpeedDialAction from '@mui/material/SpeedDialAction'
import FileCopyIcon from '@mui/icons-material/FileCopyOutlined'
import ShareIcon from '@mui/icons-material/Share'
import TwitterIcon from '@mui/icons-material/Twitter'
2022-02-23 00:28:31 +04:00
import TelegramIcon from '@mui/icons-material/Telegram'
import FacebookIcon from '@mui/icons-material/Facebook'
import WhatsAppIcon from '@mui/icons-material/WhatsApp'
2022-01-19 07:06:26 +04:00
import {Backdrop} from '@mui/material'
2021-06-02 02:22:43 +02:00
2022-02-23 00:28:31 +04:00
const twitterUrl = 'https://twitter.com/intent/tweet'
const telegramUrl = 'https://telegram.me/share/url'
const facebookUrl = 'https://www.facebook.com/sharer/sharer.php'
const whatsappUrl = 'whatsapp://send'
2022-01-19 06:35:04 +04:00
const PREFIX = 'pataje'
const classes = {
root: `${PREFIX}-root`
}
2021-06-02 02:22:43 +02:00
2022-01-19 06:35:04 +04:00
const Root = styled('div')(() => ({
[`&.${classes.root}`]: {
2021-06-02 02:22:43 +02:00
height: 0,
transform: 'translateZ(0px)'
}
}))
2022-01-19 06:35:04 +04:00
const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL
const TWITTER_HASHTAGS = process.env.NEXT_PUBLIC_TWITTER_HASHTAGS || 'OKi'
const TWITTER_USERNAME = process.env.NEXT_PUBLIC_TWITTER_USERNAME || 'OrganisationKA'
2021-06-02 02:22:43 +02:00
const actions = [
2022-02-23 00:28:31 +04:00
{icon: <WhatsAppIcon />, name: 'WhatsApp', code: 'whatsapp'},
{icon: <FacebookIcon />, name: 'Facebook', code: 'facebook'},
2021-06-02 02:22:43 +02:00
{icon: <TwitterIcon />, name: 'Twitter', code: 'twitter'},
2022-02-23 00:28:31 +04:00
{icon: <TelegramIcon />, name: 'Telegram', code: 'telegram'},
2021-06-02 02:22:43 +02:00
{icon: <FileCopyIcon />, name: 'Copier le lien', code: 'copy'}
]
2022-05-20 02:15:56 +04:00
export default function Pataje({parole, setError, setSuccess}) {
const {titre, artistes, slug} = parole
2021-06-02 02:22:43 +02:00
const [open, setOpen] = useState(false)
2022-05-08 04:26:11 +04:00
const patajeUrl = `${SITE_URL}/paroles/${slug}`
2022-05-20 02:15:56 +04:00
const alias = artistes.data.map(({attributes}) => attributes.alias)
2022-02-05 14:21:56 +04:00
const renderAwtis = new Intl.ListFormat('fr').format(alias)
2021-06-02 02:22:43 +02:00
2022-10-27 19:41:38 +04:00
const text = parole.user.data || parole.userAdmin.data ? `${renderAwtis} - ${titre} (Paroles et Traductions) - (parole soumise par ${parole?.user?.data?.attributes?.username || parole.userAdmin?.data?.attributes?.username || parole.userAdmin?.data?.attributes?.firstname})` : `${renderAwtis} - ${titre} (Paroles et Traductions)`
2021-06-02 02:22:43 +02:00
const handleClose = () => {
setOpen(false)
}
const handleOpen = () => {
setOpen(true)
}
const handleClick = code => {
2022-02-23 00:28:31 +04:00
if (typeof window !== 'undefined') {
switch (code) {
case 'whatsapp':
window.open(`${whatsappUrl}?text=${encodeURI(text)} \n ${encodeURI(patajeUrl)}`, '_blank')
break
case 'facebook':
window.open(`${facebookUrl}?u=${encodeURI(patajeUrl)}`, '_blank')
break
case 'telegram':
window.open(`${telegramUrl}?url=${encodeURI(patajeUrl)}&text=${encodeURI(text)}`, '_blank')
break
case 'twitter':
window.open(`${twitterUrl}?hashtags=${TWITTER_HASHTAGS}&text=${text}&via=${TWITTER_USERNAME}&url=${patajeUrl}`, 'Partage Twitter', 'width=600,height=300')
break
case 'copy':
navigator.clipboard.writeText(patajeUrl)
.then(
() => setSuccess('Lien copié avec succès'),
() => setError('Error lors de la copie du lien')
)
break
default:
break
}
2021-06-02 02:22:43 +02:00
}
setOpen(false)
}
return (
2022-01-19 06:35:04 +04:00
<Root className={classes.root}>
2021-06-02 02:22:43 +02:00
<Backdrop open={open} />
<SpeedDial
FabProps={{size: 'small', margin: 'auto', color: 'default'}}
ariaLabel='Patajé'
icon={<SpeedDialIcon icon={<ShareIcon />} />}
open={open}
2021-06-05 21:24:27 +02:00
direction='down'
2021-06-02 02:22:43 +02:00
onClose={handleClose}
onOpen={handleOpen}
>
{actions.map(action => (
<SpeedDialAction
key={action.name}
icon={action.icon}
2021-06-05 21:24:27 +02:00
tooltipPlacement='right'
2021-06-02 02:22:43 +02:00
tooltipTitle={action.name}
onClick={() => handleClick(action.code)}
/>
))}
</SpeedDial>
2022-01-19 06:35:04 +04:00
</Root>
2021-06-02 02:22:43 +02:00
)
}
Pataje.propTypes = {
2022-05-20 02:15:56 +04:00
parole: PropTypes.object.isRequired,
2021-06-02 02:22:43 +02:00
setError: PropTypes.func.isRequired,
setSuccess: PropTypes.func.isRequired
}