From 5a5264fb7aaa7229fa4a33da29a34fb8f412e467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20FAMIBELLE-PRONZOLA?= Date: Wed, 23 Jul 2025 18:49:54 +0400 Subject: [PATCH] feat: ajoute utilitaires de filtrage des versions --- lib/version-utils.js | 100 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 lib/version-utils.js diff --git a/lib/version-utils.js b/lib/version-utils.js new file mode 100644 index 0000000..893929d --- /dev/null +++ b/lib/version-utils.js @@ -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 + } +}