module Shared exposing (Data, Model, Msg(..), SharedMsg(..), template) import Browser.Navigation import Css.Global import DataSource import DataSource.Http import Html exposing (Html) import Html.Styled import OptimizedDecoder as D import Pages.Flags import Pages.PageUrl exposing (PageUrl) import Path exposing (Path) import Secrets import SharedTemplate exposing (SharedTemplate) import Tailwind.Utilities import View exposing (View) template : SharedTemplate Msg Model Data SharedMsg msg template = { init = init , update = update , view = view , data = data , subscriptions = subscriptions , onPageChange = Just OnPageChange , sharedMsg = SharedMsg } type Msg = OnPageChange { path : Path , query : Maybe String , fragment : Maybe String } | SharedMsg SharedMsg type alias Data = Int 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, Cmd Msg ) init _ flags maybePagePath = ( { showMobileMenu = False } , Cmd.none ) update : Msg -> Model -> ( Model, Cmd Msg ) update msg model = case msg of OnPageChange _ -> ( { model | showMobileMenu = False }, Cmd.none ) SharedMsg globalMsg -> ( model, Cmd.none ) subscriptions : Path -> Model -> Sub Msg subscriptions _ _ = Sub.none data : DataSource.DataSource Data data = DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") (D.field "stargazers_count" D.int) view : Data -> { path : Path , frontmatter : 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 }