diff options
Diffstat (limited to 'elm3/User/PassReset.elm')
-rw-r--r-- | elm3/User/PassReset.elm | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/elm3/User/PassReset.elm b/elm3/User/PassReset.elm new file mode 100644 index 00000000..aa649c24 --- /dev/null +++ b/elm3/User/PassReset.elm @@ -0,0 +1,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" ] [] + ] + ] + ] + ] |