From a3319f766acfd67871ed23405389913b24eab06e Mon Sep 17 00:00:00 2001 From: Burtannia Date: Fri, 13 Nov 2020 22:25:44 +0000 Subject: [PATCH] Error messages are now deleted with fields and are highlighted correctly --- yesod-form-multi/Yesod/Form/MultiInput.hs | 64 +++++++++++++---------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/yesod-form-multi/Yesod/Form/MultiInput.hs b/yesod-form-multi/Yesod/Form/MultiInput.hs index 90767857..20b3ac87 100644 --- a/yesod-form-multi/Yesod/Form/MultiInput.hs +++ b/yesod-form-multi/Yesod/Form/MultiInput.hs @@ -26,7 +26,7 @@ import Control.Arrow (second) import Control.Monad (liftM) import Control.Monad.Trans.RWS (ask, tell) import qualified Data.Map as Map -import Data.Maybe (fromJust, listToMaybe, fromMaybe) +import Data.Maybe (fromJust, listToMaybe, fromMaybe, isJust) import Data.Text (Text) import qualified Data.Text as T import Yesod.Core @@ -47,6 +47,7 @@ instance ToJavascript Text where toJavascript = toJavascript . toJSON data MultiSettings site = MultiSettings { msAddClass :: Text -- ^ Class to be applied to the "add another" button. , msDelClass :: Text -- ^ Class to be applied to the "delete" button. + , msWrapperErrClass :: Text -- ^ Class to be applied to the wrapper if it's field has an error. , msAddInner :: Maybe Html -- ^ Inner Html of add button, defaults to "Add Another". Useful for adding icons inside buttons. , msDelInner :: Maybe Html -- ^ Inner Html of delete button, defaults to "Delete". Useful for adding icons inside buttons. , msErrWidget :: Maybe (Html -> WidgetFor site ()) -- ^ Only used in applicative forms. Create a widget for displaying errors. @@ -64,18 +65,18 @@ data MultiView site = MultiView -- -- @since 1.6.0 bs3Settings :: MultiSettings site -bs3Settings = MultiSettings "btn btn-default" "btn btn-danger" Nothing Nothing (Just errW) +bs3Settings = MultiSettings "btn btn-default" "btn btn-danger" "has-error" Nothing Nothing (Just errW) where errW err = [whamlet| - #{err} + #{err} |] -- | 'MultiSettings' for Bootstrap 4. -- -- @since 1.6.0 bs4Settings :: MultiSettings site -bs4Settings = MultiSettings "btn btn-basic" "btn btn-danger" Nothing Nothing (Just errW) +bs4Settings = MultiSettings "btn btn-basic" "btn btn-danger" "has-error" Nothing Nothing (Just errW) where errW err = [whamlet| @@ -86,20 +87,20 @@ bs4Settings = MultiSettings "btn btn-basic" "btn btn-danger" Nothing Nothing (Ju -- -- @since 1.6.0 bs3FASettings :: MultiSettings site -bs3FASettings = MultiSettings "btn btn-default" "btn btn-danger" addIcon delIcon (Just errW) +bs3FASettings = MultiSettings "btn btn-default" "btn btn-danger" "has-error" addIcon delIcon (Just errW) where addIcon = Just [shamlet||] delIcon = Just [shamlet||] errW err = [whamlet| - #{err} + #{err} |] -- | 'MultiSettings' for Bootstrap 4 with Font Awesome 5 Icons. -- -- @since 1.6.0 bs4FASettings :: MultiSettings site -bs4FASettings = MultiSettings "btn btn-basic" "btn btn-danger" addIcon delIcon (Just errW) +bs4FASettings = MultiSettings "btn btn-basic" "btn btn-danger" "has-error" addIcon delIcon (Just errW) where addIcon = Just [shamlet||] delIcon = Just [shamlet||] @@ -131,10 +132,6 @@ amulti field fs defs minVals ms = formToAForm $ $forall fv <- mvFields ^{fvInput fv} - $maybe err <- fvErrors fv - $maybe errW <- msErrWidget ms - ^{errW err} - ^{fvInput mvAddBtn} |] (fv : _) = mvFields @@ -206,7 +203,7 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu Just p -> mkRes intField cfs p mfs cName onMissingFail FormSuccess -- generate counter view - cView <- mkView intField cfs cr Nothing cid cName True + cView <- mkView intField cfs cr Nothing Nothing msWrapperErrClass cid cName True let counter = case cRes of FormSuccess c -> c @@ -232,14 +229,14 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu if (numFields == 1) field.val(""); else - field.parent().remove(); + field.parent().parent().remove(); } |] mkDelBtn fieldId = do let delBtnId = delBtnPrefix <> fieldId [whamlet| -