dbm
Version:
114 lines (93 loc) • 4.68 kB
JavaScript
import React from "react";
import Dbm from "../../index.js";
export default class LoginForm extends Dbm.react.BaseObject {
_construct() {
super._construct();
this.item.setValue("username", "");
this.item.setValue("password", "");
}
_login() {
console.log("_login");
let loader = new Dbm.loading.JsonLoader();
loader.setupJsonPost("/api/user/login", {"username": this.item.username, "password": this.item.password});
Dbm.flow.addUpdateCommand(loader.item.properties.status, Dbm.commands.callFunction(this._loaderStatusChanged.bind(this), [loader]));
loader.load();
}
_loaderStatusChanged(aLoader) {
console.log("_loaderStatusChanged");
console.log(aLoader, aLoader.item.status);
if(aLoader.item.status === Dbm.loading.LoadingStatus.LOADED) {
if(aLoader.item.data.success) {
let item = Dbm.getInstance().repository.getItem("graphApi").controller.signIn(aLoader.item.data.data.wsToken);
Dbm.flow.addUpdateCommand(item.properties.status, Dbm.commands.callFunction(this._graphApiRequestStatusChanges.bind(this), [item, aLoader]));
}
else {
alert("Unable to log in: " + aLoader.item.data.message);
}
}
}
_graphApiRequestStatusChanges(aRequest, aLoader) {
console.log("_graphApiRequestStatusChanges");
console.log(aRequest, aRequest.status);
if(aRequest.status === Dbm.loading.LoadingStatus.LOADED) {
let completedCommands = this.getProp("completedCommands");
if(completedCommands) {
let currentArray = completedCommands;
let currentArrayLength = currentArray.length;
for(let i = 0; i < currentArrayLength; i++) {
let currentCommand = currentArray[i];
currentCommand.perform(this, aLoader.item.data.data);
}
return;
}
let site = Dbm.getInstance().repository.getItem("site");
let queryString = new URLSearchParams(window.location.search);
let skipRedirect = this.getProp("skipRedirect");
if(!skipRedirect) {
let redirectUrl = queryString.get('redirect');
if(redirectUrl) {
Dbm.getInstance().repository.getItem("siteNavigation").controller.navigate(redirectUrl);
return;
}
}
let action = queryString.get('action');
if(action) {
let actionCommand = Dbm.objectPath(site, "loginActions." + action);
if(actionCommand) {
actionCommand.perform(this, aLoader.item.data.data);
return;
}
console.warn("Unknown action " + action);
}
let actionCommand = Dbm.objectPath(site, "loginActions.default");
if(actionCommand) {
actionCommand.perform(this, aLoader.item.data.data);
return;
}
Dbm.getInstance().repository.getItem("siteNavigation").controller.navigate(site.loggedInUrl);
}
}
_renderMainElement() {
return this._createMainElement("div", {className: "content-narrow"},
React.createElement("div", {className: "body-text"},
React.createElement("div", {"className": ""},
React.createElement("label", {className: "standard-field-label"},
"Email"
)
),
React.createElement(Dbm.react.form.FormField, {value: this.item.properties.username, className: "standard-field standard-field-padding full-width"}),
React.createElement("div", {"className": "spacing standard"}),
React.createElement("div", {"className": ""},
React.createElement("label", {className: "standard-field-label"},
"Password"
)
),
React.createElement(Dbm.react.form.FormField, {type: "password", value: this.item.properties.password, className: "standard-field standard-field-padding full-width"})
),
React.createElement("div", {"className": "spacing standard"}),
React.createElement("div", {"className": "flex-row justify-center"},
React.createElement("div", {"className": "standard-button standard-button-padding", onClick: () => this._login()}, "Login")
)
);
}
}