{ main : List Item
, footer : Footer
}
{ id : Ginger.Id.ResourceId
, title : Ginger.Translation.Translation
, path : String
}
{ title : Ginger.Translation.Translation
, summary : Ginger.Translation.Translation
, items : List Item
}
empty : Menu
A Menu
containing no values
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