feat: intègre recherche et filtres dans ListVersions
This commit is contained in:
@@ -17,8 +17,11 @@ import {Box, Typography} from '@mui/material'
|
||||
import SessionExpired from '../session/session-expired.js'
|
||||
import VersionDialog from './version-dialog.js'
|
||||
import VersionTimeline from './version-timeline.js'
|
||||
import VersionSearch from './version-search.js'
|
||||
import VersionFilters from './version-filters.js'
|
||||
import {formatDate} from '@/lib/format.js'
|
||||
import {compareVersion} from '@/lib/directus.js'
|
||||
import {filterVersions, getFilterStats} from '@/lib/version-utils.js'
|
||||
|
||||
const columns = [
|
||||
{
|
||||
@@ -118,9 +121,28 @@ export default function ListVersions({
|
||||
const [viewMode, setViewMode] = useState('table')
|
||||
const [isOpenComparison, setIsOpenComparison] = useState(false)
|
||||
const [versionCompare, setVersionCompare] = useState(null)
|
||||
const [searchTerm, setSearchTerm] = useState('')
|
||||
const [filters, setFilters] = useState({
|
||||
author: '',
|
||||
dateFrom: '',
|
||||
dateTo: '',
|
||||
status: ''
|
||||
})
|
||||
|
||||
// Filter data based on search and filters
|
||||
const filteredData = filterVersions(data, searchTerm, filters)
|
||||
const stats = getFilterStats(data, filteredData)
|
||||
|
||||
const versionData = data.find(({id}) => id === versionCompare?.versionId)
|
||||
|
||||
const handleSearchChange = newSearchTerm => {
|
||||
setSearchTerm(newSearchTerm)
|
||||
}
|
||||
|
||||
const handleFiltersChange = newFilters => {
|
||||
setFilters(newFilters)
|
||||
}
|
||||
|
||||
const handleViewModeChange = (event, newViewMode) => {
|
||||
if (newViewMode !== null) {
|
||||
setViewMode(newViewMode)
|
||||
@@ -137,9 +159,16 @@ export default function ListVersions({
|
||||
mb: 2
|
||||
}}
|
||||
>
|
||||
<Typography variant='button' sx={{fontWeight: 'bold'}}>
|
||||
{collection}
|
||||
</Typography>
|
||||
<Box>
|
||||
<Typography variant='button' sx={{fontWeight: 'bold'}}>
|
||||
{collection}
|
||||
</Typography>
|
||||
{stats.hidden > 0 && (
|
||||
<Typography variant='caption' color='text.secondary' sx={{ml: 1}}>
|
||||
({stats.filtered}/{stats.total} versions)
|
||||
</Typography>
|
||||
)}
|
||||
</Box>
|
||||
|
||||
<ToggleButtonGroup
|
||||
exclusive
|
||||
@@ -159,26 +188,39 @@ export default function ListVersions({
|
||||
</ToggleButtonGroup>
|
||||
</Box>
|
||||
|
||||
{viewMode === 'table' ? (
|
||||
<Paper style={{height: 350, width: '100%', marginBlock: 5}}>
|
||||
<TableVirtuoso
|
||||
data={data}
|
||||
components={VirtuosoTableComponents}
|
||||
fixedHeaderContent={fixedHeaderContent}
|
||||
itemContent={(index, row) => rowContent({
|
||||
index, row, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen, setIsOpenComparison, setVersionCompare
|
||||
})}
|
||||
/>
|
||||
</Paper>
|
||||
<VersionSearch onSearchChange={handleSearchChange} />
|
||||
<VersionFilters data={data} onFiltersChange={handleFiltersChange} />
|
||||
|
||||
{filteredData.length === 0 ? (
|
||||
<Box sx={{textAlign: 'center', py: 4}}>
|
||||
<Typography variant='body1' color='text.secondary'>
|
||||
{searchTerm || Object.values(filters).some(Boolean)
|
||||
? 'Aucune version ne correspond aux critères de recherche'
|
||||
: 'Aucune version disponible'}
|
||||
</Typography>
|
||||
</Box>
|
||||
) : (
|
||||
<VersionTimeline
|
||||
collection={collection}
|
||||
data={data}
|
||||
accessToken={accessToken}
|
||||
userId={userId}
|
||||
setError={setError}
|
||||
setIsErrorAlertOpen={setIsErrorAlertOpen}
|
||||
/>
|
||||
viewMode === 'table' ? (
|
||||
<Paper style={{height: 350, width: '100%', marginBlock: 5}}>
|
||||
<TableVirtuoso
|
||||
data={filteredData}
|
||||
components={VirtuosoTableComponents}
|
||||
fixedHeaderContent={fixedHeaderContent}
|
||||
itemContent={(index, row) => rowContent({
|
||||
index, row, accessToken, userId, countdownRef, setError, setIsErrorAlertOpen, setIsOpenComparison, setVersionCompare
|
||||
})}
|
||||
/>
|
||||
</Paper>
|
||||
) : (
|
||||
<VersionTimeline
|
||||
collection={collection}
|
||||
data={filteredData}
|
||||
accessToken={accessToken}
|
||||
userId={userId}
|
||||
setError={setError}
|
||||
setIsErrorAlertOpen={setIsErrorAlertOpen}
|
||||
/>
|
||||
)
|
||||
)}
|
||||
</Box>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user