diff options
author | Joris | 2019-10-23 21:09:54 +0200 |
---|---|---|
committer | Joris | 2019-10-23 21:11:11 +0200 |
commit | f968c8ce63e1aec119b1e6f414cf27e2c0294bcb (patch) | |
tree | ab539d6d1618ad724498f5ad3954f74409f65383 /client/src/View/Income/Income.hs | |
parent | 61ff1443c42def5a09f624e3df2e2520e97610d0 (diff) | |
download | budget-f968c8ce63e1aec119b1e6f414cf27e2c0294bcb.tar.gz budget-f968c8ce63e1aec119b1e6f414cf27e2c0294bcb.tar.bz2 budget-f968c8ce63e1aec119b1e6f414cf27e2c0294bcb.zip |
Delete income
Diffstat (limited to 'client/src/View/Income/Income.hs')
-rw-r--r-- | client/src/View/Income/Income.hs | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/client/src/View/Income/Income.hs b/client/src/View/Income/Income.hs index b97613d..2784cac 100644 --- a/client/src/View/Income/Income.hs +++ b/client/src/View/Income/Income.hs @@ -6,10 +6,10 @@ module View.Income.Income import Data.Aeson (FromJSON) import Prelude hiding (init) -import Reflex.Dom (Dynamic, MonadWidget) +import Reflex.Dom (Dynamic, Event, MonadWidget) import qualified Reflex.Dom as R -import Common.Model (Currency) +import Common.Model (Currency, Income (..), UserId) import Loadable (Loadable (..)) import qualified Loadable @@ -19,8 +19,9 @@ import View.Income.Init (Init (..)) import qualified View.Income.Table as Table data In t = In - { _in_currency :: Currency - , _in_init :: Dynamic t (Loadable Init) + { _in_currentUser :: UserId + , _in_currency :: Currency + , _in_init :: Dynamic t (Loadable Init) } init :: forall t m. MonadWidget t m => m (Dynamic t (Loadable Init)) @@ -42,13 +43,14 @@ view input = do rec let addIncome = R.leftmost - [ Header._out_addIncome header - , Table._out_addIncome table + [ Header._out_add header + , Table._out_add table ] - incomes <- R.foldDyn - (:) + + incomes <- reduceIncomes (_init_incomes init) addIncome + (Table._out_delete table) header <- Header.view $ Header.In { Header._in_init = init @@ -57,7 +59,8 @@ view input = do } table <- Table.view $ Table.In - { Table._in_init = init + { Table._in_currentUser = _in_currentUser input + , Table._in_init = init , Table._in_currency = _in_currency input , Table._in_incomes = incomes } @@ -65,3 +68,15 @@ view input = do return () return () + +reduceIncomes + :: forall t m. MonadWidget t m + => [Income] + -> Event t Income -- add income + -> Event t Income -- delete income + -> m (Dynamic t [Income]) +reduceIncomes initIncomes add delete = + R.foldDyn id initIncomes $ R.leftmost + [ (:) <$> add + , R.ffor delete (\p -> filter ((/= (_income_id p)) . _income_id)) + ] |