GithubHelp home page GithubHelp logo

geotrekce / geotrek-rando-v3 Goto Github PK

View Code? Open in Web Editor NEW
15.0 15.0 16.0 10.72 MB

Geotrek public data website (version 3)

License: MIT License

Dockerfile 0.15% JavaScript 2.72% TypeScript 96.43% Handlebars 0.34% CSS 0.27% HTML 0.10%
nextjs pwa

geotrek-rando-v3's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

geotrek-rando-v3's Issues

Fiches rando - Ajouter la vue 3D

Fiches randos ne s'affichent pas si elles ont un contenu touristique à proximité dont le chapeau est vide

Problème identifié ici : https://gtr3.ecrins-parcnational.fr/trek/958306-Le-tour-du-Montbrison-(parcours-trail-n%C2%B013)

Erreur :

Unhandled Runtime Error

TypeError: description is null
Source

components/pages/details/components/DetailsCard/DetailsCard.tsx (90:9) @ DetailsCard

  88 |   <p className="text-Mobile-C1 desktop:text-H4 text-primary1 font-bold">{name}</p>
  89 | </OptionalLink>

    90 | {description !== undefined && description.length > 0 && (
         | ^
      91 |   <div
      92 |     className="mt-1 desktop:mt-4
      93 |     flex flex-col desktop:flex-row desktop:items-end

Call Stack
renderReactElement
../../client/index.tsx (499:6)

image-gtr3

Le soucis semble donc ici : https://github.com/GeotrekCE/Geotrek-rando-v3/blob/main/frontend/src/components/pages/details/components/DetailsCard/DetailsCard.tsx#L90

La console du navigateur indique :

TypeError: n is null
    T DetailsCard.tsx:88
    React 7
    unstable_runWithPriority scheduler.production.min.js:18
    React 6
    be index.tsx:499
    e index.tsx:394
    f runtime.js:63
    _invoke runtime.js:293
    m runtime.js:118
    Babel 4
    NextJS 2
    e index.tsx:380
    f runtime.js:63
    _invoke runtime.js:293
    m runtime.js:118
    Babel 10
    fe NextJS
    LwBP next.js:5
    Webpack 6
react-dom.production.min.js:216:199

En effet en regardant les contenus, cette rando a un contenu touristique (Au file de l'onde - 1654) qui a une description, mais pas de chapeau (description_teaser) : https://geotrek-admin.ecrins-parcnational.fr/api/v2/touristiccontent/?near_trek=958306
Le chapeau est vide en FR, et NULL dans les autres langues : https://geotrek-admin.ecrins-parcnational.fr/api/v2/touristiccontent/1654/
C'est le chapeau qui est affiché dans les cartes de la rubrique A PROXIMITE.

Il faudrait permettre ce cas où le chapeau est vide ou null.

On n'a pas testé mais il faudrait vérifier en passant que si un POI n'a pas de description, le même soucis ne se produit pas.

Améliorer l'affichage des tracés des randos sur la page recherche

Actuellement on ne les affiche que quand on clique sur le marqueur d'une rando sur la carte. Et souvent la tooltip masque en partie le tracé.

On pourrait afficher le tracé quand on survole une rando dans la liste de résultat en plus de mettre en avant son marqueur.
Mais il faudrait faire des appels API à la volée car on n'a pas encore les tracés de toutes les randos pour des raisons de performance.

Ajouter les randos à proximité

D'une rando ou d'un contenu ou évènement touristique, ou site ou parcours outdoor
Ajouter filtres par ID_trek ou ID_touristic-content dans la route /trek

Filtres ajoutés :

(21) Revoir la logique et l'ergonomie des filtres

Actuellement, on a 2 premiers "filtres" qui sont plutôt des sélecteurs de contenu, permettant de choisir les pratiques de rando et/ou les catégories de contenus touristiques à afficher.
Sur la même ligne (et même design) on a les filtres communs et permanents.
En dessous, selon le type de contenu sélectionné, on affiche éventuellement les filtres spécifiques à celle-ci.

image

Ces différents types de filtre mériteraient d'être plus clairs, éventuellement dissociés, pour améliorer le fonctionnement, la compréhension et l'ergonomie.

Fiche rando - Zones sensibles - Interaction liste/carte

Actuellement chaque zone sensible à proximité d'une rando est affichée sur sa carte avec une couleur aléatoire parmi le thème de customisation.

Il faudrait privilégier une interaction liste>carte au survol d'une zone sensible dans la liste pour les identifier et les localiser.

Voir aussi le comportement en mobile, où on n'a plus la liste des zones sensibles accessible (voir #379)

Ajouter aussi les zones sensibles sur le contrôleur de couches.

Sur les fiches randos, mais aussi les fiches sur les fiches Outdoor (Sites et parcours)

Rabattre le HEADER au scroll vers la bas

Initialement le Header se rabattait automatiquement quand on descendait dans la page, pour gagner de la place. Il réapparaissait dès qu'on remontait un peu dans la page, pour rester accessible facilement.

Ce comportement a été mis de côté quand on a ajouté la carte, car le fait que la carte s'agrandisse et rétrécisse posait soucis.

A voir si il est souhaité remettre en place ce comportement en trouvant une solution pour la carte qui a une hauteur fixe.

Réservation en ligne - Ajouter Widget

Carte mobile - Ajouter localisation GPS

Quand on affiche une carte sur un appareil mobile, on pourrait tenter de localiser l'utilisateur pour afficher sa position sur la carte.
En ajoutant un bouton pour activer sa localisation, et peut-être le proposer par défaut quand l'utilisateur affiche une carte sur mobile.

Utiliser la method locate native de Leaflet (https://leafletjs.com/reference-1.7.1.html#map-locate) ?
Voir aussi : https://leafletjs.com/examples/mobile/
Eventuellement en utilisant un plugin Leaflet comme https://github.com/domoritz/leaflet-locatecontrol ?
Disponible pour React-native : https://www.npmjs.com/package/react-leaflet-locate-control

Changer le niveau max de zoom des clusters

Actuellement, à partir du niveau de zoom 15 de la page recherche, les clusters ne sont plus activés.
Ce niveau de zoom est défini ici : https://github.com/GeotrekCE/Geotrek-rando-v3/blob/main/frontend/src/components/Map/components/ClusterContainer/index.tsx#L18

Cependant quand on a des points exactement au même endroit, on a ajouté la fonction spiderfy des clusters (#361) pour que le cluster soit éclaté et que chaque objet soit interrogeable.

Actuellement, si on a plusieurs points au même endroit, ils sont bien clusterisés, bien éclatés si on clique dessus, mais si on zoome au-delà du zoom 15, alors le cluster est désactivé et on ne voit et peut alors cliquer que sur un des points.

Il faudrait plutôt garder les clusters et le spider jusqu'au zoom maximum pour éviter cela.
En utilisant la valeur du paramètre du zoom max, ajouté récemment (#351) ?

Recherche / Web - Ajouter info au survol d'un objet sur la carte

Actuellement, pour avoir des infos sur un objet affiché sur la carte de recherche, il faut cliquer dessus pour afficher une tooltip.
C'est fonctionnel en web et mobile.
image

Mais en web, on pourrait, en plus afficher une info sommaire au survol comme c'est le cas dans la V2 :
image
Dans la V2, au clic sur un objet, on a une tooltip avec plus d'infos :
image

A voir si on fait pareil dans les fiches détails, au niveau des POI, contenus touristiques...

A voir quand même si cela n'a pas pour conséquence que les utilisateurs ne cliquent pas sur les objets de la carte, l'action au survol laissant penser qu'il n'y a pas d'autre action disponible.
Plus globalement, il y a plusieurs tickets sur les interactions carte/liste et l'affichage des infos des objets de la carte (comme #379), à améliorer globalement.

Carte mobile - Détail - Ajouter tooltip sur POI, étapes...

Sur la carte mobile de la page détail, comme on n'a pas la liste des objets liés (POI, à proximité, étapes...), on peut les afficher sur la carte, mais pas savoir à quoi correspond chacun.

Ajouter une tooltip au clic sur un objet ?

Error 502 : bad gateway -GEotrek Rando V3

Bonjour,

J'ai suivi la procédure d'installation, Tout à l'air ok, sauf lorsque je veux me connecter à la page internet, j'ai une error 502.
Ma conf nginx :

server {
   location / {
        proxy_pass http://localhost:9001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
    #listen 80;
    #listen [::]:80;
    listen 8001;
    server_name xxx.xxx.xxx.xxx;
}

J'ai pris des ports différents car sur ce serveur de test le port 80 est déjà utilisé pour le Geotrek-admin.

Voici le résultat de /var/log/nginx/error.log

2021/03/03 14:20:08 [error] 32613#32613: *42971 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xxx.xxx.xx, server: xxx.xxx.xxx, request: "GET / HTTP/1.1", upstream: "http://[::1]:9001/", host: "xxxx.xxx.xxx:8001"
2021/03/03 14:20:08 [error] 32613#32613: *42971 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xxx.xxx.xxx, server: xxx.xxx.xxx., request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:9001/", host: "xxx.xxx.xxx:8001"

Cela vient sûrement de ma conf Nginx, si j'ai bien compris, on setup un port dans le proxy-pass qui va faire passerelle avec le port 80 du container, et plus bas je mets en place un port pour me connecter au site.

error Command failed with signal "SIGKILL".

Depuis hier et aujourd'hui, quand je tente de build avec la v0.0.17 ou la v3.0.0, j'ai cette erreur.

J'ai tenté en faisant des modifications dans mon dossier config/ et/ou medias/, ça ne change rien au problème.

Idem après avoir fait du nettoyage comme le recommande la doc ici : https://github.com/GeotrekCE/Geotrek-rando-v3/blob/main/docs/installation.md#manage-docker-images-storage-on-disk

J'ai finis par recommencer dans un autre dossier et je retombe sur la même erreur.

Commande faite pour reproduire l'erreur :

mkdir Geotrek-rando-test 

cd Geotrek-rando-test

git init .

git pull https://github.com/GeotrekCE/Geotrek-rando-v3-installer.git

#Copie des contenus exemples des fichiers du dossier config/

docker build -t geotrek-rando --build-arg VERSION=latest .


qui donne comme résultat : 
`error Command failed with signal "SIGKILL".`

Recherche - Randos - Afficher le chapeau

Le chapeau (résumé) d'une rando permet d'en donner un aperçu en une phrase. Il est donc dommage de ne pas l'afficher dès la page de recherche.
Sur les cartes de la liste de résultat, il n'y a pas forcément la place, mais on pourrait les afficher sur la tooltip quand on clique sur une rando sur la carte.
A creuser.

Idem pour les contenus touristiques.

Recherche et détail - Intégrer sites et parcours outdoor

En plus des services et des treks.
Ajouter le sélecteur de contenus + les filtres spécifiques Outdoor qui peuvent varier d'une pratique outdoor à l'autre.

A penser : au niveau API et liste des thèmes, vérifier aussi les objets Outdoor publiés en plus des treks et contenus touristiques.

Ressources :

Mettre en place la customisation

Geotrek-rando est utilisé par différentes structures dans des contextes et avec des contenus et des stratégies touristiques différentes.
Pour cela, chaque instance doit pouvoir être customisée pour correspondre à la charte graphique de la structure et à ses contenus.

  • Logo de la structure
  • Les couleurs (avec une couleur primaire et une secondaire ET/OU un surcouche CSS possible)
  • Parfois la police utilisée
  • Certains contenus de la page d'accueil qui ne viennent pas de l'API (titre et description du portail, contenu du footer...)
  • Des éléments de référencement (titre et description du portail pouvant différer par langue...)
  • Surcouche des fichiers de langue pour adapter des libellés

Voir la documentation de Geotrek-rando v2 : https://github.com/GeotrekCE/Geotrek-rando/blob/master/docs/settings.md
La customisation doit être rapatriée à chaque mise à jour de Geotrek-rando.
Dans Geotrek-rando v2, la customisation est regroupée dans un dossier /custom

Quelques exemples de Geotrek-rando actuel pour voir différents territoires :

Certains utilisent plutôt une vidéo :

API - Filtrer les contenus par portail

Un Geotrek-admin peut alimenter plusieurs portails Geotrek-rando avec des contenus partiellement différents.
Pour chaque rando et contenu touristique, il est possible de définir un portail cible.
Un contenu peut alimenter plusieurs portails cibles.
Par exemple le Geotrek-admin du PNE alimente 6 portails Geotrek-rando avec des contenus en partie différent.

Il serait donc important de pouvoir ajouter un paramètre permettant de limiter les contenus récupérés en filtrant sur ce portail.
Si il est renseigné ce paramètre de limitation des contenus serait à appliquer à chaque fois que l'on interroge la route des treks ou des touristicContents.


Dans un second temps, il faudrait voir comment ajuster les valeurs de chaque filtre en fonction du portail.
Car en effet toutes les valeurs possibles pour chaque filtre, ne concernent pas tous les portails basés sur un même Geotrek-rando.

On pourrait faire cela au niveau de Geotrek-rando, en comparant les données aux valeurs des filtres renvoyant par la route de chaque filtre, mais ça serait lourd et peu performant.

A voir si on peut le faire au niveau de chaque route listant les valeurs d'un filtre, en les comparant au contenu du portail cible, si cela n'est pas trop lourd à réaliser. Car cela serait fait à chaque appel de la route d'une typologie (liste des valeurs d'un filtre).
Il faudrait alors ajouter la possibilité de filtre les valeurs d'une typologie par portail, comme c'est déjà le cas pour les routes des contenus (treks et touristicContents).

Fiche rando - Profil altimétrique et curseur sur la carte

Le curseur (rond gris) est affiché sur la carte partout, à tous les niveaux de la fiche détail d'une rando.
Il faudra voir si il est possible d'avoir ce curseur sur la carte, uniquement quand on est positionné au niveau de la partie PROFIL ALTIMETRIQUE dans le bloc de contenu ?

Ajouter les favoris

Le bouton a été intégré dans le header, mais sans aucune fonctionnalité.

  • Pouvoir ajouter un objet (rando, contenu touristique...) en favoris depuis la liste ou sa fiche
  • Pouvoir accéder à la liste des objets favoris

URL rewriting depuis V2

Fournir des règles de réécriture des pages depuis Geotrek-rando v2, notamment des pages de chaque rando et contenu touristique. En multilingue.

Mise en place de la configuration

Geotrek-rando est utilisé par différentes structures dans des contextes et avec des contenus et des stratégies touristiques différentes.
Pour cela, chaque instance doit pouvoir être adaptée et configurée pour avec différents paramètres de configuration, en plus de la customisation.

Actuellement tous les paramètres ont une valeur par défaut, et il est possible de les surcoucher.

Voir la liste actuelle des paramètres de base, essentiels : https://github.com/GeotrekCE/Geotrek-rando/blob/master/docs/settings-custom-json.md
Et la liste actuelle de tous les paramètres surcouchables : https://github.com/GeotrekCE/Geotrek-rando/blob/master/docs/settings-custom-json-all-options.md

Fiche rando - Afficher sur la carte les lieux de renseignements

Actuellement ils sont uniquement affichés dans les infos de la fiche.
Interaction entre liste et carte ?
Les afficher seulement quand on arrive à leur niveau dans la fiche ?
Ou plutôt permettre d'afficher la couche de tous les lieux d'informations sur toutes les cartes, comme dans la V2 ?

  • Sur les fiches randos et outdoor

ADR et mise en place de l'environnement initial

Définition de l'architecture technique et mise en place des premiers éléments par @sraikimaxime :

Objectif 1 :

  • Décision framework front avec Architecture Decision Record (ADR) ✅
  • Lors de la mise en place de l'environnement de développement, j'ai décidé de changer la priorité et d'aller jusqu'à l'intégration d'un premier call de récupération de la donnée via l'api fournie pour lever la dépendance à de potentiels problèmes venant de l'extérieur. Bonne nouvelle, j'ai pu récupérer de la donnée sur notre environnement de développement depuis l'api sans soucis ce qui lève notre unique dépendance extérieure pour aller jusqu'à la première fonctionnalité que nous mettrons en place d'ici la fin de la semaine prochaine : l'affichage de la carte avec des données venant de l'api ✅
  • Mise en place de l'environnement de développement avec tous nos outils de testing, traduction, génération de code etc ✅

Objectif 2 (provisioning et déploiement) :

  • ✅ Décision solution de provisioning pour les différents environnements avec ADR
  • ✅ Décision solution de déploiement pour les différents environnements avec ADR
    => Suite à nos discussions avec Camille, nous avons décidé d'opter pour une dockerisation du site. J'ai ajouté une première documentation rapide sur comment exécuter le container mais j'ai bien conscience qu'il faudrait l'améliorer, je le ferais dès lundi. Je rajouterai aussi au passage une solution pour déployer le site sans docker en pullant directement le repo et en installant node.
  • ✅ Livraison du code de l'environnement de développement avec documentation d'installation et de déploiement.

=> J'ai livré un premier container sur github, je l'ai essayé de mon côté il est fonctionnel mais pour l'instant il ne fait que servir le code sur un port au choix.

On peut donc maintenance consulter et commenter les ADRs (https://github.com/GeotrekCE/Geotrek-rando-v3/tree/main/docs/adrs) et tester la documentation d'installation et de déploiement.

Semaine prochaine :

  • Implémentation d'une première carte avec Leaflet
  • Affichage des randos récupérés depuis l'api sur la carte
  • Mise en place de la solution d'intégration continue Circle CI pour runner nos tests unitaires à chaque PR
  • Intégration du système de Progressive Web App et premier test d'accès à la carte avec les données hors connexion
  • (Moins prioritaire) Mise en place de premiers tests end to end avec cypress.

Amélioration - DevX

Il y a plusieurs problèmes de DevX qu'il serait juicieux de régler au prochain run:

  • Une performance de l'app en locale très mauvaise (probablement des devs tools ou la synchronisation du service worker de dev via workbox)
  • Pas d'outil de debugging performant

Remplacer oldGetSpacing par getSpacing

oldGetSpacing est deprecated et utilisait des multiples de 5 pour nos spacings

Il faut le remplacer par getSpacing qui utilise maintenant des multiples de 4

Ajouter des tooltips sur les boutons

Sur les pictos des infos techniques, mais aussi sur tous les pictos des catégories ou types d'objet, ainsi que sur les boutons d'action.

Bien identifier un composant global pour faire cela.

Problème de retour à la page recherche depuis fiche randonnée

Lorsque l'on suit les étapes suivantes, le retour à la page recherche via le bouton retour du navigateur n'est pas opérationnel.

  • Sur la page d'accueil sélectionner une pratique
  • Sur la page de recherche déselectionner la pratique
  • Cliquer sur une randonnée pour aller sur la fiche détail
  • Cliquer sur le bouton back sur navigateur

Le comportement est le même avec un contenu touristique

Fiches - Boutons TELECHARGER à regrouper et dédoublonner

Actuellement il y a un bouton TELECHARGER sur la barre fixe (avec accès au PDF), ainsi que des boutons de téléchargement plus complet sous la photo de la rando.

Ça fait en partie doublon et donc brouille la compréhension de la page.
Choisir où les mettre sans doublonner.

Offline support for large amount of searches

Problem

The offline behavior of the web application is handled by the progressive web app engine "service worker" cache. We provided limits to the service worker concerning the number of pages it had to store in cache (see cache.js file).

We observed that making a search operation was triggering several requests and therefore occupying a significant space on the cache (can sometimes reach up to 3MB), the natural limit imposed by apple for pwa cache is 50MB meaning we should have an acceptable behavior for the canonical use we anticipated.

Stil, this behavior is not scalable and if future developers start adding requests during other operations we could see the offline behavior starting to get flaky (randomly working).

Proposed solutions

Solutions that could secure this behavior would be:

  • Reduce the number of peripheral calls made during the search
  • Use the local storage to store resources that specifically need to be accessed offline

Retour à la rando parent

Pas de bouton retour pour revenir à la rando parent dans une randonnée par étapes après avoir cliqué sur une étape.

Amélioration - Performances

Je créé cette issue pour noter qu'après analyse du site dans Pagespeed insights (version hébergée sur le web de spotlight), nous avons des optimisation de performance à faire.

  • Il apparait que les call à l'api (sur la page de détails en tous cas) ne sont pas excessivement long (de l'ordre de 600ms)
  • Le rendering ne semble également pas en cause (de l'ordre de 200ms)
  • Certaines images sont très large et peuvent bloquer le réseau pendant 500ms chacunes
  • On observe un TTFB très long de l'ordre de 3s ou 4s que je n'ai pas encore complètement expliqué
  • Il est également possible que le téléchargement et l'installation du service worker soit en cause

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.