aboutsummaryrefslogtreecommitdiff
path: root/client/src/View/Payment/Clone.hs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/View/Payment/Clone.hs')
-rw-r--r--client/src/View/Payment/Clone.hs60
1 files changed, 60 insertions, 0 deletions
diff --git a/client/src/View/Payment/Clone.hs b/client/src/View/Payment/Clone.hs
new file mode 100644
index 0000000..5624f6c
--- /dev/null
+++ b/client/src/View/Payment/Clone.hs
@@ -0,0 +1,60 @@
+module View.Payment.Clone
+ ( Input(..)
+ , view
+ ) where
+
+import qualified Control.Monad as Monad
+import Control.Monad.IO.Class (liftIO)
+import qualified Data.Text as T
+import qualified Data.Time.Clock as Time
+import Reflex.Dom (Dynamic, Event, MonadWidget)
+import qualified Reflex.Dom as R
+
+import Common.Model (Category (..), CategoryId,
+ CreatePayment (..), Frequency (..),
+ Payment (..), PaymentCategory (..),
+ SavedPayment (..))
+import qualified Common.Msg as Msg
+import qualified Common.Util.Time as TimeUtil
+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
+
+ currentDay <- liftIO $ Time.getCurrentTime >>= TimeUtil.timeToDay
+
+ 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_CloneLong
+ , 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 = currentDay
+ , Form._input_category = category
+ , Form._input_frequency = _payment_frequency payment
+ , Form._input_mkPayload = CreatePayment
+ }
+
+ hide <- ReflexUtil.flatten (Form._output_hide <$> formOutput)
+ clonePayment <- ReflexUtil.flatten (Form._output_addPayment <$> formOutput)
+
+ return $
+ ( hide
+ , clonePayment
+ )