Guide technique
Architecture plugin
Organisation du code :
js/extension/components: UI React (sans I/O direct).js/extension/stateManagement: actions, reducer, selectors, epics.js/extension/requests: appels I/O (WFS, zone de compétence).js/extension/utiles: helpers purs (permissions, attributs, champs auto, i18n, géométrie).js/extension/plugin: wiring MapStore (createPlugin, reducers, epics).
Flux Redux attendu :
- Le composant dispatch une action.
- Un epic intercepte et appelle
requests. - Succès/erreur renvoient des actions Redux.
- Les selectors alimentent l’UI.
Installer en local
Prérequis :
- Node.js et npm
- dépôt cloné avec submodule MapStore2
Commandes :
npm install
npm start
Application disponible sur http://localhost:8081.
Build extension
npm run ext:build
Le zip d’extension est généré dans dist/.
Notes de configuration
- Le plugin est déclaré dans
assets/index.jsonavec le nompanel_editor. - Le nom d’extension est défini dans
config.js. - La configuration d’exécution se fait dans
configs/localConfig.json. - Les champs automatiques (
auto) sont résolus dans les helpers, puis injectés dans la transaction au moment de la sauvegarde. - Les types
autosupportés incluentheader,date,area,lengthetvalue. Les unités par défaut sontm²pourareaetmpourlength. - Pour
auto: ["...", "header", source], la documentation supporte uniquementsource = "name"ousource = "role", lus depuiscurrentUser(géré et fournis par MapStore2 lors du mapping entre georchestra et le fonctionnement de mapstore). - Les champs
listacceptent une liste statique, une source JSON distante{ url, field }, ou une liste vide pour déduire les valeurs depuis les entités déjà chargées. - La visibilité des champs distingue lecture et écriture :
hiddenmasque en lecture, tandis qu’en écriture un champhiddenpeut être réaffiché s’il est configuré dansfields. - Les permissions de couche supportent
allowEdit,allowEditRoles, puis le fallback historiqueedit/editingRoles. restrictedAreapeut s’appuyer soit sur unwkt, soit sur uneurlJSON. Aucun endpoint par défaut n’est imposé.- Le
wktest interprété enEPSG:4326, puis reprojeté vers le CRS des features Identify avant les testsWITHIN/INTERSECTS/CONTAINS. - Le résultat de
restrictedAreaest évalué avant l’entrée en édition et, combiné au contrôle de rôles, alimente l’état d’interface (lock,record, ou les deux). - En mode édition, les sélecteurs de couche et d’entité sont désactivés pour empêcher un changement de contexte avant validation ou annulation.
- Le bouton de suppression dépend d’un double contrôle : visibilité via
allowDelete, puis activation selon les droitsdelete/deletionRoles. - La couche
requestsvalide aussi le contenu XML des réponses WFS-T : un HTTP200contenant une erreur OGC/WFS est renvoyé comme erreur applicative.
Référence complémentaire
Pour plus de détails sur le modèle d’extension et les plugins MapStore, voir le dépôt officiel :