diff options
author | William Carroll <wpcarro@gmail.com> | 2020-05-17T19·42+0100 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-05-17T19·48+0100 |
commit | 05a2ea6bb7af37d8d5afdc28efddb3e6d2f9e746 (patch) | |
tree | 816489e0c2d381695b7cd7087cc40c8aca91a69d /boilerplate/elm/src | |
parent | 066b1441b29df2d9616eabc8680e912e912cbb07 (diff) |
Support boilerplate for Elm clients
Lately I was toiling while writing a ClojureScript client. This made me crave Elm. I'm going to rewrite the ClojureScript client using Elm, but along the way, I'm stopping off here and recording my starter boilerplate.
Diffstat (limited to 'boilerplate/elm/src')
-rw-r--r-- | boilerplate/elm/src/Landing.elm | 13 | ||||
-rw-r--r-- | boilerplate/elm/src/Login.elm | 13 | ||||
-rw-r--r-- | boilerplate/elm/src/Main.elm | 31 | ||||
-rw-r--r-- | boilerplate/elm/src/State.elm | 43 |
4 files changed, 100 insertions, 0 deletions
diff --git a/boilerplate/elm/src/Landing.elm b/boilerplate/elm/src/Landing.elm new file mode 100644 index 000000000000..00bb9e281af4 --- /dev/null +++ b/boilerplate/elm/src/Landing.elm @@ -0,0 +1,13 @@ +module Landing exposing (render) + +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (..) +import State + + +render : State.Model -> Html State.Msg +render model = + div [ class "pt-10 pb-20 px-10" ] + [ p [] [ text "Welcome to the landing page!" ] + ] diff --git a/boilerplate/elm/src/Login.elm b/boilerplate/elm/src/Login.elm new file mode 100644 index 000000000000..27f1d811a89a --- /dev/null +++ b/boilerplate/elm/src/Login.elm @@ -0,0 +1,13 @@ +module Login exposing (render) + +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (..) +import State + + +render : State.Model -> Html State.Msg +render model = + div [ class "pt-10 pb-20 px-10" ] + [ p [] [ text "Please authenticate" ] + ] diff --git a/boilerplate/elm/src/Main.elm b/boilerplate/elm/src/Main.elm new file mode 100644 index 000000000000..30006460cde9 --- /dev/null +++ b/boilerplate/elm/src/Main.elm @@ -0,0 +1,31 @@ +module Main exposing (main) + +import Browser +import Html exposing (..) +import Landing +import Login +import State + + +subscriptions : State.Model -> Sub State.Msg +subscriptions model = + Sub.none + + +view : State.Model -> Html State.Msg +view model = + case model.view of + State.Landing -> + Landing.render model + + State.Login -> + Login.render model + + +main = + Browser.element + { init = \() -> ( State.init, Cmd.none ) + , subscriptions = subscriptions + , update = State.update + , view = view + } diff --git a/boilerplate/elm/src/State.elm b/boilerplate/elm/src/State.elm new file mode 100644 index 000000000000..c1edae8bb638 --- /dev/null +++ b/boilerplate/elm/src/State.elm @@ -0,0 +1,43 @@ +module State exposing (..) + + +type Msg + = DoNothing + | SetView View + + +type View + = Landing + | Login + + +type alias Model = + { isLoading : Bool + , view : View + } + + +{-| The initial state for the application. +-} +init : Model +init = + { isLoading = False + , view = Landing + } + + +{-| Now that we have state, we need a function to change the state. +-} +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + DoNothing -> + ( model, Cmd.none ) + + SetView x -> + ( { model + | view = x + , isLoading = True + } + , Cmd.none + ) |