module Update ( Action(..) , actions , updateModel ) where import Time exposing (Time) import Model exposing (Model) import Model.User exposing (Users, UserId) import Model.Payment exposing (Payments) import Model.Payers exposing (Payers) import Model.View as V import Model.View.SignInView exposing (..) import Model.View.LoggedView exposing (..) import Update.SignIn exposing (..) import Update.LoggedView exposing (..) type Action = NoOp | UpdateTime Time | GoSignInView | SignInError String | UpdateSignIn SignInAction | GoLoggedView Users UserId Payments Payments Int Payers | UpdateLoggedView LoggedAction actions : Signal.Mailbox Action actions = Signal.mailbox NoOp updateModel : Action -> Model -> Model updateModel action model = case action of NoOp -> model UpdateTime time -> { model | currentTime <- time } GoSignInView -> { model | view <- V.SignInView initSignInView } GoLoggedView users me monthlyPayments payments paymentsCount payers -> { model | view <- V.LoggedView (initLoggedView users me monthlyPayments payments paymentsCount payers) } SignInError msg -> let signInView = { initSignInView | result <- Just (Err msg) } in { model | view <- V.SignInView signInView } UpdateSignIn signInAction -> case model.view of V.SignInView signInView -> { model | view <- V.SignInView (updateSignIn signInAction signInView) } _ -> model UpdateLoggedView loggedAction -> case model.view of V.LoggedView loggedView -> { model | view <- V.LoggedView (updateLoggedView model loggedAction loggedView) } _ -> model