@react-awesome-query-builder/ui
Version:
User-friendly query builder for React. Core React UI
166 lines (164 loc) • 8.78 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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _react = _interopRequireWildcard(require("react"));
var _core = require("@react-awesome-query-builder/core");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _tree = _interopRequireDefault(require("../stores/tree"));
var _context = _interopRequireDefault(require("../stores/context"));
var _redux = require("redux");
var _reactRedux = require("react-redux");
var actions = _interopRequireWildcard(require("../actions"));
var _stuff = require("../utils/stuff");
var _validationMemo = require("../utils/validationMemo");
var _reactUtils = require("../utils/reactUtils");
var _Query = _interopRequireDefault(require("./Query"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
var defaultRoot = _core.Utils.DefaultUtils.defaultRoot;
var _Utils$ConfigUtils = _core.Utils.ConfigUtils,
createConfigMemo = _Utils$ConfigUtils.createConfigMemo,
extendConfig = _Utils$ConfigUtils.extendConfig;
var QueryContainer = exports["default"] = /*#__PURE__*/function (_Component) {
function QueryContainer(props, context) {
var _this$_reactInternals, _this$_reactInternals2;
var _this;
(0, _classCallCheck2["default"])(this, QueryContainer);
_this = _callSuper(this, QueryContainer, [props, context]);
_this.setLastTree = function (lastTree) {
if (_this.prevTree) {
_this.prevprevTree = _this.prevTree;
}
_this.prevTree = lastTree;
};
_this.getConfig = function () {
return _this.config;
};
_this.shouldComponentUpdate = (0, _reactUtils.liteShouldComponentUpdate)(_this, {
value: function value(nextValue, prevValue) {
return false;
}
});
(0, _reactUtils.useOnPropsChanged)(_this);
var _createConfigMemo = createConfigMemo({
reactIndex: (_this$_reactInternals = (_this$_reactInternals2 = _this._reactInternals) === null || _this$_reactInternals2 === void 0 ? void 0 : _this$_reactInternals2.index) !== null && _this$_reactInternals !== void 0 ? _this$_reactInternals : -1,
maxSize: 2,
// current and prev
canCompile: true,
extendConfig: extendConfig
}),
getExtendedConfig = _createConfigMemo.getExtendedConfig,
getBasicConfig = _createConfigMemo.getBasicConfig,
clearConfigMemo = _createConfigMemo.clearConfigMemo;
_this.getMemoizedConfig = getExtendedConfig;
_this.getBasicConfig = getBasicConfig;
_this.clearConfigMemo = clearConfigMemo;
_this.getMemoizedTree = (0, _validationMemo.createValidationMemo)();
var config = _this.getMemoizedConfig(props);
var shouldCreateEmptyGroup = config.settings.shouldCreateEmptyGroup;
var canAddDefaultRule = !shouldCreateEmptyGroup; // if prop `value` is not provided, can add default/empty rule?
var emptyTree = defaultRoot(config, canAddDefaultRule);
var sanitizeTree = !!props.value;
var tree = props.value || emptyTree;
var validatedTree = _this.getMemoizedTree(config, tree, undefined, sanitizeTree);
var reducer = (0, _tree["default"])(config, validatedTree, _this.getMemoizedTree, _this.setLastTree, _this.getConfig);
var store = (0, _redux.createStore)(reducer);
_this.config = config;
_this.state = {
store: store
};
_this.QueryWrapper = function (pr) {
return config.settings.renderProvider(pr, config.ctx);
};
return _this;
}
(0, _inherits2["default"])(QueryContainer, _Component);
return (0, _createClass2["default"])(QueryContainer, [{
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.clearConfigMemo();
}
}, {
key: "onPropsChanged",
value: function onPropsChanged(nextProps) {
// compare configs
var prevProps = this.props;
var oldConfig = this.config;
var nextConfig = this.getMemoizedConfig(nextProps);
var isConfigChanged = oldConfig !== nextConfig;
// compare trees
var storeValue = this.state.store.getState().tree;
var isTreeChanged = !(0, _stuff.immutableEqual)(nextProps.value, this.props.value) && !(0, _stuff.immutableEqual)(nextProps.value, storeValue);
var currentTree = isTreeChanged ? nextProps.value || defaultRoot(nextProps) : storeValue;
var isTreeTrulyChanged = isTreeChanged && !(0, _stuff.immutableEqual)(nextProps.value, this.prevTree) && !(0, _stuff.immutableEqual)(nextProps.value, this.prevprevTree);
this.sanitizeTree = isTreeTrulyChanged || isConfigChanged;
var canUseOldConfig = isConfigChanged && !isTreeChanged;
if (isConfigChanged) {
if (prevProps.settings.renderProvider !== nextProps.settings.renderProvider) {
this.QueryWrapper = function (props) {
return nextConfig.settings.renderProvider(props, nextConfig.ctx);
};
}
this.config = nextConfig;
}
if (isTreeChanged || isConfigChanged) {
var validatedTree = this.getMemoizedTree(nextConfig, currentTree, canUseOldConfig ? oldConfig : undefined, this.sanitizeTree);
//return Promise.resolve().then(() => {
this.state.store.dispatch(actions.tree.setTree(nextConfig, validatedTree));
//});
}
}
}, {
key: "render",
value: function render() {
// `get_children` is deprecated!
var _this$props = this.props,
renderBuilder = _this$props.renderBuilder,
get_children = _this$props.get_children,
onChange = _this$props.onChange,
onInit = _this$props.onInit;
var store = this.state.store;
var config = this.config;
var QueryWrapper = this.QueryWrapper;
return /*#__PURE__*/_react["default"].createElement(QueryWrapper, {
config: config
}, /*#__PURE__*/_react["default"].createElement(_reactRedux.Provider, {
store: store,
context: _context["default"]
}, /*#__PURE__*/_react["default"].createElement(_Query["default"], {
config: config,
getMemoizedTree: this.getMemoizedTree,
getBasicConfig: this.getBasicConfig,
sanitizeTree: this.sanitizeTree,
onChange: onChange,
onInit: onInit,
renderBuilder: renderBuilder || get_children
})));
}
}]);
}(_react.Component);
QueryContainer.propTypes = {
//config
conjunctions: _propTypes["default"].object.isRequired,
fields: _propTypes["default"].object.isRequired,
types: _propTypes["default"].object.isRequired,
operators: _propTypes["default"].object.isRequired,
widgets: _propTypes["default"].object.isRequired,
settings: _propTypes["default"].object.isRequired,
ctx: _propTypes["default"].object.isRequired,
onChange: _propTypes["default"].func,
onInit: _propTypes["default"].func,
renderBuilder: _propTypes["default"].func,
value: _propTypes["default"].any //instanceOf(Immutable.Map)
};