fix: ferme les votes sur les versions obsolètes dans PDF/Print
This commit is contained in:
@@ -46,7 +46,7 @@ const renderMarkdownToHtml = async content => {
|
||||
}
|
||||
}
|
||||
|
||||
export default function ExportPdfButton({versionData, size = 'medium', variant = 'outlined'}) {
|
||||
export default function ExportPdfButton({versionData, isOutdated = false, size = 'medium', variant = 'outlined'}) {
|
||||
const [isExporting, setIsExporting] = useState(false)
|
||||
|
||||
const handleExportPdf = async () => {
|
||||
@@ -142,7 +142,8 @@ export default function ExportPdfButton({versionData, size = 'medium', variant =
|
||||
const authorName = versionData.user_created?.split('-')[0] || 'Système'
|
||||
const createdAt = new Date(versionData.date_created)
|
||||
const threeDaysAgo = new Date(Date.now() - (3 * 24 * 60 * 60 * 1000))
|
||||
const voteStatus = createdAt < threeDaysAgo ? 'fermé' : 'ouvert'
|
||||
const isExpired = createdAt < threeDaysAgo
|
||||
const voteStatus = (isExpired || isOutdated) ? 'fermé' : 'ouvert'
|
||||
const voteColor = voteStatus === 'ouvert' ? '#2e7d32' : '#d32f2f'
|
||||
|
||||
// Render markdown content to HTML
|
||||
@@ -251,6 +252,7 @@ export default function ExportPdfButton({versionData, size = 'medium', variant =
|
||||
|
||||
ExportPdfButton.propTypes = {
|
||||
versionData: PropTypes.object.isRequired,
|
||||
isOutdated: PropTypes.bool,
|
||||
size: PropTypes.oneOf(['small', 'medium', 'large']),
|
||||
variant: PropTypes.oneOf(['text', 'outlined', 'contained'])
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {forwardRef, useRef, useState} from 'react'
|
||||
import {forwardRef, useRef, useState, useEffect} from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import Table from '@mui/material/Table'
|
||||
import TableBody from '@mui/material/TableBody'
|
||||
@@ -84,7 +84,8 @@ function rowContent({
|
||||
setError,
|
||||
setIsErrorAlertOpen,
|
||||
setIsOpenComparison,
|
||||
setVersionCompare
|
||||
setVersionCompare,
|
||||
outdatedStatusMap
|
||||
}) {
|
||||
const handleButtonClick = async versionId => {
|
||||
const version = await compareVersion({
|
||||
@@ -102,6 +103,8 @@ function rowContent({
|
||||
}
|
||||
}
|
||||
|
||||
const isOutdated = outdatedStatusMap[row.id] || false
|
||||
|
||||
return (
|
||||
<>
|
||||
{columns.map(column => (
|
||||
@@ -137,11 +140,13 @@ function rowContent({
|
||||
/>
|
||||
<ExportPdfButton
|
||||
versionData={row}
|
||||
isOutdated={isOutdated}
|
||||
size='small'
|
||||
variant='text'
|
||||
/>
|
||||
<PrintButton
|
||||
versionData={row}
|
||||
isOutdated={isOutdated}
|
||||
size='small'
|
||||
variant='text'
|
||||
/>
|
||||
@@ -182,6 +187,42 @@ export default function ListVersions({
|
||||
dateTo: '',
|
||||
status: ''
|
||||
})
|
||||
const [outdatedStatusMap, setOutdatedStatusMap] = useState({})
|
||||
|
||||
// Fetch outdated status for all versions
|
||||
useEffect(() => {
|
||||
async function fetchOutdatedStatus() {
|
||||
const statusMap = {}
|
||||
|
||||
await Promise.all(
|
||||
data.map(async version => {
|
||||
try {
|
||||
const comparisonData = await compareVersion({
|
||||
accessToken,
|
||||
userId,
|
||||
versionId: version.id,
|
||||
countdownRef,
|
||||
setError,
|
||||
setIsErrorAlertOpen
|
||||
})
|
||||
|
||||
if (comparisonData) {
|
||||
statusMap[version.id] = comparisonData.outdated || false
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn(`Failed to fetch outdated status for version ${version.id}:`, error)
|
||||
statusMap[version.id] = false
|
||||
}
|
||||
})
|
||||
)
|
||||
|
||||
setOutdatedStatusMap(statusMap)
|
||||
}
|
||||
|
||||
if (data.length > 0) {
|
||||
fetchOutdatedStatus()
|
||||
}
|
||||
}, [data, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen])
|
||||
|
||||
// Filter data based on search and filters
|
||||
const filteredData = filterVersions(data, searchTerm, filters)
|
||||
@@ -261,7 +302,7 @@ export default function ListVersions({
|
||||
components={VirtuosoTableComponents}
|
||||
fixedHeaderContent={fixedHeaderContent}
|
||||
itemContent={(index, row) => rowContent({
|
||||
index, row, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen, setIsOpenComparison, setVersionCompare
|
||||
index, row, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen, setIsOpenComparison, setVersionCompare, outdatedStatusMap
|
||||
})}
|
||||
/>
|
||||
</Paper>
|
||||
|
||||
@@ -49,7 +49,7 @@ const renderMarkdownToHtml = async content => {
|
||||
}
|
||||
}
|
||||
|
||||
export default function PrintButton({versionData, size = 'medium', variant = 'outlined'}) {
|
||||
export default function PrintButton({versionData, isOutdated = false, size = 'medium', variant = 'outlined'}) {
|
||||
const [isPrinting, setIsPrinting] = useState(false)
|
||||
const [snackbar, setSnackbar] = useState({open: false, message: '', severity: 'success'})
|
||||
|
||||
@@ -61,7 +61,8 @@ export default function PrintButton({versionData, size = 'medium', variant = 'ou
|
||||
const authorName = versionData.user_created?.split('-')[0] || 'Système'
|
||||
const createdAt = new Date(versionData.date_created)
|
||||
const threeDaysAgo = new Date(Date.now() - (3 * 24 * 60 * 60 * 1000))
|
||||
const voteStatus = createdAt < threeDaysAgo ? 'fermé' : 'ouvert'
|
||||
const isExpired = createdAt < threeDaysAgo
|
||||
const voteStatus = (isExpired || isOutdated) ? 'fermé' : 'ouvert'
|
||||
const voteColor = voteStatus === 'ouvert' ? '#2e7d32' : '#d32f2f'
|
||||
|
||||
// Render markdown content to HTML
|
||||
@@ -390,6 +391,7 @@ export default function PrintButton({versionData, size = 'medium', variant = 'ou
|
||||
|
||||
PrintButton.propTypes = {
|
||||
versionData: PropTypes.object.isRequired,
|
||||
isOutdated: PropTypes.bool,
|
||||
size: PropTypes.oneOf(['small', 'medium', 'large']),
|
||||
variant: PropTypes.oneOf(['text', 'outlined', 'contained'])
|
||||
}
|
||||
|
||||
@@ -54,8 +54,7 @@ export default function VersionPage({session, versionId, viewMode}) {
|
||||
|
||||
setVersionData(version)
|
||||
|
||||
// If in comparison mode, also fetch comparison data
|
||||
if (viewMode === 'comparison') {
|
||||
// Fetch comparison data (needed for outdated status even if not in comparison mode)
|
||||
const comparison = await compareVersion({
|
||||
accessToken,
|
||||
userId,
|
||||
@@ -68,7 +67,6 @@ export default function VersionPage({session, versionId, viewMode}) {
|
||||
if (comparison) {
|
||||
setVersionCompare({...comparison, versionId})
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to fetch version:', error)
|
||||
setError('Impossible de charger cette version')
|
||||
@@ -79,7 +77,7 @@ export default function VersionPage({session, versionId, viewMode}) {
|
||||
}
|
||||
|
||||
fetchVersionData()
|
||||
}, [accessToken, userId, versionId, viewMode])
|
||||
}, [accessToken, userId, versionId])
|
||||
|
||||
const handleBack = () => {
|
||||
router.push('/dashboard')
|
||||
|
||||
@@ -309,11 +309,13 @@ function VersionCard({
|
||||
/>
|
||||
<ExportPdfButton
|
||||
versionData={version}
|
||||
isOutdated={isOutdated}
|
||||
size='small'
|
||||
variant='text'
|
||||
/>
|
||||
<PrintButton
|
||||
versionData={version}
|
||||
isOutdated={isOutdated}
|
||||
size='small'
|
||||
variant='text'
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user