aboutsummaryrefslogtreecommitdiff
path: root/client/src/Component/Table.hs
diff options
context:
space:
mode:
authorJoris2019-10-19 09:36:03 +0200
committerJoris2019-10-19 09:36:03 +0200
commit0b40b6b5583b5c437f83e61bf8913f2b4c447b24 (patch)
tree02741a073e24444a711b61d8697429f159b5ebfd /client/src/Component/Table.hs
parent284214d3af39143fdbeca57ffa4864389e7d517a (diff)
downloadbudget-0b40b6b5583b5c437f83e61bf8913f2b4c447b24.tar.gz
budget-0b40b6b5583b5c437f83e61bf8913f2b4c447b24.tar.bz2
budget-0b40b6b5583b5c437f83e61bf8913f2b4c447b24.zip
Include pages into table component
Diffstat (limited to 'client/src/Component/Table.hs')
-rw-r--r--client/src/Component/Table.hs53
1 files changed, 38 insertions, 15 deletions
diff --git a/client/src/Component/Table.hs b/client/src/Component/Table.hs
index a77a18d..b431c14 100644
--- a/client/src/Component/Table.hs
+++ b/client/src/Component/Table.hs
@@ -4,35 +4,58 @@ module Component.Table
, TableOut(..)
) where
-import Data.Text (Text)
-import Reflex.Dom (Dynamic, MonadWidget)
-import qualified Reflex.Dom as R
+import Data.Text (Text)
+import Reflex.Dom (Dynamic, Event, MonadWidget)
+import qualified Reflex.Dom as R
+
+import Component.Pages (PagesIn (..), PagesOut (..))
+import qualified Component.Pages as Pages
data TableIn h r t = TableIn
{ _tableIn_headerLabel :: h -> Text
, _tableIn_rows :: Dynamic t [r]
, _tableIn_cell :: h -> r -> Text
+ , _tableIn_perPage :: Int
+ , _tableIn_resetPage :: Event t ()
}
data TableOut = TableOut
{}
table :: forall t m h r. (MonadWidget t m, Bounded h, Enum h) => TableIn h r t -> m (TableOut)
-table tableIn = do
+table tableIn =
R.divClass "table" $ do
+ rec
+ R.divClass "lines" $ do
+
+ R.divClass "header" $
+ flip mapM_ [minBound..] $ \header ->
+ R.divClass "cell" . R.text $
+ _tableIn_headerLabel tableIn header
+
+ let rows = getRange
+ (_tableIn_perPage tableIn)
+ <$> (_pagesOut_currentPage pages)
+ <*> (_tableIn_rows tableIn)
- R.divClass "lines" $ do
- R.divClass "header" $ do
- flip mapM_ [minBound..] $ \header ->
- R.divClass "cell" . R.text $
- _tableIn_headerLabel tableIn header
+ R.simpleList rows $ \r ->
+ R.divClass "row" $
+ flip mapM_ [minBound..] $ \h ->
+ R.divClass "cell name" $
+ R.dynText $
+ R.ffor r (_tableIn_cell tableIn h)
- R.simpleList (_tableIn_rows tableIn) $ \r ->
- R.divClass "row" $
- flip mapM_ [minBound..] $ \h ->
- R.divClass "cell name" $
- R.dynText $
- R.ffor r (_tableIn_cell tableIn h)
+ pages <- Pages.widget $ PagesIn
+ { _pagesIn_total = length <$> (_tableIn_rows tableIn)
+ , _pagesIn_perPage = _tableIn_perPage tableIn
+ , _pagesIn_reset = _tableIn_resetPage tableIn
+ }
+
+ return ()
return $ TableOut
{}
+
+getRange :: forall a. Int -> Int -> [a] -> [a]
+getRange perPage currentPage =
+ take perPage . drop ((currentPage - 1) * perPage)