all repos

onasty @ 327757c9371a333d3436f0a204677742a04236cf

a one-time notes service

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) ]
        ]