@manojadams/metaforms
Version:
Meta-data driven forms
1,260 lines (1,250 loc) • 195 kB
JavaScript
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var React = require('react');
var React__default = _interopDefault(React);
var EventEmitter = require('eventemitter3');
var EventEmitter__default = _interopDefault(EventEmitter);
var material = require('@mui/material');
var MFormControl = _interopDefault(require('@mui/material/FormControl'));
var FormControlLabel = _interopDefault(require('@mui/material/FormControlLabel'));
var FormLabel = _interopDefault(require('@mui/material/FormLabel'));
var InputLabel = _interopDefault(require('@mui/material/InputLabel'));
var MenuItem = _interopDefault(require('@mui/material/MenuItem'));
var Radio = _interopDefault(require('@mui/material/Radio'));
var RadioGroup = _interopDefault(require('@mui/material/RadioGroup'));
var Select = _interopDefault(require('@mui/material/Select'));
var TextField = _interopDefault(require('@mui/material/TextField'));
var AdapterDateFns = require('@mui/x-date-pickers/AdapterDateFns');
var DatePicker = require('@mui/x-date-pickers/DatePicker');
var LocalizationProvider = require('@mui/x-date-pickers/LocalizationProvider');
var enLocale = _interopDefault(require('date-fns/locale/en-US'));
var PhoneInput = _interopDefault(require('react-phone-input-2'));
var reactNumberFormat = require('react-number-format');
var VirtualScroll = _interopDefault(require('react-dynamic-virtual-scroll'));
var Tabs$1 = _interopDefault(require('@mui/material/Tabs'));
var Tab$1 = _interopDefault(require('@mui/material/Tab'));
var Stepper = _interopDefault(require('@mui/material/Stepper'));
var Step = _interopDefault(require('@mui/material/Step'));
var StepLabel = _interopDefault(require('@mui/material/StepLabel'));
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
_setPrototypeOf(subClass, superClass);
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
return true;
} catch (e) {
return false;
}
}
function _construct(Parent, args, Class) {
if (_isNativeReflectConstruct()) {
_construct = Reflect.construct.bind();
} else {
_construct = function _construct(Parent, args, Class) {
var a = [null];
a.push.apply(a, args);
var Constructor = Function.bind.apply(Parent, a);
var instance = new Constructor();
if (Class) _setPrototypeOf(instance, Class.prototype);
return instance;
};
}
return _construct.apply(null, arguments);
}
function _isNativeFunction(fn) {
return Function.toString.call(fn).indexOf("[native code]") !== -1;
}
function _wrapNativeSuper(Class) {
var _cache = typeof Map === "function" ? new Map() : undefined;
_wrapNativeSuper = function _wrapNativeSuper(Class) {
if (Class === null || !_isNativeFunction(Class)) return Class;
if (typeof Class !== "function") {
throw new TypeError("Super expression must either be null or a function");
}
if (typeof _cache !== "undefined") {
if (_cache.has(Class)) return _cache.get(Class);
_cache.set(Class, Wrapper);
}
function Wrapper() {
return _construct(Class, arguments, _getPrototypeOf(this).constructor);
}
Wrapper.prototype = Object.create(Class.prototype, {
constructor: {
value: Wrapper,
enumerable: false,
writable: true,
configurable: true
}
});
return _setPrototypeOf(Wrapper, Class);
};
return _wrapNativeSuper(Class);
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
var MSGS = {
ERROR_MSG: {
REQUIRED: "Is a required field",
PATTERN: "Pattern is invalid",
MIN: "Is not a valid value",
MIN_TEXT: "Minimum length is {CHARS} chars.",
MAX: "Out of range",
MAX_TEXT: "Maximum length is {CHARS} chars.",
DATE_INVALID: "Date is not valid",
EMAIL_INVALID: "Email is not valid"
}
};
var EMAIL_PATTERN = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$";
var FORM_CONSTANTS = {
DEPENDENCY_KEY: "dependencies",
INTERNAL_VALUES: {
INPUT: "$input",
NOT_EMPTY: "$notempty",
VALUE_FN: "$valueFn",
CONDITION: "$condition",
DEFAULT: "$default"
}
};
var DEFAULT_DATE_FORMAT = "dd/MM/yyyy";
var NEXT_RESPONSE_MODE = {
PAGE_DATA: "page-data",
FORM_DATA: "form-data"
};
var FIELD_DISPLAY_TYPES = {
TEXT: "text",
SELECT: "select"
};
var Page = /*#__PURE__*/function () {
function Page(isGrouped, pages) {
this.pages = pages;
this.isGrouped = isGrouped;
this.pageNumber = 1;
this.totalPages = pages;
}
var _proto = Page.prototype;
_proto.update = function update(pageNumber) {
if (pageNumber <= this.totalPages) {
this.pageNumber = pageNumber;
} else {
this.pageNumber = this.totalPages;
}
};
_proto.setEndOfPage = function setEndOfPage(pageNumber) {
if (pageNumber !== undefined && pageNumber < this.totalPages) {
this.totalPages = pageNumber;
}
};
_proto.resetEndOfPage = function resetEndOfPage() {
this.totalPages = this.pages;
};
_proto.showPrev = function showPrev() {
return this.isGrouped && this.pageNumber !== 1;
};
_proto.showNext = function showNext() {
return this.isGrouped && this.pageNumber < this.totalPages;
};
_proto.showSave = function showSave() {
if (this.isGrouped) {
return this.pageNumber >= this.totalPages;
} else {
return true;
}
};
return Page;
}();
var Rest = /*#__PURE__*/function () {
function Rest(rest) {
var _this$config, _this$config2;
this.config = rest !== null && rest !== void 0 && rest.config ? rest.config : {};
var apihost = ((_this$config = this.config) === null || _this$config === void 0 ? void 0 : _this$config.apihost) || "";
var basepath = ((_this$config2 = this.config) === null || _this$config2 === void 0 ? void 0 : _this$config2.basepath) || "";
this.baseurl = apihost + basepath;
}
var _proto2 = Rest.prototype;
_proto2.get = function get(url, params, isRemote) {
var finalUrl = isRemote ? url : this.baseurl + url;
return fetch(finalUrl).then(function (res) {
return res.json();
});
};
_proto2.post = function post() {};
_proto2.put = function put() {};
_proto2["delete"] = function _delete() {};
return Rest;
}();
var ValidationUtil = /*#__PURE__*/function () {
function ValidationUtil() {}
ValidationUtil.updateMaxError = function updateMaxError(meta, value, setError) {
var _meta$validation;
var hasError = false;
if (!(meta !== null && meta !== void 0 && (_meta$validation = meta.validation) !== null && _meta$validation !== void 0 && _meta$validation.max)) {
return hasError;
}
switch (meta.displayType) {
case "text":
case "text_field":
if (value) {
var strValue = value;
var maxLength = parseInt(meta.validation.max);
if (strValue.length > maxLength) {
var _meta$validation2, _meta$validation2$max, _meta$validation3, _meta$validation3$max;
var errorMsg = ((_meta$validation2 = meta.validation) === null || _meta$validation2 === void 0 ? void 0 : (_meta$validation2$max = _meta$validation2.max_detail) === null || _meta$validation2$max === void 0 ? void 0 : _meta$validation2$max.errorMsg) || ((_meta$validation3 = meta.validation) === null || _meta$validation3 === void 0 ? void 0 : (_meta$validation3$max = _meta$validation3.maxDetail) === null || _meta$validation3$max === void 0 ? void 0 : _meta$validation3$max.errorMsg) || MSGS.ERROR_MSG.MAX_TEXT.replace("{CHARS}", maxLength.toString());
setError(true, errorMsg);
hasError = true;
return hasError;
}
}
break;
case "number":
case "currency":
if (value) {
var _strValue = value ? value + "" : "";
var val = parseInt(_strValue);
if (val > meta.validation.max) {
var _meta$validation4, _meta$validation4$max, _meta$validation5, _meta$validation5$max;
var _errorMsg = ((_meta$validation4 = meta.validation) === null || _meta$validation4 === void 0 ? void 0 : (_meta$validation4$max = _meta$validation4.max_detail) === null || _meta$validation4$max === void 0 ? void 0 : _meta$validation4$max.errorMsg) || ((_meta$validation5 = meta.validation) === null || _meta$validation5 === void 0 ? void 0 : (_meta$validation5$max = _meta$validation5.maxDetail) === null || _meta$validation5$max === void 0 ? void 0 : _meta$validation5$max.errorMsg) || MSGS.ERROR_MSG.MAX;
setError(true, _errorMsg);
hasError = true;
return hasError;
}
}
break;
case "month":
case "date":
if (value) {
var _strValue2 = value ? value + "" : "";
var valDate = new Date(_strValue2);
var maxDate = new Date(meta.validation.max);
if (valDate.getTime() > maxDate.getTime()) {
var _meta$validation6, _meta$validation6$max, _meta$validation7, _meta$validation7$max;
var _errorMsg2 = ((_meta$validation6 = meta.validation) === null || _meta$validation6 === void 0 ? void 0 : (_meta$validation6$max = _meta$validation6.max_detail) === null || _meta$validation6$max === void 0 ? void 0 : _meta$validation6$max.errorMsg) || ((_meta$validation7 = meta.validation) === null || _meta$validation7 === void 0 ? void 0 : (_meta$validation7$max = _meta$validation7.maxDetail) === null || _meta$validation7$max === void 0 ? void 0 : _meta$validation7$max.errorMsg) || MSGS.ERROR_MSG.MAX;
setError(true, _errorMsg2);
hasError = true;
return hasError;
}
}
}
return hasError;
};
ValidationUtil.updateMinError = function updateMinError(meta, value, setError) {
var _meta$validation8;
var hasError = false;
if (!(meta !== null && meta !== void 0 && (_meta$validation8 = meta.validation) !== null && _meta$validation8 !== void 0 && _meta$validation8.min)) {
return hasError;
}
switch (meta.displayType) {
case "text":
case "text_field":
if (value) {
var strValue = value;
var minLength = parseInt(meta.validation.min);
if (strValue.length < minLength) {
var _meta$validation9, _meta$validation9$min, _meta$validation10, _meta$validation10$mi;
var errorMsg = ((_meta$validation9 = meta.validation) === null || _meta$validation9 === void 0 ? void 0 : (_meta$validation9$min = _meta$validation9.min_detail) === null || _meta$validation9$min === void 0 ? void 0 : _meta$validation9$min.errorMsg) || ((_meta$validation10 = meta.validation) === null || _meta$validation10 === void 0 ? void 0 : (_meta$validation10$mi = _meta$validation10.minDetail) === null || _meta$validation10$mi === void 0 ? void 0 : _meta$validation10$mi.errorMsg) || MSGS.ERROR_MSG.MIN_TEXT.replace("{CHARS}", minLength.toString());
setError(true, errorMsg);
hasError = true;
return hasError;
}
}
break;
case "number":
case "currency":
if (value) {
var _strValue3 = value ? value + "" : "";
var val = parseInt(_strValue3);
if (val < meta.validation.min) {
var _meta$validation11, _meta$validation11$mi, _meta$validation12, _meta$validation12$mi;
var _errorMsg3 = ((_meta$validation11 = meta.validation) === null || _meta$validation11 === void 0 ? void 0 : (_meta$validation11$mi = _meta$validation11.min_detail) === null || _meta$validation11$mi === void 0 ? void 0 : _meta$validation11$mi.errorMsg) || ((_meta$validation12 = meta.validation) === null || _meta$validation12 === void 0 ? void 0 : (_meta$validation12$mi = _meta$validation12.minDetail) === null || _meta$validation12$mi === void 0 ? void 0 : _meta$validation12$mi.errorMsg) || MSGS.ERROR_MSG.MIN;
setError(true, _errorMsg3);
hasError = true;
return hasError;
}
}
break;
case "month":
case "date":
if (value) {
var _meta$validation13;
var _strValue4 = value ? value + "" : "";
var valDate = new Date(_strValue4);
var minDate = new Date((_meta$validation13 = meta.validation) === null || _meta$validation13 === void 0 ? void 0 : _meta$validation13.min);
if (valDate.getTime() < minDate.getTime()) {
var _meta$validation14, _meta$validation14$mi, _meta$validation15, _meta$validation15$mi;
var _errorMsg4 = ((_meta$validation14 = meta.validation) === null || _meta$validation14 === void 0 ? void 0 : (_meta$validation14$mi = _meta$validation14.min_detail) === null || _meta$validation14$mi === void 0 ? void 0 : _meta$validation14$mi.errorMsg) || ((_meta$validation15 = meta.validation) === null || _meta$validation15 === void 0 ? void 0 : (_meta$validation15$mi = _meta$validation15.minDetail) === null || _meta$validation15$mi === void 0 ? void 0 : _meta$validation15$mi.errorMsg) || MSGS.ERROR_MSG.MIN;
setError(true, _errorMsg4);
hasError = true;
return hasError;
}
}
}
return hasError;
};
ValidationUtil.isEmptyField = function isEmptyField(value) {
if (value === "" || value === undefined || value === null) {
return true;
}
return false;
};
ValidationUtil.validateFormSection = function validateFormSection(form, sectionName) {
var _this = this;
var hasErrors = false;
if (form && form[sectionName]) {
Object.keys(form[sectionName]).forEach(function (field) {
var formField = form[sectionName][field];
if (formField.display) {
if (formField.isDisabled) {
formField.error.hasError = false;
formField.error.errorMsg = "";
} else {
if (formField.value !== false && formField.value !== 0) {
var _formField$validation, _formField$validation6;
if ((_formField$validation = formField.validation) !== null && _formField$validation !== void 0 && _formField$validation.required && !formField.value) {
var _formField$validation2, _formField$validation3, _formField$validation4, _formField$validation5;
formField.error.hasError = true;
formField.error.errorMsg = ((_formField$validation2 = formField.validation) === null || _formField$validation2 === void 0 ? void 0 : (_formField$validation3 = _formField$validation2.required_detail) === null || _formField$validation3 === void 0 ? void 0 : _formField$validation3.errorMsg) || ((_formField$validation4 = formField.validation) === null || _formField$validation4 === void 0 ? void 0 : (_formField$validation5 = _formField$validation4.requiredDetail) === null || _formField$validation5 === void 0 ? void 0 : _formField$validation5.errorMsg) || MSGS.ERROR_MSG.REQUIRED;
hasErrors = true;
}
if (formField.value && (_formField$validation6 = formField.validation) !== null && _formField$validation6 !== void 0 && _formField$validation6.pattern) {
var regexp = new RegExp(formField.validation.pattern);
if (!regexp.test(formField.value)) {
var _formField$validation7, _formField$validation8;
formField.error.hasError = true;
formField.error.errorMsg = ((_formField$validation7 = formField.validation.pattern_detail) === null || _formField$validation7 === void 0 ? void 0 : _formField$validation7.errorMsg) || ((_formField$validation8 = formField.validation.patternDetail) === null || _formField$validation8 === void 0 ? void 0 : _formField$validation8.errorMsg) || MSGS.ERROR_MSG.PATTERN;
hasErrors = true;
}
}
if (formField.value !== undefined) {
var _formField$validation9, _formField$validation10;
if (((_formField$validation9 = formField.validation) === null || _formField$validation9 === void 0 ? void 0 : _formField$validation9.min) !== undefined) {
_this.updateMinError(formField, formField.value, function (hasError, errorMsg) {
formField.error.hasError = hasError;
formField.error.errorMsg = errorMsg;
hasErrors = true;
});
}
if (((_formField$validation10 = formField.validation) === null || _formField$validation10 === void 0 ? void 0 : _formField$validation10.max) !== undefined) {
_this.updateMaxError(formField, formField.value, function (hasError, errorMsg) {
formField.error.hasError = hasError;
formField.error.errorMsg = errorMsg;
hasErrors = true;
});
}
}
}
}
}
});
}
return hasErrors;
};
ValidationUtil.parseCondition = function parseCondition(form, condition, section) {
var _this2 = this;
var parsedCondition = "";
condition.forEach(function (c) {
var leftOperand = c[0],
operator = c[1],
rightOperand = c[2],
nextCondition = c[3];
var lSection = (leftOperand === null || leftOperand === void 0 ? void 0 : leftOperand.section) || section;
var lField = _this2.getField(form, lSection, leftOperand.ref);
var lValue = lField.value === "" ? '""' : lField.value;
var rValue;
if (typeof rightOperand === "object" && "ref" in rightOperand) {
var rSection = (rightOperand === null || rightOperand === void 0 ? void 0 : rightOperand.section) || section;
var rField = _this2.getField(form, rSection, rightOperand.ref);
rValue = rField.value;
} else {
rValue = rightOperand;
}
rValue = rValue === "" ? '""' : rValue;
parsedCondition += "(" + lValue + operator + rValue + ")" + (nextCondition || "");
});
var evalCondition = parsedCondition ? Function("return " + parsedCondition) : function () {
return false;
};
return evalCondition(parsedCondition);
};
ValidationUtil.getField = function getField(form, section, field) {
return form[section][field];
};
return ValidationUtil;
}();
var DependencyUtil = /*#__PURE__*/function () {
function DependencyUtil() {}
DependencyUtil.initDependencies = function initDependencies(form, section, fields) {
var _this = this;
fields && fields.forEach(function (field) {
var _field$meta;
if (field && field !== null && field !== void 0 && (_field$meta = field.meta) !== null && _field$meta !== void 0 && _field$meta.dependencies) {
var _field$meta2;
_this.setDependencies(form, section, field.name, field === null || field === void 0 ? void 0 : (_field$meta2 = field.meta) === null || _field$meta2 === void 0 ? void 0 : _field$meta2.dependencies);
}
if (field.fields && field.fields.length > 0) {
_this.initDependencies(form, field.name, field.fields);
}
});
};
DependencyUtil.getDependencies = function getDependencies(form, section, field) {
return form[section][field]["dependencies"];
};
DependencyUtil.setDependencies = function setDependencies(form, section, field, dependencies) {
var _this2 = this;
if (!dependencies) return;
Object.keys(dependencies).forEach(function (type) {
if (dependencies[type] instanceof Array) {
dependencies[type].forEach(function (dependency) {
_this2.setDependency(form, dependency, section, type, field);
});
} else {
_this2.setDependency(form, dependencies[type], section, type, field);
}
});
};
DependencyUtil.setDependency = function setDependency(form, dependency, section, type, field) {
var ref = dependency.ref || "";
var formSection = (dependency === null || dependency === void 0 ? void 0 : dependency.section) || section;
var value = dependency === null || dependency === void 0 ? void 0 : dependency.value;
var valueFn = dependency === null || dependency === void 0 ? void 0 : dependency.valueFn;
var D_KEY = FORM_CONSTANTS.DEPENDENCY_KEY;
if (ref && !form[formSection][ref][D_KEY]) {
form[formSection][ref][D_KEY] = [];
}
var extraParams = {};
switch (type) {
case "patternMatchUrlLoader":
case "pattern_match_url_loader":
extraParams = {
pattern: dependency.pattern,
changeType: dependency.type,
url_type: dependency.url_type,
defaultValue: dependency.defaultValue
};
case "load":
{
var url = dependency.url;
var labelKey = dependency === null || dependency === void 0 ? void 0 : dependency.labelKey;
var valueKey = dependency === null || dependency === void 0 ? void 0 : dependency.valueKey;
var responseKey = dependency.responseKey;
var queryParams = dependency.queryParams;
var pathParams = dependency.pathParams;
form[formSection][ref][D_KEY].push(_extends({
section: section,
type: type,
field: field,
url: url,
valueKey: valueKey,
labelKey: labelKey,
responseKey: responseKey,
queryParams: queryParams,
pathParams: pathParams
}, extraParams));
}
break;
case "loadOptions":
case "load_options":
{
var valueMap = dependency.valueMap;
form[formSection][ref][D_KEY].push({
section: section,
type: type,
field: field,
valueMap: valueMap
});
}
break;
case "equals":
{
form[formSection][ref][D_KEY].push({
section: section,
type: type,
field: field,
value: value,
currentValue: dependency.currentValue,
resetValue: dependency.resetValue
});
}
break;
case "validation":
case "change":
{
var changeType = dependency.type;
var _valueMap = dependency.valueMap;
form[formSection][ref][D_KEY].push({
section: section,
type: type,
field: field,
value: value,
valueMap: _valueMap,
changeType: changeType
});
}
break;
case "prop_update":
{
var propValue = dependency.propValue;
var propName = dependency.propName;
var _valueMap2 = dependency.valueMap;
form[formSection][ref][D_KEY].push({
section: section,
type: type,
field: field,
value: value,
valueMap: _valueMap2,
propName: propName,
propValue: propValue
});
}
break;
case "exists":
extraParams = {
condition: dependency.condition
};
form[formSection][ref][D_KEY].push(_extends({
section: section,
type: type,
field: field,
value: value,
valueFn: valueFn
}, extraParams));
break;
default:
form[formSection][ref][D_KEY].push({
section: section,
type: type,
field: field,
value: value,
valueFn: valueFn
});
}
};
DependencyUtil.handleDependencies = function handleDependencies(metaform, section, fieldName, value, fieldDisplayed) {
var _this3 = this;
return new Promise(function (sucessCallback) {
var deps = _this3.getDependencies(metaform.form, section, fieldName);
var totalDeps = deps && deps.length > 0 ? deps.length : 0;
if (totalDeps === 0) {
sucessCallback(true);
return;
}
var resolvedDepCount = 0;
var resolved = {
next: function next() {
resolvedDepCount++;
if (resolvedDepCount === totalDeps) {
sucessCallback();
}
}
};
deps && deps.forEach(function (dep) {
var type = dep.type;
switch (type) {
case "exists":
{
var depValue = dep.value;
var field = dep.field;
if (fieldDisplayed) {
if (value !== undefined) {
var _fieldDisplayed;
if (depValue === undefined) {
_fieldDisplayed = true;
metaform.setFieldDisplay(dep.section, field, _fieldDisplayed);
} else {
var conditionMatch = false;
if (Array.isArray(depValue)) {
if (depValue.indexOf(value) >= 0) {
conditionMatch = true;
}
} else {
switch (depValue) {
case FORM_CONSTANTS.INTERNAL_VALUES.NOT_EMPTY:
conditionMatch = value !== "";
break;
case FORM_CONSTANTS.INTERNAL_VALUES.VALUE_FN:
{
var valueFn = dep.valueFn;
if (valueFn) {
var fn = metaform.getFn(valueFn);
if (fn) {
conditionMatch = fn(value);
}
}
}
break;
case "$condition":
if (dep.condition) {
conditionMatch = ValidationUtil.parseCondition(metaform.form, dep.condition, dep.section || section);
}
break;
default:
conditionMatch = value === depValue;
}
}
_fieldDisplayed = conditionMatch;
metaform.setFieldDisplay(dep.section, field, conditionMatch);
}
var subfield = metaform.getField(dep.section, field);
_this3.handleDependencies(metaform, dep.section, field, subfield.value, _fieldDisplayed).then(function () {
return resolved.next();
});
} else {
resolved.next();
}
} else {
metaform.setFieldDisplay(dep.section, field, false);
var _subfield = metaform.getField(dep.section, field);
_this3.handleDependencies(metaform, dep.section, field, _subfield.value, false).then(function () {
return resolved.next();
});
}
}
break;
case "load":
{
if (value && dep.url) {
var _field2 = dep.field;
var queryParams = dep.queryParams || [];
metaform.setFieldOptions(dep.section, _field2, []);
metaform.api("get", dep.url, queryParams, value, section).then(function (response) {
var results = dep.responseKey ? response[dep.responseKey] : response;
var newResults = [];
if (dep.labelKey && dep.valueKey) {
newResults = results.map(function (r) {
return {
label: r[dep.labelKey],
value: r[dep.valueKey],
ref: r
};
});
} else {
newResults = results;
}
metaform.setFieldOptions(dep.section, _field2, newResults);
resolved.next();
})["catch"](function () {
resolved.next();
});
} else {
resolved.next();
}
}
break;
case "loadOptions":
case "load_options":
{
var _field3 = dep.field;
var valueMap = dep.valueMap;
if (valueMap !== undefined) {
if (valueMap[value]) {
metaform.setFieldOptions(dep.section, _field3, valueMap[value]);
}
}
resolved.next();
}
break;
case "enabled":
{
var _field4 = dep.field;
metaform.setFieldDisabled(dep.section, _field4, value !== dep.value);
resolved.next();
}
break;
case "equals":
{
var _field5 = dep.field;
if (value === dep.value) {
metaform.setField(dep.section, _field5, dep.currentValue);
} else if (dep.resetValue !== undefined) {
metaform.setField(dep.section, _field5, dep.resetValue);
}
resolved.next();
}
break;
case "change":
{
var changeType = dep.changeType;
if (changeType) {
switch (changeType) {
case "setter":
if (dep.valueMap !== undefined && dep.valueMap[value] !== undefined) {
metaform.setField(dep.section, dep.field, dep.valueMap[value]);
var _field6 = metaform.getField(dep.section, dep.field);
_this3.handleDependencies(metaform, dep.section, dep.field, dep.valueMap[value], _field6.display).then(function () {
return resolved.next();
});
} else {
resolved.next();
}
break;
default:
resolved.next();
}
} else {
resolved.next();
}
}
break;
case "validation":
{
var fieldProp = metaform.getFieldProp(dep.section, dep.field, dep.type);
fieldProp[dep.changeType] = dep.valueMap[value];
metaform.setFieldProp(dep.section, dep.field, dep.type, fieldProp);
resolved.next();
}
break;
case "patternMatchUrlLoader":
case "pattern_match_url_loader":
{
var _changeType = dep.changeType;
if (dep.pattern) {
var pattern = new RegExp(dep.pattern);
if (pattern.test(value)) {
if (_changeType) {
switch (_changeType) {
case "url_loader":
{
var itemConfig = {
type: "url_loader",
url: dep.url,
url_type: dep.url_type,
labelKey: dep.labelKey,
valueKey: dep.valueKey,
queryParams: dep.queryParams,
pathParams: dep.pathParams
};
metaform.getData(itemConfig, value, dep.section, FORM_CONSTANTS.INTERNAL_VALUES.INPUT).then(function (results) {
if (results && results.length > 0) {
var fieldDisplayType = metaform.getFieldProp(dep.section, dep.field, "displayType");
metaform.setDisplayTypeFieldProp(fieldDisplayType, dep.section, dep.field, results, dep);
}
resolved.next();
})["catch"](function (err) {
metaform.handleError(err, dep.section, dep.field);
resolved.next();
});
}
break;
default:
resolved.next();
}
} else {
resolved.next();
}
} else {
resolved.next();
}
} else {
resolved.next();
}
}
break;
case "prop_update":
if (dep.value !== undefined) {
if (value === dep.value) {
metaform.setFieldProp(dep.section, dep.field, dep.propName, dep.propValue);
resolved.next();
} else {
resolved.next();
}
} else if (dep.valueMap !== undefined) {
_this3.handleValueMap(metaform, value, dep, resolved);
}
break;
default:
resolved.next();
}
});
});
};
DependencyUtil.handleValueMap = function handleValueMap(metaform, value, dep, resolved) {
if (dep.valueMap !== undefined) {
var mappedValue = dep.valueMap[value];
var defaultMappedValue = dep.valueMap[FORM_CONSTANTS.INTERNAL_VALUES.DEFAULT];
var actualMappedValue = mappedValue != null ? mappedValue : defaultMappedValue;
if (actualMappedValue !== undefined) {
if (typeof actualMappedValue === "object") {
this.handleValueMapObject(metaform, value, dep, resolved, actualMappedValue);
} else {
metaform.setFieldProp(dep.section, dep.field, dep.propName, actualMappedValue);
resolved.next();
}
} else {
resolved.next();
}
}
};
DependencyUtil.handleValueMapObject = function handleValueMapObject(metaform, value, dep, resolved, mappedValue) {
var type = mappedValue.type;
if (type !== undefined) {
switch (type) {
case "fieldValue":
{
var ref = mappedValue.ref;
var fieldValue = metaform.getFieldProp(mappedValue.section || dep.section, ref, "value");
metaform.setFieldProp(dep.section, dep.field, dep.propName, fieldValue);
resolved.next();
}
break;
case "fieldProp":
{
var _ref = mappedValue.ref;
var prop = mappedValue.propName;
var _fieldValue = metaform.getFieldProp(mappedValue.section || dep.section, _ref, prop);
metaform.setFieldProp(dep.section, dep.field, dep.propName, _fieldValue);
resolved.next();
}
break;
default:
resolved.next();
}
} else {
resolved.next();
}
};
return DependencyUtil;
}();
var cssClassMap = {
md: "col-md-",
lg: "col-lg-",
sm: "col-sm-",
xs: "col-",
offset: "offset-",
"default": "col-md"
};
var FormUtils = /*#__PURE__*/function () {
function FormUtils() {}
FormUtils.getCssClassName = function getCssClassName(prop) {
if (!prop) {
return "";
}
var md = prop.md ? cssClassMap["md"] + prop.md : "";
var lg = prop.lg ? cssClassMap["lg"] + prop.lg : "";
var sm = prop.sm ? cssClassMap["sm"] + prop.sm : "";
var xs = prop.xs ? cssClassMap["xs"] + prop.xs : "";
var offset = prop.offset ? cssClassMap["offset"] + prop.offset : "";
return (offset + " " + xs + " " + sm + " " + md + " " + lg).trim();
};
FormUtils.isFormControl = function isFormControl(prop) {
if (prop.type === "section" || prop.type === "group") {
return false;
}
return true;
};
FormUtils.getVerticalSpacing = function getVerticalSpacing(theme) {
if (theme) {
switch (theme) {
case "mui":
return "my-2 my-md-3";
}
}
return "";
};
FormUtils.getAlignment = function getAlignment(align) {
return align ? "wrow-" + align : "";
};
FormUtils.getPadding = function getPadding(theme) {
if (theme) {
switch (theme) {
case "bootstrap":
return "py-md-3";
case "mui":
return "py-md-3";
}
}
return "";
};
FormUtils.getUUID = function getUUID(prefix) {
if (prefix === void 0) {
prefix = "";
}
var randomNum = Math.floor(Math.random() * 100 + Date.now());
return prefix + "_" + randomNum;
};
FormUtils.hasSections = function hasSections(fields) {
return fields.find(function (field) {
return field.meta.type === "section";
}) ? true : false;
};
FormUtils.getFormDefaultButtons = function getFormDefaultButtons() {
return [{
name: "submit",
meta: {
type: "submit",
displayName: "Save",
displayType: "button",
url: "",
displayProps: {
xs: 12,
md: 2
},
className: "btn-primary my-4 d-block w-100"
}
}];
};
FormUtils.getThemeProp = function getThemeProp(themeName, theme, prop) {
var _theme$mui, _theme$mui2;
if ((_theme$mui = theme.mui) !== null && _theme$mui !== void 0 && _theme$mui.tabs && (_theme$mui2 = theme.mui) !== null && _theme$mui2 !== void 0 && _theme$mui2.tabs[prop]) {
return theme.mui.tabs[prop];
}
return "";
};
FormUtils.getNormalizedFormData = function getNormalizedFormData(formData) {
var newFormData = {};
Object.keys(formData).forEach(function (key) {
newFormData[key] = {};
Object.keys(formData[key]).forEach(function (key2) {
newFormData[key][key2] = formData[key][key2].value;
});
});
return newFormData;
};
FormUtils.updateFormData = function updateFormData(formData, newFormData, formatter) {
Object.keys(formData).forEach(function (key) {
Object.keys(formData[key]).forEach(function (key2) {
var prop = formData[key][key2].prop;
if (prop) {
if (!newFormData[prop]) {
newFormData[prop] = {};
}
if (formatter[key2]) {
newFormData[prop][key2] = formatter[key2](formData[key][key2].value);
} else {
newFormData[prop][key2] = formData[key][key2].value;
}
} else {
if (prop !== null) {
if (formatter[key2]) {
newFormData[key2] = formatter[key2](formData[key][key2].value);
} else {
newFormData[key2] = formData[key][key2].value;
}
}
}
});
});
this.updateNestedFormData(newFormData);
return newFormData;
};
FormUtils.updateSectionFormData = function updateSectionFormData(formData, newFormData, formatter) {
Object.keys(formData).forEach(function (key) {
var prop = formData[key].prop;
if (prop) {
if (!newFormData[prop]) {
newFormData[prop] = {};
}
if (formatter[key]) {
newFormData[prop][key] = formatter[key](formData[key].value);
} else {
newFormData[prop][key] = formData[key].value;
}
} else {
if (prop !== null) {
if (formatter[key]) {
newFormData[key] = formatter[key](formData[key].value);
} else {
var displayType = formData[key].displayType || "default";
switch (displayType) {
case "file":
var files = formData[key].files;
if (files && files.length > 0) {
newFormData[key] = files;
} else {
newFormData[key] = formData[key].value;
}
break;
default:
newFormData[key] = formData[key].value;
}
}
}
}
});
this.updateNestedFormData(newFormData);
return newFormData;
};
FormUtils.updateNestedFormData = function updateNestedFormData(formData) {
var _this = this;
Object.keys(formData).forEach(function (key) {
if (typeof formData[key] === "object") {
var props = key.split("#");
if (props.length > 1) {
if (!formData[props[0]]) {
formData[props[0]] = {};
}
_this.updateNestedProp(formData[props[0]], props.slice(1), formData[key]);
delete formData[key];
}
}
});
};
FormUtils.updateNestedProp = function updateNestedProp(formData, props, value) {
if (props.length > 0) {
if (props.length === 1) {
formData[props[0]] = value;
} else {
if (!formData[props[0]]) {
formData[props[0]] = {};
}
this.updateNestedProp(formData[props[0]], props.slice(1), value);
}
}
};
FormUtils.getSearchValue = function getSearchValue(options, value) {
if (value !== undefined && options && options.length > 0) {
return options.find(function (option) {
return option.value === value;
});
}
return value;
};
FormUtils.getDataFromValueKey = function getDataFromValueKey(data, props) {
var values = props.split("#");
var nestedData = data;
if (values) {
values.forEach(function (val) {
nestedData = nestedData[val];
});
return nestedData;
}
return data;
};
FormUtils.updateParams = function updateParams(queryParams, eventType, currentValue) {
if (queryParams && eventType) {
var updatedQueryParams = [];
queryParams.forEach(function (param) {
var key = param[0],
val = param[1];
var actualVal = val;
if (val) {
switch (val) {
case "$input":
case "$initial":
actualVal = val === eventType ? currentValue : "";
break;
}
}
updatedQueryParams.push([key, actualVal]);
});
return updatedQueryParams;
}
return queryParams;
};
FormUtils.updateFieldProp = function updateFieldProp(field, prop, value) {
var props = prop.split("#");
if (props.length > 1) {
var newProp = props.reduce(function (acc, item, index) {
if (index === props.length - 1) {
acc[item] = value;
} else {
if (!acc[item]) {
acc[item] = {};
}
}
return acc[item];
}, field);
} else {
if (!field[prop]) {
field[prop] = {};
}
field[prop] = value;
}
};
FormUtils.getDateString = function getDateString(date) {
var offset = date.getTimezoneOffset() * 60000;
var dateWithOffset = new Date(date.getTime() - offset);
return dateWithOffset.toISOString().substring(0, 10);
};
FormUtils.getLocalDateStringFormat = function getLocalDateStringFormat(inputDateString, inputFormat) {
if (inputDateString && inputFormat === DEFAULT_DATE_FORMAT) {
try {
var parts = inputDateString.split("/");
var mm = parts[0];
var dd = parts[1];
var yy = parts[2];
return dd + "/" + mm + "/" + yy;
} catch (error) {
return inputDateString;
}
}
return inputDateString;
};
FormUtils.cleanupSchema = function cleanupSchema(schema) {
var newFields = [];
schema.fields && schema.fields.forEach(function (field) {
if (field) {
newFields.push(field);
}
});
schema.fields = newFields;
return schema;
};
FormUtils.createFileInput = function createFileInput(fileWidthClass, fieldName, accept, displayLabel, onChangeCallback) {
var ele = document.createElement("input");
ele.setAttribute("type", "file");
ele.className = "position-absolute opacity-0 " + fileWidthClass + " h-100";
ele.setAttribute("name", fieldName);
ele.setAttribute("accept", accept || "");
ele.setAttribute("title", displayLabel || "");
ele.addEventListener("change", onChangeCallback);
return ele;
};
FormUtils.resolveButtonDependencies = function resolveButtonDependencies(deps, page) {
if (deps && deps.exists) {
var ref = deps.exists.ref;
if (!ref) {
return true;
}
switch (ref) {
case "page_number":
var pageNumber = page.pageNumber;
var pageNumberFromDependency = parseInt(deps.exists.value);
if (pageNumberFromDependency === pageNumber) {
return true;
}
return false;
}
}
return true;
};
FormUtils.getIconNameByPosition = function getIconNameByPosition(positionType, allIcons) {
if (allIcons) {
var allIconKeys = Object.keys(allIcons);
var iconMatch = allIconKeys.find(function (name) {
return allIcons[name].type === positionType;
});
return iconMatch;
}
return "";
};
return FormUtils;
}();
var MetaformUtil = /*#__PURE__*/function () {
function MetaformUtil() {}
MetaformUtil.getDefaultValidation = function getDefaultValidation(displayType, validation) {
if (displayType) {
switch (displayType) {
case "email":
{
var _emailValidation, _emailValidation2, _emailValidation2$pat;
var emailValidation = validation;
if (!emailValidation) {
emailValidation = {};
}
emailValidation.pattern = ((_emailValidation = emailValidation) === null || _emailValidation === void 0 ? void 0 : _emailValidation.pattern) || EMAIL_PATTERN;
if (!emailValidation.pattern_detail) {
emailValidation.pattern_detail = {};
}
emailValidation.pattern_detail.errorMsg = ((_emailValidation2 = emailValidation) === null || _emailValidation2 === void 0 ? void 0 : (_emailValidation2$pat = _emailValidation2.pattern_detail) === null || _emailValidation2$pat === void 0 ? void 0 : _emailValidation2$pat.errorMsg) || MSGS.ERROR_MSG.EMAIL_INVALID;
return emailValidation;
}
}
}
return validation;
};
return MetaformUtil;
}();
var MetaformError = /*#__PURE__*/function (_Error) {
_inheritsLoose(MetaformError, _Error);
function MetaformError(msg, details) {
var _this;
_this = _Error.call(this, msg) || this;
_this.details = details;
return _this;
}
return MetaformError;
}( /*#__PURE__*/_wrapNativeSuper(Error));
var Theme = function Theme(theme) {
this.type = theme.type;
this.sectionLayout = theme.sectionLayout;
this.mui = theme.mui;
this.bootstrap = theme.bootstrap;
};
var MetaForm = /*#__PURE__*/function () {
function MetaForm(schema, eventEmitter) {
var _schema$theme, _schema$theme2, _schema$theme3, _schema$theme4;
this.schema = schema;
this.eventEmitter = eventEmitter;
this.form = {};
this.rest = new Rest(schema.rest);
var themeType = (schema === null || schema === void 0 ? void 0 : (_schema$theme = schema.theme) === null || _schema$theme === void 0 ? void 0 : _schema$theme.type) || "default";
var sectionLayout = (schema === null || schema === void 0 ? void 0 : (_schema$theme2 = schema.theme) === null || _schema$theme2 === void 0 ? void 0 : _schema$theme2.sectionLayout) || "default";
this.theme = new Theme({
type: themeType,
sectionLayout: sectionLayout,
mui: schema === null || schema === void 0 ? void 0 : (_schema$theme3 = schema.theme) === null || _schema$theme3 === void 0 ? void 0 : _schema$theme3.mui,
bootstrap: schema === null || schema === void 0 ? void 0 : (_schema$theme4 = schema.theme) === null || _schema$theme4 === void 0 ? void 0 : _schema$theme4.bootstrap
});
this.page = new Page(false, 1);
}
var _proto = MetaForm.prototype;
_proto.init = function init() {
var _this = this;
var schema = this.schema;
var totalSections = 0;
if (schema.fields) {
var hasSections = FormUtils.hasSections(schema.fields);
if (hasSections) {
schema.fields.forEach(function (section) {
_this.setSection(section.name);
section.fields && section.fields.forEach(function (field) {
_this.initField(section.name, field);
});
totalSections++;
});
DependencyUtil.initDependencies(this.form, "", schema.fields);
this.applyDependencies("", schema.fields);
} else {
var section = "default";
this.setSection(section);
schema.fields && schema.fields.forEach(function (field) {
_this.initField(section, field);
});
DependencyUtil.initDependencies(this.form, section, schema.fields);
this.applyDepende