aboutsummaryrefslogtreecommitdiff
path: root/client/src/View/Payment/HeaderForm.hs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/View/Payment/HeaderForm.hs')
-rw-r--r--client/src/View/Payment/HeaderForm.hs78
1 files changed, 78 insertions, 0 deletions
diff --git a/client/src/View/Payment/HeaderForm.hs b/client/src/View/Payment/HeaderForm.hs
new file mode 100644
index 0000000..07a6b81
--- /dev/null
+++ b/client/src/View/Payment/HeaderForm.hs
@@ -0,0 +1,78 @@
+module View.Payment.HeaderForm
+ ( view
+ ) where
+
+import qualified Data.Map as M
+import Data.Text (Text)
+import qualified Data.Validation as V
+import Reflex.Dom (Dynamic, Event, MonadWidget)
+import qualified Reflex.Dom as R
+
+import Common.Model (Category, Currency, ExceedingPayer (..),
+ Frequency (..), Income (..), Payment (..),
+ PaymentCategory, SavedPayment (..),
+ User (..))
+import qualified Common.Msg as Msg
+
+import qualified Component.Button as Button
+import qualified Component.Input as Input
+import qualified Component.Modal as Modal
+import qualified Component.Select as Select
+import qualified View.Payment.Form as Form
+
+data In t = In
+ { _in_reset :: Event t ()
+ , _in_categories :: [Category]
+ , _in_paymentCategories :: [PaymentCategory]
+ }
+
+data Out = Out
+ { _out_name :: Event t Text
+ , _out_frequency :: Event t Frequency
+ , _out_addPayment :: Event t SavedPayment
+ }
+
+view :: forall t m. MonadWidget t m => In t -> m (Out t)
+view input = do
+ R.divClass "g-HeaderForm" $ do
+ searchName <- Input._out_raw <$> (Input.view
+ ( Input.defaultIn { Input._in_label = Msg.get Msg.Search_Name })
+ ("" <$ _in_reset input)
+ R.never)
+
+ let frequencies = M.fromList
+ [ (Punctual, Msg.get Msg.Payment_PunctualMale)
+ , (Monthly, Msg.get Msg.Payment_MonthlyMale)
+ ]
+
+ searchFrequency <- Select._out_raw <$> (Select.view $ Select.In
+ { Select._in_label = ""
+ , Select._in_initialValue = Punctual
+ , Select._in_value = R.never
+ , Select._in_values = R.constDyn frequencies
+ , Select._in_reset = R.never
+ , Select._in_isValid = V.Success
+ , Select._in_validate = R.never
+ })
+
+ addPaymentButton <- Button._out_clic <$>
+ (Button.view $
+ (Button.defaultIn (R.text $ Msg.get Msg.Payment_Add))
+ { Button._in_class = R.constDyn "addPayment"
+ })
+
+ addPayment <- Modal.view $ Modal.In
+ { Modal._in_show = addPaymentButton
+ , Modal._in_content =
+ Form.view $ Form.In
+ { Form._in_categories = _in_categories input
+ , Form._in_paymentCategories = _in_paymentCategories input
+ , Form._in_operation = Form.New searchFrequency
+ }
+ }
+
+ return $ Out
+ { _out_name = searchName
+ , _out_frequency = searchFrequency
+ , _out_addPayment = addPayment
+ }