aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/AddPayment/Update.elm
blob: 46b3786beae38a24a67d71155f06d9ea596814fa (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
module LoggedIn.Home.AddPayment.Update exposing
  ( update
  , addPaymentError
  )

import Maybe
import Json.Decode as Json exposing ((:=))

import LoggedIn.Home.AddPayment.Msg as AddPaymentMsg
import LoggedIn.Home.AddPayment.Model as AddPaymentModel

import Model.Translations exposing (Translations, getMessage)
import Model.Payment exposing (Frequency(..))

update : AddPaymentMsg.Msg -> AddPaymentModel.Model -> AddPaymentModel.Model
update action addPayment =
  case action of

    AddPaymentMsg.NoOp ->
      addPayment

    AddPaymentMsg.Init frequency ->
      AddPaymentModel.init frequency

    AddPaymentMsg.UpdateName name ->
      { addPayment | name = name }

    AddPaymentMsg.UpdateCost cost ->
      { addPayment | cost = cost }

    AddPaymentMsg.AddError nameError costError ->
      { addPayment
      | nameError = nameError
      , costError = costError
      , waitingServer = False
      }

    AddPaymentMsg.ToggleFrequency ->
      { addPayment
      | frequency = if addPayment.frequency == Punctual then Monthly else Punctual
      }

    AddPaymentMsg.WaitingServer ->
      { addPayment | waitingServer = True }

addPaymentError : Translations -> String -> Maybe AddPaymentMsg.Msg
addPaymentError translations jsonErr =
  let decoder =
        Json.object2 (,)
          (Json.maybe <| "name" := Json.string)
          (Json.maybe <| "cost" := Json.string)
  in  case Json.decodeString decoder jsonErr of
        Err _ ->
          Nothing
        Ok (mbNameKey, mbCostKey) ->
          Just <| AddPaymentMsg.AddError
            (Maybe.map (flip getMessage translations) mbNameKey)
            (Maybe.map (flip getMessage translations) mbCostKey)