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