import { myAuth, setIsoData } from "@utils/app";
import { isBrowser } from "@utils/browser";
import { Component, linkEvent } from "inferno";
-import { NavLink } from "inferno-router";
import { GetSiteResponse, LoginResponse } from "lemmy-js-client";
import { I18NextService, UserService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService";
import { toast } from "../../toast";
import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon";
+import PasswordInput from "../common/password-input";
interface State {
loginRes: RequestState<LoginResponse>;
return (
<div>
<form onSubmit={linkEvent(this, this.handleLoginSubmit)}>
- <h5>{I18NextService.i18n.t("login")}</h5>
+ <h1 className="h4 mb-4">{I18NextService.i18n.t("login")}</h1>
<div className="mb-3 row">
<label
className="col-sm-2 col-form-label"
/>
</div>
</div>
- <div className="mb-3 row">
- <label className="col-sm-2 col-form-label" htmlFor="login-password">
- {I18NextService.i18n.t("password")}
- </label>
- <div className="col-sm-10">
- <input
- type="password"
- id="login-password"
- value={this.state.form.password}
- onInput={linkEvent(this, this.handleLoginPasswordChange)}
- className="form-control"
- autoComplete="current-password"
- required
- maxLength={60}
- />
- <NavLink
- className="btn p-0 btn-link d-inline-block float-right text-muted small font-weight-bold pointer-events not-allowed"
- to="/login_reset"
- >
- {I18NextService.i18n.t("forgot_password")}
- </NavLink>
- </div>
+ <div className="mb-3">
+ <PasswordInput
+ id="login-password"
+ value={this.state.form.password}
+ onInput={linkEvent(this, this.handleLoginPasswordChange)}
+ label={I18NextService.i18n.t("password")}
+ showForgotLink
+ />
</div>
{this.state.showTotp && (
<div className="mb-3 row">
i.setState({ showTotp: true });
toast(I18NextService.i18n.t("enter_two_factor_code"), "info");
}
+ if (loginRes.msg === "incorrect_login") {
+ toast(I18NextService.i18n.t("incorrect_login"), "danger");
+ }
i.setState({ loginRes: { state: "failed", msg: loginRes.msg } });
break;
}
case "success": {
- UserService.Instance.login(loginRes.data);
+ UserService.Instance.login({
+ res: loginRes.data,
+ });
const site = await HttpService.client.getSite({
auth: myAuth(),
});