import {forwardRef, useRef, useState} from 'react' import PropTypes from 'prop-types' import Table from '@mui/material/Table' import TableBody from '@mui/material/TableBody' import TableCell from '@mui/material/TableCell' import TableContainer from '@mui/material/TableContainer' import TableHead from '@mui/material/TableHead' import TableRow from '@mui/material/TableRow' import Paper from '@mui/material/Paper' import Button from '@mui/material/Button' import {TableVirtuoso} from 'react-virtuoso' import {Box, Typography} from '@mui/material' import SessionExpired from '../session/session-expired.js' import VersionDialog from './version-dialog.js' import {formatDate} from '@/lib/format.js' import {compareVersion} from '@/lib/directus.js' const columns = [ { width: 200, label: 'Version', dataKey: 'name', }, { width: 120, label: 'Créée le', dataKey: 'date_created', numeric: true, } ] const VirtuosoTableComponents = { Scroller: forwardRef((props, ref) => ( )), Table: props => ( ), TableHead: forwardRef((props, ref) => ), TableRow, TableBody: forwardRef((props, ref) => ), } function fixedHeaderContent() { return ( {columns.map(column => ( {column.label} ))} ) } function rowContent({ row, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen, setIsOpenComparison, setVersionCompare }) { const handleButtonClick = async versionId => { const version = await compareVersion({ accessToken, userId, versionId, countdownRef, setError, setIsErrorAlertOpen }) if (version) { setVersionCompare({...version, versionId}) setIsOpenComparison(true) } } return ( <> {columns.map(column => ( {column.dataKey === 'date_created' ? formatDate(row[column.dataKey], 'Pp') : } ))} ) } export default function ListVersions({ collection, data, accessToken, userId, setError, setIsErrorAlertOpen }) { const countdownRef = useRef() const [isOpenComparison, setIsOpenComparison] = useState(false) const [versionCompare, setVersionCompare] = useState(null) const versionData = data.find(({id}) => id === versionCompare?.versionId) return ( <> {collection} rowContent({ index, row, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen, setIsOpenComparison, setVersionCompare })} /> {isOpenComparison && ( )} ) } ListVersions.propTypes = { collection: PropTypes.oneOf(['titres', 'articles']).isRequired, data: PropTypes.array.isRequired, accessToken: PropTypes.string.isRequired, userId: PropTypes.string.isRequired, setError: PropTypes.func.isRequired, setIsErrorAlertOpen: PropTypes.func.isRequired }