Repository URL to install this package:
|
Version:
1.0.1 ▾
|
"use strict";
var __decorate = this && this.__decorate || function (decorators, target, key, desc) {
var c = arguments.length,
r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", {
value: true
});
const mobx_1 = require("xmobx/mobx");
const deps_1 = require("../deps");
const isValidCreditCard_1 = require("../deps/isValidCreditCard");
const isValidExpiryDate_1 = require("../deps/isValidExpiryDate");
const deps_2 = require("./deps"); // const curriedDecorate = curry('_', decorate)
function curryDecorate(types) {
return function (Klass) {
mobx_1.decorate(Klass, types);
return Klass;
};
}
const decorations = {
setInputsList: mobx_1.action.bound,
setFormReference: mobx_1.action.bound,
setProps: mobx_1.action.bound
}; // @todo + finish at the end removing validation duplication
// @curryDecorate(decorations)
class FormState {
constructor(stateData = {}) {
// super(stateData)
// extendObservable(this, {
// // I think this has an issue - name
// // name: '',
// hasAllValidInputs: false,
// inputsList: [],
// })
this.hasAllValidInputs = false;
this.inputsList = [];
/**
* @note added identifier check too
* @param {String} name name of the input for this form
* @return {InputState}
*/
this.get = name => {
/**
* @todo convert this to a .find
*/
let result;
const isSameName = inputState => {
console.info('[forms] input state get - recursing: ', inputState);
if (inputState.type === 'groupElements') {
inputState.elementList.forEach(isSameName);
} else if (inputState.name === name || inputState.identifier === name) {
result = inputState;
}
};
this.inputsList.forEach(isSameName);
return result;
}; // ========= @todo - remove this duplication =========
this.formValidation = () => {
const isValidInput = item => {
console.log('itemDetails', item);
const {
type,
isHidden,
isEnabled,
validationType
} = item;
if (isEnabled && type !== 'label' && validationType !== 'none') {
if (type === 'groupElements') {
return item.elementList.every(isValidInput);
} else {
return this.isValidElement(item);
}
} else {
return true;
}
};
console.log('current input list', this.inputsList);
const hasAllValidInputs = this.inputsList.every(isValidInput);
console.log('hasAllValidInputs', hasAllValidInputs);
return hasAllValidInputs;
};
/**
* @todo @gnanaprabhu why is this duplicated
*/
this.isValidElement = item => {
const {
validationType,
value
} = item;
if (validationType === 'creditCard' || validationType === 'securityCode') {
return this.validateCreditCard(item);
}
if (validationType === 'month' || validationType === 'year') {
return this.validateExpiryDate(item);
}
if (validationType === 'confirmPassword') {
if (this.validateConfirmPassword(item) === false) {
return false;
}
}
if (validationType === 'newPassword') {
if (this.validateNewPassword(item) === false) {
return false;
}
} else {
const validationResult = deps_1.isValid(value, validationType);
if (!validationResult) {
return false;
}
}
return true;
};
this.validateCreditCard = item => {
const creditCard = this.get('cardNumber');
const securityCode = this.get('SecurityCode');
if (creditCard && creditCard.getValue()) {
if (securityCode && securityCode.getValue()) {
const isamexCard = isValidCreditCard_1.isAmexCard(creditCard.getValue());
if (isamexCard && securityCode.getValue().length !== 4) {
return false;
} else if (!isamexCard && securityCode.getValue().length === 4) {
return false;
}
}
return isValidCreditCard_1.isValidCreditCard(creditCard.getValue());
}
return false;
};
this.validateExpiryDate = item => {
const expiryMonth = this.get('expirationMonth');
const expiryYear = this.get('expirationYear');
if (expiryMonth.getValue() && expiryYear.getValue()) {
if (isValidExpiryDate_1.isValidYear(expiryYear.getValue(), expiryMonth.getValue())) {
return true;
} else {
return false;
}
}
return false;
};
/**
* @todo when setting inputs list, copy...
* ORIGINAL_INPUTS_LIST
*/
this.inputsList = mobx_1.observable([]); // no need to add another method, is an alias for specific usage
this.toSerialized = this.toJSON.bind(this);
}
static init(state) {
return new FormState(state);
}
setInputsList(list) {
this.inputsList = list;
return this;
}
setFormReference(dom) {
this.form = dom;
}
setProps(props) {
this.props = props;
} // ========= protected read =========
/**
* @type {Computed}
*/
toJSON() {
const formData = {};
const getInputValue = input => {
// ignore labels
if (input.type === 'label') {
return;
} // title says it all
const {
key,
value
} = deps_2.fromInputToSerializedKeyValue(input, getInputValue); // special place for radios
if (input.type === 'radio') {
if (value) {
formData['selectedItem'] = key;
}
} else {
// otherwise, default
formData[key] = value;
/**
* @todo @fixme bad serialization - fixed in ui-component-library
*/
if (formData['0'] === value) {
delete formData['0'];
}
}
}; // this is using `getInputValue` as a longhand `.reduce`
this.inputsList.forEach(getInputValue);
return formData;
}
validateForSamePassword(item, name, shouldBeSamePassword) {
// if (isObj(item) === false) {
// console.error('@ganesh - it is being passed a string')
// return false
// }
const {
value
} = item;
if (!deps_1.isValidPassword(value)) {
item.setIsValidInput(false);
item.errorMessage = deps_1.errorMessage('password');
return false;
}
const password = this.get(name);
const passwordValue = password.getValue();
item.setIsValidInput(true);
let isValid = passwordValue === '';
isValid = shouldBeSamePassword ? passwordValue !== value : passwordValue === value;
if (isValid) {
item.setIsValidInput(false);
item.errorMessage = deps_1.errorMessage(item.errorMessageFor);
return false;
}
return true;
}
validateConfirmPassword(item) {
this.validateForSamePassword(item, 'password', true);
}
validateNewPassword(item) {
this.validateForSamePassword(item, 'oldPassword', false);
}
}
/**
* @example [].map(FormState.toInputState)
*/
FormState.toInputState = deps_2.toInputState;
__decorate([mobx_1.observable], FormState.prototype, "hasAllValidInputs", void 0);
__decorate([mobx_1.observable], FormState.prototype, "inputsList", void 0);
__decorate([mobx_1.action], FormState.prototype, "setInputsList", null);
__decorate([mobx_1.action.bound], FormState.prototype, "setFormReference", null);
__decorate([mobx_1.action.bound], FormState.prototype, "setProps", null);
__decorate([mobx_1.action.bound], FormState.prototype, "validateForSamePassword", null);
__decorate([mobx_1.action.bound], FormState.prototype, "validateConfirmPassword", null);
__decorate([mobx_1.action.bound], FormState.prototype, "validateNewPassword", null);
exports.FormState = FormState;
exports.default = FormState; //# sourceMappingURL=FormState.js.map