aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Update
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/elm/Update')
-rw-r--r--src/client/elm/Update/LoggedIn.elm45
-rw-r--r--src/client/elm/Update/LoggedIn/Account.elm83
2 files changed, 85 insertions, 43 deletions
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
+ )