onasty/web/src/Pages/Profile/Me.elm(view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
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) ]
]
|