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
|
module User.PassReset exposing (main)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Browser
import Json.Encode as JE
import Lib.Api as Api
import Lib.Html exposing (..)
main : Program () Model Msg
main = Browser.element
{ init = always (Model "" False Api.Normal, Cmd.none)
, subscriptions = always Sub.none
, view = view
, update = update
}
encodeForm : Model -> JE.Value
encodeForm o = JE.object
[ ("email", JE.string o.email) ]
type alias Model =
{ email : String
, success : Bool
, state : Api.State
}
type Msg
= EMail String
| Submit
| Submitted Api.Response
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
EMail n -> ({ model | email = n }, Cmd.none)
Submit -> ( { model | state = Api.Loading }
, Api.post "/u/newpass" (encodeForm model) Submitted
)
Submitted Api.Success -> ({ model | success = True }, Cmd.none)
Submitted e -> ({ model | state = Api.Error e }, Cmd.none)
view : Model -> Html Msg
view model = form_ Submit (model.state == Api.Loading)
[ div [ class "card card--white card--no-separators flex-expand small-card mb-5" ] <|
[ div [ class "card__header" ] [ div [ class "card__title" ] [ text "Reset password" ]]
, case model.state of
Api.Error e ->
div [ class "card__section card__section--error fs-medium" ]
[ h5 [] [ text "Error" ]
, text <| Api.showResponse e
]
_ -> text ""
] ++ if model.success
then
[ div [ class "card__section fs-medium" ]
[ text "Your password has been reset and instructions to set a new one should reach your mailbox in a few minutes." ]
]
else
[
div [ class "card__section fs-medium" ]
[ div [ class "form-group" ]
[ div [ class "form-group__help" ]
[ text "Forgot your password and can\'t login to VNDB anymore?"
, br [] []
, text "Don't worry! Just fill in the email address you used to register on VNDB, and you'll receive instructions to set a new password within a few minutes!"
]
, inputText "email" model.email EMail [required True, type_ "email"]
]
]
, div [ class "card__section" ]
[ div [ class "d-flex jc-end" ]
[ if model.state == Api.Loading
then div [ class "spinner spinner--md pull-right" ] []
else text ""
, input [ type_ "submit", class "btn", tabindex 10, value "Submit" ] []
]
]
]
]
|