aboutsummaryrefslogtreecommitdiff
path: root/client/src/View/Income/Table.hs
diff options
context:
space:
mode:
authorJoris2019-10-20 09:51:52 +0200
committerJoris2019-10-20 09:51:52 +0200
commit6e9e34e92a244ab6c38d135d46f9f5bb01391906 (patch)
tree18474c001278f70d401b705169730a32848af83c /client/src/View/Income/Table.hs
parent0b40b6b5583b5c437f83e61bf8913f2b4c447b24 (diff)
downloadbudget-6e9e34e92a244ab6c38d135d46f9f5bb01391906.tar.gz
budget-6e9e34e92a244ab6c38d135d46f9f5bb01391906.tar.bz2
budget-6e9e34e92a244ab6c38d135d46f9f5bb01391906.zip
Move income header and income table views into separate components
Diffstat (limited to 'client/src/View/Income/Table.hs')
-rw-r--r--client/src/View/Income/Table.hs63
1 files changed, 63 insertions, 0 deletions
diff --git a/client/src/View/Income/Table.hs b/client/src/View/Income/Table.hs
new file mode 100644
index 0000000..2e8f4e6
--- /dev/null
+++ b/client/src/View/Income/Table.hs
@@ -0,0 +1,63 @@
+module View.Income.Table
+ ( view
+ , IncomeTableIn(..)
+ ) where
+
+import qualified Data.List as L
+import qualified Data.Maybe as Maybe
+import Data.Text (Text)
+import Reflex.Dom (MonadWidget)
+import qualified Reflex.Dom as R
+
+import Common.Model (Income (..), Init (..), User (..))
+import qualified Common.Model as CM
+import qualified Common.Msg as Msg
+import qualified Common.View.Format as Format
+import Component (TableIn (..))
+import qualified Component
+
+data IncomeTableIn = IncomeTableIn
+ { _tableIn_init :: Init
+ }
+
+view :: forall t m. MonadWidget t m => IncomeTableIn -> m ()
+view tableIn = do
+
+ Component.table $ TableIn
+ { _tableIn_headerLabel = headerLabel
+ , _tableIn_rows =
+ R.constDyn
+ . reverse
+ . L.sortOn _income_date
+ . _init_incomes
+ . _tableIn_init
+ $ tableIn
+ , _tableIn_cell = cell (_tableIn_init tableIn)
+ , _tableIn_perPage = 7
+ , _tableIn_resetPage = R.never
+ }
+
+ return ()
+
+data Header
+ = UserHeader
+ | AmountHeader
+ | DateHeader
+ deriving (Eq, Show, Bounded, Enum)
+
+headerLabel :: Header -> Text
+headerLabel UserHeader = Msg.get Msg.Income_Name
+headerLabel DateHeader = Msg.get Msg.Income_Date
+headerLabel AmountHeader = Msg.get Msg.Income_Amount
+
+cell :: Init -> Header -> Income -> Text
+cell init header income =
+ case header of
+ UserHeader ->
+ Maybe.fromMaybe "" . fmap _user_name $ CM.findUser (_income_userId income) (_init_users init)
+
+ DateHeader ->
+ Format.longDay . _income_date $ income
+
+ AmountHeader ->
+ Format.price (_init_currency init) . _income_amount $ income