maycur-business
Version:
maycur business react components of web
201 lines (157 loc) • 4.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _formula = _interopRequireDefault(require("./formula"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function isString(val) {
return typeof val === 'string';
}
function has() {
var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var key = arguments.length > 1 ? arguments[1] : undefined;
return obj.hasOwnProperty(key);
}
function remove() {
var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var filterCb = arguments.length > 1 ? arguments[1] : undefined;
var index;
if (!Array.isArray(array)) return;
array.forEach(function (val, idx) {
if (typeof filterCb === 'function' && filterCb(val)) {
index = idx;
}
});
if (index >= 0) {
array.splice(index, 1);
}
}
function isObject(obj) {
if (obj !== null && Object !== undefined) {
return _typeof(obj) === 'object';
}
}
var _ = {
isString: isString,
remove: remove,
has: has,
isObject: isObject
};
var innerCustomFn = ['getObj'];
var FormulaParser = function FormulaParser() {
var _this = this;
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, FormulaParser);
this.setVariable = function (name, value) {
try {
_this.parser.setVariable(name, value);
_this.pool[name] = value;
_this.modifyVariablesList(name);
} catch (err) {
console.log(err);
}
};
this.setFunction = function (name, fn) {
if (typeof fn !== 'function') {
console.log('the value is not function');
return;
}
if (innerCustomFn.includes(name)) {
console.log('the name is occupied by inner function');
return;
}
try {
_this.parser.setFunction(name, fn);
_this.modifyFunctionsList(name);
} catch (err) {
console.log(err);
}
};
this.modifyVariablesList = function (name) {
var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'add';
if (!_.isString(name)) return;
switch (action) {
case 'add':
if (!_this.variablesList.includes(name)) {
_this.variablesList.push(name);
}
break;
case 'remove':
if (_this.variablesList.includes(name)) {
_.remove(_this.variablesList, function (val) {
return val === name;
});
}
break;
default:
break;
}
};
this.modifyFunctionsList = function (name) {
var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'add';
if (!_.isString(name)) return;
switch (action) {
case 'add':
if (!_this.functionsList.includes(name)) {
_this.functionsList.push(name);
}
break;
case 'remove':
if (_this.functionsList.includes(name)) {
_.remove(_this.functionsList, function (val) {
return val === name;
});
}
break;
default:
break;
}
};
this.removeVariable = function (name) {
if (_.isString(name)) {
delete _this.parser.variables[name];
_this.modifyVariablesList(name, 'remove');
}
};
this.removeFunction = function (name) {
if (_.isString(name)) {
delete _this.parser.functions[name];
_this.modifyFunctionsList(name, 'remove');
}
};
this.parse = function (express) {
_this.synchVariableValues(_this.pool);
return _this.parser.parse(express);
};
this.synchVariableValues = function (nextData) {
if (nextData && _.isObject(nextData)) {
_this.variablesList.forEach(function (key) {
if (_.has(nextData, key)) {
_this.setVariable(key, nextData[key]);
}
});
}
};
this.updateDataPool = function () {
var partial = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var clonePartial = {};
Object.keys(partial).forEach(function (key) {
clonePartial[key] = partial[key];
_this.setVariable(key, partial[key]);
});
};
var compat = props.compat;
this.pool = {};
this.parser = new _formula["default"]({
compat: compat
});
this.variablesList = [];
this.functionsList = [];
}
/* 设置变量 */
;
var _default = FormulaParser;
exports["default"] = _default;