module Pages.Profile.Me exposing (Model, Msg, page) import Api import Api.Me import Auth import Data.Me exposing (Me) import Effect exposing (Effect) import Html exposing (Html) import Http import Page exposing (Page) import Route exposing (Route) import Shared import View exposing (View) page : Auth.User -> Shared.Model -> Route () -> Page Model Msg page _ shared _ = Page.new { init = init shared , update = update , subscriptions = subscriptions , view = view shared } -- INIT type alias Model = { me : Api.Response Me } init : Shared.Model -> () -> ( Model, Effect Msg ) init _ () = ( { me = Api.Loading } , Api.Me.get { onResponse = ApiMeResponded } ) -- UPDATE type Msg = ApiMeResponded (Result Http.Error Me) update : Msg -> Model -> ( Model, Effect Msg ) update msg model = case msg of ApiMeResponded (Ok userData) -> ( { model | me = Api.Success userData }, Effect.none ) ApiMeResponded (Err error) -> ( { model | me = Api.Failure error }, Effect.none ) -- SUBSCRIPTIONS subscriptions : Model -> Sub Msg subscriptions _ = Sub.none -- VIEW view : Shared.Model -> Model -> View Msg view shared model = { title = "Profile" , body = [ viewProfileContent shared model.me ] } viewProfileContent : Shared.Model -> Api.Response Me -> Html Msg viewProfileContent shared userResponse = case userResponse of Api.Loading -> Html.text "Loading..." Api.Success user -> viewUserDetails shared user Api.Failure err -> Html.text (Api.errorToFriendlyMessage err) viewUserDetails : Shared.Model -> Me -> Html Msg viewUserDetails _ me = Html.div [] [ Html.p [] [ Html.text ("Email: " ++ me.email) ] , Html.p [] [ Html.text ("Joined: " ++ me.createdAt) ] ]