From 35493d8ec353f90a6ca67e2aedb702684e0abafa Mon Sep 17 00:00:00 2001 From: Joris Date: Sat, 2 Jan 2016 20:49:24 +0100 Subject: Moving initViewAction to serverCommunication module --- src/client/elm/InitViewAction.elm | 25 ------------------- src/client/elm/Main.elm | 2 +- src/client/elm/Model/Communication.elm | 3 +-- src/client/elm/ServerCommunication.elm | 25 ++++++++++++------- src/client/elm/Update.elm | 44 +++++++++++++++++----------------- src/client/elm/View/Icon.elm | 6 ++--- src/client/elm/View/SignIn.elm | 2 +- 7 files changed, 45 insertions(+), 62 deletions(-) delete mode 100644 src/client/elm/InitViewAction.elm diff --git a/src/client/elm/InitViewAction.elm b/src/client/elm/InitViewAction.elm deleted file mode 100644 index 52ae08d..0000000 --- a/src/client/elm/InitViewAction.elm +++ /dev/null @@ -1,25 +0,0 @@ -module InitViewAction - ( initViewAction - ) where - -import Task exposing (..) -import Http -import Json.Decode as Json exposing ((:=)) - -import Effects exposing (Never) - -import Model.Action exposing (..) -import Model.Payment exposing (Payments, paymentsDecoder) -import Model.Payer exposing (Payers, payersDecoder) -import Model.User exposing (Users, usersDecoder, UserId, userIdDecoder) - -initViewAction = Task.onError loggedInView (always <| Task.succeed GoSignInView) - -loggedInView : Task Http.Error Action -loggedInView = - Task.map GoLoggedInView (Http.get usersDecoder "/users") - `Task.andMap` (Http.get ("id" := userIdDecoder) "/whoAmI") - `Task.andMap` (Http.get paymentsDecoder "/monthlyPayments") - `Task.andMap` (Http.get paymentsDecoder "/payments") - `Task.andMap` (Http.get ("number" := Json.int) "/payments/count") - `Task.andMap` (Http.get payersDecoder "/payers") diff --git a/src/client/elm/Main.elm b/src/client/elm/Main.elm index 684cd1b..34afa92 100644 --- a/src/client/elm/Main.elm +++ b/src/client/elm/Main.elm @@ -20,7 +20,7 @@ import View exposing (view) import Persona as Persona exposing (operations) -import InitViewAction exposing (initViewAction) +import ServerCommunication exposing (initViewAction) main : Signal Html main = app.html diff --git a/src/client/elm/Model/Communication.elm b/src/client/elm/Model/Communication.elm index dc4d412..a7ec7a5 100644 --- a/src/client/elm/Model/Communication.elm +++ b/src/client/elm/Model/Communication.elm @@ -8,8 +8,7 @@ import Model.User exposing (UserId) import Model.Payment exposing (..) type Communication = - NoCommunication - | SignIn String + SignIn String | AddPayment String Int | AddMonthlyPayment String Int | SetIncome Time Int diff --git a/src/client/elm/ServerCommunication.elm b/src/client/elm/ServerCommunication.elm index ff0937e..bc8d59f 100644 --- a/src/client/elm/ServerCommunication.elm +++ b/src/client/elm/ServerCommunication.elm @@ -1,11 +1,12 @@ module ServerCommunication ( sendRequest + , initViewAction ) where import Signal import Task as Task exposing (Task) import Http -import Json.Decode exposing (..) +import Json.Decode as Json exposing ((:=)) import Date import Time exposing (Time) import Debug @@ -13,24 +14,21 @@ import Debug import SimpleHTTP exposing (..) import Model.Communication exposing (..) -import Model.Action as U +import Model.Action as U exposing (Action) import Model.Action.LoggedInAction as UL import Model.Action.MonthlyAction as UM import Model.Action.AccountAction as UA import Model.View.LoggedIn.AddPayment exposing (Frequency(..)) -import Model.Payment exposing (..) +import Model.Payment exposing (PaymentId, paymentIdDecoder, Payments, paymentsDecoder) +import Model.Payer exposing (Payers, payersDecoder) +import Model.User exposing (Users, usersDecoder, UserId, userIdDecoder) import Update.SignIn exposing (updateSignIn) -import InitViewAction exposing (initViewAction) - sendRequest : Communication -> Task Http.Error U.Action sendRequest communication = case communication of - NoCommunication -> - Task.succeed U.NoOp - SignIn assertion -> post ("/signIn?assertion=" ++ assertion) |> flip Task.andThen (always initViewAction) @@ -68,3 +66,14 @@ addPaymentURL name cost frequency = deletePaymentURL : PaymentId -> String deletePaymentURL id = "payment/delete?id=" ++ (toString id) + +initViewAction = Task.onError loggedInView (always <| Task.succeed U.GoSignInView) + +loggedInView : Task Http.Error Action +loggedInView = + Task.map U.GoLoggedInView (Http.get usersDecoder "/users") + `Task.andMap` (Http.get ("id" := userIdDecoder) "/whoAmI") + `Task.andMap` (Http.get paymentsDecoder "/monthlyPayments") + `Task.andMap` (Http.get paymentsDecoder "/payments") + `Task.andMap` (Http.get ("number" := Json.int) "/payments/count") + `Task.andMap` (Http.get payersDecoder "/payers") diff --git a/src/client/elm/Update.elm b/src/client/elm/Update.elm index c61e2f5..46c1b01 100644 --- a/src/client/elm/Update.elm +++ b/src/client/elm/Update.elm @@ -11,7 +11,8 @@ 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.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 (..) @@ -21,7 +22,6 @@ 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 = @@ -31,11 +31,11 @@ update action model = (model, Effects.none) SignIn assertion -> - ( case model.view of - V.SignInView signInView -> { model | view = V.SignInView (updateSignIn SignInAction.Connecting signInView) } - _ -> model + ( applySignIn model (SignInAction.Connecting) , sendRequest (Communication.SignIn assertion) - |> flip Task.onError (always <| Task.succeed (UpdateSignIn (SignInAction.ErrorLogin (getMessage "ErrorSignIn" model.translations)))) + |> flip Task.onError (\_ -> + Task.succeed (UpdateSignIn (SignInAction.ErrorLogin (getMessage "ErrorSignIn" model.translations))) + ) |> Effects.task ) @@ -58,19 +58,19 @@ update action model = ) 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) + (applySignIn model signInAction, Effects.none) + + UpdateLoggedIn loggedInAction -> + (applyLoggedIn model loggedInAction, Effects.none) + +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 +applyLoggedIn model loggedInAction = + case model.view of + V.LoggedInView loggedInView -> { model | view = V.LoggedInView (updateLoggedIn model loggedInAction loggedInView) } + _ -> model diff --git a/src/client/elm/View/Icon.elm b/src/client/elm/View/Icon.elm index 9fa5f8a..bdbe6d5 100644 --- a/src/client/elm/View/Icon.elm +++ b/src/client/elm/View/Icon.elm @@ -12,8 +12,8 @@ renderIcon iconClass = [ class <| "fa fa-fw fa-" ++ iconClass ] [] -renderSpinIcon : String -> Html -renderSpinIcon iconClass = +renderSpinIcon : Html +renderSpinIcon = i - [ class <| "fa fa-fw fa-spin fa-" ++ iconClass ] + [ class <| "fa fa-fw fa-pulse fa-spinner" ] [] diff --git a/src/client/elm/View/SignIn.elm b/src/client/elm/View/SignIn.elm index f662a97..ba16561 100644 --- a/src/client/elm/View/SignIn.elm +++ b/src/client/elm/View/SignIn.elm @@ -28,7 +28,7 @@ renderSignIn address model signInView = [ onClick operations.address Persona.SignIn ] [ span [] [ text (getMessage "SignIn" model.translations) ] , if signInView.connecting - then renderSpinIcon "refresh" + then renderSpinIcon else renderIcon "power-off" ] , signInResult model signInView -- cgit v1.2.3