X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fshared%2Fcomponents%2Fperson%2Fpassword-change.tsx;h=1a60c968f72253d60234315744c1fa6da5b545fa;hb=b7ec7ae3110c560968e0cb24a32f1fe9166eec29;hp=a0305f1f7acedf6dfb567190fca2bfdcdcd61e27;hpb=d412baf758a07e900bb6cc55f7e2e600f6634476;p=lemmy-ui.git diff --git a/src/shared/components/person/password-change.tsx b/src/shared/components/person/password-change.tsx index a0305f1..1a60c96 100644 --- a/src/shared/components/person/password-change.tsx +++ b/src/shared/components/person/password-change.tsx @@ -1,81 +1,56 @@ -import { None } from "@sniptt/monads"; +import { myAuth, setIsoData } from "@utils/app"; +import { capitalizeFirstLetter } from "@utils/helpers"; import { Component, linkEvent } from "inferno"; -import { - GetSiteResponse, - LoginResponse, - PasswordChange as PasswordChangeForm, - UserOperation, - wsJsonToRes, - wsUserOp, -} from "lemmy-js-client"; -import { Subscription } from "rxjs"; -import { i18n } from "../../i18next"; -import { UserService, WebSocketService } from "../../services"; -import { - capitalizeFirstLetter, - isBrowser, - setIsoData, - toast, - wsClient, - wsSubscribe, -} from "../../utils"; +import { GetSiteResponse, LoginResponse } from "lemmy-js-client"; +import { HttpService, I18NextService, UserService } from "../../services"; +import { RequestState } from "../../services/HttpService"; import { HtmlTags } from "../common/html-tags"; import { Spinner } from "../common/icon"; +import PasswordInput from "../common/password-input"; interface State { - passwordChangeForm: PasswordChangeForm; - loading: boolean; + passwordChangeRes: RequestState; + form: { + token: string; + password?: string; + password_verify?: string; + }; siteRes: GetSiteResponse; } export class PasswordChange extends Component { private isoData = setIsoData(this.context); - private subscription: Subscription; - emptyState: State = { - passwordChangeForm: new PasswordChangeForm({ - token: this.props.match.params.token, - password: undefined, - password_verify: undefined, - }), - loading: false, + state: State = { + passwordChangeRes: { state: "empty" }, siteRes: this.isoData.site_res, + form: { + token: this.props.match.params.token, + }, }; constructor(props: any, context: any) { super(props, context); - - this.state = this.emptyState; - - this.parseMessage = this.parseMessage.bind(this); - this.subscription = wsSubscribe(this.parseMessage); - } - - componentWillUnmount() { - if (isBrowser()) { - this.subscription.unsubscribe(); - } } get documentTitle(): string { - return this.state.siteRes.site_view.match({ - some: siteView => `${i18n.t("password_change")} - ${siteView.site.name}`, - none: "", - }); + return `${I18NextService.i18n.t("password_change")} - ${ + this.state.siteRes.site_view.site.name + }`; } render() { return ( -
+
-
{i18n.t("password_change")}
+

+ {I18NextService.i18n.t("password_change")} +

{this.passwordChangeForm()}
@@ -86,45 +61,30 @@ export class PasswordChange extends Component { passwordChangeForm() { return (
-
- -
- -
+
+
-
- -
- -
+
+
-
+
@@ -134,36 +94,44 @@ export class PasswordChange extends Component { } handlePasswordChange(i: PasswordChange, event: any) { - i.state.passwordChangeForm.password = event.target.value; + i.state.form.password = event.target.value; i.setState(i.state); } handleVerifyPasswordChange(i: PasswordChange, event: any) { - i.state.passwordChangeForm.password_verify = event.target.value; + i.state.form.password_verify = event.target.value; i.setState(i.state); } - handlePasswordChangeSubmit(i: PasswordChange, event: any) { + async handlePasswordChangeSubmit(i: PasswordChange, event: any) { event.preventDefault(); - i.setState({ loading: true }); + i.setState({ passwordChangeRes: { state: "loading" } }); - WebSocketService.Instance.send( - wsClient.passwordChange(i.state.passwordChangeForm) - ); - } + const password = i.state.form.password; + const password_verify = i.state.form.password_verify; + + if (password && password_verify) { + i.setState({ + passwordChangeRes: await HttpService.client.passwordChangeAfterReset({ + token: i.state.form.token, + password, + password_verify, + }), + }); + + if (i.state.passwordChangeRes.state === "success") { + const data = i.state.passwordChangeRes.data; + UserService.Instance.login({ + res: data, + }); + + const site = await HttpService.client.getSite({ auth: myAuth() }); + if (site.state === "success") { + UserService.Instance.myUserInfo = site.data.my_user; + } - parseMessage(msg: any) { - let op = wsUserOp(msg); - console.log(msg); - if (msg.error) { - toast(i18n.t(msg.error), "danger"); - this.setState({ loading: false }); - return; - } else if (op == UserOperation.PasswordChange) { - let data = wsJsonToRes(msg, LoginResponse); - this.setState(this.emptyState); - UserService.Instance.login(data); - this.props.history.push("/"); + i.props.history.replace("/"); + } } } }