module View.Payment.Edit ( In(..) , 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, EditPaymentForm (..), Frequency (..), Payment (..), PaymentCategory (..), SavedPayment (..)) import qualified Common.Msg as Msg import qualified Component.Modal as Modal import qualified Util.Ajax as Ajax import qualified Util.Reflex as ReflexUtil import qualified View.Payment.Form as Form data In t = In { _in_show :: Event t () , _in_categories :: [Category] , _in_paymentCategories :: Dynamic t [PaymentCategory] , _in_payment :: Dynamic t Payment , _in_category :: Dynamic t CategoryId } view :: forall t m. MonadWidget t m => In t -> Modal.Content t m SavedPayment view input cancel = do formOutput <- R.dyn $ do paymentCategories <- _in_paymentCategories input payment <- _in_payment input category <- _in_category input return . Form.view $ Form.In { Form._in_cancel = cancel , Form._in_headerLabel = Msg.get Msg.Payment_EditLong , Form._in_categories = _in_categories input , Form._in_paymentCategories = paymentCategories , Form._in_name = _payment_name payment , Form._in_cost = T.pack . show . _payment_cost $ payment , Form._in_date = _payment_date payment , Form._in_category = category , Form._in_frequency = _payment_frequency payment , Form._in_mkPayload = EditPaymentForm (_payment_id payment) , Form._in_ajax = Ajax.put } hide <- ReflexUtil.flatten (Form._output_hide <$> formOutput) editPayment <- ReflexUtil.flatten (Form._output_addPayment <$> formOutput) return $ ( hide , editPayment )