[Racket] Ferti hydroponic nutrient solver, redux.
Make all form elements required.
formlets.rkt
@@ -64,36 +64,31 @@
64
64
(format "~a (~a)" crop profile)
65
65
(format "~a" profile))))
66
66
(formlet
67
Removed:
(#%# (div ((class "form-floating mb-3")) ,{=> number-input requirement-percentage-b} ,input-label))
68
Removed:
(let ([requirement-percentage
69
Removed:
(string->number (bytes->string/utf-8 (binding:form-value requirement-percentage-b)))])
70
Removed:
(and requirement-percentage (cons requirement requirement-percentage)))))
67
Added:
(div ((class "form-floating mb-3")) ,{=> percentage-input requirement-percentage} ,input-label)
68
Added:
(cons requirement requirement-percentage)))
71
69
72
Removed:
(define (targets-formlet)
73
Removed:
(formlet* (#%# `(div ((class "mb-3")) (h5 "Date ciblée") ,{=>* date-formlet effective-on*})
74
Removed:
`(div ((class "mb-3"))
75
Removed:
(h5 "Valeurs cibles (%)")
76
Removed:
,@(for/list ([requirement (get-crop-requirements)])
77
Removed:
{=>* (crop-requirement-formlet requirement) requirements*}))
78
Removed:
{=>* (submit "Enregistrer la cible" #:attributes '((class "btn btn-primary"))) _})
79
Removed:
(let ([effective-on (first effective-on*)]
80
Removed:
[nutrient-values (average-crop-requirement-nutrient-values (filter pair?
81
Removed:
requirements*))])
82
Removed:
(values effective-on nutrient-values))))
70
Added:
(define date-formlet
71
Added:
(to-string (required (input #:type "date"
72
Added:
#:value (date->iso8601 (today))
73
Added:
#:attributes '((class "form-control") [required "required"])))))
83
74
84
Removed:
(define string-input
85
Removed:
(to-string (required (text-input #:attributes '((class "form-control") [required "required"])))))
75
Added:
(define (nutrient-value-formlet nutrient)
76
Added:
(define id (number->string (nutrient-id nutrient)))
77
Added:
(define number-input
78
Added:
(to-number (to-string (required (input #:type "number"
79
Added:
#:attributes
80
Added:
`((class "form-control")
81
Added:
[required "required"]
82
Added:
[id ,id]
83
Added:
[name ,id]
84
Added:
[step "0.1"]
85
Added:
[placeholder ,(nutrient-french-name nutrient)]))))))
86
Added:
(define input-label
87
Added:
`(label ((for ,id
88
Added:
))
89
Added:
,(nutrient-french-name nutrient)))
90
Added:
(formlet (div ((class "form-floating mb-3")) ,{=> number-input nutrient-value} ,input-label)
91
Added:
(cons nutrient nutrient-value)))
86
92
87
Removed:
(define (fertilizer-formlet)
88
Removed:
(formlet* (#%# `(div ((class "mb-3")) (h5 "Nom de référence") ,{=>* string-input canonical-name*})
89
Removed:
`(div ((class "mb-3")) (h5 "Nom de marque") ,{=>* string-input brand-name*})
90
Removed:
`(div ((class "mb-3"))
91
Removed:
(h5 "Valeurs de l'intrant")
92
Removed:
,@(for/list ([nutrient (get-nutrients)])
93
Removed:
{=>* (nutrient-value-formlet nutrient) nutrient-values*}))
94
Removed:
{=>* (submit "Enregistrer l'intrant" #:attributes '((class "btn btn-primary"))) _})
95
Removed:
(let ([canonical-name (first canonical-name*)]
96
Removed:
[nutrient-values (for/hash ([nv (filter pair? nutrient-values*)])
97
Removed:
(values (car nv) (cdr nv)))]
98
Removed:
[brand-name (first brand-name*)])
99
Removed:
(values canonical-name brand-name nutrient-values))))
93
Added:
(define required-string-input
94
Added:
(to-string (required (text-input #:attributes '((class "form-control") [required "required"])))))