diff options
author | Christopher Baines <mail@cbaines.net> | 2019-12-01 21:23:25 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2019-12-12 20:01:26 +0000 |
commit | 04e98ed4da6ad82d71db048b11a31f52dc89c0e4 (patch) | |
tree | 24d9be8ea28ad2a741781fb24b6e74a3801c8c66 | |
parent | 7cc5c02cdd4b367f81861dfdf172da95b6481696 (diff) | |
download | data-service-04e98ed4da6ad82d71db048b11a31f52dc89c0e4.tar data-service-04e98ed4da6ad82d71db048b11a31f52dc89c0e4.tar.gz |
Handle multiple invalid values for a single form field
-rw-r--r-- | guix-data-service/web/query-parameters.scm | 6 | ||||
-rw-r--r-- | guix-data-service/web/view/html.scm | 35 |
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 |