Improve ListVersion component
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
|
import {forwardRef, useRef, useState} from 'react'
|
||||||
import * as React from 'react'
|
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
import Table from '@mui/material/Table'
|
import Table from '@mui/material/Table'
|
||||||
import TableBody from '@mui/material/TableBody'
|
import TableBody from '@mui/material/TableBody'
|
||||||
@@ -11,7 +10,10 @@ import Paper from '@mui/material/Paper'
|
|||||||
import Button from '@mui/material/Button'
|
import Button from '@mui/material/Button'
|
||||||
import {TableVirtuoso} from 'react-virtuoso'
|
import {TableVirtuoso} from 'react-virtuoso'
|
||||||
import {Box, Typography} from '@mui/material'
|
import {Box, Typography} from '@mui/material'
|
||||||
|
import LogoutCountdown from '../session/logout-countdown.js'
|
||||||
|
import VersionDialog from './version-dialog.js'
|
||||||
import {formatDate} from '@/lib/format.js'
|
import {formatDate} from '@/lib/format.js'
|
||||||
|
import {compareVersion} from '@/lib/directus.js'
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
@@ -28,15 +30,15 @@ const columns = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
const VirtuosoTableComponents = {
|
const VirtuosoTableComponents = {
|
||||||
Scroller: React.forwardRef((props, ref) => (
|
Scroller: forwardRef((props, ref) => (
|
||||||
<TableContainer component={Paper} {...props} ref={ref} />
|
<TableContainer component={Paper} {...props} ref={ref} />
|
||||||
)),
|
)),
|
||||||
Table: props => (
|
Table: props => (
|
||||||
<Table {...props} sx={{borderCollapse: 'separate', tableLayout: 'fixed'}} />
|
<Table {...props} sx={{borderCollapse: 'separate', tableLayout: 'fixed'}} />
|
||||||
),
|
),
|
||||||
TableHead: React.forwardRef((props, ref) => <TableHead {...props} ref={ref} />),
|
TableHead: forwardRef((props, ref) => <TableHead {...props} ref={ref} />),
|
||||||
TableRow,
|
TableRow,
|
||||||
TableBody: React.forwardRef((props, ref) => <TableBody {...props} ref={ref} />),
|
TableBody: forwardRef((props, ref) => <TableBody {...props} ref={ref} />),
|
||||||
}
|
}
|
||||||
|
|
||||||
function fixedHeaderContent() {
|
function fixedHeaderContent() {
|
||||||
@@ -57,7 +59,32 @@ function fixedHeaderContent() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function rowContent(_index, row) {
|
function rowContent({
|
||||||
|
row,
|
||||||
|
accessToken,
|
||||||
|
userId,
|
||||||
|
countdownRef,
|
||||||
|
setError,
|
||||||
|
setIsErrorAlertOpen,
|
||||||
|
setIsOpenComparison,
|
||||||
|
setVersionData
|
||||||
|
}) {
|
||||||
|
const handleButtonClick = async versionId => {
|
||||||
|
const version = await compareVersion({
|
||||||
|
accessToken,
|
||||||
|
userId,
|
||||||
|
versionId,
|
||||||
|
countdownRef,
|
||||||
|
setError,
|
||||||
|
setIsErrorAlertOpen
|
||||||
|
})
|
||||||
|
|
||||||
|
if (version) {
|
||||||
|
setVersionData(version)
|
||||||
|
setIsOpenComparison(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{columns.map(column => (
|
{columns.map(column => (
|
||||||
@@ -65,32 +92,58 @@ function rowContent(_index, row) {
|
|||||||
key={column.dataKey}
|
key={column.dataKey}
|
||||||
align={column.numeric || false ? 'right' : 'left'}
|
align={column.numeric || false ? 'right' : 'left'}
|
||||||
>
|
>
|
||||||
{column.dataKey === 'date_created' ? formatDate(row[column.dataKey], 'Pp') : <Button variant='outlined' color='success'>{row[column.dataKey]}</Button>}
|
{column.dataKey === 'date_created'
|
||||||
|
? formatDate(row[column.dataKey], 'Pp')
|
||||||
|
: <Button variant='outlined' color='success' onClick={() => handleButtonClick(row.id)}>{row[column.dataKey]}</Button>}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
))}
|
))}
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ListVersions({collection, data}) {
|
export default function ListVersions({
|
||||||
|
collection,
|
||||||
|
data,
|
||||||
|
accessToken,
|
||||||
|
userId,
|
||||||
|
setError,
|
||||||
|
setIsErrorAlertOpen
|
||||||
|
}) {
|
||||||
|
const countdownRef = useRef()
|
||||||
|
|
||||||
|
const [isOpenComparison, setIsOpenComparison] = useState(false)
|
||||||
|
const [versionData, setVersionData] = useState(null)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box>
|
<>
|
||||||
<Typography variant='button' textAlign='center' sx={{display: 'block', fontWeight: 'bold'}}>
|
<Box>
|
||||||
{collection}
|
<Typography variant='button' textAlign='center' sx={{display: 'block', fontWeight: 'bold'}}>
|
||||||
</Typography>
|
{collection}
|
||||||
<Paper style={{height: 350, width: '100%', marginBlock: 5}}>
|
</Typography>
|
||||||
<TableVirtuoso
|
<Paper style={{height: 350, width: '100%', marginBlock: 5}}>
|
||||||
data={data}
|
<TableVirtuoso
|
||||||
components={VirtuosoTableComponents}
|
data={data}
|
||||||
fixedHeaderContent={fixedHeaderContent}
|
components={VirtuosoTableComponents}
|
||||||
itemContent={rowContent}
|
fixedHeaderContent={fixedHeaderContent}
|
||||||
/>
|
itemContent={(index, row) => rowContent({
|
||||||
</Paper>
|
index, row, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen, setIsOpenComparison, setVersionData
|
||||||
</Box>
|
})}
|
||||||
|
/>
|
||||||
|
</Paper>
|
||||||
|
</Box>
|
||||||
|
{isOpenComparison && (
|
||||||
|
<VersionDialog versionData={versionData} isOpen={isOpenComparison} setIsOpen={setIsOpenComparison} />
|
||||||
|
)}
|
||||||
|
<LogoutCountdown ref={countdownRef} setError={setError} setIsErrorAlertOpen={setIsErrorAlertOpen} />
|
||||||
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
ListVersions.propTypes = {
|
ListVersions.propTypes = {
|
||||||
collection: PropTypes.oneOf(['titres', 'articles']).isRequired,
|
collection: PropTypes.oneOf(['titres', 'articles']).isRequired,
|
||||||
data: PropTypes.array.isRequired
|
data: PropTypes.array.isRequired,
|
||||||
|
accessToken: PropTypes.string.isRequired,
|
||||||
|
userId: PropTypes.string.isRequired,
|
||||||
|
setError: PropTypes.func.isRequired,
|
||||||
|
setIsErrorAlertOpen: PropTypes.func.isRequired
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user