Files

101 lines
2.6 KiB
JavaScript

/**
* 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
}
}