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.LoggedInView exposing (..) import Update.SignIn exposing (..) import Update.LoggedIn exposing (..) type Action = NoOp | UpdateTime Time | GoSignInView | SignInError String | UpdateSignIn SignInAction | GoLoggedInView Users UserId Payments Payments Int Payers (Maybe Int) | UpdateLoggedIn 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 } GoLoggedInView users me monthlyPayments payments paymentsCount payers mbIncome -> { model | view <- V.LoggedInView (initLoggedInView users me monthlyPayments payments paymentsCount payers mbIncome) } 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 UpdateLoggedIn loggedAction -> case model.view of V.LoggedInView loggedInView -> { model | view <- V.LoggedInView (updateLoggedIn model loggedAction loggedInView) } _ -> model