module RESTng.RqHandlers.GridHandler ( inGridWithElems, okBoxes, okBoxesM ) where import Control.Monad.Trans (lift) import Control.Monad.Reader (ask) import Text.YuiGrid import Network.HTTP.RedHandler import RESTng.RqHandlers.Response inGridWithElems :: Monad m => [GridElement RequestContext] -> RqHandlerT m RESTngResp -> RqHandlerT m RESTngResp inGridWithElems ges handl = do ges' <- fmap (runBoxes ges) ask fmap (modTitledRespBod (addGrdElems ges')) handl where addGrdElems ges' (CxMLResp c) = GridElems ([boxInMain c] ++ ges') addGrdElems ges' (GridElems bodyges) = GridElems (bodyges ++ ges') okBoxes :: Monad m => [GridElement RequestContext] -> RqHandlerT m RESTngResp okBoxes bxs = fmap (okRspWithoutTitle . GridElems . runBoxes bxs) ask okBoxesM :: Monad m => [m (GridElement RequestContext)] -> RqHandlerT m RESTngResp okBoxesM mGrdElems = (lift $ sequence mGrdElems) >>= \grdElems -> okBoxes grdElems