Handle multiple invalid values for a single form field

This commit is contained in:
Christopher Baines 2019-12-01 21:23:25 +00:00
parent 7cc5c02cdd
commit 04e98ed4da
2 changed files with 28 additions and 13 deletions

View file

@ -220,4 +220,8 @@
(define parse-result-limit parse-number)
(define (any-invalid-query-parameters? query-parameters)
(->bool (any invalid-query-parameter? (map cdr query-parameters))))
(->bool (any (lambda (val)
(if (list? val)
(any invalid-query-parameter? val)
(invalid-query-parameter? val)))
(map cdr query-parameters))))

View file

@ -122,9 +122,12 @@
(input-name (or name
(underscore-join-words
(string-downcase label))))
(has-error? (invalid-query-parameter?
(has-error? (let ((val
(assq-ref query-parameters
(string->symbol input-name))))
(if (list? val)
(any invalid-query-parameter? val)
(invalid-query-parameter? val))))
(show-help-span?
(or help-text has-error? required?)))
`(div
@ -204,16 +207,24 @@
`((span (@ (id ,help-span-id)
(class "help-block"))
,@(if has-error?
(let ((message
(invalid-query-parameter-message
(let* ((val
(assq-ref query-parameters
(string->symbol input-name)))))
`((p (strong
(string->symbol input-name)))
(messages
(map invalid-query-parameter-message
(if (list? val)
val
(list val)))))
`((p
,@(if (null? messages)
'(string "Error: invalid value")
(map
(lambda (message)
`(strong
(@ (style "display: block;"))
,(string-append
"Error: "
(if message
message
"invalid value."))))))
"Error: " message)))
messages)))))
'())
,@(if required? '((strong "Required. ")) '())
,@(if help-text