noredink-ui/styleguide-app/Examples/Page.elm
2021-05-27 18:30:31 -07:00

119 lines
3.6 KiB
Elm

module Examples.Page exposing (example, State, Msg)
{-|
@docs example, State, Msg
-}
import Category exposing (Category(..))
import CommonControls
import Css
import Css.Global exposing (Snippet, adjacentSiblings, children, class, descendants, each, everything, media, selector, withClass)
import Debug.Control as Control exposing (Control)
import Example exposing (Example)
import Html.Styled as Html exposing (Html)
import Html.Styled.Attributes exposing (css)
import Http
import KeyboardSupport exposing (Direction(..), Key(..))
import Nri.Ui.Colors.V1 as Colors
import Nri.Ui.Heading.V2 as Heading
import Nri.Ui.Page.V3 as Page exposing (RecoveryText(..))
{-| -}
type alias State =
{ httpError : Control Http.Error
, recoveryText : Control RecoveryText
}
{-| -}
type Msg
= ShowItWorked String
| SetHttpError (Control Http.Error)
| SetRecoveryText (Control RecoveryText)
update : Msg -> State -> ( State, Cmd Msg )
update msg model =
case msg of
ShowItWorked message ->
let
_ =
Debug.log "Clicked: " message
in
( model, Cmd.none )
SetHttpError controls ->
( { model | httpError = controls }, Cmd.none )
SetRecoveryText controls ->
( { model | recoveryText = controls }, Cmd.none )
{-| -}
example : Example State Msg
example =
{ name = "Page"
, version = 3
, categories = [ Pages ]
, keyboardSupport = []
, state = { httpError = CommonControls.httpError, recoveryText = initRecoveryText }
, update = update
, subscriptions = \_ -> Sub.none
, view =
\model ->
let
recoveryText =
Control.currentValue model.recoveryText
in
[ Html.fromUnstyled (Control.view SetRecoveryText model.recoveryText)
, viewExample "Page.httpError error" (Page.httpError (Control.currentValue model.httpError)) recoveryText [ Html.fromUnstyled (Control.view SetHttpError model.httpError) ]
, viewExample "Page.broken" Page.broken recoveryText []
, viewExample "Page.blockedV4" (Page.blockedV4 "Error message details") recoveryText []
, viewExample "Page.notFound" Page.notFound recoveryText []
, viewExample "Page.noPermission" Page.noPermission recoveryText []
, viewExample "Page.loggedOut" Page.loggedOut recoveryText []
, viewExample "Page.timeOut" Page.timeOut recoveryText []
, viewExample "Page.networkError" Page.networkError recoveryText []
]
}
viewExample :
String
-> (Page.DefaultPage Msg -> Html Msg)
-> RecoveryText
-> List (Html Msg)
-> Html Msg
viewExample viewName view recoveryText extras =
Html.div
[ css
[ Css.marginTop (Css.px 20)
, Css.borderTop3 (Css.px 2) Css.solid Colors.gray96
, Css.paddingTop (Css.px 20)
, Css.marginBottom (Css.px 20)
]
]
[ Heading.h3 [] [ Html.text viewName ]
, Html.div [] extras
, Html.code []
[ Html.text <|
viewName
++ " { link = msg, recoveryText = "
++ Debug.toString recoveryText
++ " }"
]
, view { link = ShowItWorked viewName, recoveryText = recoveryText }
]
initRecoveryText : Control RecoveryText
initRecoveryText =
Control.choice
[ ( "Page.Reload", Control.value Page.Reload )
, ( "Page.ReturnTo", Control.map Page.ReturnTo (Control.string "Home") )
, ( "Page.Custom", Control.map Custom (Control.string "Hit the road, Jack") )
]