module Dialog.AddPaymentButton.View exposing ( view ) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import Html.App as Html import Task import Form exposing (Form) import Form.Field as Field exposing (Field) import Utils.Form as Form import Dialog import Dialog.Model as DialogModel import Dialog.Msg as DialogMsg import Tooltip import View.Form as Form import View.Events exposing (onSubmitPrevDefault) import Msg exposing (Msg) import LoggedIn.Msg as LoggedInMsg import LoggedIn.Home.Msg as HomeMsg import Model.Translations exposing (getMessage) import Model.Payment as Payment exposing (Frequency(..)) import Model.View exposing (View(LoggedInView)) import LoggedData exposing (LoggedData) import LoggedIn.Home.Model as HomeModel view : LoggedData -> List (String, Field) -> String -> Html Msg -> Maybe String -> Html Msg view loggedData initialForm title buttonContent tooltip = let dialogConfig = { className = "paymentDialog" , title = getMessage title loggedData.translations , body = \model -> addPaymentForm loggedData model.addPayment , confirm = getMessage "Confirm" loggedData.translations , confirmMsg = submitForm << .addPayment , undo = getMessage "Undo" loggedData.translations } in button ( ( case tooltip of Just message -> Tooltip.show Msg.Tooltip message Nothing -> [] ) ++ [ class "addPayment" , onClick (Msg.Dialog <| Dialog.OpenWithUpdate dialogConfig (DialogMsg.AddPaymentMsg <| Form.Reset initialForm)) ] ) [ buttonContent ] addPaymentForm : LoggedData -> Form String DialogModel.AddPayment -> Html Msg addPaymentForm loggedData addPayment = let htmlMap = Html.map (Msg.Dialog << Dialog.Update << DialogMsg.AddPaymentMsg) in Html.form [ class "addPayment" , onSubmitPrevDefault Msg.NoOp ] [ htmlMap <| Form.textInput loggedData.translations addPayment "payment" "name" , htmlMap <| Form.textInput loggedData.translations addPayment "payment" "cost" , if (Maybe.map .frequency <| Form.getOutput addPayment) == Just Punctual then htmlMap <| Form.textInput loggedData.translations addPayment "payment" "date" else text "" , htmlMap <| Form.radioInputs loggedData.translations addPayment "payment" "frequency" [ toString Punctual, toString Monthly ] , Form.hiddenSubmit (submitForm addPayment) ] submitForm : Form String DialogModel.AddPayment -> Msg submitForm addPayment = case Form.getOutput addPayment of Just data -> case data.id of Just paymentId -> Msg.Dialog <| Dialog.UpdateAndClose <| Msg.UpdateLoggedIn <| LoggedInMsg.EditPayment paymentId data.name data.cost data.date data.frequency Nothing -> Msg.Dialog <| Dialog.UpdateAndClose <| Msg.UpdateLoggedIn <| LoggedInMsg.CreatePayment data.name data.cost data.date data.frequency Nothing -> Msg.Dialog <| Dialog.Update <| DialogMsg.AddPaymentMsg <| Form.Submit