From d22d10da342520163014dda255d5d9bd5e1a80c0 Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 3 Jan 2016 19:57:59 +0100 Subject: Move update income to the account update layer --- src/client/elm/Model/Action.elm | 1 - src/client/elm/Model/Action/AccountAction.elm | 4 +- src/client/elm/Server.elm | 4 +- src/client/elm/Update.elm | 7 --- src/client/elm/Update/LoggedIn.elm | 45 ++++++++------- src/client/elm/Update/LoggedIn/Account.elm | 83 +++++++++++++++++++-------- src/client/elm/View/LoggedIn/Account.elm | 2 +- 7 files changed, 91 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/client/elm/Model/Action.elm b/src/client/elm/Model/Action.elm index ba47f2d..7267259 100644 --- a/src/client/elm/Model/Action.elm +++ b/src/client/elm/Model/Action.elm @@ -14,7 +14,6 @@ import Model.Action.LoggedInAction exposing (LoggedInAction) type Action = NoOp | SignIn String - | SetIncome Time Int | UpdateTime Time | GoLoggedInView Users UserId Payments Payments Int Payers | UpdateSignIn SignInAction diff --git a/src/client/elm/Model/Action/AccountAction.elm b/src/client/elm/Model/Action/AccountAction.elm index feddbea..520f3ab 100644 --- a/src/client/elm/Model/Action/AccountAction.elm +++ b/src/client/elm/Model/Action/AccountAction.elm @@ -7,9 +7,11 @@ import Time exposing (Time) import Model.User exposing (UserId) type AccountAction = - ToggleDetail + NoOp + | ToggleDetail | UpdatePayer UserId Time Int | ToggleIncomeEdition | UpdateIncomeEdition String | UpdateEditionError String | UpdateIncome Time Int + | ValidateUpdateIncome Time Int diff --git a/src/client/elm/Server.elm b/src/client/elm/Server.elm index cb65868..3a6c86a 100644 --- a/src/client/elm/Server.elm +++ b/src/client/elm/Server.elm @@ -43,10 +43,10 @@ deletePayment payment frequency = post ("payment/delete?id=" ++ (toString payment.id)) |> Task.map (always (UL.ValidateDeletePayment payment frequency)) -setIncome : Time -> Int -> Task Http.Error Action +setIncome : Time -> Int -> Task Http.Error AccountAction setIncome currentTime amount = post ("/income?amount=" ++ (toString amount)) - |> Task.map (always (U.UpdateLoggedIn (UL.UpdateAccount (UA.UpdateIncome currentTime amount)))) + |> Task.map (always (UA.ValidateUpdateIncome currentTime amount)) signOut : Task Http.Error Action signOut = diff --git a/src/client/elm/Update.elm b/src/client/elm/Update.elm index b473c9d..a78be68 100644 --- a/src/client/elm/Update.elm +++ b/src/client/elm/Update.elm @@ -38,13 +38,6 @@ update action model = |> Effects.task ) - SetIncome currentTime amount -> - ( model - , Server.setIncome currentTime amount - |> flip Task.onError (always <| Task.succeed NoOp) - |> Effects.task - ) - GoLoggedInView users me monthlyPayments payments paymentsCount payers -> ( { model | view = V.LoggedInView (initLoggedInView users me monthlyPayments payments paymentsCount payers) } , Effects.none diff --git a/src/client/elm/Update/LoggedIn.elm b/src/client/elm/Update/LoggedIn.elm index 69a1b75..74e213a 100644 --- a/src/client/elm/Update/LoggedIn.elm +++ b/src/client/elm/Update/LoggedIn.elm @@ -14,7 +14,7 @@ import Model exposing (Model) import Model.User exposing (UserId) import Model.Payment exposing (..) import Model.Action.LoggedInAction exposing (..) -import Model.Action.AccountAction exposing (..) +import Model.Action.AccountAction as Account import Model.Action.MonthlyAction as Monthly import Model.Action.AddPaymentAction as AddPayment import Model.View.LoggedInView exposing (..) @@ -52,15 +52,17 @@ updateLoggedIn model action loggedInView = newAdd = initAddPayment frequency in case frequency of Punctual -> - ( { loggedInView - | currentPage = 1 - , add = newAdd - , account = updateAccount (UpdatePayer loggedInView.account.me model.currentTime cost) loggedInView.account - , payments = newPayment :: loggedInView.payments - , paymentsCount = loggedInView.paymentsCount + 1 - } - , Effects.none - ) + let (newAccount, accountEffects) = + updateAccount (Account.UpdatePayer loggedInView.account.me model.currentTime cost) loggedInView.account + in ( { loggedInView + | currentPage = 1 + , add = newAdd + , account = newAccount + , payments = newPayment :: loggedInView.payments + , paymentsCount = loggedInView.paymentsCount + 1 + } + , Effects.map UpdateAccount accountEffects + ) Monthly -> ( { loggedInView | add = newAdd @@ -90,13 +92,15 @@ updateLoggedIn model action loggedInView = , Effects.none ) Punctual -> - ( { loggedInView - | account = updateAccount (UpdatePayer payment.userId (Date.toTime payment.creation) -payment.cost) loggedInView.account - , payments = deletePayment payment.id loggedInView.payments - , paymentsCount = loggedInView.paymentsCount - 1 - } - , Effects.none - ) + let (newAccount, accountEffects) = + updateAccount (Account.UpdatePayer payment.userId (Date.toTime payment.creation) -payment.cost) loggedInView.account + in ( { loggedInView + | account = newAccount + , payments = deletePayment payment.id loggedInView.payments + , paymentsCount = loggedInView.paymentsCount - 1 + } + , Effects.map UpdateAccount accountEffects + ) UpdatePage page -> ( { loggedInView | currentPage = page } @@ -109,6 +113,7 @@ updateLoggedIn model action loggedInView = ) UpdateAccount accountAction -> - ( { loggedInView | account = updateAccount accountAction loggedInView.account } - , Effects.none - ) + let (newAccount, accountEffects) = updateAccount accountAction loggedInView.account + in ( { loggedInView | account = newAccount } + , Effects.map UpdateAccount accountEffects + ) diff --git a/src/client/elm/Update/LoggedIn/Account.elm b/src/client/elm/Update/LoggedIn/Account.elm index 496fab1..16d67ac 100644 --- a/src/client/elm/Update/LoggedIn/Account.elm +++ b/src/client/elm/Update/LoggedIn/Account.elm @@ -4,6 +4,11 @@ module Update.LoggedIn.Account import Maybe import Dict +import Task + +import Effects exposing (Effects) + +import Server import Model.Payer exposing (updatePayers) import Model.Action.AccountAction exposing (..) @@ -11,44 +16,76 @@ import Model.View.LoggedIn.Account exposing (..) import Utils.Maybe exposing (isJust) -updateAccount : AccountAction -> Account -> Account +updateAccount : AccountAction -> Account -> (Account, Effects AccountAction) updateAccount action account = case action of + + NoOp -> + (account, Effects.none) + ToggleDetail -> - { account | visibleDetail = not account.visibleDetail } + ( { account | visibleDetail = not account.visibleDetail } + , Effects.none + ) + UpdatePayer userId creation amountDiff -> - { account | payers = updatePayers account.payers userId creation amountDiff } + ( { account | payers = updatePayers account.payers userId creation amountDiff } + , Effects.none + ) + ToggleIncomeEdition -> - { account | incomeEdition = + ( { account | incomeEdition = if isJust account.incomeEdition then Nothing else Just (initIncomeEdition (Maybe.withDefault 0 (getCurrentIncome account))) } + , Effects.none + ) + UpdateIncomeEdition income -> case account.incomeEdition of Just incomeEdition -> - { account | incomeEdition = Just { incomeEdition | income = income } } + ( { account | incomeEdition = Just { incomeEdition | income = income } } + , Effects.none + ) Nothing -> - account + ( account + , Effects.none + ) + UpdateEditionError error -> case account.incomeEdition of Just incomeEdition -> - { account | incomeEdition = Just { incomeEdition | error = Just error } } + ( { account | incomeEdition = Just { incomeEdition | error = Just error } } + , Effects.none + ) Nothing -> - account + ( account + , Effects.none + ) + UpdateIncome currentTime amount -> - { account - | payers = - account.payers - |> Dict.update account.me (\mbPayer -> - case mbPayer of - Just payer -> - Just - { payer - | incomes = payer.incomes ++ [{ creation = currentTime, amount = amount }] - } - Nothing -> - Nothing - ) - , incomeEdition = Nothing - } + ( account + , Server.setIncome currentTime amount + |> flip Task.onError (always <| Task.succeed NoOp) + |> Effects.task + ) + + ValidateUpdateIncome currentTime amount -> + ( { account + | payers = + account.payers + |> Dict.update account.me (\mbPayer -> + case mbPayer of + Just payer -> + Just + { payer + | incomes = payer.incomes ++ [{ creation = currentTime, amount = amount }] + } + Nothing -> + Nothing + ) + , incomeEdition = Nothing + } + , Effects.none + ) diff --git a/src/client/elm/View/LoggedIn/Account.elm b/src/client/elm/View/LoggedIn/Account.elm index a7c20d5..d8884f1 100644 --- a/src/client/elm/View/LoggedIn/Account.elm +++ b/src/client/elm/View/LoggedIn/Account.elm @@ -94,7 +94,7 @@ incomeEdition address model account edition = H.form [ case validateIncome edition.income model.translations of Ok validatedAmount -> - onSubmitPrevDefault address (SetIncome model.currentTime validatedAmount) + onSubmitPrevDefault address (UpdateLoggedIn << UpdateAccount <| UpdateIncome model.currentTime validatedAmount) Err error -> onSubmitPrevDefault address (UpdateLoggedIn << UpdateAccount << UpdateEditionError <| error) , class "income" -- cgit v1.2.3