-
Midhun Suresh authored
If we don't allow segments to nest in allowsChild, Navigation.push() does exactly what we need.
Midhun Suresh authoredIf we don't allow segments to nest in allowsChild, Navigation.push() does exactly what we need.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
AccountSetupViewModel.ts 2.22 KiB
import { ViewModel, Client, LoadStatus } from "hydrogen-view-sdk";
import { IChatterboxConfig } from "../types/IChatterboxConfig";
import { generateRandomString } from "../random";
import "hydrogen-view-sdk/style.css";
export class AccountSetupViewModel extends ViewModel {
private _config: IChatterboxConfig;
private _client: Client;
private _termsStage?: any;
private _password: string;
constructor(options) {
super(options);
this._client = options.client;
this._config = options.config;
this._startRegistration();
}
private async _startRegistration(): Promise<void> {
this._password = generateRandomString(10);
let stage = await this._client.startRegistration(this._homeserver, null, this._password, "Chatterbox");
if (stage.type === "m.login.terms") {
this._termsStage = stage;
this.emitChange("termsStage");
}
}
async completeRegistration() {
let stage = this._termsStage;
while (typeof stage !== "string") {
stage = await stage.complete();
}
// stage is username when registration is completed
const loginPromise = this.login(stage, this._password);
this.navigation.push("timeline", loginPromise);
}
async login(username: string, password: string): Promise<void> {
const loginOptions = await this._client.queryLogin(this._homeserver).result;
this._client.startWithLogin(loginOptions.password(username, password));
await this._client.loadStatus.waitFor((status: string) => {
return status === LoadStatus.Ready ||
status === LoadStatus.Error ||
status === LoadStatus.LoginFailed;
}).promise;
if (this._client.loginFailure) {
throw new Error("login failed: " + this._client.loginFailure);
} else if (this._client.loadError) {
throw new Error("load failed: " + this._client.loadError.message);
}
}
dismiss() {
this.navigation.push("start");
}
private get _homeserver(): string {
return this._config.homeserver;
}
get privacyPolicyLink() {
return this._termsStage?.privacyPolicy.en?.url;
}
}