aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Update.elm
blob: c61e2f5f7099deb920fedb2600788e1055fae317 (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 Update
  ( update
  ) where

import Task

import Effects exposing (Effects)

import ServerCommunication exposing (sendRequest)

import Model exposing (Model)
import Model.Translations exposing (getMessage)
import Model.Action exposing (..)
import Model.Action.SignInAction as SignInAction
import Model.View as V
import Model.View.SignInView exposing (..)
import Model.View.LoggedInView exposing (..)
import Model.Communication as Communication exposing (Communication)

import Update.LoggedIn exposing (updateLoggedIn)
import Update.SignIn exposing (updateSignIn)

import SimpleHTTP exposing (post)
import InitViewAction exposing (initViewAction)

update : Action -> Model -> (Model, Effects Action)
update action model =
  case action of

    NoOp ->
      (model, Effects.none)

    SignIn assertion ->
      ( case model.view of
          V.SignInView signInView -> { model | view = V.SignInView (updateSignIn SignInAction.Connecting signInView) }
          _ -> model
      , sendRequest (Communication.SignIn assertion)
          |> flip Task.onError (always <| Task.succeed (UpdateSignIn (SignInAction.ErrorLogin (getMessage "ErrorSignIn" model.translations))))
          |> Effects.task
      )

    ServerCommunication communication ->
      ( model
      , sendRequest communication
          |> flip Task.onError (always <| Task.succeed NoOp)
          |> Effects.task
      )

    UpdateTime time ->
      ({ model | currentTime = time }, Effects.none)

    GoSignInView ->
      ({ model | view = V.SignInView initSignInView }, Effects.none)

    GoLoggedInView users me monthlyPayments payments paymentsCount payers ->
      ( { model | view = V.LoggedInView (initLoggedInView users me monthlyPayments payments paymentsCount payers) }
      , Effects.none
      )

    UpdateSignIn signInAction ->
      case model.view of
        V.SignInView signInView ->
          ( { model | view = V.SignInView (updateSignIn signInAction signInView) }
          , Effects.none
          )
        _ ->
          (model, Effects.none)

    UpdateLoggedIn loggedAction ->
      case model.view of
        V.LoggedInView loggedInView ->
          ( { model | view = V.LoggedInView (updateLoggedIn model loggedAction loggedInView) }
          , Effects.none
          )
        _ ->
          (model, Effects.none)