Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ajout des tuiles vectorielles et des events lors du clique sur un collège #15

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

cedric-famibelle-pronzola
Copy link
Contributor

  • Ajout des tuiles vectorielles
  • Ajout des layers
  • Ajout des events lors du clique sur un collège

@jdesboeufs
Copy link
Member

Attention les autres collèges sont masqués automatiquement par MapLibre s'ils chevauchent la limite d'une zone. Il faut les mettre au dessus en terme de priorité.

@@ -1,2 +1,16 @@
/* eslint n/prefer-global/process: off */
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pas utile je pense.

Comment on lines +3 to +6
const Map = dynamic(
() => import('./map.js'),
{ssr: false}
)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Il n'est pas utile d'importer dynamiquement ce composant. La création de la carte se fait dans un componentDidMount, le code sera donc bien exécuté côté client. Ici, c'est le fait que les sources soient calculées à l'aide de window qui elles sont calculées côté serveur qui pose un problème.


return (
<>
<Legend />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La légende n'est pas vraiment adaptée à l'affichage mobile. Je propose de ne l'afficher que sur desktop.

Comment on lines +10 to +22
const itineraireLayer = {
id: 'itineraire-line',
type: 'line',
source: 'itineraire',
layout: {
'line-join': 'round',
'line-cap': 'round'
},
paint: {
'line-color': colors.darkGrey,
'line-width': 4
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pourquoi garder ce layer indépendant des autres ?

Comment on lines +30 to +31
const sourcesLoaded = useRef(false)
const layersLoaded = useRef(false)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tu peux utiliser map.isSourceLoaded({sourceId}). C'est plus sûr qu'une référence ici, car la source peut être rechargée et ta ref ne prévoit pas de suivre le cycle de vie.

Comment on lines +79 to +85
if (selectedCollegeIdRef.current) {
map.current.setLayoutProperty('secteurs-lines', 'visibility', 'visible')
map.current.setLayoutProperty('secteurs-fill', 'visibility', 'visible')
} else {
map.current.setLayoutProperty('secteurs-lines', 'visibility', 'none')
map.current.setLayoutProperty('secteurs-fill', 'visibility', 'none')
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (selectedCollegeIdRef.current) {
map.current.setLayoutProperty('secteurs-lines', 'visibility', 'visible')
map.current.setLayoutProperty('secteurs-fill', 'visibility', 'visible')
} else {
map.current.setLayoutProperty('secteurs-lines', 'visibility', 'none')
map.current.setLayoutProperty('secteurs-fill', 'visibility', 'none')
}
const visibilityState = selectedCollegeIdRef.current ? 'visible' : 'none'
map.current.setLayoutProperty('secteurs-lines', 'visibility', visibilityState)
map.current.setLayoutProperty('secteurs-fill', 'visibility', visibilityState)

Comment on lines +269 to +283
useEffect(() => {
if (!map.current) {
return
}

map.current.on('click', 'colleges', e => handleCollegeClick(e, selectedCollegeFeatureRef))
map.current.on('mousemove', 'colleges', onCollegeHover)
map.current.on('mouseleave', 'colleges', onCollegeLeave)

return () => {
map.current.off('click', 'colleges', e => handleCollegeClick(e, selectedCollegeFeatureRef))
map.current.off('mousemove', 'colleges', onCollegeHover)
map.current.off('mouseleave', 'colleges', onCollegeLeave)
}
}, [map, handleCollegeClick, selectedCollegeFeatureRef])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Les ajouts d'évènement devraient se faire dans le même useEffect que la création de la carte.

Le risque dans ce genre de cas, c'est d'ajouter plusieurs fois les évènements sans les supprimer, car le useEffect va ajouter des évènements à chaque fois qu'une modification est détecté dans ses hooks.

Le piège ici, c'est que tu as "wrappé" tes méthodes inutilement des dans useCallback donc en les utilisant ici, le useEffect les demandes dans les hooks.

Je te conseille donc de retirer les useCallback inutile et déclarer même tes fonctions en dehors du composant quand cela a du sens et de gérer tes évènements de carte dans le même useEffect que la carte.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants