aboutsummaryrefslogtreecommitdiff
path: root/client/src/View/Income/Form.hs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/View/Income/Form.hs')
-rw-r--r--client/src/View/Income/Form.hs48
1 files changed, 23 insertions, 25 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