aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoris2019-10-27 17:02:43 +0100
committerJoris2019-10-27 17:02:43 +0100
commit8ef4d96644bce59bbb736af6359e644743e5610a (patch)
tree3a689de0a2dcb4e5be3492070358a7812a351aef
parent62f990c92b51aeca44d50c154cb4a18e2da3637c (diff)
downloadbudget-8ef4d96644bce59bbb736af6359e644743e5610a.tar.gz
budget-8ef4d96644bce59bbb736af6359e644743e5610a.tar.bz2
budget-8ef4d96644bce59bbb736af6359e644743e5610a.zip
Refactor income form component concerning payload creation
-rw-r--r--client/src/View/Income/Form.hs48
-rw-r--r--client/src/View/Income/Header.hs5
-rw-r--r--client/src/View/Income/Table.hs9
3 files changed, 29 insertions, 33 deletions
diff --git a/client/src/View/Income/Form.hs b/client/src/View/Income/Form.hs
index 5f354a2..a4f7de8 100644
--- a/client/src/View/Income/Form.hs
+++ b/client/src/View/Income/Form.hs
@@ -5,7 +5,8 @@ module View.Income.Form
) where
import Control.Monad.IO.Class (liftIO)
-import Data.Aeson (ToJSON)
+import Data.Aeson (Value)
+import qualified Data.Aeson as Aeson
import qualified Data.Maybe as Maybe
import Data.Text (Text)
import qualified Data.Text as T
@@ -16,7 +17,8 @@ import qualified Data.Validation as V
import Reflex.Dom (Dynamic, Event, MonadWidget)
import qualified Reflex.Dom as R
-import Common.Model (EditIncomeForm (..), Income (..))
+import Common.Model (CreateIncomeForm (..),
+ EditIncomeForm (..), Income (..))
import qualified Common.Msg as Msg
import qualified Common.Util.Time as TimeUtil
import qualified Common.Validation.Income as IncomeValidation
@@ -25,16 +27,16 @@ import qualified Component.Modal as Modal
import qualified Component.ModalForm as ModalForm
import qualified Util.Ajax as Ajax
-data In t a = In
- { _in_operation :: Operation a
+data In t = In
+ { _in_operation :: Operation
}
-data Operation a
- = New (Text -> Text -> a)
- | Clone (Text -> Text -> a) Income
- | Edit (Text -> Text -> a) Income
+data Operation
+ = New
+ | Clone Income
+ | Edit Income
-view :: forall t m a. (MonadWidget t m, ToJSON a) => In t a -> Modal.Content t m Income
+view :: forall t m a. MonadWidget t m => In t -> Modal.Content t m Income
view input cancel = do
rec
@@ -57,7 +59,7 @@ view input cancel = do
form
:: Event t String
-> Event t ()
- -> m (Dynamic t (Validation Text a))
+ -> m (Dynamic t (Validation Text Value))
form reset confirm = do
amount <- Input._out_raw <$> (Input.view
(Input.defaultIn
@@ -92,30 +94,26 @@ view input cancel = do
amount =
case op of
- New _ -> ""
- Clone _ income -> T.pack . show . _income_amount $ income
- Edit _ income -> T.pack . show . _income_amount $ income
+ New -> ""
+ Clone income -> T.pack . show . _income_amount $ income
+ Edit income -> T.pack . show . _income_amount $ income
date currentDay =
case op of
- New _ -> currentDay
- Clone _ _ -> currentDay
- Edit _ income -> _income_date income
+ Edit income -> _income_date income
+ _ -> currentDay
ajax =
case op of
- New _ -> Ajax.post
- Clone _ _ -> Ajax.post
- Edit _ _ -> Ajax.put
+ Edit _ -> Ajax.put
+ _ -> Ajax.post
headerLabel =
case op of
- New _ -> Msg.get Msg.Income_AddLong
- Clone _ _ -> Msg.get Msg.Income_AddLong
- Edit _ _ -> Msg.get Msg.Income_Edit
+ Edit _ -> Msg.get Msg.Income_Edit
+ _ -> Msg.get Msg.Income_AddLong
mkPayload =
case op of
- New f -> f
- Clone f _ -> f
- Edit f _ -> f
+ Edit income -> \a b -> Aeson.toJSON $ EditIncomeForm (_income_id income) a b
+ _ -> \a b -> Aeson.toJSON $ CreateIncomeForm a b
diff --git a/client/src/View/Income/Header.hs b/client/src/View/Income/Header.hs
index 182db33..8e82525 100644
--- a/client/src/View/Income/Header.hs
+++ b/client/src/View/Income/Header.hs
@@ -11,8 +11,7 @@ import qualified Data.Time.Clock as Clock
import Reflex.Dom (Dynamic, Event, MonadWidget)
import qualified Reflex.Dom as R
-import Common.Model (CreateIncomeForm (..), Currency,
- Income (..), User (..))
+import Common.Model (Currency, Income (..), User (..))
import qualified Common.Model as CM
import qualified Common.Msg as Msg
import qualified Common.View.Format as Format
@@ -73,7 +72,7 @@ view input =
addIncome <- Modal.view $ Modal.In
{ Modal._in_show = addIncome
- , Modal._in_content = Form.view $ Form.In { Form._in_operation = Form.New CreateIncomeForm }
+ , Modal._in_content = Form.view $ Form.In { Form._in_operation = Form.New }
}
return $ Out
diff --git a/client/src/View/Income/Table.hs b/client/src/View/Income/Table.hs
index c754a77..d089d9f 100644
--- a/client/src/View/Income/Table.hs
+++ b/client/src/View/Income/Table.hs
@@ -11,9 +11,8 @@ import qualified Data.Text as T
import Reflex.Dom (Dynamic, Event, MonadWidget)
import qualified Reflex.Dom as R
-import Common.Model (CreateIncomeForm (..), Currency,
- EditIncomeForm (..), Income (..),
- User (..), UserId)
+import Common.Model (Currency, Income (..), User (..),
+ UserId)
import qualified Common.Model as CM
import qualified Common.Msg as Msg
import qualified Common.View.Format as Format
@@ -50,11 +49,11 @@ view input = do
, Table._in_resetPage = _in_resetPage input
, Table._in_cloneModal = \income ->
Form.view $ Form.In
- { Form._in_operation = Form.Clone CreateIncomeForm income
+ { Form._in_operation = Form.Clone income
}
, Table._in_editModal = \income ->
Form.view $ Form.In
- { Form._in_operation = Form.Edit (EditIncomeForm $ _income_id income) income
+ { Form._in_operation = Form.Edit income
}
, Table._in_deleteModal = \income ->
ConfirmDialog.view $ ConfirmDialog.In