module Update.LoggedIn.Account ( AccountAction(..) , updateAccount ) where import Maybe import Time exposing (Time) import Dict import Model.User exposing (UserId) import Model.Payer exposing (..) import Model.View.LoggedIn.Account exposing (..) import Utils.Maybe exposing (isJust) type AccountAction = ToggleDetail | UpdatePayer UserId Time Int | ToggleIncomeEdition | UpdateIncomeEdition String | UpdateEditionError String | UpdateIncome Time Int updateAccount : AccountAction -> Account -> Account updateAccount action account = case action of ToggleDetail -> { account | visibleDetail <- not account.visibleDetail } UpdatePayer userId creation amountDiff -> { account | payers <- updatePayers account.payers userId creation amountDiff } ToggleIncomeEdition -> { account | incomeEdition <- if isJust account.incomeEdition then Nothing else Just (initIncomeEdition (Maybe.withDefault 0 (getCurrentIncome account))) } UpdateIncomeEdition income -> case account.incomeEdition of Just incomeEdition -> { account | incomeEdition <- Just { incomeEdition | income <- income } } Nothing -> account UpdateEditionError error -> case account.incomeEdition of Just incomeEdition -> { account | incomeEdition <- Just { incomeEdition | error <- Just error } } Nothing -> account 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 }