In elm-pages, Route modules have their own Msg type which can be used like a normal TEA (The Elm Architecture) app.
But the Msg defined in a Route module is wrapped in the PagesMsg type.
You can wrap your Route Module's Msg using fromMsg.
import PagesMsg exposing (PagesMsg)
type Msg
= ToggleMenu
view :
Maybe PageUrl
-> Shared.Model
-> Model
-> StaticPayload Data ActionData RouteParams
-> View (PagesMsg Msg)
view maybeUrl sharedModel model app =
{ title = "My Page"
, view =
[ button
-- we need to wrap our Route module's `Msg` here so we have a `PagesMsg Msg`
[ onClick (PagesMsg.fromMsg ToggleMenu) ]
[]
-- `Form.renderHtml` gives us `Html (PagesMsg msg)`, so we don't need to wrap its Msg type
, logoutForm
|> Form.toDynamicTransition "logout"
|> Form.withOnSubmit (\_ -> NewItemSubmitted)
|> Form.renderHtml [] (\_ -> Nothing) app Nothing
]
}A Msg that is handled by the elm-pages framework and does nothing. Helpful for when you don't want to register a callback.
import Browser.Dom as Dom
import PagesMsg exposing (PagesMsg)
import Task
resetViewport : Cmd (PagesMsg msg)
resetViewport =
Dom.setViewport 0 0
|> Task.perform (\() -> PagesMsg.noOp)