From 3adab6ddbe727cf4f8a6ef089483e559423a9dc9 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Fri, 14 Dec 2018 22:04:35 +0100 Subject: [PATCH] Ensure selected pagesize is always shown --- src/Handler/Utils/Table/Pagination.hs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Handler/Utils/Table/Pagination.hs b/src/Handler/Utils/Table/Pagination.hs index eb5e60353..964323b83 100644 --- a/src/Handler/Utils/Table/Pagination.hs +++ b/src/Handler/Utils/Table/Pagination.hs @@ -537,9 +537,11 @@ dbTable PSValidator{..} dbtable@DBTable{ dbtIdent = dbtIdent'@(toPathPiece -> db <$> areq (jsonField True) ("" & addName (wIdent "pagination")) (Just $ prevPi & _piFilter .~ Nothing & _piPage .~ Nothing) <*> dbtFilterUI + let referencePagesize = psLimit . snd . runPSValidator dbtable $ Just prevPi + ((pagesizeRes, pagesizeWdgt), pagesizeEnc) <- lift . runFormGet . renderAForm FormDBTablePagesize $ (,) <$> areq (jsonField True) ("" & addName (wIdent "pagination")) (Just $ prevPi & _piPage .~ Nothing & _piLimit .~ Nothing) - <*> areq pagesizeField (fslI MsgDBTablePagesize & addAutosubmit & addName (wIdent "pagesize") & addClass "select--pagesize") (Just . psLimit . snd . runPSValidator dbtable $ Just prevPi) + <*> areq (pagesizeField referencePagesize) (fslI MsgDBTablePagesize & addAutosubmit & addName (wIdent "pagesize") & addClass "select--pagesize") (Just referencePagesize) <* autosubmitButton let @@ -595,7 +597,7 @@ dbTable PSValidator{..} dbtable@DBTable{ dbtIdent = dbtIdent'@(toPathPiece -> db getParams <- liftHandlerT $ queryToQueryText . Wai.queryString . reqWaiRequest <$> getRequest let tblLink :: (QueryText -> QueryText) -> Text - tblLink f = decodeUtf8 . toStrict . Builder.toLazyByteString . renderQueryText True $ (f . substPi) getParams + tblLink f = decodeUtf8 . toStrict . Builder.toLazyByteString . renderQueryText True $ (f . substPi . setParam "_hasdata" Nothing) getParams substPi = foldr (.) id [ setParams (wIdent "sorting") . map toPathPiece $ fromMaybe [] piSorting , foldr (.) id . map (\k -> setParams (wIdent $ toPathPiece k) . fromMaybe [] . join $ traverse (Map.lookup k) piFilter) $ Map.keys dbtFilter @@ -690,14 +692,21 @@ dbColonnade :: (Headedness h, Monoid x) -> Colonnade h r (DBCell (ReaderT SqlBackend (HandlerT UniWorX IO)) x) dbColonnade = id -pagesizeField :: Field Handler PagesizeLimit -pagesizeField = selectField $ do +pagesizeField :: PagesizeLimit -> Field Handler PagesizeLimit +pagesizeField psLim = selectField $ do MsgRenderer mr <- getMsgRenderer - return . flip OptionList fromPathPiece $ - map (\o -> Option (tshow o) (PagesizeLimit o) . toPathPiece $ PagesizeLimit o) opts ++ [Option (mr MsgDBTablePagesizeAll) PagesizeAll $ toPathPiece PagesizeAll] + let + optText (PagesizeLimit l) = tshow l + optText PagesizeAll = mr MsgDBTablePagesizeAll + + toOptionList = flip OptionList fromPathPiece . map (\o -> Option (optText o) o $ toPathPiece o) . Set.toAscList . Set.fromList + return $ toOptionList limOpts where + limOpts :: [PagesizeLimit] + limOpts = psLim : PagesizeAll : map PagesizeLimit opts + opts :: [Int64] - opts = filter (> 0) . Set.toAscList . Set.fromList $ opts' <> map (`div` 2) opts' + opts = filter (> 0) $ opts' <> map (`div` 2) opts' opts' = [ 10^n | n <- [1..3]]