driebit / elm-ginger / Ginger.Menu

Definitions


type alias Menu =
{ main : List Item
, footer : Footer 
}


type alias Item =
{ id : Ginger.Id.ResourceId
, title : Ginger.Translation.Translation
, path : String 
}


type alias Footer =
{ title : Ginger.Translation.Translation
, summary : Ginger.Translation.Translation
, items : List Item 
}

Construct

empty : Menu

A Menu containing no values

Decode

fromValue : Json.Decode.Value -> Menu

Decode a Menu from a Decode.Value, defaults to an empty Menu

You can for example pass the menu as a flag and initialize you app like:

main : Program Decode.Value Model Msg
main =
    Browser.application
        { init = init << Ginger.Menu.fromValue
        , view = view
        , update = update
        , subscriptions = subscriptions
        , onUrlChange = OnUrlChange
        , onUrlRequest = OnUrlRequest
        }

fromJson : Json.Decode.Decoder Menu

decodeMenuItems : Json.Decode.Decoder (List Item)

Build a custom menu Decoder re-using the decoders used in this module

type alias Menu =
    { main : List Item
    , mainExtra : List Item
    , footer : List Item
    , footerExtra : List Item
    }

customFromJson : Decoder Menu
customFromJson =
    Decode.succeed Menu
        |> Pipeline.required "main_menu" decodeMenuItems
        |> Pipeline.required "main_menu_extra" decodeMenuItems
        |> Pipeline.required "footer_menu" decodeMenuItems
        |> Pipeline.required "footer_menu_extra" decodeMenuItems

decodeMenuItem : Json.Decode.Decoder Item

decodeFooter : Json.Decode.Decoder Footer