blob: a33d47dfb3ae183ddd547d760af182b79589c5e9 (
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
77
78
79
80
81
82
83
|
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 exposing (SignInAction)
import Model.Action.LoggedInAction exposing (LoggedInAction)
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)
update : Action -> Model -> (Model, Effects Action)
update action model =
case action of
NoOp ->
(model, Effects.none)
SignIn assertion ->
( applySignIn model (SignInAction.WaitingServer)
, sendRequest (Communication.SignIn assertion)
|> flip Task.onError (\_ ->
Task.succeed (UpdateSignIn (SignInAction.ErrorLogin (getMessage "ErrorSignIn" model.translations)))
)
|> Effects.task
)
GoLoggedInView users me monthlyPayments payments paymentsCount payers ->
( { model | view = V.LoggedInView (initLoggedInView users me monthlyPayments payments paymentsCount payers) }
, Effects.none
)
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)
UpdateSignIn signInAction ->
(applySignIn model signInAction, Effects.none)
UpdateLoggedIn loggedInAction ->
applyLoggedIn model loggedInAction
applySignIn : Model -> SignInAction -> Model
applySignIn model signInAction =
case model.view of
V.SignInView signInView ->
{ model | view = V.SignInView (updateSignIn signInAction signInView) }
_ ->
model
applyLoggedIn : Model -> LoggedInAction -> (Model, Effects Action)
applyLoggedIn model loggedInAction =
case model.view of
V.LoggedInView loggedInView ->
let (loggedInView, effects) = updateLoggedIn model loggedInAction loggedInView
in ( { model | view = V.LoggedInView loggedInView }
, effects
)
_ ->
(model, Effects.none)
|