feat: ajoute utilitaires de filtrage des versions
This commit is contained in:
@@ -0,0 +1,100 @@
|
|||||||
|
/**
|
||||||
|
* Utility functions for version filtering and searching
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter versions based on search term and filters
|
||||||
|
*/
|
||||||
|
export function filterVersions(versions, searchTerm, filters) {
|
||||||
|
if (!versions || versions.length === 0) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
return versions.filter(version => {
|
||||||
|
// Search in content, name, and author
|
||||||
|
if (searchTerm) {
|
||||||
|
const searchLower = searchTerm.toLowerCase()
|
||||||
|
const content = version.delta?.contenu || ''
|
||||||
|
const name = version.name || ''
|
||||||
|
const author = version.user_created?.split('-')[0] || ''
|
||||||
|
|
||||||
|
const matchesSearch = content.toLowerCase().includes(searchLower)
|
||||||
|
|| name.toLowerCase().includes(searchLower)
|
||||||
|
|| author.toLowerCase().includes(searchLower)
|
||||||
|
|
||||||
|
if (!matchesSearch) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by author
|
||||||
|
if (filters.author) {
|
||||||
|
const versionAuthor = version.user_created?.split('-')[0] || ''
|
||||||
|
if (versionAuthor !== filters.author) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by date range
|
||||||
|
if (filters.dateFrom) {
|
||||||
|
const versionDate = new Date(version.date_created)
|
||||||
|
const fromDate = new Date(filters.dateFrom)
|
||||||
|
if (versionDate < fromDate) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filters.dateTo) {
|
||||||
|
const versionDate = new Date(version.date_created)
|
||||||
|
const toDate = new Date(filters.dateTo + 'T23:59:59') // End of day
|
||||||
|
if (versionDate > toDate) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by status (this would need to be enhanced based on actual status logic)
|
||||||
|
if (filters.status) {
|
||||||
|
const versionStatus = getVersionStatus(version, versions)
|
||||||
|
if (versionStatus !== filters.status) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get version status based on its position and data
|
||||||
|
* This logic should match the one in version-timeline.js
|
||||||
|
*/
|
||||||
|
function getVersionStatus(version, allVersions) {
|
||||||
|
// Sort versions by date to determine position
|
||||||
|
const sortedVersions = [...allVersions].sort((a, b) =>
|
||||||
|
new Date(b.date_created) - new Date(a.date_created)
|
||||||
|
)
|
||||||
|
|
||||||
|
const index = sortedVersions.findIndex(v => v.id === version.id)
|
||||||
|
const totalVersions = sortedVersions.length
|
||||||
|
|
||||||
|
if (index === 0) {
|
||||||
|
return 'current' // Most recent
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index === totalVersions - 1) {
|
||||||
|
return 'initial' // First version
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'archived' // Intermediate versions
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get filter stats for display
|
||||||
|
*/
|
||||||
|
export function getFilterStats(originalData, filteredData) {
|
||||||
|
return {
|
||||||
|
total: originalData.length,
|
||||||
|
filtered: filteredData.length,
|
||||||
|
hidden: originalData.length - filteredData.length
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user