module View.Payment.HeaderForm ( view , In(..) , Out(..) ) 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, Frequency (..), Income (..), Payment (..), 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 Util.Reflex as ReflexUtil import qualified View.Payment.Form as Form data In t = In { _in_reset :: Event t () , _in_categories :: [Category] } data Out t = Out { _out_search :: Event t Text , _out_frequency :: Event t Frequency , _out_addPayment :: Event t Payment } view :: forall t m. MonadWidget t m => In t -> m (Out t) view input = R.divClass "g-PaymentHeaderForm" $ do (searchName, frequency) <- R.el "div" $ 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) ] frequency <- 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 }) return (searchName, frequency) addPaymentButton <- Button._out_clic <$> (Button.view $ (Button.defaultIn (R.text $ Msg.get Msg.Payment_Add)) { Button._in_class = R.constDyn "addPayment" }) addPayment <- (R.dyn . R.ffor frequency $ \frequency -> Modal.view $ Modal.In { Modal._in_show = addPaymentButton , Modal._in_content = Form.view $ Form.In { Form._in_categories = _in_categories input , Form._in_operation = Form.New , Form._in_frequency = frequency } }) >>= ReflexUtil.flatten return $ Out { _out_search = R.updated searchName , _out_frequency = R.updated frequency , _out_addPayment = addPayment }