module Update.LoggedIn.Account ( updateAccount ) where import Maybe import Dict import Task import Effects exposing (Effects) import Server import Model.Action.AccountAction exposing (..) import Model.View.LoggedIn.Account exposing (..) import Utils.Maybe exposing (isJust) updateAccount : AccountAction -> Account -> (Account, Effects AccountAction) updateAccount action account = case action of NoOp -> (account, Effects.none) ToggleDetail -> ( { account | visibleDetail = not account.visibleDetail } , Effects.none ) ToggleIncomeEdition -> ( { 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 } } , Effects.none ) Nothing -> ( account , Effects.none ) UpdateEditionError error -> case account.incomeEdition of Just incomeEdition -> ( { account | incomeEdition = Just { incomeEdition | error = Just error } } , Effects.none ) Nothing -> ( account , Effects.none ) UpdateIncome currentTime amount -> ( account , Server.setIncome currentTime amount |> Task.map (\incomeId -> (ValidateUpdateIncome incomeId currentTime amount)) |> flip Task.onError (always <| Task.succeed NoOp) |> Effects.task ) ValidateUpdateIncome incomeId currentTime amount -> ( { account | incomes = Dict.insert incomeId { userId = account.me, creation = currentTime, amount = amount } account.incomes , incomeEdition = Nothing } , Effects.none )