@coocoon/react-awesome-query-builder
Version:
User-friendly query builder for React. Demo: https://ukrbublik.github.io/react-awesome-query-builder
431 lines (384 loc) • 19.9 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _RuleContainer = _interopRequireDefault(require("../containers/RuleContainer"));
var _Draggable = _interopRequireDefault(require("../containers/Draggable"));
var _OperatorWrapper = _interopRequireDefault(require("../rule/OperatorWrapper"));
var _FieldWrapper = _interopRequireDefault(require("../rule/FieldWrapper"));
var _Widget = _interopRequireDefault(require("../rule/Widget"));
var _OperatorOptions = _interopRequireDefault(require("../rule/OperatorOptions"));
var _configUtils = require("../../utils/configUtils");
var _ruleUtils = require("../../utils/ruleUtils");
var _reactUtils = require("../../utils/reactUtils");
var _utils = require("../utils");
var _dec, _class, _class2;
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
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; } }
var classNames = require("classnames");
var Rule = (_dec = (0, _Draggable["default"])("rule"), (0, _RuleContainer["default"])(_class = _dec(_class = (0, _utils.ConfirmFn)(_class = (_class2 = /*#__PURE__*/function (_PureComponent) {
(0, _inherits2["default"])(Rule, _PureComponent);
var _super = _createSuper(Rule);
function Rule(props) {
var _this;
(0, _classCallCheck2["default"])(this, Rule);
_this = _super.call(this, props);
(0, _reactUtils.useOnPropsChanged)((0, _assertThisInitialized2["default"])(_this));
_this.removeSelf = _this.removeSelf.bind((0, _assertThisInitialized2["default"])(_this));
_this.setLock = _this.setLock.bind((0, _assertThisInitialized2["default"])(_this));
_this.onPropsChanged(props);
return _this;
}
(0, _createClass2["default"])(Rule, [{
key: "onPropsChanged",
value: function onPropsChanged(nextProps) {
var prevProps = this.props;
var keysForMeta = ["selectedField", "selectedOperator", "config", "reordableNodesCnt", "isLocked"];
var needUpdateMeta = !this.meta || keysForMeta.map(function (k) {
return nextProps[k] !== prevProps[k];
}).filter(function (ch) {
return ch;
}).length > 0;
if (needUpdateMeta) {
this.meta = this.getMeta(nextProps);
}
}
}, {
key: "getMeta",
value: function getMeta(_ref) {
var selectedField = _ref.selectedField,
selectedOperator = _ref.selectedOperator,
config = _ref.config,
reordableNodesCnt = _ref.reordableNodesCnt,
isLocked = _ref.isLocked;
var selectedFieldPartsLabels = (0, _ruleUtils.getFieldPathLabels)(selectedField, config);
var selectedFieldConfig = (0, _configUtils.getFieldConfig)(config, selectedField);
var isSelectedGroup = selectedFieldConfig && selectedFieldConfig.type == "!struct";
var isFieldAndOpSelected = selectedField && selectedOperator && !isSelectedGroup;
var selectedOperatorConfig = (0, _configUtils.getOperatorConfig)(config, selectedOperator, selectedField);
var selectedOperatorHasOptions = selectedOperatorConfig && selectedOperatorConfig.options != null;
var selectedFieldWidgetConfig = (0, _configUtils.getFieldWidgetConfig)(config, selectedField, selectedOperator) || {};
var hideOperator = selectedFieldWidgetConfig.hideOperator;
var showDragIcon = config.settings.canReorder && reordableNodesCnt > 1 && !isLocked;
var showOperator = selectedField && !hideOperator;
var showOperatorLabel = selectedField && hideOperator && selectedFieldWidgetConfig.operatorInlineLabel;
var showWidget = isFieldAndOpSelected;
var showOperatorOptions = isFieldAndOpSelected && selectedOperatorHasOptions;
return {
selectedFieldPartsLabels: selectedFieldPartsLabels,
selectedFieldWidgetConfig: selectedFieldWidgetConfig,
showDragIcon: showDragIcon,
showOperator: showOperator,
showOperatorLabel: showOperatorLabel,
showWidget: showWidget,
showOperatorOptions: showOperatorOptions
};
}
}, {
key: "setLock",
value: function setLock(lock) {
this.props.setLock(lock);
}
}, {
key: "removeSelf",
value: function removeSelf() {
var _this2 = this;
var confirmFn = this.props.confirmFn;
var _this$props$config$se = this.props.config.settings,
renderConfirm = _this$props$config$se.renderConfirm,
confirmOptions = _this$props$config$se.removeRuleConfirmOptions;
var doRemove = function doRemove() {
_this2.props.removeSelf();
};
if (confirmOptions && !this.isEmptyCurrentRule()) {
renderConfirm(_objectSpread(_objectSpread({}, confirmOptions), {}, {
onOk: doRemove,
onCancel: null,
confirmFn: confirmFn
}));
} else {
doRemove();
}
}
}, {
key: "isEmptyCurrentRule",
value: function isEmptyCurrentRule() {
return !(this.props.selectedField !== null && this.props.selectedOperator !== null && this.props.value.filter(function (val) {
return val !== undefined;
}).size > 0);
}
}, {
key: "renderField",
value: function renderField() {
var _this$props = this.props,
config = _this$props.config,
isLocked = _this$props.isLocked;
var immutableFieldsMode = config.settings.immutableFieldsMode;
return /*#__PURE__*/_react["default"].createElement(_FieldWrapper["default"], {
key: "field",
classname: "rule--field",
config: config,
selectedField: this.props.selectedField,
setField: !immutableFieldsMode ? this.props.setField : _utils.dummyFn,
parentField: this.props.parentField,
readonly: immutableFieldsMode || isLocked,
id: this.props.id,
groupId: this.props.groupId,
isFunc: this.props.isFunc,
args: this.props.args
});
}
}, {
key: "renderOperator",
value: function renderOperator() {
var _this$props2 = this.props,
config = _this$props2.config,
isLocked = _this$props2.isLocked;
var _this$meta = this.meta,
selectedFieldPartsLabels = _this$meta.selectedFieldPartsLabels,
selectedFieldWidgetConfig = _this$meta.selectedFieldWidgetConfig,
showOperator = _this$meta.showOperator,
showOperatorLabel = _this$meta.showOperatorLabel;
var immutableOpsMode = config.settings.immutableOpsMode;
return /*#__PURE__*/_react["default"].createElement(_OperatorWrapper["default"], {
key: "operator",
config: config,
selectedField: this.props.selectedField,
selectedOperator: this.props.selectedOperator,
setOperator: !immutableOpsMode ? this.props.setOperator : _utils.dummyFn,
selectedFieldPartsLabels: selectedFieldPartsLabels,
showOperator: showOperator,
showOperatorLabel: showOperatorLabel,
selectedFieldWidgetConfig: selectedFieldWidgetConfig,
readonly: immutableOpsMode || isLocked,
id: this.props.id,
groupId: this.props.groupId,
isFunc: this.props.isFunc
});
}
}, {
key: "renderWidget",
value: function renderWidget() {
var _this$props3 = this.props,
config = _this$props3.config,
valueError = _this$props3.valueError,
isLocked = _this$props3.isLocked;
var showWidget = this.meta.showWidget;
var immutableValuesMode = config.settings.immutableValuesMode;
if (!showWidget) return null;
var widget = /*#__PURE__*/_react["default"].createElement(_Widget["default"], {
key: "values",
field: this.props.selectedField,
parentField: this.props.parentField,
operator: this.props.selectedOperator,
value: this.props.value,
valueSrc: this.props.valueSrc,
asyncListValues: this.props.asyncListValues,
valueError: valueError,
config: config,
setValue: !immutableValuesMode ? this.props.setValue : _utils.dummyFn,
setValueSrc: !immutableValuesMode ? this.props.setValueSrc : _utils.dummyFn,
readonly: immutableValuesMode || isLocked,
id: this.props.id,
groupId: this.props.groupId,
isFunc: this.props.isFunc
});
return /*#__PURE__*/_react["default"].createElement(_utils.Col, {
key: "widget-for-" + this.props.selectedOperator,
className: "rule--value"
}, widget);
}
}, {
key: "renderOperatorOptions",
value: function renderOperatorOptions() {
var config = this.props.config;
var showOperatorOptions = this.meta.showOperatorOptions;
var _config$settings = config.settings,
immutableOpsMode = _config$settings.immutableOpsMode,
immutableValuesMode = _config$settings.immutableValuesMode;
if (!showOperatorOptions) return null;
var opOpts = /*#__PURE__*/_react["default"].createElement(_OperatorOptions["default"], {
key: "operatorOptions",
selectedField: this.props.selectedField,
selectedOperator: this.props.selectedOperator,
operatorOptions: this.props.operatorOptions,
setOperatorOption: !immutableOpsMode ? this.props.setOperatorOption : _utils.dummyFn,
config: config,
readonly: immutableValuesMode
});
return /*#__PURE__*/_react["default"].createElement(_utils.Col, {
key: "op-options-for-" + this.props.selectedOperator,
className: "rule--operator-options"
}, opOpts);
}
}, {
key: "renderBeforeWidget",
value: function renderBeforeWidget() {
var config = this.props.config;
var renderBeforeWidget = config.settings.renderBeforeWidget;
return renderBeforeWidget && /*#__PURE__*/_react["default"].createElement(_utils.Col, {
key: "before-widget-for-" + this.props.selectedOperator,
className: "rule--before-widget"
}, typeof renderBeforeWidget === "function" ? renderBeforeWidget(this.props) : renderBeforeWidget);
}
}, {
key: "renderAfterWidget",
value: function renderAfterWidget() {
var config = this.props.config;
var renderAfterWidget = config.settings.renderAfterWidget;
return renderAfterWidget && /*#__PURE__*/_react["default"].createElement(_utils.Col, {
key: "after-widget-for-" + this.props.selectedOperator,
className: "rule--after-widget"
}, typeof renderAfterWidget === "function" ? renderAfterWidget(this.props) : renderAfterWidget);
}
}, {
key: "renderError",
value: function renderError() {
var _this$props4 = this.props,
config = _this$props4.config,
valueError = _this$props4.valueError;
var _config$settings2 = config.settings,
renderRuleError = _config$settings2.renderRuleError,
showErrorMessage = _config$settings2.showErrorMessage;
var oneValueError = valueError && valueError.toArray().filter(function (e) {
return !!e;
}).shift() || null;
return showErrorMessage && oneValueError && /*#__PURE__*/_react["default"].createElement("div", {
className: "rule--error"
}, renderRuleError ? renderRuleError({
error: oneValueError
}) : oneValueError);
}
}, {
key: "renderDrag",
value: function renderDrag() {
var showDragIcon = this.meta.showDragIcon;
return showDragIcon && /*#__PURE__*/_react["default"].createElement("span", {
key: "rule-drag-icon",
className: "qb-drag-handler rule--drag-handler",
onMouseDown: this.props.handleDraggerMouseDown
}, /*#__PURE__*/_react["default"].createElement(_utils.DragIcon, null), " ");
}
}, {
key: "renderDel",
value: function renderDel() {
var _this$props5 = this.props,
config = _this$props5.config,
isLocked = _this$props5.isLocked;
var _config$settings3 = config.settings,
deleteLabel = _config$settings3.deleteLabel,
immutableGroupsMode = _config$settings3.immutableGroupsMode,
Btn = _config$settings3.renderButton,
canDeleteLocked = _config$settings3.canDeleteLocked;
return !immutableGroupsMode && (!isLocked || isLocked && canDeleteLocked) && /*#__PURE__*/_react["default"].createElement(Btn, {
type: "delRule",
onClick: this.removeSelf,
label: deleteLabel,
config: config
});
}
}, {
key: "renderLock",
value: function renderLock() {
var _this$props6 = this.props,
config = _this$props6.config,
isLocked = _this$props6.isLocked,
isTrueLocked = _this$props6.isTrueLocked,
id = _this$props6.id;
var _config$settings4 = config.settings,
lockLabel = _config$settings4.lockLabel,
lockedLabel = _config$settings4.lockedLabel,
showLock = _config$settings4.showLock,
Switch = _config$settings4.renderSwitch;
return showLock && !(isLocked && !isTrueLocked) && /*#__PURE__*/_react["default"].createElement(Switch, {
type: "lock",
id: id,
value: isLocked,
setValue: this.setLock,
label: lockLabel,
checkedLabel: lockedLabel,
hideLabel: true,
config: config
});
}
}, {
key: "render",
value: function render() {
var _this$meta2 = this.meta,
showOperatorOptions = _this$meta2.showOperatorOptions,
selectedFieldWidgetConfig = _this$meta2.selectedFieldWidgetConfig;
var _this$props7 = this.props,
valueSrc = _this$props7.valueSrc,
value = _this$props7.value,
config = _this$props7.config;
var canShrinkValue = valueSrc.first() == "value" && !showOperatorOptions && value.size == 1 && selectedFieldWidgetConfig.fullWidth;
var BtnGrp = config.settings.renderButtonGroup;
var parts = [this.renderField(), this.renderOperator(), this.renderBeforeWidget(), this.renderWidget(), this.renderAfterWidget(), this.renderOperatorOptions()];
var body = /*#__PURE__*/_react["default"].createElement("div", {
key: "rule-body",
className: classNames("rule--body", canShrinkValue && "can--shrink--value")
}, parts);
var error = this.renderError();
var drag = this.renderDrag();
var lock = this.renderLock();
var del = this.renderDel();
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, drag, /*#__PURE__*/_react["default"].createElement("div", {
className: "rule--body--wrapper"
}, body, error), /*#__PURE__*/_react["default"].createElement("div", {
className: "rule--header"
}, /*#__PURE__*/_react["default"].createElement(BtnGrp, {
config: config
}, lock, del)));
}
}]);
return Rule;
}(_react.PureComponent), _class2.propTypes = {
id: _propTypes["default"].string.isRequired,
groupId: _propTypes["default"].string,
selectedField: _propTypes["default"].string,
selectedOperator: _propTypes["default"].string,
operatorOptions: _propTypes["default"].object,
config: _propTypes["default"].object.isRequired,
value: _propTypes["default"].any,
//depends on widget
valueSrc: _propTypes["default"].any,
asyncListValues: _propTypes["default"].array,
isDraggingMe: _propTypes["default"].bool,
isDraggingTempo: _propTypes["default"].bool,
parentField: _propTypes["default"].string,
//from RuleGroup
valueError: _propTypes["default"].any,
isLocked: _propTypes["default"].bool,
isTrueLocked: _propTypes["default"].bool,
//path: PropTypes.instanceOf(Immutable.List),
//actions
handleDraggerMouseDown: _propTypes["default"].func,
setField: _propTypes["default"].func,
setOperator: _propTypes["default"].func,
setOperatorOption: _propTypes["default"].func,
setLock: _propTypes["default"].func,
removeSelf: _propTypes["default"].func,
setValue: _propTypes["default"].func,
setValueSrc: _propTypes["default"].func,
reordableNodesCnt: _propTypes["default"].number,
isFunc: _propTypes["default"].bool,
args: _propTypes["default"].array
}, _class2)) || _class) || _class) || _class);
var _default = Rule;
exports["default"] = _default;