refactor: versionData > versionCompare + Ajout de la date de création d'une version et de l'utilisateur qui l'a créée
This commit is contained in:
@@ -67,7 +67,7 @@ function rowContent({
|
|||||||
setError,
|
setError,
|
||||||
setIsErrorAlertOpen,
|
setIsErrorAlertOpen,
|
||||||
setIsOpenComparison,
|
setIsOpenComparison,
|
||||||
setVersionData
|
setVersionCompare
|
||||||
}) {
|
}) {
|
||||||
const handleButtonClick = async versionId => {
|
const handleButtonClick = async versionId => {
|
||||||
const version = await compareVersion({
|
const version = await compareVersion({
|
||||||
@@ -80,7 +80,7 @@ function rowContent({
|
|||||||
})
|
})
|
||||||
|
|
||||||
if (version) {
|
if (version) {
|
||||||
setVersionData({...version, versionId})
|
setVersionCompare({...version, versionId})
|
||||||
setIsOpenComparison(true)
|
setIsOpenComparison(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -112,7 +112,9 @@ export default function ListVersions({
|
|||||||
const countdownRef = useRef()
|
const countdownRef = useRef()
|
||||||
|
|
||||||
const [isOpenComparison, setIsOpenComparison] = useState(false)
|
const [isOpenComparison, setIsOpenComparison] = useState(false)
|
||||||
const [versionData, setVersionData] = useState(null)
|
const [versionCompare, setVersionCompare] = useState(null)
|
||||||
|
|
||||||
|
const versionData = data.find(({id}) => id === versionCompare?.versionId)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -126,13 +128,13 @@ export default function ListVersions({
|
|||||||
components={VirtuosoTableComponents}
|
components={VirtuosoTableComponents}
|
||||||
fixedHeaderContent={fixedHeaderContent}
|
fixedHeaderContent={fixedHeaderContent}
|
||||||
itemContent={(index, row) => rowContent({
|
itemContent={(index, row) => rowContent({
|
||||||
index, row, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen, setIsOpenComparison, setVersionData
|
index, row, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen, setIsOpenComparison, setVersionCompare
|
||||||
})}
|
})}
|
||||||
/>
|
/>
|
||||||
</Paper>
|
</Paper>
|
||||||
</Box>
|
</Box>
|
||||||
{isOpenComparison && (
|
{isOpenComparison && (
|
||||||
<VersionDialog versionData={versionData} isOpen={isOpenComparison} setIsOpen={setIsOpenComparison} />
|
<VersionDialog versionData={versionData} versionCompare={versionCompare} isOpen={isOpenComparison} setIsOpen={setIsOpenComparison} />
|
||||||
)}
|
)}
|
||||||
<LogoutCountdown ref={countdownRef} setError={setError} setIsErrorAlertOpen={setIsErrorAlertOpen} />
|
<LogoutCountdown ref={countdownRef} setError={setError} setIsErrorAlertOpen={setIsErrorAlertOpen} />
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -11,21 +11,22 @@ 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 {handleVote, getUserVote} from '../../lib/directus.js'
|
import {handleVote, getUserVote} from '../../lib/directus.js'
|
||||||
|
import {formatDate} from '@/lib/format.js'
|
||||||
|
|
||||||
export default function VersionComparison({versionData}) {
|
export default function VersionComparison({versionData, versionCompare}) {
|
||||||
const {current, main, outdated} = versionData
|
const {current, main, outdated} = versionCompare
|
||||||
const {data: session} = useSession()
|
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)
|
const [currentVote, setCurrentVote] = useState(null)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchVote = async () => {
|
const fetchVote = async () => {
|
||||||
if (session?.user && versionData.versionId) {
|
if (session?.user && versionCompare.versionId) {
|
||||||
try {
|
try {
|
||||||
const vote = await getUserVote({
|
const vote = await getUserVote({
|
||||||
accessToken: session.user.accessToken,
|
accessToken: session.user.accessToken,
|
||||||
userId: session.user.userId,
|
userId: session.user.userId,
|
||||||
versionId: versionData.versionId
|
versionId: versionCompare.versionId
|
||||||
})
|
})
|
||||||
setCurrentVote(vote)
|
setCurrentVote(vote)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -35,14 +36,14 @@ export default function VersionComparison({versionData}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fetchVote()
|
fetchVote()
|
||||||
}, [session, versionData.versionId])
|
}, [session, versionCompare.versionId])
|
||||||
|
|
||||||
const handleVoteClick = async voteValue => {
|
const handleVoteClick = async voteValue => {
|
||||||
try {
|
try {
|
||||||
const newVoteValue = await handleVote({
|
const newVoteValue = await handleVote({
|
||||||
accessToken: session.user.accessToken,
|
accessToken: session.user.accessToken,
|
||||||
userId: session.user.userId,
|
userId: session.user.userId,
|
||||||
versionId: versionData.versionId,
|
versionId: versionCompare.versionId,
|
||||||
voteValue
|
voteValue
|
||||||
})
|
})
|
||||||
setCurrentVote(newVoteValue)
|
setCurrentVote(newVoteValue)
|
||||||
@@ -80,24 +81,41 @@ export default function VersionComparison({versionData}) {
|
|||||||
{current.contenu}
|
{current.contenu}
|
||||||
</Typography>
|
</Typography>
|
||||||
{!outdated && session?.user && (
|
{!outdated && session?.user && (
|
||||||
<Box sx={{display: 'flex', justifyContent: 'flex-end', mt: 1}}>
|
<>
|
||||||
<IconButton
|
<Box>
|
||||||
size='small'
|
<Typography sx={{textDecoration: 'underline'}} variant='caption' color='primary'>@{versionData.user_created.split('-')[0]}</Typography>
|
||||||
color={currentVote === 1 ? 'success' : 'primary'}
|
</Box>
|
||||||
aria-label='vote positif'
|
<Box sx={{
|
||||||
onClick={() => handleVoteClick(1)}
|
display: 'flex', alignItems: 'center', justifyContent: 'space-between', mt: 1
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<ThumbUpIcon />
|
<Box>
|
||||||
</IconButton>
|
{versionData && (
|
||||||
<IconButton
|
<Typography sx={{fontWeight: 'bold'}} color='primary'>
|
||||||
size='small'
|
{formatDate(versionData.date_created)}
|
||||||
color={currentVote === -1 ? 'error' : 'primary'}
|
</Typography>
|
||||||
aria-label='vote négatif'
|
)}
|
||||||
onClick={() => handleVoteClick(-1)}
|
</Box>
|
||||||
>
|
<Box sx={{display: 'flex', justifyContent: 'flex-end'}}>
|
||||||
<ThumbDownIcon />
|
<IconButton
|
||||||
</IconButton>
|
size='small'
|
||||||
</Box>
|
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>
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
</Paper>
|
</Paper>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -170,7 +188,8 @@ export default function VersionComparison({versionData}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
VersionComparison.propTypes = {
|
VersionComparison.propTypes = {
|
||||||
versionData: PropTypes.shape({
|
versionData: PropTypes.object,
|
||||||
|
versionCompare: PropTypes.shape({
|
||||||
outdated: PropTypes.bool.isRequired,
|
outdated: PropTypes.bool.isRequired,
|
||||||
mainHash: PropTypes.string.isRequired,
|
mainHash: PropTypes.string.isRequired,
|
||||||
current: PropTypes.object.isRequired,
|
current: PropTypes.object.isRequired,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import useMediaQuery from '@mui/material/useMediaQuery'
|
|||||||
import {useTheme} from '@mui/material/styles'
|
import {useTheme} from '@mui/material/styles'
|
||||||
import VersionComparison from './version-comparison.js'
|
import VersionComparison from './version-comparison.js'
|
||||||
|
|
||||||
export default function VersionDialog({versionData, isOpen, setIsOpen}) {
|
export default function VersionDialog({versionData, versionCompare, isOpen, setIsOpen}) {
|
||||||
const theme = useTheme()
|
const theme = useTheme()
|
||||||
const fullScreen = useMediaQuery(theme.breakpoints.down('md'))
|
const fullScreen = useMediaQuery(theme.breakpoints.down('md'))
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ export default function VersionDialog({versionData, isOpen, setIsOpen}) {
|
|||||||
{'Comparaison des versions'}
|
{'Comparaison des versions'}
|
||||||
</DialogTitle>
|
</DialogTitle>
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
<VersionComparison versionData={versionData} />
|
<VersionComparison versionData={versionData} versionCompare={versionCompare} />
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button autoFocus color='success' onClick={handleClose}>
|
<Button autoFocus color='success' onClick={handleClose}>
|
||||||
@@ -39,7 +39,8 @@ export default function VersionDialog({versionData, isOpen, setIsOpen}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
VersionDialog.propTypes = {
|
VersionDialog.propTypes = {
|
||||||
versionData: PropTypes.shape({
|
versionData: PropTypes.object,
|
||||||
|
versionCompare: PropTypes.shape({
|
||||||
outdated: PropTypes.bool.isRequired,
|
outdated: PropTypes.bool.isRequired,
|
||||||
mainHash: PropTypes.string.isRequired,
|
mainHash: PropTypes.string.isRequired,
|
||||||
current: PropTypes.object.isRequired,
|
current: PropTypes.object.isRequired,
|
||||||
|
|||||||
Reference in New Issue
Block a user