1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
module View.Payment.Edit
( Input(..)
, view
) where
import qualified Control.Monad as Monad
import qualified Data.Text as T
import Reflex.Dom (Dynamic, Event, MonadWidget)
import qualified Reflex.Dom as R
import Common.Model (Category (..), CategoryId,
EditPayment (..), Frequency (..),
Payment (..), PaymentCategory (..),
SavedPayment (..))
import qualified Common.Msg as Msg
import qualified Common.Validation.Payment as PaymentValidation
import qualified Component.Modal as Modal
import qualified Util.Reflex as ReflexUtil
import qualified View.Payment.Form as Form
data Input t = Input
{ _input_show :: Event t ()
, _input_categories :: [Category]
, _input_paymentCategories :: Dynamic t [PaymentCategory]
, _input_payment :: Dynamic t Payment
, _input_category :: Dynamic t CategoryId
}
view :: forall t m. MonadWidget t m => Input t -> Modal.Content t m SavedPayment
view input cancel = do
formOutput <- R.dyn $ do
paymentCategories <- _input_paymentCategories input
payment <- _input_payment input
category <- _input_category input
return . Form.view $ Form.Input
{ Form._input_cancel = cancel
, Form._input_headerLabel = Msg.get Msg.Payment_EditLong
, Form._input_categories = _input_categories input
, Form._input_paymentCategories = paymentCategories
, Form._input_name = _payment_name payment
, Form._input_cost = T.pack . show . _payment_cost $ payment
, Form._input_date = _payment_date payment
, Form._input_category = category
, Form._input_frequency = _payment_frequency payment
, Form._input_mkPayload = EditPayment (_payment_id payment)
, Form._input_httpMethod = Form.Put
}
hide <- ReflexUtil.flatten (Form._output_hide <$> formOutput)
editPayment <- ReflexUtil.flatten (Form._output_addPayment <$> formOutput)
return $
( hide
, editPayment
)
|