module Shared exposing (Data, Model, Msg(..), SharedMsg(..), template) import Browser.Navigation import DataSource import Effect exposing (Effect) import Html exposing (Html) import Html.Styled import Pages.Flags import Pages.PageUrl exposing (PageUrl) import Path exposing (Path) import Route exposing (Route) import SharedTemplate exposing (SharedTemplate) import View exposing (View) template : SharedTemplate Msg Model Data msg template = { init = init , update = update , view = view , data = data , subscriptions = subscriptions , onPageChange = Just OnPageChange } type Msg = OnPageChange { path : Path , query : Maybe String , fragment : Maybe String } type alias Data = () type SharedMsg = NoOp type alias Model = { showMobileMenu : Bool } init : Maybe Browser.Navigation.Key -> Pages.Flags.Flags -> Maybe { path : { path : Path , query : Maybe String , fragment : Maybe String } , metadata : route , pageUrl : Maybe PageUrl } -> ( Model, Effect Msg ) init _ flags maybePagePath = ( { showMobileMenu = False } , Effect.none ) update : Msg -> Model -> ( Model, Effect Msg ) update msg model = case msg of OnPageChange _ -> ( { model | showMobileMenu = False }, Effect.none ) subscriptions : Path -> Model -> Sub Msg subscriptions _ _ = Sub.none data : DataSource.DataSource Data data = DataSource.succeed () view : Data -> { path : Path , route : Maybe Route } -> Model -> (Msg -> msg) -> View msg -> { body : Html msg, title : String } view stars page model toMsg pageView = { body = Html.Styled.div [] pageView.body |> Html.Styled.toUnstyled , title = pageView.title }