UNPKG

cspace-ui

Version:
179 lines (176 loc) 7.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSearchConditionInputComponent = exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactIntl = require("react-intl"); var _immutable = _interopRequireDefault(require("immutable")); var _get = _interopRequireDefault(require("lodash/get")); var _PanelContainer = require("../../containers/layout/PanelContainer"); var _searchOperators = require("../../constants/searchOperators"); var _GroupConditionInputContainer = _interopRequireDefault(require("../../containers/search/input/GroupConditionInputContainer")); var _BooleanConditionInput = _interopRequireDefault(require("./input/BooleanConditionInput")); var _FieldConditionInput = _interopRequireDefault(require("./input/FieldConditionInput")); var _searchNames = require("../../constants/searchNames"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } const propTypes = { condition: _propTypes.default.instanceOf(_immutable.default.Map), config: _propTypes.default.shape({ recordTypes: _propTypes.default.object }), hasChildGroups: _propTypes.default.bool, inline: _propTypes.default.bool, withoutPanel: _propTypes.default.bool, preferredBooleanOp: _propTypes.default.string, preferredCondition: _propTypes.default.instanceOf(_immutable.default.Map), readOnly: _propTypes.default.bool, recordType: _propTypes.default.string, searchTermsGroup: _propTypes.default.string, onConditionCommit: _propTypes.default.func, isBroadSearch: _propTypes.default.bool }; const defaultProps = { preferredBooleanOp: 'or' }; const childContextTypes = { recordType: _propTypes.default.string }; const messages = (0, _reactIntl.defineMessages)({ title: { "id": "advancedSearchBuilder.title", "defaultMessage": "Advanced Search" } }); const ensureRootBooleanOp = (condition, preferredBooleanOp) => { const op = condition && condition.get('op'); if (op === _searchOperators.OP_AND || op === _searchOperators.OP_OR) { return condition; } return _immutable.default.Map().set('op', preferredBooleanOp).set('value', condition ? _immutable.default.List.of(condition) : _immutable.default.List()); }; const getSearchConditionInputComponent = condition => { const operator = condition.get('op'); if (operator === _searchOperators.OP_AND || operator === _searchOperators.OP_OR) { return _BooleanConditionInput.default; } if (operator === _searchOperators.OP_GROUP) { return _GroupConditionInputContainer.default; } return _FieldConditionInput.default; }; exports.getSearchConditionInputComponent = getSearchConditionInputComponent; class AdvancedSearchBuilder extends _react.Component { constructor() { super(); this.handleConditionCommit = this.handleConditionCommit.bind(this); } getChildContext() { const { recordType } = this.props; return { recordType }; } componentDidMount() { this.normalizeCondition(); } componentDidUpdate() { this.normalizeCondition(); } handleConditionCommit(name, condition) { const { onConditionCommit } = this.props; if (onConditionCommit) { onConditionCommit(condition); } } normalizeCondition() { const { condition, config, preferredBooleanOp, preferredCondition, recordType, onConditionCommit, searchTermsGroup, isBroadSearch } = this.props; if (recordType && onConditionCommit) { let normalizedCondition; let initialCondition; if (condition) { normalizedCondition = ensureRootBooleanOp(condition, preferredBooleanOp); } else { const isNewSearchForm = searchTermsGroup === _searchNames.SEARCH_TERMS_GROUP_LIMIT_BY || searchTermsGroup === _searchNames.SEARCH_TERMS_GROUP_SEARCH_TERMS; // use preferred condition when not using new search form if (!isNewSearchForm) { initialCondition = preferredCondition; } // use config condition when there is no preferred condition // and not using new search form or for new search terms group when is broad search if (!initialCondition && (!isNewSearchForm || searchTermsGroup === _searchNames.SEARCH_TERMS_GROUP_SEARCH_TERMS && isBroadSearch)) { initialCondition = _immutable.default.fromJS((0, _get.default)(config, ['recordTypes', recordType, 'advancedSearch'])); } normalizedCondition = ensureRootBooleanOp(initialCondition, preferredBooleanOp); if (normalizedCondition.get('op') !== preferredBooleanOp) { normalizedCondition = normalizedCondition.set('op', preferredBooleanOp); } } if (normalizedCondition !== condition) { onConditionCommit(normalizedCondition); } } } render() { const { condition, config, hasChildGroups, inline, readOnly, recordType, withoutPanel, searchTermsGroup, isBroadSearch } = this.props; if (!condition) { return null; } const isNewSearchForm = searchTermsGroup === _searchNames.SEARCH_TERMS_GROUP_LIMIT_BY || searchTermsGroup === _searchNames.SEARCH_TERMS_GROUP_SEARCH_TERMS; const SearchConditionInputComponent = getSearchConditionInputComponent(condition); const searchConditionInput = /*#__PURE__*/_react.default.createElement(SearchConditionInputComponent, { condition: condition, config: config, hasChildGroups: hasChildGroups, inline: inline, name: "advancedSearch", readOnly: readOnly, isNewSearchForm: isNewSearchForm, recordType: recordType, showInlineParens: false, showRemoveButton: false, showMiniButtonFooter: !(isBroadSearch && isNewSearchForm), getSearchConditionInputComponent: getSearchConditionInputComponent, onCommit: this.handleConditionCommit }); if (inline || withoutPanel) { return searchConditionInput; } const panelHeader = /*#__PURE__*/_react.default.createElement("h3", null, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.title)); return /*#__PURE__*/_react.default.createElement(_PanelContainer.ConnectedPanel, { collapsible: true, header: panelHeader, name: "advancedSearch", recordType: recordType }, searchConditionInput); } } exports.default = AdvancedSearchBuilder; AdvancedSearchBuilder.propTypes = propTypes; AdvancedSearchBuilder.defaultProps = defaultProps; AdvancedSearchBuilder.childContextTypes = childContextTypes;