Spaces:
Configuration error
Configuration error
| import { useMemo, useRef } from 'react'; | |
| /** | |
| * Hook pour mettre en cache les calculs d'opacité | |
| * Évite les recalculs inutiles | |
| */ | |
| export const useOpacityCache = () => { | |
| const opacityCacheRef = useRef(new Map()); | |
| // Fonction pour calculer l'opacité avec cache | |
| const getOpacity = useMemo(() => { | |
| return (font, filter, searchTerm, selectedFont) => { | |
| // Créer une clé de cache | |
| const cacheKey = `${font.name}-${filter}-${searchTerm}-${selectedFont?.name || 'none'}`; | |
| // Vérifier le cache | |
| if (opacityCacheRef.current.has(cacheKey)) { | |
| return opacityCacheRef.current.get(cacheKey); | |
| } | |
| // Calculer l'opacité | |
| const familyMatch = filter === 'all' || font.family === filter; | |
| const searchMatch = !searchTerm || | |
| font.name.toLowerCase().includes(searchTerm.toLowerCase()) || | |
| font.family.toLowerCase().includes(searchTerm.toLowerCase()); | |
| const isActive = selectedFont && selectedFont.name === font.name; | |
| const opacity = isActive ? 1 : (familyMatch && searchMatch ? 1 : 0.2); | |
| // Mettre en cache (limiter la taille du cache) | |
| if (opacityCacheRef.current.size > 10000) { | |
| opacityCacheRef.current.clear(); | |
| } | |
| opacityCacheRef.current.set(cacheKey, opacity); | |
| return opacity; | |
| }; | |
| }, []); | |
| // Fonction pour invalider le cache | |
| const invalidateCache = () => { | |
| opacityCacheRef.current.clear(); | |
| }; | |
| return { | |
| getOpacity, | |
| invalidateCache | |
| }; | |
| }; | |