summaryrefslogtreecommitdiff
path: root/formlets.rkt
blob: 406a54a232b4868dfc25e4c4d7fd130a7dc47675 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#lang racket

(provide measurements-formlet)

(require gregor
         web-server/http
         web-server/formlets
         "models/nutrient.rkt")


(define date-formlet
  (formlet
   ,{=> (to-string
         (required
          (input #:type "date"
                 #:value (date->iso8601 (today))
                 #:attributes '([class "form-control"] [required "required"]))))
        date-b}
   date-b))

(define (measurement-formlet nutrient)
  (define id (nutrient-id nutrient))
  (define number-input
    (input #:type "number"
           #:attributes `([class "form-control"]
                          [id ,(number->string id)]
                          [step "0.1"]
                          [placeholder ,(nutrient-name nutrient)])))
  (define input-label `(label ((for ,(number->string id))) ,(nutrient-name nutrient)))
  (formlet
   (#%#
    (div ([class "form-floating mb-3"])
         ,{=> number-input nutrient-value-b}
         ,input-label))
   (let ([nutrient-value (string->number
                          (bytes->string/utf-8
                           (binding:form-value nutrient-value-b)))])
     (and nutrient-value (cons id nutrient-value)))))

(define (measurements-formlet)
  (formlet*
   (#%#
    `(div ([class "mb-3"])
          (h5 "Date du relevé")
          ,{=>* date-formlet measured-on*})
    `(div ([class "mb-3"])
          (h5 "Valeurs du relevé")
          ,@(for/list ([nutrient (get-nutrients)])
              {=>* (measurement-formlet nutrient) measurements*}))
    {=>* (submit "Enregistrer le relevé" #:attributes '([class "btn btn-primary"])) _})
   (let ([measured-on (first measured-on*)]
         [measurements (filter pair? measurements*)]) ; drop #f’s from empty values
     (values measured-on measurements))))
Copyright 2019--2025 Marius PETER