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

[Unité] Ajout des bases sur la carte #2726

Merged
merged 7 commits into from
Dec 4, 2023
Merged

Conversation

ivangabriele
Copy link
Member

@ivangabriele ivangabriele commented Nov 28, 2023

@ivangabriele ivangabriele force-pushed the ivan/add-stations-on-map branch 2 times, most recently from 9cf76c8 to 131279a Compare November 29, 2023 09:54
frontend/src/domain/types/layer.ts Outdated Show resolved Hide resolved
const id = `${code}:${entityId}`

this.code = code
this.entityId = entityId
Copy link
Collaborator

Choose a reason for hiding this comment

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

pourquoi ne pas rajouter ces deux propriétés dans les properties de la Feature ?

Copy link
Member Author

Choose a reason for hiding this comment

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

Oui en interne dans la classe pour respecter le pattern des Features OL mais si on passe par des getters pour les récupérer, sinon on en perd tout l'intérêt (garantie d'existence).

@@ -0,0 +1,9 @@
import type { Coordinates } from '@mtes-mct/monitor-ui'

export function ensureCoordinates(value: any): Coordinates {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Dans quel cas on n'a aucune idée du type de l'input ?

Copy link
Member Author

@ivangabriele ivangabriele Nov 30, 2023

Choose a reason for hiding this comment

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

C'est simplement pour TS qui considère que c'est peut-être undefined à chaque fois qu'on utilise une méthode OL renvoyant des coordonnées, ce qui alourdit vachement le type-checking sans ce petit helper.

C'est aussi plus safe qu'un as qui ne génère pas de vrai check JS. J'hésite à faire pareil avec un ensureExtent().

@@ -62,6 +66,19 @@ export const clickOnMapFeature = (mapClick: MapClick) => (dispatch, getState) =>
return
}

if (mapClick.feature instanceof FeatureWithCodeAndEntityId && mapClick.feature.code === MonitorFishLayer.STATION) {
const overlayPosition = getDialogOverlayPositionFromFeature(mapClick.feature, 334, 320, FEATURE_MARGINS)
Copy link
Collaborator

Choose a reason for hiding this comment

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

Ici, je préfère qu'on utilise le standard getId() comme sur les autres features

Copy link
Member Author

@ivangabriele ivangabriele Nov 30, 2023

Choose a reason for hiding this comment

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

Pas de soucis mais alors je propose que l'on override la méthode getId(). L'idée et d'éviter ce genre de code à rallonge qui ne fait finalement que getter une simple propriété dont on sait pertinemment qu'elle existe.

OL a l'avatange d'être hautement extensible, je pense qu'il ne faut pas s'en priver.

Même si je pense aussi que les getter et setter en JS existent depuis un bail maintenant et getId() n'est que le prédécesseur d'ECMAScript 6 (2015) class{ get id() {} }. Mais ça c'est seulement du taste donc aucun soucis si ce n'est pas partagé.

J'ai écrit tout ce code comme une proposition généralisable.

frontend/src/domain/use_cases/map/clickOnMapFeature.ts Outdated Show resolved Hide resolved
function UnmemoizedStationLayer({ hoveredFeatureId }: StationLayerProps) {
const vectorSourceRef = useRef(new VectorSource() as VectorSourceForFeatureWithCodeAndEntityId)
const vectorLayerRef = useRef(
new VectorLayerWithCode({
Copy link
Collaborator

Choose a reason for hiding this comment

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

Ici aussi on pourrait utiliser le VectorLayerWithName existant ?

Copy link
Member Author

Choose a reason for hiding this comment

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

VectorWithName est juste un type non ? Il ne garantit pas l'existence des props.


useEffect(() => {
vectorSourceRef.current.forEachFeature(feature => {
feature.setState({
Copy link
Collaborator

Choose a reason for hiding this comment

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

setState n'existe pas à mon sens, enfin pas pour set les propriétés d'une feature
https://openlayers.org/en/latest/apidoc/module-ol_VectorTile-VectorTile.html#setState

Copy link
Member Author

Choose a reason for hiding this comment

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

Oui je l'ai nommé comme ça sans grande inspiration. Mon idée est de nommer cette méthode de manière à symboliser quelque chose qui va être muté selon les besoin une fois la feature instancié, contrairement aux props. Et que ce soit sur Env ou Fish on a un commun assez important sur le isHighlighted et le isSelected entre les layers. Je suis preneur de meilleures idées :).

return () => {
monitorfishMap.removeLayer(vectorLayerRef.current)
// eslint-disable-next-line react-hooks/exhaustive-deps
vectorLayerRef.current.dispose()
Copy link
Collaborator

Choose a reason for hiding this comment

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

dispose n'est requis que pour les layers en webgl ?

Copy link
Member Author

Choose a reason for hiding this comment

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

Là j'avoue que je colle, je te fais confiance du coup. Je veux bien une petite explication quand je reviendrai sur la logique de cleanup dans OL.

import type VectorSource from 'ol/source/Vector'

export interface VectorSourceForFeatureWithCodeAndEntityId<G extends Geometry = Geometry> extends VectorSource<G> {
addFeatures(features: Array<FeatureWithCodeAndEntityId<G>>): void
Copy link
Collaborator

Choose a reason for hiding this comment

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

Je ne suis pas super fan de ces re-typages

Copy link
Member Author

@ivangabriele ivangabriele Nov 30, 2023

Choose a reason for hiding this comment

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

Je suis d'accord et propose qu'on crée une classe étendue VectorSourceForFeatureWithCodeAndEntityId (ou un autre nom) étendue alors. FeatureLike garantit seulement le minimum requis pour une Feature, l'idéal serait de garantir que l'on ne manipulera que des FeatureWithCodeAndEntityId.

frontend/src/utils/getDialogOverlayPositionFromFeature.ts Outdated Show resolved Hide resolved
@ivangabriele
Copy link
Member Author

ivangabriele commented Nov 30, 2023

@louptheron Il reste :

  • Le highlight (coloration bleue) des bases correspondantes lorsqu'on clique sur l’icône "Centrer sur la carte" dans la dialog de liste des unités, le state Redux est déjà mis à jour et le centrage auto fonctionne.
  • Il restait des commentaires que tu avais fait et que j'avais remis à plus tard dans la PR des unités [Unités] Affichage et édition des unités sur la carte #2716.
  • Il y a un soucis avec des éléments sur la carte qui s'affichent par dessus l'overlay quand on sélectionne une base.
  • J'ai mis un z-index qui est sûrement bien trop élevé. Les bases étant un affichage informatif temporaire, Adeline considérait qu'elle devait prendre la prio sur tout le reste (choix qu'on a pris sur Env).

J'ai rebase la branche sur #2722 qui lui-même a été rebase sur master aujourd'hui. Je te conseille de merger cette PR-là en prio puis de rebase celle-là sur master pour simplifier le process.

@louptheron louptheron marked this pull request as ready for review December 4, 2023 14:22
Copy link

sonarcloud bot commented Dec 4, 2023

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 8 Code Smells

No Coverage information No Coverage information
0.0% 0.0% Duplication

@louptheron louptheron merged commit 0a03cf8 into master Dec 4, 2023
26 checks passed
@louptheron louptheron deleted the ivan/add-stations-on-map branch December 4, 2023 15:15
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.

2 participants