mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2024-12-23 03:25:12 +01:00
typescript-ifying PasswordLoginViewModel
This commit is contained in:
parent
c898bcb46a
commit
749e038a47
@ -16,7 +16,7 @@ limitations under the License.
|
|||||||
|
|
||||||
import {Client} from "../../matrix/Client.js";
|
import {Client} from "../../matrix/Client.js";
|
||||||
import {Options as BaseOptions, ViewModel} from "../ViewModel";
|
import {Options as BaseOptions, ViewModel} from "../ViewModel";
|
||||||
import {PasswordLoginViewModel} from "./PasswordLoginViewModel.js";
|
import {PasswordLoginViewModel} from "./PasswordLoginViewModel";
|
||||||
import {StartSSOLoginViewModel} from "./StartSSOLoginViewModel.js";
|
import {StartSSOLoginViewModel} from "./StartSSOLoginViewModel.js";
|
||||||
import {CompleteSSOLoginViewModel} from "./CompleteSSOLoginViewModel.js";
|
import {CompleteSSOLoginViewModel} from "./CompleteSSOLoginViewModel.js";
|
||||||
import {LoadStatus} from "../../matrix/Client.js";
|
import {LoadStatus} from "../../matrix/Client.js";
|
||||||
@ -60,7 +60,7 @@ export class LoginViewModel extends ViewModel<SegmentType, Options> {
|
|||||||
this._initViewModels();
|
this._initViewModels();
|
||||||
}
|
}
|
||||||
|
|
||||||
get passwordLoginViewModel(): PasswordLoginViewModel {
|
get passwordLoginViewModel(): PasswordLoginViewModel | undefined {
|
||||||
return this._passwordLoginViewModel;
|
return this._passwordLoginViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,7 +285,7 @@ export class LoginViewModel extends ViewModel<SegmentType, Options> {
|
|||||||
type ReadyFn = (client: Client) => void;
|
type ReadyFn = (client: Client) => void;
|
||||||
|
|
||||||
// TODO: move to Client.js when its converted to typescript.
|
// TODO: move to Client.js when its converted to typescript.
|
||||||
type LoginOptions = {
|
export type LoginOptions = {
|
||||||
homeserver: string;
|
homeserver: string;
|
||||||
password?: (username: string, password: string) => PasswordLoginMethod;
|
password?: (username: string, password: string) => PasswordLoginMethod;
|
||||||
sso?: SSOLoginHelper;
|
sso?: SSOLoginHelper;
|
||||||
|
@ -14,43 +14,53 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {ViewModel} from "../ViewModel";
|
|
||||||
import {LoginFailure} from "../../matrix/Client.js";
|
import {LoginFailure} from "../../matrix/Client.js";
|
||||||
|
import type {PasswordLoginMethod} from "../../matrix/login";
|
||||||
|
import {Options as BaseOptions, ViewModel} from "../ViewModel";
|
||||||
|
import type {LoginOptions} from "./LoginViewModel";
|
||||||
|
|
||||||
|
type Options = {
|
||||||
|
loginOptions: LoginOptions | undefined;
|
||||||
|
attemptLogin: (loginMethod: PasswordLoginMethod) => Promise<null>;
|
||||||
|
} & BaseOptions
|
||||||
|
|
||||||
export class PasswordLoginViewModel extends ViewModel {
|
export class PasswordLoginViewModel extends ViewModel {
|
||||||
constructor(options) {
|
private _loginOptions?: LoginOptions;
|
||||||
|
private _attemptLogin: (loginMethod: PasswordLoginMethod) => Promise<null>;
|
||||||
|
private _isBusy = false;
|
||||||
|
private _errorMessage = "";
|
||||||
|
|
||||||
|
constructor(options: Options) {
|
||||||
super(options);
|
super(options);
|
||||||
const {loginOptions, attemptLogin} = options;
|
const {loginOptions, attemptLogin} = options;
|
||||||
this._loginOptions = loginOptions;
|
this._loginOptions = loginOptions;
|
||||||
this._attemptLogin = attemptLogin;
|
this._attemptLogin = attemptLogin;
|
||||||
this._isBusy = false;
|
|
||||||
this._errorMessage = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get isBusy() { return this._isBusy; }
|
get isBusy(): boolean { return this._isBusy; }
|
||||||
get errorMessage() { return this._errorMessage; }
|
get errorMessage(): string { return this._errorMessage; }
|
||||||
|
|
||||||
setBusy(status) {
|
setBusy(status: boolean): void {
|
||||||
this._isBusy = status;
|
this._isBusy = status;
|
||||||
this.emitChange("isBusy");
|
this.emitChange("isBusy");
|
||||||
}
|
}
|
||||||
|
|
||||||
_showError(message) {
|
_showError(message: string): void {
|
||||||
this._errorMessage = message;
|
this._errorMessage = message;
|
||||||
this.emitChange("errorMessage");
|
this.emitChange("errorMessage");
|
||||||
}
|
}
|
||||||
|
|
||||||
async login(username, password) {
|
async login(username: string, password: string): Promise<void>{
|
||||||
this._errorMessage = "";
|
this._errorMessage = "";
|
||||||
this.emitChange("errorMessage");
|
this.emitChange("errorMessage");
|
||||||
const status = await this._attemptLogin(this._loginOptions.password(username, password));
|
const status = await this._attemptLogin(this._loginOptions!.password!(username, password));
|
||||||
let error = "";
|
let error = "";
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case LoginFailure.Credentials:
|
case LoginFailure.Credentials:
|
||||||
error = this.i18n`Your username and/or password don't seem to be correct.`;
|
error = this.i18n`Your username and/or password don't seem to be correct.`;
|
||||||
break;
|
break;
|
||||||
case LoginFailure.Connection:
|
case LoginFailure.Connection:
|
||||||
error = this.i18n`Can't connect to ${this._loginOptions.homeserver}.`;
|
error = this.i18n`Can't connect to ${this._loginOptions!.homeserver}.`;
|
||||||
break;
|
break;
|
||||||
case LoginFailure.Unknown:
|
case LoginFailure.Unknown:
|
||||||
error = this.i18n`Something went wrong while checking your login and password.`;
|
error = this.i18n`Something went wrong while checking your login and password.`;
|
Loading…
Reference in New Issue
Block a user