meraproject/lib/js/bws/react/form/class/form.js

375 lines
8.9 KiB
JavaScript
Raw Normal View History

var Form,
indexOf = [].indexOf;
import Input from './input.js';
import autoBind from 'react-autobind';
export default Form = function () {
class Form extends React.Component {
constructor(props) {
var isAjaxFast, ref, ref1;
super(props);
isAjaxFast = props.ajaxFast === true;
this.state = {
inputs: props.inputs != null ? props.inputs : props.inputs = [],
values: props.values != null ? props.values : props.values = [],
//onSubmit : props.onSubmit ?= null
ajaxFast: isAjaxFast,
ajaxInitData: (ref = props.ajaxInitData) != null ? ref : {},
loading: isAjaxFast,
controller: (ref1 = props.controller) != null ? ref1 : '',
hideSubmitAndClose: props.hideSubmitAndClose === true
}; //this.onSubmit = this.onSubmit.bind(this)
//this.onSubmitAndClose = this.onSubmitAndClose.bind(this)
//this.onCancel = this.onCancel.bind(this)
autoBind(this);
this.inputs = {};
this.form = null;
}
componentDidMount() {
var ajaxFast, ajaxInitData, controller, t;
t = this;
({
ajaxFast,
controller,
ajaxInitData
} = this.state);
if (ajaxFast) {
return API(controller + '/getCardInfo/', {
id: 0,
dataType: 'JSON',
init_data: ajaxInitData
}, function (data) {
return t.setState({
loading: false,
inputs: data.form
}, t.checkRules);
});
} else {
return this.checkRules();
}
}
onCancel() {
var base;
return typeof (base = this.props).onCancel === "function" ? base.onCancel() : void 0;
}
getValues() {
var i, res;
res = {};
for (i in this.inputs) {
res[i] = this.inputs[i].getValue();
}
return res;
}
onSubmitAndClose(e) {
var base, values;
if (e != null) {
e.preventDefault();
}
values = this.getValues();
if (typeof (base = this.props).onSubmitAndClose === "function") {
base.onSubmitAndClose({
form: this.form,
values
});
}
return false;
}
onSubmit(e) {
var base, values;
if (e != null) {
e.preventDefault();
}
values = this.getValues();
if (typeof (base = this.props).onSubmit === "function") {
base.onSubmit({
form: this.form,
values
});
}
return false;
}
onChange() {
return this.checkRules(name);
}
onKeyUp(name) {
return this.checkRules(name, 'onkeyup');
}
checkRule() {}
doRuleActions(actions, reverse = false) {
var action, input, name, results, x;
results = [];
for (name in actions) {
action = actions[name];
input = this.inputs[name];
if (input != null && input !== void 0) {
console.log('action', action);
switch (action.action) {
case "show":
if (reverse) {
input.hide();
} else {
input.show();
}
break;
case "hide":
if (reverse) {
input.show();
} else {
input.hide();
}
}
console.log('typeof', typeof action.js_function);
if (typeof action.js_function === 'string') {
x = eval(action.js_function);
console.log('XXXX', x);
results.push(x({
values: this.getValues(),
inputs: this.inputs,
form: this
}));
} else {
results.push(void 0);
}
} else {
results.push(void 0);
}
}
return results;
}
checkRules(_name = null, _operator = null) {
var _rules, name, results, rule, rules, value, values;
values = this.getValues();
if (this.rules === void 0) {
return null;
}
_rules = this.rules;
if (_name != null && _name !== void 0) {
_rules = {};
if (this.rules[_name] !== void 0) {
_rules[_name] = this.rules[_name];
}
}
results = [];
for (name in _rules) {
rules = _rules[name];
value = values[name];
results.push(function () {
var k, len, results1;
results1 = [];
for (k = 0, len = rules.length; k < len; k++) {
rule = rules[k];
if (_operator !== null) {
if (rule.operator !== _operator) {
continue;
}
}
switch (rule.operator) {
case "in":
results1.push(this.doRuleActions(rule.actions, indexOf.call(rule.value, value) < 0));
break;
case "onkeyup":
results1.push(this.doRuleActions(rule.actions));
break;
default:
results1.push(void 0);
}
}
return results1;
}.call(this));
}
return results;
}
addInput(key, data, name, value) {
var _this = this;
var hideSubmitAndClose;
({
hideSubmitAndClose
} = this.state);
return /*#__PURE__*/React.createElement(Input, {
key: key,
data: data,
value: value,
name: name,
ref: function (i) {
return _this.inputs[name] = i;
},
onSubmit: this.onSubmit,
onSubmitAndClose: this.onSubmitAndClose,
hideSubmitAndClose: hideSubmitAndClose,
onChange: this.onChange,
onKeyUp: this.onKeyUp
});
}
renderInput(v, index) {
var input, inputs, isHidden, j, name, options, ref, ref1, ref2, row_classes, value; // Если ничего не передано, то и вернём ничего.
if (v === null) {
return null;
}
row_classes = '';
inputs = [];
isHidden = false;
if (v[Form.VIEW] === Form.TITLE) {
return null;
}
if (v[Form.VIEW] === Form.RULES) {
this.rules = v[Form.RULES];
return null;
}
if (v[Form.VIEW] === Form.ROW) {
row_classes = (ref = v[Form.ROW_CLASSES]) != null ? ref : '';
if (v[Form.COLS] != null) {
for (j in v[Form.COLS]) {
input = v[Form.COLS][j];
if (input !== null) {
if (input[Form.VIEW] === Form.TITLE) {
inputs.push( /*#__PURE__*/React.createElement("div", {
class: "c"
}, /*#__PURE__*/React.createElement("div", {
class: "h1"
}, input[Form.TITLE_TEXT])));
} else {
name = input[Form.KEY_VALUE];
if (name === void 0) {
options = input[Form.INPUT_OPT];
name = options[Input.NAME];
}
value = this.state.values[name];
inputs.push(this.addInput(j, input, name, value));
}
}
}
}
} else {
name = (ref1 = (ref2 = v.name) != null ? ref2 : v[Form.KEY_VALUE]) != null ? ref1 : void 0;
value = v.value;
if (name === void 0) {
console.warn('В форме поле ввода без аттрибута name', v);
name = "input" + new Date().getTime();
}
if (value === void 0) {
value = this.state.values[name];
}
isHidden = v[Form.TYPE] === 1; // hidden type
inputs.push(this.addInput(index, v, name, value));
}
return /*#__PURE__*/React.createElement("div", {
className: "row2 " + row_classes
}, inputs);
}
render() {
var _this2 = this;
var inputs, loading; //console.log('render',this.state.inputs)
({
loading
} = this.state);
if (loading) {
return /*#__PURE__*/React.createElement("div", null, "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...");
}
inputs = this.state.inputs.map(this.renderInput.bind(this));
return /*#__PURE__*/React.createElement("form", {
onSubmit: this.onSubmit,
ref: function (i) {
return _this2.form = i;
}
}, inputs, /*#__PURE__*/React.createElement("div", {
className: "res"
}));
}
}
;
Form.VALUES = 1;
Form.INPUTS = 2;
Form.INPUT = 3;
Form.KEY_VALUE = 4;
Form.TYPE = 5;
Form.LABEL = 6;
Form.VIEW = 7;
Form.INPUT_OPT = 8;
Form.ON_SUBMIT = 9;
Form.ROW = 10;
Form.ROW_CLASSES = 11;
Form.COL_CLASSES = 12;
Form.COLS = 13;
Form.CONTROLLER = 14;
Form.ACTION = 15;
Form.COL_CLASSES_ALL_FORCE = 16;
Form.TITLE = 17;
Form.TITLE_TEXT = 18;
Form.BUTTONS = 19;
Form.BUTTON = 20;
Form.INPUT_ALL_THEME_FORCE = 21;
Form.FORM_WRAP = 22;
Form.RULES = 23;
return Form;
}.call(this);
window.Form = Form;
//# sourceMappingURL=form.js.map