all repos

onasty @ babda7d822d93649597a4892e0dada0724e215b7

a one-time notes service

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

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