aboutsummaryrefslogtreecommitdiff
path: root/client/src/View/Payment/Table.hs
diff options
context:
space:
mode:
authorJoris2017-11-13 23:56:40 +0100
committerJoris2017-11-14 00:03:10 +0100
commit5a63f7be9375e3ab888e4232dd7ef72c2f1ffae1 (patch)
tree4884de1d03bc47ba8f06b2cf68365d9eed9e0d39 /client/src/View/Payment/Table.hs
parent213cf7ede058b781fc957de2cd9f6a5988c08004 (diff)
downloadbudget-5a63f7be9375e3ab888e4232dd7ef72c2f1ffae1.tar.gz
budget-5a63f7be9375e3ab888e4232dd7ef72c2f1ffae1.tar.bz2
budget-5a63f7be9375e3ab888e4232dd7ef72c2f1ffae1.zip
Setup stylish-haskell
Diffstat (limited to 'client/src/View/Payment/Table.hs')
-rw-r--r--client/src/View/Payment/Table.hs102
1 files changed, 59 insertions, 43 deletions
diff --git a/client/src/View/Payment/Table.hs b/client/src/View/Payment/Table.hs
index f3eb9a7..734511d 100644
--- a/client/src/View/Payment/Table.hs
+++ b/client/src/View/Payment/Table.hs
@@ -1,6 +1,5 @@
-{-# LANGUAGE ExistentialQuantification #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecursiveDo #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecursiveDo #-}
module View.Payment.Table
( widget
@@ -8,34 +7,40 @@ module View.Payment.Table
, TableOut(..)
) where
-import Data.Text (Text)
-import qualified Data.Text as T
-import qualified Data.List as L
-import qualified Data.Map as M
-import Prelude hiding (init)
-import Reflex.Dom (MonadWidget)
-import qualified Reflex.Dom as R
+import qualified Data.List as L
+import qualified Data.Map as M
+import Data.Text (Text)
+import qualified Data.Text as T
+import Prelude hiding (init)
+import Reflex.Dom (MonadWidget, Dynamic)
+import qualified Reflex.Dom as R
-import qualified Common.Message as Message
+import qualified Common.Message as Message
import qualified Common.Message.Key as Key
-import Common.Model (Payment(..), PaymentCategory(..), Category(..), User(..), Init(..))
-import qualified Common.Model as CM
-import qualified Common.Util.Text as T
+import Common.Model (Category (..), Init (..), Payment (..),
+ PaymentCategory (..), User (..))
+import qualified Common.Model as CM
+import qualified Common.Util.Text as T
import qualified Common.View.Format as Format
import qualified Icon
-data TableIn = TableIn
+data TableIn t = TableIn
{ _tableIn_init :: Init
+ , _tableIn_currentPage :: Dynamic t Int
}
data TableOut = TableOut
{
}
-widget :: forall t m. MonadWidget t m => TableIn -> m TableOut
+visiblePayments :: Int
+visiblePayments = 8
+
+widget :: forall t m. MonadWidget t m => TableIn t -> m TableOut
widget tableIn = do
- R.divClass "table" $
+ R.dynText (fmap (T.pack . show) . _tableIn_currentPage $ tableIn)
+ _ <- R.divClass "table" $
R.divClass "lines" $ do
R.divClass "header" $ do
R.divClass "cell name" $ R.text $ Message.get Key.Payment_Name
@@ -48,39 +53,50 @@ widget tableIn = do
R.divClass "cell" $ R.blank
let init = _tableIn_init tableIn
payments = _init_payments init
- mapM_
- (paymentRow init)
- (take 8 . reverse . L.sortOn _payment_date $ payments)
+ paymentRange = fmap
+ (\p -> take visiblePayments . drop ((p - 1) * visiblePayments) . reverse . L.sortOn _payment_date $ payments)
+ (_tableIn_currentPage tableIn)
+ R.simpleList paymentRange (paymentRow init)
return $ TableOut {}
-paymentRow :: forall t m. MonadWidget t m => Init -> Payment -> m ()
+paymentRow :: forall t m. MonadWidget t m => Init -> Dynamic t Payment -> m ()
paymentRow init payment =
R.divClass "row" $ do
- R.divClass "cell name" . R.text $ _payment_name payment
- R.divClass "cell cost" . R.text . Format.price (_init_currency init) $ _payment_cost payment
+ R.divClass "cell name" . R.dynText . fmap _payment_name $ payment
+ R.divClass "cell cost" . R.dynText . fmap (Format.price (_init_currency init) . _payment_cost) $ payment
+
+ let user = flip fmap payment $ \p -> CM.findUser (_payment_user p) (_init_users init)
R.divClass "cell user" $
- case CM.findUser (_payment_user payment) (_init_users init) of
- Just user -> R.text (_user_name user)
- _ -> R.blank
- R.divClass "cell category" $
- case findCategory (_init_categories init) (_init_paymentCategories init) (_payment_name payment) of
- Just category ->
- R.elAttr "span" (M.fromList [("class", "tag"), ("style", T.concat [ "background-color: ", _category_color category ])]) $
- R.text $ _category_name category
- _ ->
- R.blank
+ R.dynText $ flip fmap user $ \mbUser -> case mbUser of
+ Just u -> _user_name u
+ _ -> ""
+
+ let category = flip fmap payment $ \p -> findCategory
+ (_init_categories init)
+ (_init_paymentCategories init)
+ (_payment_name p)
+ R.divClass "cell category" $ do
+ let attrs = flip fmap category $ \maybeCategory -> case maybeCategory of
+ Just c -> M.fromList
+ [ ("class", "tag")
+ , ("style", T.concat [ "background-color: ", _category_color c ])
+ ]
+ Nothing -> M.singleton "display" "none"
+ R.elDynAttr "span" attrs $
+ R.dynText $ flip fmap category $ \mbCategory -> case mbCategory of
+ Just c -> _category_name c
+ _ -> ""
+
R.divClass "cell date" $ do
- R.elClass "span" "shortDate" . R.text $ Format.shortDay (_payment_date payment)
- R.elClass "span" "longDate" . R.text $ Format.longDay (_payment_date payment)
+ R.elClass "span" "shortDate" . R.dynText . fmap (Format.shortDay . _payment_date) $ payment
+ R.elClass "span" "longDate" . R.dynText . fmap (Format.longDay . _payment_date) $ payment
R.divClass "cell button" . R.el "button" $ Icon.clone
- R.divClass "cell button" $
- if _payment_user payment == (_init_currentUser init)
- then R.el "button" $ Icon.edit
- else R.blank
- R.divClass "cell button" $
- if _payment_user payment == (_init_currentUser init)
- then R.el "button" $ Icon.delete
- else R.blank
+ let modifyAttrs = flip fmap payment $ \p ->
+ M.fromList [("class", "cell button"), ("display", if _payment_user p == _init_currentUser init then "block" else "none")]
+ R.elDynAttr "div" modifyAttrs $
+ R.el "button" $ Icon.edit
+ R.elDynAttr "div" modifyAttrs $
+ R.el "button" $ Icon.delete
findCategory :: [Category] -> [PaymentCategory] -> Text -> Maybe Category
findCategory categories paymentCategories paymentName = do