Skip to content

Instantly share code, notes, and snippets.

@mahulst
Forked from ryan-senn/LoginMsg.elm
Created June 7, 2017 08:26
Show Gist options
  • Save mahulst/1f9eb41381b2b4b06ebb188597b6328e to your computer and use it in GitHub Desktop.
Save mahulst/1f9eb41381b2b4b06ebb188597b6328e to your computer and use it in GitHub Desktop.

Revisions

  1. @ryan-senn ryan-senn revised this gist Mar 28, 2017. 2 changed files with 59 additions and 0 deletions.
    12 changes: 12 additions & 0 deletions LoginMsg.elm
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,12 @@
    module Modules.Auth.Login.Msg exposing (..)

    import Http exposing (Error)

    import Types exposing (User)


    type LoginMsg
    = LoginUpdateEmail String
    | LoginUpdatePassword String
    | LoginRequest
    | LoginResponse (Result Error User)
    47 changes: 47 additions & 0 deletions Msg.elm
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    module Msg exposing (..)

    import Navigation exposing (Location)

    import Routing.Routes exposing (Route)

    import Modules.Auth.Login.Msg exposing (LoginMsg)
    import Modules.Auth.Logout.Msg exposing (LogoutMsg)
    import Modules.Auth.Signup.Msg exposing (SignupMsg)
    import Modules.Auth.ForgotPassword.Msg exposing (ForgotPasswordMsg)
    import Modules.Auth.ResetPassword.Msg exposing (ResetPasswordMsg)

    import Modules.Dividends.Add.Msg exposing (AddDividendMsg)
    import Modules.Dividends.Edit.Msg exposing (EditDividendMsg)

    import Modules.Stocks.List.Msg exposing (StockListMsg)
    import Modules.Stocks.Add.Msg exposing (AddStockMsg)
    import Modules.Stocks.View.Msg exposing (ViewStockMsg)

    import Modules.Transactions.Add.Msg exposing (AddTransactionMsg)
    import Modules.Transactions.Edit.Msg exposing (EditTransactionMsg)

    import Modules.Portfolios.List.Msg exposing (PortfolioListMsg)
    import Modules.Portfolios.View.Msg exposing (ViewPortfolioMsg)
    import Modules.Portfolios.Add.Msg exposing (AddPortfolioMsg)
    import Modules.Portfolios.Edit.Msg exposing (EditPortfolioMsg)


    type Msg
    = UrlChange Location
    | Navigate Route
    | LoginMsg LoginMsg
    | LogoutMsg LogoutMsg
    | SignupMsg SignupMsg
    | ForgotPasswordMsg ForgotPasswordMsg
    | ResetPasswordMsg ResetPasswordMsg
    | PortfolioListMsg PortfolioListMsg
    | ViewPortfolioMsg ViewPortfolioMsg
    | AddPortfolioMsg AddPortfolioMsg
    | EditPortfolioMsg EditPortfolioMsg
    | StockListMsg StockListMsg
    | AddStockMsg AddStockMsg
    | ViewStockMsg ViewStockMsg
    | AddDividendMsg AddDividendMsg
    | EditDividendMsg EditDividendMsg
    | AddTransactionMsg AddTransactionMsg
    | EditTransactionMsg EditTransactionMsg
  2. @ryan-senn ryan-senn created this gist Mar 28, 2017.
    81 changes: 81 additions & 0 deletions LoginUpdate.elm
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,81 @@
    module Modules.Auth.Login.Update exposing (..)

    import Model exposing (Model)
    import Modules.Auth.Login.Model exposing (LoginModel, initialLoginModel)

    import Msg exposing (Msg (LoginMsg))
    import Modules.Auth.Login.Msg exposing (..)

    import Types exposing (FlashMessage)

    import Modules.Auth.Login.Api as Api exposing (..)

    import Common.FlashMessages exposing (addFlashMessage)

    import Routing.Routes exposing (navigate, Route (Portfolios))


    update : LoginMsg -> Model -> (Model, Cmd Msg)
    update msg model =

    case msg of

    LoginUpdateEmail value ->
    { model
    | loginModel = updateEmail value model.loginModel
    } ! []

    LoginUpdatePassword value ->
    { model
    | loginModel = updatePassword value model.loginModel
    } ! []

    LoginRequest ->
    { model
    | loginModel = request model.loginModel
    } ! [ Api.loginRequest model.loginModel.email model.loginModel.password ]

    LoginResponse result ->

    case result of

    Err error ->
    { model
    | loginModel = errorResponse (toString error) model.loginModel
    , flashMessages = addFlashMessage (FlashMessage Types.Danger (toString error)) model.flashMessages
    } ! []

    Ok user ->
    { model
    | loginModel = initialLoginModel
    , user = Just user
    } ! [ navigate Portfolios ]


    updateEmail : String -> LoginModel -> LoginModel
    updateEmail value model =
    { model
    | email = value
    }


    updatePassword : String -> LoginModel -> LoginModel
    updatePassword value model =
    { model
    | password = value
    }


    request : LoginModel -> LoginModel
    request model =
    { model
    | isLoggingIn = True
    }


    errorResponse : String -> LoginModel -> LoginModel
    errorResponse error model =
    { model
    | isLoggingIn = False
    , error = Just error
    }
    87 changes: 87 additions & 0 deletions Update.elm
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,87 @@
    module Update exposing (update)

    import Msg exposing (Msg (..))
    import Model exposing (Model)

    import Routing.Update

    import Modules.Auth.Login.Update
    import Modules.Auth.Logout.Update
    import Modules.Auth.Signup.Update
    import Modules.Auth.ForgotPassword.Update
    import Modules.Auth.ResetPassword.Update

    import Modules.Dividends.Add.Update
    import Modules.Dividends.Edit.Update

    import Modules.Transactions.Add.Update
    import Modules.Transactions.Edit.Update

    import Modules.Stocks.List.Update
    import Modules.Stocks.Add.Update
    import Modules.Stocks.View.Update

    import Modules.Portfolios.List.Update
    import Modules.Portfolios.View.Update
    import Modules.Portfolios.Add.Update
    import Modules.Portfolios.Edit.Update


    update : Msg -> Model -> (Model, Cmd Msg)
    update msg model =

    case msg of

    UrlChange location ->
    Routing.Update.urlChange location model

    Navigate route ->
    Routing.Update.routeChange route model

    LoginMsg msg ->
    Modules.Auth.Login.Update.update msg model

    LogoutMsg msg ->
    Modules.Auth.Logout.Update.update msg model

    SignupMsg msg ->
    Modules.Auth.Signup.Update.update msg model

    ForgotPasswordMsg msg ->
    Modules.Auth.ForgotPassword.Update.update msg model

    ResetPasswordMsg msg ->
    Modules.Auth.ResetPassword.Update.update msg model

    PortfolioListMsg msg ->
    Modules.Portfolios.List.Update.update msg model

    ViewPortfolioMsg msg ->
    Modules.Portfolios.View.Update.update msg model

    AddPortfolioMsg msg ->
    Modules.Portfolios.Add.Update.update msg model

    EditPortfolioMsg msg ->
    Modules.Portfolios.Edit.Update.update msg model

    StockListMsg msg ->
    Modules.Stocks.List.Update.update msg model

    AddStockMsg msg ->
    Modules.Stocks.Add.Update.update msg model

    ViewStockMsg msg ->
    Modules.Stocks.View.Update.update msg model

    AddDividendMsg msg ->
    Modules.Dividends.Add.Update.update msg model

    EditDividendMsg msg ->
    Modules.Dividends.Edit.Update.update msg model

    AddTransactionMsg msg ->
    Modules.Transactions.Add.Update.update msg model

    EditTransactionMsg msg ->
    Modules.Transactions.Edit.Update.update msg model