Add Elm boilerplate to project

Create a top-level client directory to store my Elm boilerplate.
This commit is contained in:
William Carroll 2020-07-29 09:51:18 +01:00
parent cf6c8799ab
commit 289cae2528
11 changed files with 180 additions and 0 deletions

13
client/src/Landing.elm Normal file
View file

@ -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!" ]
]

13
client/src/Login.elm Normal file
View file

@ -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" ]
]

31
client/src/Main.elm Normal file
View file

@ -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
}

43
client/src/State.elm Normal file
View file

@ -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
)