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 }