1 import { setIsoData } from "@utils/app";
2 import { capitalizeFirstLetter, validEmail } from "@utils/helpers";
3 import { Component, linkEvent } from "inferno";
4 import { GetSiteResponse } from "lemmy-js-client";
5 import { HttpService, I18NextService, UserService } from "../../services";
6 import { toast } from "../../toast";
7 import { HtmlTags } from "../common/html-tags";
8 import { Spinner } from "../common/icon";
15 siteRes: GetSiteResponse;
18 export class LoginReset extends Component<any, State> {
19 private isoData = setIsoData(this.context);
26 siteRes: this.isoData.site_res,
29 constructor(props: any, context: any) {
30 super(props, context);
34 if (UserService.Instance.myUserInfo) {
35 this.context.router.history.push("/");
39 get documentTitle(): string {
40 return `${capitalizeFirstLetter(
41 I18NextService.i18n.t("forgot_password")
42 )} - ${this.state.siteRes.site_view.site.name}`;
47 <div className="container-lg">
49 title={this.documentTitle}
50 path={this.context.router.route.match.url}
52 <div className="col-12 col-lg-6 col-md-8 m-auto">
53 {this.loginResetForm()}
61 <form onSubmit={linkEvent(this, this.handlePasswordReset)}>
63 {capitalizeFirstLetter(I18NextService.i18n.t("forgot_password"))}
66 <div className="form-group row">
67 <label className="col-form-label">
68 {I18NextService.i18n.t("no_password_reset")}
72 <div className="form-group row mt-2">
74 className="col-sm-2 col-form-label"
75 htmlFor="login-reset-email"
77 {I18NextService.i18n.t("email")}
80 <div className="col-sm-10">
83 className="form-control"
84 id="login-reset-email"
85 value={this.state.form.email}
86 onInput={linkEvent(this, this.handleEmailInputChange)}
94 <div className="form-group row mt-3">
95 <div className="col-sm-10">
98 onClick={linkEvent(this, this.handlePasswordReset)}
99 className="btn btn-secondary"
101 !validEmail(this.state.form.email) || this.state.form.loading
104 {this.state.form.loading ? (
107 I18NextService.i18n.t("reset_password")
116 handleEmailInputChange(i: LoginReset, event: any) {
117 i.setState(s => ((s.form.email = event.target.value.trim()), s));
120 async handlePasswordReset(i: LoginReset, event: any) {
121 event.preventDefault();
123 const email = i.state.form.email;
125 if (email && validEmail(email)) {
126 i.setState(s => ((s.form.loading = true), s));
128 const res = await HttpService.client.passwordReset({ email });
130 if (res.state == "success") {
131 toast(I18NextService.i18n.t("reset_password_mail_sent"));
132 i.context.router.history.push("/login");
135 i.setState(s => ((s.form.loading = false), s));