aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Dialog/AddPaymentButton/View.elm
blob: 5da380cdda6381121e7c063dfb32c25c8faaf759 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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 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 Dialog.Model as DialogModel
import Dialog.Msg as DialogMsg

import LoggedData exposing (LoggedData)
import LoggedIn.Home.Model as HomeModel

view : LoggedData -> List (String, Field) -> String -> Html Msg -> Html Msg
view loggedData initialForm title buttonContent =
  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
        [ 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