aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-12-01 21:23:25 +0000
committerChristopher Baines <mail@cbaines.net>2019-12-01 22:16:41 +0000
commit4f6216c0467508c7543120ea14257f5462a6a8f1 (patch)
tree24d9be8ea28ad2a741781fb24b6e74a3801c8c66
parent7cc5c02cdd4b367f81861dfdf172da95b6481696 (diff)
downloaddata-service-4f6216c0467508c7543120ea14257f5462a6a8f1.tar
data-service-4f6216c0467508c7543120ea14257f5462a6a8f1.tar.gz
Handle multiple invalid values for a single field
-rw-r--r--guix-data-service/web/query-parameters.scm6
-rw-r--r--guix-data-service/web/view/html.scm35
2 files changed, 28 insertions, 13 deletions
diff --git a/guix-data-service/web/query-parameters.scm b/guix-data-service/web/query-parameters.scm
index 1c7fb8b..c12a490 100644
--- a/guix-data-service/web/query-parameters.scm
+++ b/guix-data-service/web/query-parameters.scm
@@ -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))))
diff --git a/guix-data-service/web/view/html.scm b/guix-data-service/web/view/html.scm
index 487954f..1417505 100644
--- a/guix-data-service/web/view/html.scm
+++ b/guix-data-service/web/view/html.scm
@@ -122,9 +122,12 @@
(input-name (or name
(underscore-join-words
(string-downcase label))))
- (has-error? (invalid-query-parameter?
- (assq-ref query-parameters
- (string->symbol input-name))))
+ (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-append
- "Error: "
- (if message
- message
- "invalid value."))))))
+ (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: " message)))
+ messages)))))
'())
,@(if required? '((strong "Required. ")) '())
,@(if help-text