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 Snackbar from '@mui/material/Snackbar' import Alert from '@mui/material/Alert' import {useState} from 'react' import MarkdownRenderer from '../markdown-renderer/index.js' import VoteButtons from './vote-buttons.js' import CopyButton from './copy-button.js' import {formatDate} from '@/lib/format.js' export default function VersionComparison({versionData, versionCompare, voteRefreshKey = 0, onVoteResult}) { const {current, main, outdated} = versionCompare const [snackbar, setSnackbar] = useState({open: false, message: '', severity: 'success'}) const handleVoteResult = result => { if (onVoteResult) { // Use the parent's vote result handler if provided onVoteResult(result) } else { // Fallback to local snackbar if no parent handler setSnackbar({ open: true, message: result.message, severity: result.success ? 'success' : '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 && ( {versionData && ( {formatDate(versionData.date_created)} )} )} LÉGENDE Version de référence En cours de révision Remplacée / Publiée {!onVoteResult && ( {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, voteRefreshKey: PropTypes.number, onVoteResult: PropTypes.func }