refactor: utilise VoteButtons dans VersionComparison
This commit is contained in:
@@ -3,63 +3,23 @@ import Typography from '@mui/material/Typography'
|
|||||||
import Paper from '@mui/material/Paper'
|
import Paper from '@mui/material/Paper'
|
||||||
import Grid from '@mui/material/Grid2'
|
import Grid from '@mui/material/Grid2'
|
||||||
import PropTypes from 'prop-types'
|
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 Snackbar from '@mui/material/Snackbar'
|
||||||
import Alert from '@mui/material/Alert'
|
import Alert from '@mui/material/Alert'
|
||||||
|
import {useState} from 'react'
|
||||||
import MarkdownRenderer from '../markdown-renderer/index.js'
|
import MarkdownRenderer from '../markdown-renderer/index.js'
|
||||||
import {handleVote, getUserVote} from '../../lib/directus.js'
|
import VoteButtons from './vote-buttons.js'
|
||||||
import {formatDate} from '@/lib/format.js'
|
import {formatDate} from '@/lib/format.js'
|
||||||
|
|
||||||
export default function VersionComparison({versionData, versionCompare}) {
|
export default function VersionComparison({versionData, versionCompare}) {
|
||||||
const {current, main, outdated} = versionCompare
|
const {current, main, outdated} = versionCompare
|
||||||
const {data: session} = useSession()
|
|
||||||
const [snackbar, setSnackbar] = useState({open: false, message: '', severity: 'success'})
|
const [snackbar, setSnackbar] = useState({open: false, message: '', severity: 'success'})
|
||||||
const [currentVote, setCurrentVote] = useState(null)
|
|
||||||
|
|
||||||
useEffect(() => {
|
const handleVoteResult = result => {
|
||||||
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({
|
setSnackbar({
|
||||||
open: true,
|
open: true,
|
||||||
message: newVoteValue === null ? 'Vote annulé' : 'Vote enregistré avec succès',
|
message: result.message,
|
||||||
severity: 'success'
|
severity: result.success ? 'success' : 'error'
|
||||||
})
|
})
|
||||||
} catch (error) {
|
|
||||||
setSnackbar({
|
|
||||||
open: true,
|
|
||||||
message: `Erreur lors du vote: ${error}`,
|
|
||||||
severity: 'error'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleCloseSnackbar = () => {
|
const handleCloseSnackbar = () => {
|
||||||
@@ -131,7 +91,7 @@ export default function VersionComparison({versionData, versionCompare}) {
|
|||||||
@{versionData.user_created?.split('-')[0] || 'Système'}
|
@{versionData.user_created?.split('-')[0] || 'Système'}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
{!outdated && session?.user && (
|
{!outdated && (
|
||||||
<Box sx={{
|
<Box sx={{
|
||||||
display: 'flex', alignItems: 'center', justifyContent: 'space-between', mt: 1
|
display: 'flex', alignItems: 'center', justifyContent: 'space-between', mt: 1
|
||||||
}}
|
}}
|
||||||
@@ -143,24 +103,7 @@ export default function VersionComparison({versionData, versionCompare}) {
|
|||||||
</Typography>
|
</Typography>
|
||||||
)}
|
)}
|
||||||
</Box>
|
</Box>
|
||||||
<Box sx={{display: 'flex', justifyContent: 'flex-end'}}>
|
<VoteButtons versionId={versionCompare.versionId} isDisabled={isVoteDisabled} onVoteResult={handleVoteResult} />
|
||||||
<IconButton
|
|
||||||
size='small'
|
|
||||||
color={currentVote === 1 ? 'success' : 'primary'}
|
|
||||||
aria-label='vote positif'
|
|
||||||
onClick={() => handleVoteClick(1)}
|
|
||||||
>
|
|
||||||
<ThumbUpIcon />
|
|
||||||
</IconButton>
|
|
||||||
<IconButton
|
|
||||||
size='small'
|
|
||||||
color={currentVote === -1 ? 'error' : 'primary'}
|
|
||||||
aria-label='vote négatif'
|
|
||||||
onClick={() => handleVoteClick(-1)}
|
|
||||||
>
|
|
||||||
<ThumbDownIcon />
|
|
||||||
</IconButton>
|
|
||||||
</Box>
|
|
||||||
</Box>
|
</Box>
|
||||||
)}
|
)}
|
||||||
</Paper>
|
</Paper>
|
||||||
@@ -219,6 +162,7 @@ export default function VersionComparison({versionData, versionCompare}) {
|
|||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
<Snackbar
|
<Snackbar
|
||||||
open={snackbar.open}
|
open={snackbar.open}
|
||||||
autoHideDuration={6000}
|
autoHideDuration={6000}
|
||||||
|
|||||||
Reference in New Issue
Block a user