aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/elm')
-rw-r--r--src/client/elm/Model/Action.elm1
-rw-r--r--src/client/elm/Model/Action/AccountAction.elm4
-rw-r--r--src/client/elm/Server.elm4
-rw-r--r--src/client/elm/Update.elm7
-rw-r--r--src/client/elm/Update/LoggedIn.elm45
-rw-r--r--src/client/elm/Update/LoggedIn/Account.elm83
-rw-r--r--src/client/elm/View/LoggedIn/Account.elm2
7 files changed, 91 insertions, 55 deletions
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"