summaryrefslogtreecommitdiff
path: root/formlets.rkt
diff options
context:
space:
mode:
authorMarius Peter <dev@marius-peter.com>2025-11-29 19:16:52 +0100
committerMarius Peter <dev@marius-peter.com>2025-11-29 19:16:52 +0100
commit716c77ae8b3a08920dd261d56a15297d9924c883 (patch)
tree310e02f215177865c550a8654d201998e827f05f /formlets.rkt
parentf30c8fdb5c2d4aaad025a51329373ccfc0e56ed1 (diff)
Make all form elements required.
Diffstat (limited to 'formlets.rkt')
-rw-r--r--formlets.rkt55
1 files changed, 25 insertions, 30 deletions
diff --git a/formlets.rkt b/formlets.rkt
index 32f0513..73db14b 100644
--- a/formlets.rkt
+++ b/formlets.rkt
@@ -64,36 +64,31 @@
(format "~a (~a)" crop profile)
(format "~a" profile))))
(formlet
- (#%# (div ((class "form-floating mb-3")) ,{=> number-input requirement-percentage-b} ,input-label))
- (let ([requirement-percentage
- (string->number (bytes->string/utf-8 (binding:form-value requirement-percentage-b)))])
- (and requirement-percentage (cons requirement requirement-percentage)))))
+ (div ((class "form-floating mb-3")) ,{=> percentage-input requirement-percentage} ,input-label)
+ (cons requirement requirement-percentage)))
-(define (targets-formlet)
- (formlet* (#%# `(div ((class "mb-3")) (h5 "Date ciblée") ,{=>* date-formlet effective-on*})
- `(div ((class "mb-3"))
- (h5 "Valeurs cibles (%)")
- ,@(for/list ([requirement (get-crop-requirements)])
- {=>* (crop-requirement-formlet requirement) requirements*}))
- {=>* (submit "Enregistrer la cible" #:attributes '((class "btn btn-primary"))) _})
- (let ([effective-on (first effective-on*)]
- [nutrient-values (average-crop-requirement-nutrient-values (filter pair?
- requirements*))])
- (values effective-on nutrient-values))))
+(define date-formlet
+ (to-string (required (input #:type "date"
+ #:value (date->iso8601 (today))
+ #:attributes '((class "form-control") [required "required"])))))
-(define string-input
- (to-string (required (text-input #:attributes '((class "form-control") [required "required"])))))
+(define (nutrient-value-formlet nutrient)
+ (define id (number->string (nutrient-id nutrient)))
+ (define number-input
+ (to-number (to-string (required (input #:type "number"
+ #:attributes
+ `((class "form-control")
+ [required "required"]
+ [id ,id]
+ [name ,id]
+ [step "0.1"]
+ [placeholder ,(nutrient-french-name nutrient)]))))))
+ (define input-label
+ `(label ((for ,id
+ ))
+ ,(nutrient-french-name nutrient)))
+ (formlet (div ((class "form-floating mb-3")) ,{=> number-input nutrient-value} ,input-label)
+ (cons nutrient nutrient-value)))
-(define (fertilizer-formlet)
- (formlet* (#%# `(div ((class "mb-3")) (h5 "Nom de référence") ,{=>* string-input canonical-name*})
- `(div ((class "mb-3")) (h5 "Nom de marque") ,{=>* string-input brand-name*})
- `(div ((class "mb-3"))
- (h5 "Valeurs de l'intrant")
- ,@(for/list ([nutrient (get-nutrients)])
- {=>* (nutrient-value-formlet nutrient) nutrient-values*}))
- {=>* (submit "Enregistrer l'intrant" #:attributes '((class "btn btn-primary"))) _})
- (let ([canonical-name (first canonical-name*)]
- [nutrient-values (for/hash ([nv (filter pair? nutrient-values*)])
- (values (car nv) (cdr nv)))]
- [brand-name (first brand-name*)])
- (values canonical-name brand-name nutrient-values))))
+(define required-string-input
+ (to-string (required (text-input #:attributes '((class "form-control") [required "required"])))))
Copyright 2019--2026 Marius PETER