aboutsummaryrefslogtreecommitdiff
path: root/client/src/View/Income/Income.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/Income.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/Income.hs')
-rw-r--r--client/src/View/Income/Income.hs100
1 files changed, 12 insertions, 88 deletions
diff --git a/client/src/View/Income/Income.hs b/client/src/View/Income/Income.hs
index 0fdd7d3..b0c6f0b 100644
--- a/client/src/View/Income/Income.hs
+++ b/client/src/View/Income/Income.hs
@@ -3,22 +3,14 @@ module View.Income.Income
, IncomeIn(..)
) where
-import Control.Monad.IO.Class (liftIO)
-import qualified Data.List as L
-import qualified Data.Maybe as Maybe
-import Data.Text (Text)
-import qualified Data.Text as T
-import qualified Data.Time.Clock as Clock
-import Reflex.Dom (MonadWidget)
-import qualified Reflex.Dom as R
+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
-import qualified Util.Date as DateUtil
+import Common.Model (Init)
+import View.Income.Header (HeaderIn (..))
+import qualified View.Income.Header as Header
+import View.Income.Table (IncomeTableIn (..))
+import qualified View.Income.Table as Table
data IncomeIn = IncomeIn
{ _incomeIn_init :: Init
@@ -28,80 +20,12 @@ view :: forall t m. MonadWidget t m => IncomeIn -> m ()
view incomeIn =
R.elClass "main" "income" $ do
- header (_incomeIn_init incomeIn)
+ Header.view $ HeaderIn
+ { _headerIn_init = _incomeIn_init incomeIn
+ }
- Component.table $ TableIn
- { _tableIn_headerLabel = headerLabel
- , _tableIn_rows =
- R.constDyn
- . reverse
- . L.sortOn _income_date
- . _init_incomes
- . _incomeIn_init
- $ incomeIn
- , _tableIn_cell = cell (_incomeIn_init incomeIn)
- , _tableIn_perPage = 7
- , _tableIn_resetPage = R.never
+ Table.view $ IncomeTableIn
+ { _tableIn_init = _incomeIn_init incomeIn
}
return ()
-
-header :: forall t m. MonadWidget t m => Init -> m ()
-header init =
- R.divClass "withMargin" $ do
-
- currentTime <- liftIO Clock.getCurrentTime
-
- Maybe.fromMaybe R.blank $
- flip fmap useIncomesFrom $ \since ->
- R.el "div" $ do
-
- R.el "h1" $ do
- day <- liftIO $ DateUtil.utcToLocalDay since
- R.text $ Msg.get (Msg.Income_CumulativeSince (Format.longDay day))
-
- R.el "ul" $
- flip mapM_ (_init_users init) $ \user ->
- R.el "li" $
- R.text $ do
- let incomes = filter ((==) (_user_id user) . _income_userId) (_init_incomes init)
- T.intercalate " "
- [ _user_name user
- , "−"
- , Format.price (_init_currency init) $
- CM.cumulativeIncomesSince currentTime since incomes
- ]
-
- R.divClass "titleButton" $
- R.el "h1" $
- R.text $
- Msg.get Msg.Income_MonthlyNet
-
- where
- useIncomesFrom = CM.useIncomesFrom
- (map _user_id $_init_users init)
- (_init_incomes init)
- (_init_payments init)
-
-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