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