UNPKG

reactjs-query-builder

Version:
351 lines (302 loc) 15.3 kB
'use strict'; exports.__esModule = true; exports.getWidgetForFieldOp = exports.getValueSourcesForFieldOp = exports.getWidgetsForFieldOp = exports.getValueLabel = exports.getFieldWidgetConfig = exports.getOperatorConfig = exports.getFieldPathLabels = exports.getFieldPath = exports.getFirstOperator = exports.getOperatorsForField = exports.getFirstField = exports.getFieldConfig = exports.getFieldRawConfig = exports.extendConfig = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _last = require('lodash/last'); var _last2 = _interopRequireDefault(_last); var _pick = require('lodash/pick'); var _pick2 = _interopRequireDefault(_pick); var _pickBy = require('lodash/pickBy'); var _pickBy2 = _interopRequireDefault(_pickBy); var _merge = require('lodash/merge'); var _merge2 = _interopRequireDefault(_merge); var _mergeWith = require('lodash/mergeWith'); var _mergeWith2 = _interopRequireDefault(_mergeWith); var _cloneDeep = require('lodash/cloneDeep'); var _cloneDeep2 = _interopRequireDefault(_cloneDeep); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var extendConfig = exports.extendConfig = function extendConfig(config) { //operators, defaultOperator - merge //widgetProps (including valueLabel, valuePlaceholder, hideOperator, operatorInlineLabel) - concrete by widget //extend 'types' path for (var type in config.types) { var typeConfig = config.types[type]; var operators = null, defaultOperator = null; typeConfig.mainWidget = typeConfig.mainWidget || Object.keys(typeConfig.widgets).filter(function (w) { return w != 'field'; })[0]; for (var widget in typeConfig.widgets) { var typeWidgetConfig = typeConfig.widgets[widget]; if (typeWidgetConfig.operators) { if (!operators) operators = []; operators = operators.concat(typeWidgetConfig.operators.slice()); } if (typeWidgetConfig.defaultOperator) defaultOperator = typeWidgetConfig.defaultOperator; if (widget == typeConfig.mainWidget) { typeWidgetConfig = (0, _merge2.default)({}, { widgetProps: typeConfig.mainWidgetProps || {} }, typeWidgetConfig); } typeConfig.widgets[widget] = typeWidgetConfig; } if (!typeConfig.valueSources) typeConfig.valueSources = Object.keys(config.settings.valueSourcesInfo); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = typeConfig.valueSources[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var valueSrc = _step.value; if (valueSrc != 'value' && !typeConfig.widgets[valueSrc]) { typeConfig.widgets[valueSrc] = {}; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } if (!typeConfig.operators && operators) typeConfig.operators = Array.from(new Set(operators)); //unique if (!typeConfig.defaultOperator && defaultOperator) typeConfig.defaultOperator = defaultOperator; config.types[type] = typeConfig; } //extend 'fields' path function _extendFieldConfig(fieldConfig) { var operators = null, defaultOperator = null; var typeConfig = config.types[fieldConfig.type]; if (fieldConfig.type != '!struct') { if (!fieldConfig.widgets) fieldConfig.widgets = {}; fieldConfig.mainWidget = fieldConfig.mainWidget || typeConfig.mainWidget; fieldConfig.valueSources = fieldConfig.valueSources || typeConfig.valueSources; for (var _widget in typeConfig.widgets) { var fieldWidgetConfig = fieldConfig.widgets[_widget] || {}; if (fieldWidgetConfig.operators) { if (!operators) operators = []; operators = operators.concat(fieldWidgetConfig.operators.slice()); } if (fieldWidgetConfig.defaultOperator) defaultOperator = fieldWidgetConfig.defaultOperator; if (_widget == fieldConfig.mainWidget) { fieldWidgetConfig = (0, _merge2.default)({}, { widgetProps: fieldConfig.mainWidgetProps || {} }, fieldWidgetConfig); } fieldConfig.widgets[_widget] = fieldWidgetConfig; } if (!fieldConfig.operators && operators) fieldConfig.operators = Array.from(new Set(operators)); if (!fieldConfig.defaultOperator && defaultOperator) fieldConfig.defaultOperator = defaultOperator; } }; function _extendFieldsConfig(subconfig) { for (var field in subconfig) { _extendFieldConfig(subconfig[field]); if (subconfig[field].subfields) { _extendFieldsConfig(subconfig[field].subfields); } } } _extendFieldsConfig(config.fields); //console.log(config); return config; }; var getFieldRawConfig = exports.getFieldRawConfig = function getFieldRawConfig(field, config) { if (!field || field == ':empty:') return null; var fieldSeparator = config.settings.fieldSeparator; var parts = field.split(fieldSeparator); var fields = config.fields; var fieldConfig = null; for (var i = 0; i < parts.length; i++) { var part = parts[i]; var tmpFieldConfig = fields[part]; if (!tmpFieldConfig) return null; if (i == parts.length - 1) { fieldConfig = tmpFieldConfig; } else { fields = tmpFieldConfig.subfields; if (!fields) return null; } } return fieldConfig; }; var getFieldConfig = exports.getFieldConfig = function getFieldConfig(field, config) { if (!field || field == ':empty:') return null; var fieldConfig = getFieldRawConfig(field, config); if (!fieldConfig) return null; //throw new Error("Can't find field " + field + ", please check your config"); //merge, but don't merge operators (rewrite instead) var typeConfig = config.types[fieldConfig.type] || {}; var ret = (0, _mergeWith2.default)({}, typeConfig, fieldConfig || {}, function (objValue, srcValue, key, object, source, stack) { if (Array.isArray(objValue)) { return srcValue; } }); return ret; }; var getFirstField = exports.getFirstField = function getFirstField(config) { var fieldSeparator = config.settings.fieldSeparator; var firstField = null, key = null, keysPath = []; if (Object.keys(config.fields).length > 0) { key = Object.keys(config.fields)[0]; firstField = config.fields[key]; keysPath.push(key); while (firstField.type == '!struct') { var subfields = firstField.subfields; if (!subfields || !Object.keys(subfields).length) { firstField = key = null; break; } key = Object.keys(subfields)[0]; keysPath.push(key); firstField = subfields[key]; } } return keysPath.join(fieldSeparator); }; var getOperatorsForField = exports.getOperatorsForField = function getOperatorsForField(config, field) { var fieldConfig = getFieldConfig(field, config); var fieldOps = fieldConfig ? fieldConfig.operators : []; return fieldOps; }; var getFirstOperator = exports.getFirstOperator = function getFirstOperator(config, field) { var fieldOps = getOperatorsForField(config, field); return fieldOps ? fieldOps[0] : null; }; var getFieldPath = exports.getFieldPath = function getFieldPath(field, config) { if (!field || field == ':empty:') return null; var fieldSeparator = config.settings.fieldSeparator; return field.split(fieldSeparator).map(function (curr, ind, arr) { return arr.slice(0, ind + 1); }).map(function (parts) { return parts.join(fieldSeparator); }); }; var getFieldPathLabels = exports.getFieldPathLabels = function getFieldPathLabels(field, config) { if (!field || field == ':empty:') return null; var fieldSeparator = config.settings.fieldSeparator; return field.split(fieldSeparator).map(function (curr, ind, arr) { return arr.slice(0, ind + 1); }).map(function (parts) { return parts.join(fieldSeparator); }).map(function (part) { var cnf = getFieldConfig(part, config); return cnf && cnf.label || (0, _last2.default)(part.split(fieldSeparator)); }); }; var getOperatorConfig = exports.getOperatorConfig = function getOperatorConfig(config, operator) { var field = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; if (!operator) return null; var opConfig = config.operators[operator]; if (field) { var fieldConfig = getFieldConfig(field, config); var widget = getWidgetForFieldOp(config, field, operator); var fieldWidgetConfig = (fieldConfig && fieldConfig.widgets ? fieldConfig.widgets[widget] : {}) || {}; var fieldWidgetOpProps = (fieldWidgetConfig.opProps || {})[operator]; var mergedOpConfig = (0, _merge2.default)({}, opConfig, fieldWidgetOpProps); return mergedOpConfig; } else { return opConfig; } }; var getFieldWidgetConfig = exports.getFieldWidgetConfig = function getFieldWidgetConfig(config, field, operator) { var widget = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var valueSrc = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; if (!field || !(operator || widget)) return null; var fieldConfig = getFieldConfig(field, config); if (!widget) widget = getWidgetForFieldOp(config, field, operator, valueSrc); var widgetConfig = config.widgets[widget] || {}; var fieldWidgetConfig = (fieldConfig && fieldConfig.widgets ? fieldConfig.widgets[widget] : {}) || {}; var fieldWidgetProps = fieldWidgetConfig.widgetProps || {}; var mergedConfig = (0, _merge2.default)({}, widgetConfig, fieldWidgetProps); return mergedConfig; }; var getValueLabel = exports.getValueLabel = function getValueLabel(config, field, operator, delta) { var valueSrc = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; var isSpecialRange = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; var fieldWidgetConfig = getFieldWidgetConfig(config, field, operator, null, valueSrc) || {}; var mergedOpConfig = getOperatorConfig(config, operator, field) || {}; var cardinality = isSpecialRange ? 1 : mergedOpConfig.cardinality; var ret = null; if (cardinality > 1) { var valueLabels = mergedOpConfig.valueLabels; if (valueLabels) ret = valueLabels[delta]; if (ret && (typeof ret === 'undefined' ? 'undefined' : _typeof(ret)) != 'object') { ret = { label: ret, placeholder: ret }; } if (!ret) { ret = { label: (config.settings.valueLabel || "Value") + " " + (delta + 1), placeholder: (config.settings.valuePlaceholder || "Value") + " " + (delta + 1) }; } } else { ret = { label: fieldWidgetConfig.valueLabel || config.settings.valueLabel || "Value", placeholder: fieldWidgetConfig.valuePlaceholder || config.settings.valuePlaceholder || "Value" }; } return ret; }; function _getWidgetsAndSrcsForFieldOp(config, field, operator) { var valueSrc = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var widgets = []; var valueSrcs = []; if (!field || !operator) return { widgets: widgets, valueSrcs: valueSrcs }; var fieldConfig = getFieldConfig(field, config); //const typeConfig = config.types[fieldConfig.type] || {}; var opConfig = config.operators[operator]; if (fieldConfig && fieldConfig.widgets) { var _loop = function _loop(widget) { var widgetConfig = fieldConfig.widgets[widget]; var widgetValueSrc = config.widgets[widget].valueSrc; var canAdd = widgetConfig.operators ? widgetConfig.operators.indexOf(operator) != -1 : valueSrc != 'value'; canAdd = canAdd && (!valueSrc || valueSrc == widgetValueSrc); if (opConfig.isUnary && widgetValueSrc != 'value') canAdd = false; if (canAdd) { widgets.push(widget); if (fieldConfig.valueSources && fieldConfig.valueSources.indexOf(widgetValueSrc) != -1 && !valueSrcs.find(function (v) { return v == widgetValueSrc; })) valueSrcs.push(widgetValueSrc); } }; for (var widget in fieldConfig.widgets) { _loop(widget); } } widgets.sort(function (w1, w2) { var w1Main = fieldConfig.preferWidgets ? fieldConfig.preferWidgets.indexOf(w1) != -1 : w1 == fieldConfig.mainWidget; var w2Main = fieldConfig.preferWidgets ? fieldConfig.preferWidgets.indexOf(w2) != -1 : w2 == fieldConfig.mainWidget; if (w1 != w2) { return w1Main ? -1 : +1; } return 0; }); return { widgets: widgets, valueSrcs: valueSrcs }; }; var getWidgetsForFieldOp = exports.getWidgetsForFieldOp = function getWidgetsForFieldOp(config, field, operator) { var valueSrc = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var _getWidgetsAndSrcsFor = _getWidgetsAndSrcsForFieldOp(config, field, operator, valueSrc), widgets = _getWidgetsAndSrcsFor.widgets, valueSrcs = _getWidgetsAndSrcsFor.valueSrcs; return widgets; }; var getValueSourcesForFieldOp = exports.getValueSourcesForFieldOp = function getValueSourcesForFieldOp(config, field, operator) { var _getWidgetsAndSrcsFor2 = _getWidgetsAndSrcsForFieldOp(config, field, operator, null), widgets = _getWidgetsAndSrcsFor2.widgets, valueSrcs = _getWidgetsAndSrcsFor2.valueSrcs; return valueSrcs; }; var getWidgetForFieldOp = exports.getWidgetForFieldOp = function getWidgetForFieldOp(config, field, operator) { var valueSrc = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var _getWidgetsAndSrcsFor3 = _getWidgetsAndSrcsForFieldOp(config, field, operator, valueSrc), widgets = _getWidgetsAndSrcsFor3.widgets, valueSrcs = _getWidgetsAndSrcsFor3.valueSrcs; var widget = null; if (widgets.length) widget = widgets[0]; return widget; };