From 14ade1ad9815a58b45f8aa297992276001c1c5bd Mon Sep 17 00:00:00 2001 From: Jezen Thomas Date: Thu, 18 Jul 2019 11:04:17 +0300 Subject: [PATCH 1/2] Add mreqMsg When a form has multiple `mreq` fields and the user submits a form with more than one of these values missing, they see an ambiguous collection of "Value is required" messages. The `mreqMsg` function allows you to provide your own MsgValueRequired message for a better UX. --- yesod-form/ChangeLog.md | 4 ++++ yesod-form/Yesod/Form/Functions.hs | 18 ++++++++++++++++++ yesod-form/yesod-form.cabal | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/yesod-form/ChangeLog.md b/yesod-form/ChangeLog.md index 640acfa0..2da756e7 100644 --- a/yesod-form/ChangeLog.md +++ b/yesod-form/ChangeLog.md @@ -1,5 +1,9 @@ # ChangeLog for yesod-form +## 1.6.6 + +* Added `mreqMsg` for `mreq` functionality with a configurable MsgValueRequired [#1613](https://github.com/yesodweb/yesod/pull/1613) + ## 1.6.5 * Add `.sr-only` to labels in `renderBootstrap3` when they are null. diff --git a/yesod-form/Yesod/Form/Functions.hs b/yesod-form/Yesod/Form/Functions.hs index 89d6451c..68df9831 100644 --- a/yesod-form/Yesod/Form/Functions.hs +++ b/yesod-form/Yesod/Form/Functions.hs @@ -20,6 +20,7 @@ module Yesod.Form.Functions , wreq , wopt , mreq + , mreqMsg , mopt , areq , aopt @@ -175,6 +176,23 @@ mreq :: (RenderMessage site FormMessage, HandlerSite m ~ site, MonadHandler m) -> MForm m (FormResult a, FieldView site) mreq field fs mdef = mhelper field fs mdef (\m l -> FormFailure [renderMessage m l MsgValueRequired]) FormSuccess True +-- | Same as @mreq@ but with your own message to be rendered in case the value +-- is not provided. +-- +-- This is useful when you have several required fields on the page and you +-- want to differentiate between which fields were left blank. Otherwise the +-- user sees "Value is required" multiple times, which is ambiguous. +-- +-- @since 1.6.6 +mreqMsg :: (RenderMessage site msg, HandlerSite m ~ site, MonadHandler m) + => Field m a -- ^ form field + -> FieldSettings site -- ^ settings for this field + -> msg -- ^ Message to use in case value is Nothing + -> Maybe a -- ^ optional default value + -> MForm m (FormResult a, FieldView site) +mreqMsg field fs msg mdef = mhelper field fs mdef formFailure FormSuccess True + where formFailure m l = FormFailure [renderMessage m l msg] + -- | Converts a form field into monadic form. This field is optional, i.e. -- if filled in, it returns 'Just a', if left empty, it returns 'Nothing'. -- Arguments are the same as for 'mreq' (apart from type of default value). diff --git a/yesod-form/yesod-form.cabal b/yesod-form/yesod-form.cabal index 4237dd26..42dc4c31 100644 --- a/yesod-form/yesod-form.cabal +++ b/yesod-form/yesod-form.cabal @@ -1,5 +1,5 @@ name: yesod-form -version: 1.6.5 +version: 1.6.6 license: MIT license-file: LICENSE author: Michael Snoyman From e5e39f353d3e60ea767f46d3b2491a95ef464dd2 Mon Sep 17 00:00:00 2001 From: Jezen Thomas Date: Thu, 18 Jul 2019 13:56:19 +0300 Subject: [PATCH 2/2] Implement mreq in terms of mreqMsg --- yesod-form/Yesod/Form/Functions.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yesod-form/Yesod/Form/Functions.hs b/yesod-form/Yesod/Form/Functions.hs index 68df9831..d82d8102 100644 --- a/yesod-form/Yesod/Form/Functions.hs +++ b/yesod-form/Yesod/Form/Functions.hs @@ -174,7 +174,7 @@ mreq :: (RenderMessage site FormMessage, HandlerSite m ~ site, MonadHandler m) -> FieldSettings site -- ^ settings for this field -> Maybe a -- ^ optional default value -> MForm m (FormResult a, FieldView site) -mreq field fs mdef = mhelper field fs mdef (\m l -> FormFailure [renderMessage m l MsgValueRequired]) FormSuccess True +mreq field fs mdef = mreqMsg field fs MsgValueRequired mdef -- | Same as @mreq@ but with your own message to be rendered in case the value -- is not provided.