client-ui
Version:
Testing implementation of nodeJs Backend, angular frontend, and hopefully in a way that this can be deployed to s3/cloudfront
166 lines (150 loc) • 4.82 kB
JavaScript
/* global config $ getUrlParameters */
function Splashpage() {
this.numMessages = 0;
this.loanAmountKeyPresses = 0;
}
Splashpage.prototype.submit = function(event) {
event.preventDefault();
event.stopPropagation();
this.makeItDirty();
var valid = this.validateEverything();
if (!valid) {
return;
}
var loanPurpose = this.getLoanPurpose();
var loanAmount = this.getCleanLoanAmount();
var newUrl = 'app.html#/account-creation?loanPurpose=' + loanPurpose + '&loanAmount=' + loanAmount;
var urlParams = getUrlParameters();
newUrl += this.appendParam(urlParams, 'r');
newUrl += this.appendParam(urlParams, 'e');
newUrl += this.appendParam(urlParams, 'p');
newUrl += this.appendParam(urlParams, 'c');
window.location.href = newUrl;
};
Splashpage.prototype.incrementKeyPresses = function() {
this.loanAmountKeyPresses++;
};
Splashpage.prototype.validateEverything = function(amountFirst) {
var valid = true;
if (amountFirst === true) {
if (!this.validateLoanAmount()) {
valid = false;
}
if (!this.validateLoanPurpose()) {
valid = false;
}
} else {
if (!this.validateLoanPurpose()) {
valid = false;
}
if (!this.validateLoanAmount()) {
valid = false;
}
}
return valid;
};
Splashpage.prototype.appendParam = function(urlParams, param) {
if (urlParams[param]) {
return '&' + param + '=' + encodeURIComponent(urlParams[param]);
}
return '';
};
Splashpage.prototype.makeDirty = function(element) {
element = $(element);
element.addClass("dirty");
};
Splashpage.prototype.makeItDirty = function() {
this.makeDirty("#loanPurpose");
this.makeDirty("#loanAmount");
};
Splashpage.prototype.getLoanPurpose = function() {
var loanPurposeElement = $('#loanPurpose');
return loanPurposeElement.val();
};
Splashpage.prototype.getCleanLoanAmount = function() {
var loanAmountElement = $('#loanAmount');
var amount = loanAmountElement.val();
amount = amount.replace(/[^\d.]/g, "");
if (amount.length === 0) {
return false;
}
try {
amount = parseFloat(amount);
amount = Math.floor(amount);
} catch(e) {
return false;
}
return amount;
};
Splashpage.prototype.validateLoanPurpose = function() {
this.displayDisclamers();
var loanPurposeElement = $('#loanPurpose');
var value = loanPurposeElement.val();
var valid = value !== null && value.length > 0;
this.handleErrors({
element: loanPurposeElement,
valid: valid,
errorMessage: "How are you going to use your loan?"
});
return valid;
};
Splashpage.prototype.validateLoanAmount = function() {
var loanAmountElement = $('#loanAmount');
var amount = loanAmountElement.val();
var validNumber = /(^(\$?)(\d{1,3})(,\d{3})*(\.\d*|,\d{0,3})?$)|(^\$?(\d+(\.\d*)?)?$)/;
var valid = validNumber.test(amount);
var cleanAmount = this.getCleanLoanAmount();
valid = valid && cleanAmount !== false;
valid = valid && cleanAmount >= config.loanMin;
valid = valid && cleanAmount <= config.loanMax;
if (valid
|| !validNumber.test(amount)
|| this.loanAmountKeyPresses > 6) {
this.makeDirty(loanAmountElement);
}
this.handleErrors({
element: loanAmountElement,
valid: valid,
errorMessage: "Enter an amount you'd like to borrow between " + config.loanMin + " and " + config.loanMax
});
return valid;
};
Splashpage.prototype.removeError = function(element) {
var group = element.closest(".form-group");
group.removeClass("has-error");
if (element.hasClass("error")) {
element.tooltip("destroy")
.removeClass("error");
this.numMessages--;
}
};
Splashpage.prototype.addError = function(element, message) {
var group = element.closest(".form-group");
group.addClass("has-error");
if (this.numMessages === 0
&& !element.hasClass("error")) {
this.numMessages++;
element.tooltip("destroy")
.data("title", message)
.data("trigger", "manual")
.addClass("error")
.tooltip("show");
}
};
Splashpage.prototype.handleErrors = function(params) {
var dirty = params.element.hasClass("dirty");
if(dirty && !params.valid) {
this.addError(params.element, params.errorMessage);
} else {
this.removeError(params.element);
}
};
Splashpage.prototype.displayDisclamers = function() {
$('#businessDisclamer').hide();
var selectedValue = $('#loanPurpose').val();
switch (selectedValue) {
case "business":
$('#businessDisclamer').show();
break;
}
};