X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fshared%2Fcomponents%2Fhome%2Fsetup.tsx;h=7b3d4c27ea9b072e968b4e2ce63f2654346b6280;hb=b7ec7ae3110c560968e0cb24a32f1fe9166eec29;hp=b1ecb272ae762da2368ac82305785218d5263eee;hpb=0754b9ba193d916651655782f44c051b0cb10268;p=lemmy-ui.git diff --git a/src/shared/components/home/setup.tsx b/src/shared/components/home/setup.tsx index b1ecb27..7b3d4c2 100644 --- a/src/shared/components/home/setup.tsx +++ b/src/shared/components/home/setup.tsx @@ -1,19 +1,16 @@ +import { fetchThemeList, setIsoData } from "@utils/app"; import { Component, linkEvent } from "inferno"; import { Helmet } from "inferno-helmet"; import { + CreateSite, GetSiteResponse, LoginResponse, Register, - UserOperation, - wsJsonToRes, - wsUserOp, } from "lemmy-js-client"; -import { Subscription } from "rxjs"; -import { delay, retryWhen, take } from "rxjs/operators"; -import { i18n } from "../../i18next"; -import { UserService, WebSocketService } from "../../services"; -import { setIsoData, toast, wsClient } from "../../utils"; +import { I18NextService, UserService } from "../../services"; +import { HttpService, RequestState } from "../../services/HttpService"; import { Spinner } from "../common/icon"; +import PasswordInput from "../common/password-input"; import { SiteForm } from "./site-form"; interface State { @@ -29,54 +26,57 @@ interface State { answer?: string; }; doneRegisteringUser: boolean; - userLoading: boolean; + registerRes: RequestState; + themeList: string[]; siteRes: GetSiteResponse; } export class Setup extends Component { - private subscription: Subscription; private isoData = setIsoData(this.context); state: State = { + registerRes: { state: "empty" }, + themeList: [], form: { show_nsfw: true, }, doneRegisteringUser: !!UserService.Instance.myUserInfo, - userLoading: false, siteRes: this.isoData.site_res, }; constructor(props: any, context: any) { super(props, context); - this.subscription = WebSocketService.Instance.subject - .pipe(retryWhen(errors => errors.pipe(delay(3000), take(10)))) - .subscribe( - msg => this.parseMessage(msg), - err => console.error(err), - () => console.log("complete") - ); + this.handleCreateSite = this.handleCreateSite.bind(this); } - componentWillUnmount() { - this.subscription.unsubscribe(); + async componentDidMount() { + this.setState({ themeList: await fetchThemeList() }); } get documentTitle(): string { - return `${i18n.t("setup")} - Lemmy`; + return `${I18NextService.i18n.t("setup")} - Lemmy`; } render() { return ( -
+
-

{i18n.t("lemmy_instance_setup")}

+

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

{!this.state.doneRegisteringUser ? ( this.registerUser() ) : ( - + )}
@@ -87,10 +87,10 @@ export class Setup extends Component { registerUser() { return (
-
{i18n.t("setup_admin")}
-
+

{I18NextService.i18n.t("setup_admin")}

+
{ />
-
+
@@ -115,53 +115,37 @@ export class Setup extends Component { type="email" id="email" className="form-control" - placeholder={i18n.t("optional")} + placeholder={I18NextService.i18n.t("optional")} value={this.state.form.email} onInput={linkEvent(this, this.handleRegisterEmailChange)} minLength={3} />
-
- -
- -
+
+
-
- -
- -
+
+
-
+
@@ -169,29 +153,56 @@ export class Setup extends Component { ); } - handleRegisterSubmit(i: Setup, event: any) { - event.preventDefault(); - i.setState({ userLoading: true }); + async handleRegisterSubmit(i: Setup, event: any) { event.preventDefault(); - const cForm = i.state.form; - if (cForm.username && cForm.password && cForm.password_verify) { + i.setState({ registerRes: { state: "loading" } }); + const { + username, + password_verify, + password, + email, + show_nsfw, + captcha_uuid, + captcha_answer, + honeypot, + answer, + } = i.state.form; + + if (username && password && password_verify) { const form: Register = { - username: cForm.username, - password: cForm.password, - password_verify: cForm.password_verify, - email: cForm.email, - show_nsfw: cForm.show_nsfw, - captcha_uuid: cForm.captcha_uuid, - captcha_answer: cForm.captcha_answer, - honeypot: cForm.honeypot, - answer: cForm.answer, + username, + password, + password_verify, + email, + show_nsfw, + captcha_uuid, + captcha_answer, + honeypot, + answer, }; - WebSocketService.Instance.send(wsClient.register(form)); + i.setState({ + registerRes: await HttpService.client.register(form), + }); + + if (i.state.registerRes.state == "success") { + const data = i.state.registerRes.data; + + UserService.Instance.login({ res: data }); + i.setState({ doneRegisteringUser: true }); + } + } + } + + async handleCreateSite(form: CreateSite) { + const createRes = await HttpService.client.createSite(form); + if (createRes.state === "success") { + this.props.history.replace("/"); + location.reload(); } } handleRegisterUsernameChange(i: Setup, event: any) { - i.state.form.username = event.target.value; + i.state.form.username = event.target.value.trim(); i.setState(i.state); } @@ -209,22 +220,4 @@ export class Setup extends Component { i.state.form.password_verify = event.target.value; i.setState(i.state); } - - parseMessage(msg: any) { - const op = wsUserOp(msg); - if (msg.error) { - toast(i18n.t(msg.error), "danger"); - this.setState({ userLoading: false }); - return; - } else if (op == UserOperation.Register) { - const data = wsJsonToRes(msg); - this.setState({ userLoading: false }); - UserService.Instance.login(data); - if (UserService.Instance.jwtInfo) { - this.setState({ doneRegisteringUser: true }); - } - } else if (op == UserOperation.CreateSite) { - window.location.href = "/"; - } - } }