From 4f6216c0467508c7543120ea14257f5462a6a8f1 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sun, 1 Dec 2019 21:23:25 +0000 Subject: Handle multiple invalid values for a single field --- guix-data-service/web/query-parameters.scm | 6 ++++- 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 -- cgit v1.2.3