diff options
Diffstat (limited to 'formlets.rkt')
| -rw-r--r-- | formlets.rkt | 49 | 
1 files changed, 46 insertions, 3 deletions
diff --git a/formlets.rkt b/formlets.rkt index 406a54a..d0067e3 100644 --- a/formlets.rkt +++ b/formlets.rkt @@ -1,11 +1,14 @@  #lang racket -(provide measurements-formlet) +(provide measurements-formlet +         targets-formlet)  (require gregor           web-server/http           web-server/formlets -         "models/nutrient.rkt") +         "models/nutrient.rkt" +         "models/crop.rkt" +         "models/crop-requirement.rkt")  (define date-formlet @@ -26,7 +29,7 @@                            [id ,(number->string id)]                            [step "0.1"]                            [placeholder ,(nutrient-name nutrient)]))) -  (define input-label `(label ((for ,(number->string id))) ,(nutrient-name nutrient))) +  (define input-label `(label ([for ,(number->string id)]) ,(nutrient-name nutrient)))    (formlet     (#%#      (div ([class "form-floating mb-3"]) @@ -51,3 +54,43 @@     (let ([measured-on (first measured-on*)]           [measurements (filter pair? measurements*)]) ; drop #f’s from empty values       (values measured-on measurements)))) + +(define (crop-requirement-formlet requirement) +  (define id (crop-requirement-id requirement)) +  (define profile (crop-requirement-profile requirement)) +  (define maybe-crop (crop-requirement-crop-id requirement)) +  (define crop (if maybe-crop (crop-name (get-crop #:id maybe-crop)) #f)) +  (define number-input +    (input #:type "number" +           #:attributes `([class "form-control"] +                          [id ,(number->string id)] +                          [step "1"] +                          [placeholder ,profile]))) +  (define input-label `(label ([for ,(number->string id)]) +                              ,(if crop +                                   (format "~a (~a)" crop profile) +                                   (format "~a" profile)))) +  (formlet +   (#%# +    (div ([class "form-floating mb-3"]) +         ,{=> number-input requirement-proportion-b} +         ,input-label)) +   (let ([requirement-proportion (string->number +                                  (bytes->string/utf-8 +                                   (binding:form-value requirement-proportion-b)))]) +     (and requirement-proportion (cons requirement requirement-proportion))))) + +(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*)] +         [requirements (filter pair? requirements*)]) ; drop #f’s from empty values +     (values effective-on requirements))))  |