import {useState, useEffect} from 'react' import PropTypes from 'prop-types' import Box from '@mui/material/Box' import IconButton from '@mui/material/IconButton' import Typography from '@mui/material/Typography' import ThumbUpIcon from '@mui/icons-material/ThumbUp' import ThumbDownIcon from '@mui/icons-material/ThumbDown' import {useSession} from 'next-auth/react' import {handleVote, getUserVote} from '@/lib/directus.js' export default function VoteButtons({versionId, isDisabled = false, hasCountsVisible = false, voteCounts = null, onVoteResult = null}) { const {data: session} = useSession() const [currentVote, setCurrentVote] = useState(null) useEffect(() => { const fetchVote = async () => { if (session?.user && versionId) { try { const vote = await getUserVote({ accessToken: session.user.accessToken, userId: session.user.userId, versionId }) setCurrentVote(vote) } catch (error) { console.error('Error fetching vote:', error) } } } fetchVote() }, [session, versionId]) const handleVoteClick = async voteValue => { if (isDisabled) { return } try { const newVoteValue = await handleVote({ accessToken: session.user.accessToken, userId: session.user.userId, versionId, voteValue }) setCurrentVote(newVoteValue) if (onVoteResult) { onVoteResult({ success: true, message: newVoteValue === null ? 'Vote annulé' : 'Vote enregistré avec succès' }) } } catch (error) { if (onVoteResult) { onVoteResult({ success: false, message: `Erreur lors du vote: ${error}` }) } } } if (!session?.user) { return null } return ( handleVoteClick(1)} > {hasCountsVisible && voteCounts && ( {voteCounts.positive || 0} )} handleVoteClick(-1)} > {hasCountsVisible && voteCounts && ( {voteCounts.negative || 0} )} ) } VoteButtons.propTypes = { versionId: PropTypes.string.isRequired, isDisabled: PropTypes.bool, hasCountsVisible: PropTypes.bool, voteCounts: PropTypes.shape({ positive: PropTypes.number, negative: PropTypes.number }), onVoteResult: PropTypes.func }