Generalize formToAForm (fixes issue #213).
This commit is contained in:
parent
4d5c123935
commit
746a3fe5d2
@ -39,6 +39,7 @@ module Yesod.Form.Functions
|
|||||||
|
|
||||||
import Yesod.Form.Types
|
import Yesod.Form.Types
|
||||||
import Data.Text (Text, pack)
|
import Data.Text (Text, pack)
|
||||||
|
import Control.Arrow (second)
|
||||||
import Control.Monad.Trans.RWS (ask, get, put, runRWST, tell, evalRWST)
|
import Control.Monad.Trans.RWS (ask, get, put, runRWST, tell, evalRWST)
|
||||||
import Control.Monad.Trans.Class (lift)
|
import Control.Monad.Trans.Class (lift)
|
||||||
import Control.Monad (liftM, join)
|
import Control.Monad (liftM, join)
|
||||||
@ -74,10 +75,10 @@ newFormIdent = do
|
|||||||
incrInts (IntSingle i) = IntSingle $ i + 1
|
incrInts (IntSingle i) = IntSingle $ i + 1
|
||||||
incrInts (IntCons i is) = (i + 1) `IntCons` is
|
incrInts (IntCons i is) = (i + 1) `IntCons` is
|
||||||
|
|
||||||
formToAForm :: MForm sub master (FormResult a, FieldView sub master) -> AForm sub master a
|
formToAForm :: MForm sub master (FormResult a, [FieldView sub master]) -> AForm sub master a
|
||||||
formToAForm form = AForm $ \(master, langs) env ints -> do
|
formToAForm form = AForm $ \(master, langs) env ints -> do
|
||||||
((a, xml), ints', enc) <- runRWST form (env, master, langs) ints
|
((a, xmls), ints', enc) <- runRWST form (env, master, langs) ints
|
||||||
return (a, (:) xml, ints', enc)
|
return (a, (++) xmls, ints', enc)
|
||||||
|
|
||||||
aFormToForm :: AForm sub master a -> MForm sub master (FormResult a, [FieldView sub master] -> [FieldView sub master])
|
aFormToForm :: AForm sub master a -> MForm sub master (FormResult a, [FieldView sub master] -> [FieldView sub master])
|
||||||
aFormToForm (AForm aform) = do
|
aFormToForm (AForm aform) = do
|
||||||
@ -150,14 +151,14 @@ mhelper Field {..} FieldSettings {..} mdef onMissing onFound isReq = do
|
|||||||
areq :: (RenderMessage master msg, RenderMessage master FormMessage)
|
areq :: (RenderMessage master msg, RenderMessage master FormMessage)
|
||||||
=> Field sub master a -> FieldSettings msg -> Maybe a
|
=> Field sub master a -> FieldSettings msg -> Maybe a
|
||||||
-> AForm sub master a
|
-> AForm sub master a
|
||||||
areq a b = formToAForm . mreq a b
|
areq a b = formToAForm . fmap (second return) . mreq a b
|
||||||
|
|
||||||
aopt :: RenderMessage master msg
|
aopt :: RenderMessage master msg
|
||||||
=> Field sub master a
|
=> Field sub master a
|
||||||
-> FieldSettings msg
|
-> FieldSettings msg
|
||||||
-> Maybe (Maybe a)
|
-> Maybe (Maybe a)
|
||||||
-> AForm sub master (Maybe a)
|
-> AForm sub master (Maybe a)
|
||||||
aopt a b = formToAForm . mopt a b
|
aopt a b = formToAForm . fmap (second return) . mopt a b
|
||||||
|
|
||||||
runFormGeneric :: MForm sub master a -> master -> [Text] -> Maybe (Env, FileEnv) -> GHandler sub master (a, Enctype)
|
runFormGeneric :: MForm sub master a -> master -> [Text] -> Maybe (Env, FileEnv) -> GHandler sub master (a, Enctype)
|
||||||
runFormGeneric form master langs env = evalRWST form (env, master, langs) (IntSingle 1)
|
runFormGeneric form master langs env = evalRWST form (env, master, langs) (IntSingle 1)
|
||||||
|
|||||||
@ -78,7 +78,7 @@ inputList label fixXml single mdef = formToAForm $ do
|
|||||||
let count = length vals
|
let count = length vals
|
||||||
(res, xmls, views) <- liftM fixme $ mapM (withDelete . single) vals
|
(res, xmls, views) <- liftM fixme $ mapM (withDelete . single) vals
|
||||||
up 1
|
up 1
|
||||||
return (res, FieldView
|
return (res, [FieldView
|
||||||
{ fvLabel = label
|
{ fvLabel = label
|
||||||
, fvTooltip = Nothing
|
, fvTooltip = Nothing
|
||||||
, fvId = theId
|
, fvId = theId
|
||||||
@ -93,7 +93,7 @@ inputList label fixXml single mdef = formToAForm $ do
|
|||||||
|]
|
|]
|
||||||
, fvErrors = Nothing
|
, fvErrors = Nothing
|
||||||
, fvRequired = False
|
, fvRequired = False
|
||||||
})
|
}])
|
||||||
|
|
||||||
withDelete :: (xml ~ GWidget sub master (), RenderMessage master FormMessage)
|
withDelete :: (xml ~ GWidget sub master (), RenderMessage master FormMessage)
|
||||||
=> AForm sub master a
|
=> AForm sub master a
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user