diff options
| author | Marius Peter <dev@marius-peter.com> | 2025-11-29 19:16:52 +0100 |
|---|---|---|
| committer | Marius Peter <dev@marius-peter.com> | 2025-11-29 19:16:52 +0100 |
| commit | 716c77ae8b3a08920dd261d56a15297d9924c883 (patch) | |
| tree | 310e02f215177865c550a8654d201998e827f05f /formlets.rkt | |
| parent | f30c8fdb5c2d4aaad025a51329373ccfc0e56ed1 (diff) | |
Make all form elements required.
Diffstat (limited to 'formlets.rkt')
| -rw-r--r-- | formlets.rkt | 55 |
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"]))))) |