fontmap / src /components /FontMap /hooks /usePositioning.js
tfrere's picture
tfrere HF Staff
first commit
eebc40f
raw
history blame
1.32 kB
import { useMemo, useCallback } from 'react';
import { calculatePositions } from '../utils/fontUtils';
/**
* Hook spécialisé pour la gestion du positionnement des polices
* Séparation claire de la logique de calcul des positions
*/
export const usePositioning = (fonts, width, height, dilationFactor) => {
// Mémoriser le calcul des positions pour éviter les recalculs inutiles
const positions = useMemo(() => {
if (!fonts.length || width <= 0 || height <= 0) {
return [];
}
console.log('usePositioning: Calculating positions for', fonts.length, 'fonts');
return calculatePositions(fonts, width, height, dilationFactor);
}, [fonts, width, height, dilationFactor]);
// Fonction pour recalculer les positions si nécessaire
const recalculatePositions = useCallback(() => {
if (!fonts.length || width <= 0 || height <= 0) {
return [];
}
return calculatePositions(fonts, width, height, dilationFactor);
}, [fonts, width, height, dilationFactor]);
// Fonction pour obtenir la position d'une police spécifique
const getFontPosition = useCallback((fontName) => {
return positions.find(p => p.name === fontName);
}, [positions]);
return {
positions,
recalculatePositions,
getFontPosition,
hasPositions: positions.length > 0
};
};