all repos

onasty @ 58c535a5aae5dee03a5cbcb2efc82e1426dcea76

a one-time notes service

onasty/web/src/Pages/Profile/Me.elm (view raw)

Smirnov Oleksandr Smirnov Oleksandr
ss2316544@gmail.com
web: add some styles (#136)..., 11 months ago
1
module Pages.Profile.Me exposing (Model, Msg, page)
2
3
import Api
4
import Api.Me
5
import Auth
6
import Data.Me exposing (Me)
7
import Effect exposing (Effect)
8
import Html exposing (Html)
9
import Http
10
import Layouts
11
import Page exposing (Page)
12
import Route exposing (Route)
13
import Shared
14
import View exposing (View)
15
16
17
page : Auth.User -> Shared.Model -> Route () -> Page Model Msg
18
page _ shared _ =
19
    Page.new
20
        { init = init shared
21
        , update = update
22
        , subscriptions = subscriptions
23
        , view = view shared
24
        }
25
        |> Page.withLayout (\_ -> Layouts.Header {})
26
27
28
29
-- INIT
30
31
32
type alias Model =
33
    { me : Api.Response Me }
34
35
36
init : Shared.Model -> () -> ( Model, Effect Msg )
37
init _ () =
38
    ( { me = Api.Loading }
39
    , Api.Me.get { onResponse = ApiMeResponded }
40
    )
41
42
43
44
-- UPDATE
45
46
47
type Msg
48
    = ApiMeResponded (Result Http.Error Me)
49
50
51
update : Msg -> Model -> ( Model, Effect Msg )
52
update msg model =
53
    case msg of
54
        ApiMeResponded (Ok userData) ->
55
            ( { model | me = Api.Success userData }, Effect.none )
56
57
        ApiMeResponded (Err error) ->
58
            ( { model | me = Api.Failure error }, Effect.none )
59
60
61
62
-- SUBSCRIPTIONS
63
64
65
subscriptions : Model -> Sub Msg
66
subscriptions _ =
67
    Sub.none
68
69
70
71
-- VIEW
72
73
74
view : Shared.Model -> Model -> View Msg
75
view shared model =
76
    { title = "Profile"
77
    , body = [ viewProfileContent shared model.me ]
78
    }
79
80
81
viewProfileContent : Shared.Model -> Api.Response Me -> Html Msg
82
viewProfileContent shared userResponse =
83
    case userResponse of
84
        Api.Loading ->
85
            Html.text "Loading..."
86
87
        Api.Success user ->
88
            viewUserDetails shared user
89
90
        Api.Failure err ->
91
            Html.text (Api.errorToFriendlyMessage err)
92
93
94
viewUserDetails : Shared.Model -> Me -> Html Msg
95
viewUserDetails _ me =
96
    Html.div []
97
        [ Html.p [] [ Html.text ("Email: " ++ me.email) ]
98
        , Html.p [] [ Html.text ("Joined: " ++ me.createdAt) ]
99
        ]