diff --git a/yesod-form/Yesod/Form/Fields.hs b/yesod-form/Yesod/Form/Fields.hs index 5c16d7eb..b8109dfb 100644 --- a/yesod-form/Yesod/Form/Fields.hs +++ b/yesod-form/Yesod/Form/Fields.hs @@ -36,6 +36,8 @@ module Yesod.Form.Fields , selectFieldList , radioField , radioFieldList + , checkboxesFieldList + , checkboxesField , multiSelectField , multiSelectFieldList , Option (..) @@ -388,6 +390,28 @@ radioFieldList :: (Eq a, RenderMessage site FormMessage, RenderMessage site msg) -> Field (HandlerT site IO) a radioFieldList = radioField . optionsPairs +checkboxesFieldList :: (Eq a, RenderMessage site FormMessage, RenderMessage site msg) => [(msg, a)] + -> Field (HandlerT site IO) [a] +checkboxesFieldList = checkboxesField . optionsPairs + +checkboxesField :: (Eq a, RenderMessage site FormMessage) + => HandlerT site IO (OptionList a) + -> Field (HandlerT site IO) [a] +checkboxesField ioptlist = (multiSelectField ioptlist) + { fieldView = + \theId name attrs val isReq -> do + opts <- fmap olOptions $ handlerToWidget ioptlist + let optselected (Left _) _ = False + optselected (Right vals) opt = (optionInternalValue opt) `elem` vals + [whamlet| + + $forall opt <- opts +