I'm following the tutorial for the reform library. I currently have a form with two required fields and its set up so the error message for each field shows up right next to it.
postForm :: MyForm MyRequest
postForm =
MyRequest <$> name <*> msg <* inputSubmit "post it!"
where
name = labelText "name:" ++>
(inputText "" `transformEither` required "Name is required") <++ br <++ errorList
msg = labelText "message:" ++>
(inputText "" `transformEither` required "Message is required") <++ br <++ errorList
For example, if I submit this form empty the validation will fail and it will ask the user to fill it again and it will look like this:
name: [______]
* Name is Required
message: [_____]
* Message is required
I would like to know how to make a single error list for the form, like this:
name: [______]
message: [_____]
* Name is Required
* Message is required
I tried doing
postForm :: MyForm MyRequest
postForm =
(MyRequest <$> name <*> msg <* inputSubmit "post it!") <++ errorList
where
name = labelText "name:" ++>
(inputText "" `transformEither` required "Name is required") <++ br
msg = labelText "message:" ++>
(inputText "" `transformEither` required "Message is required") <++ br
but then the error messages don't show at all!
I'm not including a full runnable example because there is a bunch of extra boilerplate needed for that and I am hoping that my problem is just a matter of undertanding the applicative notation a bit better. Here are the type signatures for some of the functions involved in case that helps:
type MyForm = Form (ServerPartT IO) [Input] ReqError H.Html ()
<++ :: (Monad m, Monoid view)
=> Form m input error view proof a
-> Form m input error view () ()
-> Form m input error view proof a
errorList :: (Monad m, ToMarkup error)
=> Form m input error Html () ()
http://hackage.haskell.org/package/reform-0.2.1/docs/Text-Reform-Core.html#v:-60--43--43-
http://hackage.haskell.org/package/reform-blaze-0.2.0/docs/Text-Reform-Blaze-Common.html#v:errorList
Instead of using the
errorList
function, usechildErrorList
. It will also include errors from the subforms.The parenthesis around the parent form are important. If you do
then the operator precedences make it so that
childErrorList
only gets errors from the submit button (none at all) instead of from the whole form.