import { Component, linkEvent } from 'inferno'; import { Subscription } from 'rxjs'; import { retryWhen, delay, take } from 'rxjs/operators'; import { RegisterForm, LoginResponse, UserOperation } from '../interfaces'; import { WebSocketService, UserService } from '../services'; import { msgOp } from '../utils'; import { SiteForm } from './site-form'; import { i18n } from '../i18next'; import { T } from 'inferno-i18next'; interface State { userForm: RegisterForm; doneRegisteringUser: boolean; userLoading: boolean; } export class Setup extends Component { private subscription: Subscription; private emptyState: State = { userForm: { username: undefined, password: undefined, password_verify: undefined, admin: true, show_nsfw: true, }, doneRegisteringUser: false, userLoading: false, }; constructor(props: any, context: any) { super(props, context); this.state = this.emptyState; 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') ); } componentWillUnmount() { this.subscription.unsubscribe(); } componentDidMount() { document.title = `${i18n.t('setup')} - Lemmy`; } render() { return (

#

{!this.state.doneRegisteringUser ? ( this.registerUser() ) : ( )}
); } registerUser() { return (
#
); } handleRegisterSubmit(i: Setup, event: any) { event.preventDefault(); i.state.userLoading = true; i.setState(i.state); event.preventDefault(); WebSocketService.Instance.register(i.state.userForm); } handleRegisterUsernameChange(i: Setup, event: any) { i.state.userForm.username = event.target.value; i.setState(i.state); } handleRegisterEmailChange(i: Setup, event: any) { i.state.userForm.email = event.target.value; i.setState(i.state); } handleRegisterPasswordChange(i: Setup, event: any) { i.state.userForm.password = event.target.value; i.setState(i.state); } handleRegisterPasswordVerifyChange(i: Setup, event: any) { i.state.userForm.password_verify = event.target.value; i.setState(i.state); } parseMessage(msg: any) { let op: UserOperation = msgOp(msg); if (msg.error) { alert(i18n.t(msg.error)); this.state.userLoading = false; this.setState(this.state); return; } else if (op == UserOperation.Register) { this.state.userLoading = false; this.state.doneRegisteringUser = true; let res: LoginResponse = msg; UserService.Instance.login(res); console.log(res); this.setState(this.state); } else if (op == UserOperation.CreateSite) { this.props.history.push('/'); } } }