82 lines
1.5 KiB
Elm
82 lines
1.5 KiB
Elm
module ErrorPage exposing (ErrorPage(..), Model, Msg, head, init, internalError, notFound, statusCode, update, view)
|
|
|
|
import Effect exposing (Effect)
|
|
import Head
|
|
import Html.Styled as Html
|
|
import Html.Styled.Events exposing (onClick)
|
|
import View exposing (View)
|
|
|
|
|
|
type Msg
|
|
= Increment
|
|
|
|
|
|
type alias Model =
|
|
{ count : Int
|
|
}
|
|
|
|
|
|
init : ErrorPage -> ( Model, Effect Msg )
|
|
init errorPage =
|
|
( { count = 0 }
|
|
, Effect.none
|
|
)
|
|
|
|
|
|
update : ErrorPage -> Msg -> Model -> ( Model, Effect Msg )
|
|
update errorPage msg model =
|
|
case msg of
|
|
Increment ->
|
|
( { model | count = model.count + 1 }, Effect.none )
|
|
|
|
|
|
head : ErrorPage -> List Head.Tag
|
|
head errorPage =
|
|
[]
|
|
|
|
|
|
type ErrorPage
|
|
= NotFound
|
|
| InternalError String
|
|
|
|
|
|
notFound : ErrorPage
|
|
notFound =
|
|
NotFound
|
|
|
|
|
|
internalError : String -> ErrorPage
|
|
internalError =
|
|
InternalError
|
|
|
|
|
|
view : ErrorPage -> Model -> View Msg
|
|
view error model =
|
|
{ body =
|
|
[ Html.div []
|
|
[ Html.p [] [ Html.text "Page not found. Maybe try another URL?" ]
|
|
, Html.div []
|
|
[ Html.button
|
|
[ onClick Increment
|
|
]
|
|
[ Html.text
|
|
(model.count
|
|
|> String.fromInt
|
|
)
|
|
]
|
|
]
|
|
]
|
|
]
|
|
, title = "This is a NotFound Error"
|
|
}
|
|
|
|
|
|
statusCode : ErrorPage -> number
|
|
statusCode error =
|
|
case error of
|
|
NotFound ->
|
|
404
|
|
|
|
InternalError _ ->
|
|
500
|