typescript-ifying CompleteSSOLoginViewModel

This commit is contained in:
Isaiah Becker-Mayer 2022-08-14 11:27:25 -07:00
parent 53c4ecb69b
commit c1161e5332
2 changed files with 22 additions and 9 deletions

View File

@ -14,11 +14,24 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
import {ViewModel} from "../ViewModel"; import {Options as BaseOptions, ViewModel} from "../ViewModel";
import {LoginFailure} from "../../matrix/Client.js"; import {LoginFailure} from "../../matrix/Client.js";
import type {TokenLoginMethod} from "../../matrix/login";
import { Client } from "../../matrix/Client.js";
type Options = {
client: Client;
attemptLogin: (loginMethod: TokenLoginMethod) => Promise<null>;
loginToken: string;
} & BaseOptions
export class CompleteSSOLoginViewModel extends ViewModel { export class CompleteSSOLoginViewModel extends ViewModel {
constructor(options) { private _loginToken: string;
private _client: Client;
private _attemptLogin: (loginMethod: TokenLoginMethod) => Promise<null>;
private _errorMessage = "";
constructor(options: Options) {
super(options); super(options);
const { const {
loginToken, loginToken,
@ -29,22 +42,22 @@ export class CompleteSSOLoginViewModel extends ViewModel {
this._client = client; this._client = client;
this._attemptLogin = attemptLogin; this._attemptLogin = attemptLogin;
this._errorMessage = ""; this._errorMessage = "";
this.performSSOLoginCompletion(); void this.performSSOLoginCompletion();
} }
get errorMessage() { return this._errorMessage; } get errorMessage(): string { return this._errorMessage; }
_showError(message) { _showError(message: string): void {
this._errorMessage = message; this._errorMessage = message;
this.emitChange("errorMessage"); this.emitChange("errorMessage");
} }
async performSSOLoginCompletion() { async performSSOLoginCompletion(): Promise<void> {
if (!this._loginToken) { if (!this._loginToken) {
return; return;
} }
const homeserver = await this.platform.settingsStorage.getString("sso_ongoing_login_homeserver"); const homeserver = await this.platform.settingsStorage.getString("sso_ongoing_login_homeserver");
let loginOptions; let loginOptions: { token?: (loginToken: string) => TokenLoginMethod; };
try { try {
loginOptions = await this._client.queryLogin(homeserver).result; loginOptions = await this._client.queryLogin(homeserver).result;
} }

View File

@ -18,7 +18,7 @@ import {Client} from "../../matrix/Client.js";
import {Options as BaseOptions, ViewModel} from "../ViewModel"; import {Options as BaseOptions, ViewModel} from "../ViewModel";
import {PasswordLoginViewModel} from "./PasswordLoginViewModel"; import {PasswordLoginViewModel} from "./PasswordLoginViewModel";
import {StartSSOLoginViewModel} from "./StartSSOLoginViewModel"; import {StartSSOLoginViewModel} from "./StartSSOLoginViewModel";
import {CompleteSSOLoginViewModel} from "./CompleteSSOLoginViewModel.js"; import {CompleteSSOLoginViewModel} from "./CompleteSSOLoginViewModel";
import {LoadStatus} from "../../matrix/Client.js"; import {LoadStatus} from "../../matrix/Client.js";
import {SessionLoadViewModel} from "../SessionLoadViewModel.js"; import {SessionLoadViewModel} from "../SessionLoadViewModel.js";
import {SegmentType} from "../navigation/index"; import {SegmentType} from "../navigation/index";
@ -68,7 +68,7 @@ export class LoginViewModel extends ViewModel<SegmentType, Options> {
return this._startSSOLoginViewModel; return this._startSSOLoginViewModel;
} }
get completeSSOLoginViewModel(): CompleteSSOLoginViewModel { get completeSSOLoginViewModel(): CompleteSSOLoginViewModel | undefined {
return this._completeSSOLoginViewModel; return this._completeSSOLoginViewModel;
} }