Logiciel de pharmacie
Go to file
florian_briand 90ff593438 Merge pull request 'Implémentation "HATEOAS" de l'interface pour HTMX et update des URLs qui fonctionne !' (#57) from feat/54_update_url_on_navbar_navigation into main
Reviewed-on: #57
Reviewed-by: kosssi <simon@p4pillon.org>

Implémente une approche plus respectueuse de "HATEOAS" comme nécessité par HTMX.

Dans cette approche, les routes des pages, comme /index ou /cps, ont, par défaut, un rendu "complet", comme cela serait si l'on n'utilisait pas HTMX.
Certains helpers sont utilisés pour éviter la duplication de code (entre particulier une "macro" Jinja pour la navbar).

Un "Extractor" issu de axum-htmx permet d'identifier quand une requête sur ces pages est issue d'un appel htmx, et permet de générer un rendu "simplifié", ne contenant (quasiment) que les éléments HTML ayant leur contenu qui change.
Par exemple, la page /cps, dans le cadre d'une requête htmx (hx-request=true), ne retourne que : une nouvelle balise <title>, la navbar (pour changer le design de l'élément "courant") et le contenu de la page. Tout le contenu de <head> ou les div qui encapsulent l'ensemble de la page ne sont pas re-envoyé.

Cela permet de mettre à jour les URLs dans la barre du navigateur, sans provoquer les problèmes de rechargement de page identifié dans le ticket #54.

Au passage, cette PR organise les templates d'une manière qui me parait un peu plus "claire" qu'avant :

- Les "pages", correspondant à des routes réelles, sont définies dans app/src/pages
- Les "composants", comme la navbar, qui ont vocation à être "inséré" (plutôt par des includes ou des appels de fonctions), sont définis dans app/src/components

L'avantage de leur présence dans le dossier src est qu'on peut sans problème mettre à côté les fichiers .rs qui leur correspondent.

La PR #53 et le ticket #54 avaient éclairé un problème lorsqu'on souhaitait pouvoir refléter la navigation dans l'URL du navigateur. Cette PR corrige ce problème en adoptant une approche plus respectueuse de la philosophie de HTMX.

- La nouvelle librairie axum-htmx qui offre des helpers pour faire du HTMX dans Axum
- Un repo' d'exemple intéressant, du même auteur, qui propose certaines approches pour gérer les "partials" (le rendu différentiel selon qu'on a une requête HTMX ou pas)

Closes #46
Closes #54
2024-08-30 18:25:53 +02:00
.gitea fix: update module options in BUG_REPORT.yaml template 2024-08-26 22:36:53 +02:00
crates fixup! refacto: move home code into a dedicated file and rename index to home everywhere 2024-08-27 11:28:36 +02:00
docs feat: add documentation about errors handling in docs/errors.md 2024-08-20 22:33:57 +02:00
scripts chore: setup sesam-vitale lib with crossplatform ssv usage 2024-07-26 22:50:27 +02:00
.gitignore fix: remove useless gitignore files 2024-07-24 11:23:41 +02:00
.ignore feat: Add auto-reload on development environment 2024-08-08 22:18:26 +02:00
Cargo.lock feat: implement htmx with partials on index and cps pages 2024-08-27 11:19:59 +02:00
Cargo.toml fix: rename sesam-vitale and fix readme 2024-07-24 22:15:53 +02:00
README.md feat: Add dev dependencies with cargo 2024-08-09 01:29:59 +02:00

Krys4lide

Logiciel de Pharmacie libre et open-source.

Crates

  • app: Interface du logiciel, servie par un serveur web propulsé par Axum. Utilisable en mode endpoint ou encapsulé dans le client desktop
  • desktop: Client desktop propulsé par Tauri, encapsulant le serveur web app
  • sesam-vitale: Bibliothèque de gestion des services SESAM-Vitale (Lecture des cartes CPS et Vitale, téléservices ...)

Development

Pré-requis

Tauri CLI

La CLI Tauri est nécessaire au lancement du client desktop. Elle peut être installée via Cargo :

cargo install tauri-cli --version "^2.0.0-beta"

Tailwindcss CLI

Le CLI Tailwindcss est nécessaire pour la génération du fichier crates/app/assets/css/style.css.

La documentation d'installation est disponible sur le site officiel de Tailwindcss : https://tailwindcss.com/blog/standalone-cli

La version actuellement utilisée est la v3.4.7

SESAM-Vitale

La crate sesam-vitale nécessite la présence des librairies dynamiques fournies par le package FSV et la CryptolibCPS. Les instructions d'installation sont disponibles dans le README de la crate sesam-vitale.

Lancement

Le logiciel dans sa globalité peut être lancé via la commande suivante :

cargo tauri dev

/!\ Attention, le lancement du client desktop ne génère pas le fichier crates/app/assets/css/style.css automatiquement pour le moment. En cas de modification des interfaces web, il est donc nécessaire de procéder à sa génération comme indiqué dans le README de la crate app.

Si vous souhaitez lancer les composants séparément, les indications de lancement sont disponibles dans les README des différents crates.

Rechargement automatique

Pour permettre de développer plus rapidement, il existe une librairie qui recompile automatiquement nos modifications en cours : cargo-watch permet de relancer une commande cargo lorsqu'un fichier est modifié (example: cargo run --> cargo watch -x run).

Voici la commande pour l'installer dans un package :

cargo add cargo-watch --dev --package app

Le fichier .ignore permet d'ignorer certains fichiers pour éviter de relancer la recompilation inutilement.

⚠️ La librairie n'est pas compatible avec Windows 7 et les versions antérieurs de Windows.

Build

Packager le client desktop

cargo tauri build