import Box from '@mui/material/Box' import Typography from '@mui/material/Typography' import Paper from '@mui/material/Paper' import Grid from '@mui/material/Grid2' import PropTypes from 'prop-types' import IconButton from '@mui/material/IconButton' import ThumbUpIcon from '@mui/icons-material/ThumbUp' import ThumbDownIcon from '@mui/icons-material/ThumbDown' import {useState, useEffect} from 'react' import {useSession} from 'next-auth/react' import Snackbar from '@mui/material/Snackbar' import Alert from '@mui/material/Alert' import MarkdownRenderer from '../markdown-renderer/index.js' import {handleVote, getUserVote} from '../../lib/directus.js' import {formatDate} from '@/lib/format.js' export default function VersionComparison({versionData, versionCompare}) { const {current, main, outdated} = versionCompare const {data: session} = useSession() const [snackbar, setSnackbar] = useState({open: false, message: '', severity: 'success'}) const [currentVote, setCurrentVote] = useState(null) useEffect(() => { const fetchVote = async () => { if (session?.user && versionCompare.versionId) { try { const vote = await getUserVote({ accessToken: session.user.accessToken, userId: session.user.userId, versionId: versionCompare.versionId }) setCurrentVote(vote) } catch (error) { console.error('Error fetching vote:', error) } } } fetchVote() }, [session, versionCompare.versionId]) const handleVoteClick = async voteValue => { try { const newVoteValue = await handleVote({ accessToken: session.user.accessToken, userId: session.user.userId, versionId: versionCompare.versionId, voteValue }) setCurrentVote(newVoteValue) setSnackbar({ open: true, message: newVoteValue === null ? 'Vote annulé' : 'Vote enregistré avec succès', severity: 'success' }) } catch (error) { setSnackbar({ open: true, message: `Erreur lors du vote: ${error}`, severity: 'error' }) } } const handleCloseSnackbar = () => { setSnackbar(prev => ({...prev, open: false})) } const createdAt = new Date(versionData.date_created) const threeDaysAgo = new Date(Date.now() - (3 * 24 * 60 * 60 * 1000)) const isVoteDisabled = createdAt < threeDaysAgo return ( ( {children} )} /> @{main.user_created?.split('-')[0] || 'Système'} ( {children} )} /> @{versionData.user_created?.split('-')[0] || 'Système'} {!outdated && session?.user && ( {versionData && ( {formatDate(versionData.date_created)} )} handleVoteClick(1)} > handleVoteClick(-1)} > )} LÉGENDE Version de référence En cours de révision Remplacée / Publiée {snackbar.message} ) } VersionComparison.propTypes = { versionData: PropTypes.object, versionCompare: PropTypes.shape({ outdated: PropTypes.bool.isRequired, mainHash: PropTypes.string.isRequired, current: PropTypes.object.isRequired, main: PropTypes.object.isRequired, versionId: PropTypes.string }).isRequired, }