diff options
| author | Marius Peter <dev@marius-peter.com> | 2025-11-29 19:14:22 +0100 |
|---|---|---|
| committer | Marius Peter <dev@marius-peter.com> | 2025-11-29 19:14:22 +0100 |
| commit | f30c8fdb5c2d4aaad025a51329373ccfc0e56ed1 (patch) | |
| tree | c8fec81df5fb291ac717b255d763ae53d4f9a6b4 /views.rkt | |
| parent | bc3047f3a5b7b5f5f0c1a62a295c53a5e1cac043 (diff) | |
Add a metric ton's worth of routes.
For now, let's emulate Rails routing, before we identify a more
elegant architecture.
Diffstat (limited to 'views.rkt')
| -rw-r--r-- | views.rkt | 82 |
1 files changed, 49 insertions, 33 deletions
@@ -9,6 +9,9 @@ new-measurement-page new-target-page new-fertilizer-page + show-measurement-page + show-target-page + show-fertilizer-page fallback-page) (require gregor @@ -17,6 +20,7 @@ "models/user.rkt" "models/nutrient.rkt" "models/nutrient-measurement.rkt" + "models/nutrient-target.rkt" "models/fertilizer-product.rkt") (define (page-template title body-xexpr) @@ -89,28 +93,23 @@ (define (ferti-index-page) (ferti-template - '((p "La recette Ferti© est calculée en fonction d'un relevé de nutriments et d'une cible.") + `((p "La recette Ferti© est calculée en fonction d'un relevé de nutriments et d'une cible.") (div ((class "btn-group-vertical")) - (a ((class "btn btn-outline-primary") [href "/measurement/new"]) "Ajouter un relevé") - (a ((class "btn btn-outline-primary") [href "/target/new"]) "Créer une cible") - (a ((class "btn btn-outline-primary") [href "/fertilizer/new"]) "Ajouter un intrant"))))) + (a ((class "btn btn-outline-primary") [href "/ferti/measurement/new"]) "Ajouter un relevé") + (a ((class "btn btn-outline-primary") [href "/ferti/target/new"]) "Créer une cible") + (a ((class "btn btn-outline-primary") [href "/ferti/fertilizer/new"]) + "Ajouter un intrant"))))) (define (ferti-measurements-page nutrients measurements) (define table - `(table ((class "table table-striped")) - (thead (tr (th "Date") - ,@(for/list ([n nutrients]) - `(th ((class "text-end")) ,(nutrient-formula n))))) - (tbody ,@ - (for/list ([m measurements]) - `(tr (td ,(nutrient-measurement-date m)) - ,@(for/list ([n nutrients]) - (define nutrient-value (hash-ref (nutrient-measurement-values m) n #f)) - `(td ((class "text-end")) - ,(if nutrient-value - (round 2 nutrient-value) - "—")))))))) - (ferti-template `((h2 () "Relevés") (a ((class "btn btn-primary mb-3") [href "/measurement/new"]) + `(table ((class "table")) + (thead (tr (th "Date"))) + (tbody ,@(for/list ([m measurements]) + `(tr (td (a ((href ,(format "/ferti/measurement/~a" + (nutrient-measurement-id m)))) + ,(nutrient-measurement-date m)))))))) + (ferti-template `((h2 () "Relevés") (a ((class "btn btn-primary mb-3") [href + "/ferti/measurement/new"]) "Ajouter un relevé") ,table))) @@ -132,9 +131,9 @@ ,(if latest-target (round 2 latest-target) "—"))))))) - (ferti-template `((h2 () "Dernière Cible") (a ((class "btn btn-primary mb-3") [href "/target/new"]) - "Créer une cible") - ,table))) + (ferti-template `((h2 () "Dernière Cible") + (a ((class "btn btn-primary mb-3") [href "/ferti/target/new"]) "Créer une cible") + ,table))) (define (ferti-recipe-page fertilizer-recipe) (define table @@ -162,7 +161,8 @@ ,@(for/list ([fertilizer fertilizers]) `(tr (td ,(fertilizer-name fertilizer)) (td ,(or (fertilizer-brand-name fertilizer) "—")))))) - (ferti-template `((h2 () "Intrants") (a ((class "btn btn-primary mb-3") [href "/fertilizer/new"]) + (ferti-template `((h2 () "Intrants") (a ((class "btn btn-primary mb-3") [href + "/ferti/fertilizer/new"]) "Ajouter un intrant") ,table))) @@ -170,32 +170,48 @@ (page-template "Nouveau relevé" `((h1 ((class "display-1 mb-3")) "Nouveau relevé") (div ((class "mb-3") [style "max-width: 30em"]) - (form ([action "/measurement/create"] [method "POST"]) + (form ([action "/ferti/measurement/create"] [method "POST"]) ,@(formlet-display (measurements-formlet))))))) (define (new-target-page) (page-template "Nouvelle cible" `((h1 ((class "display-1 mb-3")) "Nouvelle cible") (div ((class "mb-3") [style "max-width: 30em"]) - (form ([action "/target/create"] [method "POST"]) + (form ([action "/ferti/target/create"] [method "POST"]) ,@(formlet-display (targets-formlet))))))) (define (new-fertilizer-page) (page-template "Nouvel intrant" `((h1 ((class "display-1 mb-3")) "Nouvel intrant") (div ((class "mb-3") [style "max-width: 30em"]) - (form ([action "/fertilizer/create"] [method "POST"]) + (form ([action "/ferti/fertilizer/create"] [method "POST"]) ,@(formlet-display (fertilizer-formlet))))))) +(define (show-measurement-page nm) + (page-template (format "Relevé du ~a" (nutrient-measurement-date nm)) + '((h1 ((class "display-1 mb-3")) "Relevé")))) + +(define (show-target-page nt) + (page-template (format "Cible ~a" (nutrient-target-id nt)) + '((h1 ((class "display-1 mb-3")) "Cible")))) + +(define (show-fertilizer-page fp) + (page-template (format "Intrant ~a" (fertilizer-product-id fp)) + '((h1 ((class "display-1 mb-3")) "Intrant")))) + (define (index-page user) - (page-template "Bienvenue à la FAPG" - `((h1 ((class "display-1 mb-3")) - ,(string-join (list (if (<= (->hours (current-time)) 17) "Bonjour" "Bonsoir") - (if user - (user-name user) - "et bienvenue")))) - (p ,(~t (now) "'Dernière connexion à' HH:mm, 'le' EEEE d MMMM yyyy")) - (a ((class "btn btn-primary mb-3") [href "/ferti/index"]) "Accéder à Ferti")))) + (page-template + "Bienvenue à la FAPG" + `((div ((class "jumbotron")) + (h1 ((class "display-1 mb-3")) + ,(string-join (list (if (<= (->hours (current-time)) 17) "Bonjour" "Bonsoir") + (if user + (user-name user) + "et bienvenue")))) + (hr ((class "my-3"))) + (p ((class "lead")) ,(~t (now) "'Dernière connexion à' HH:mm, 'le' EEEE d MMMM yyyy")) + (p ((class "lead")) + (a ((class "btn btn-primary mb-3") [href "/ferti/index"]) "Accéder à Ferti")))))) (define (fallback-page request-code) (page-template (format "Réponse: ~a" request-code) |