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:
2024-12-17 05:45:16 +04:00
parent 9e78a32d8d
commit 7902537df1
3 changed files with 54 additions and 32 deletions
+7 -5
View File
@@ -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} />
</> </>
+43 -24
View File
@@ -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,
+4 -3
View File
@@ -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,