Including source here as well:
Main.elm:
module Main exposing (Model, Msg(..), init, main, update, view)
import Browser
import Button
import Html exposing (Html, button, div, h1, map, text)
import Html.Events exposing (onClick)
main =
Browser.sandbox { init = init, update = update, view = view }
-- MODEL
type alias Model =
{ button : Button.Model }
init : Model
init =
{ button = Button.init
}
-- UPDATE
type Msg
= ButtonMsg Button.Msg
update : Msg -> Model -> Model
update msg model =
case Debug.log "update msg" msg of
ButtonMsg buttonMsg ->
{ model | button = Button.update buttonMsg model.button }
-- VIEW
view : Model -> Html Msg
view model =
div []
[ h1 [] [ text "elm button example" ]
, map ButtonMsg (Button.view model.button)
]
Button.elm:
module Button exposing (Model, Msg(..), init, update, view)
import Html exposing (Html, button, div, h1, text)
import Html.Events exposing (onClick)
-- MODEL
type alias Model =
Int
init : Model
init =
0
-- UPDATE
type Msg
= Increment
| Decrement
update : Msg -> Model -> Model
update msg model =
case Debug.log "Button.update msg: " msg of
Increment ->
model + 1
Decrement ->
model - 1
view : Model -> Html Msg
view model =
div []
[ button [ onClick Decrement ] [ text "-" ]
, div [] [ text (String.fromInt model) ]
, button [ onClick Increment ] [ text "+" ]
]