UNPKG

cspace-ui

Version:
316 lines (311 loc) 12.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 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 _cspaceInput = require("cspace-input"); var _Dock = _interopRequireDefault(require("../sections/Dock")); var _SearchButtonBar = _interopRequireDefault(require("./SearchButtonBar")); var _SearchFormRecordType = _interopRequireDefault(require("../../../styles/cspace-ui/SearchFormRecordType.css")); var _SearchFormVocab = _interopRequireDefault(require("../../../styles/cspace-ui/SearchFormVocab.css")); var _searchHelpers = require("../../helpers/searchHelpers"); var _configHelpers = require("../../helpers/configHelpers"); var _SearchFormContent = _interopRequireDefault(require("./SearchFormContent")); var _SearchFormContentNew = _interopRequireDefault(require("./SearchFormContentNew")); 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 { Label, VocabularyInput } = _cspaceInput.components; const messages = (0, _reactIntl.defineMessages)({ recordType: { "id": "searchForm.recordType", "defaultMessage": "Find" }, vocabulary: { "id": "searchForm.vocabulary", "defaultMessage": "in vocabulary" }, keyword: { "id": "searchForm.keyword", "defaultMessage": "Keywords" }, fullTextSearch: { "id": "searchForm.fullTextSearch", "defaultMessage": "Full Text Search" }, enterSearchTerms: { "id": "searchForm.enterSearchTerms", "defaultMessage": "Enter keyword search terms:" }, limitBySpecificFields: { "id": "searchForm.limitBySpecificFields", "defaultMessage": "Limit by:" }, and: { "id": "searchForm.and", "defaultMessage": "And" } }); const propTypes = { config: _propTypes.default.shape({ messages: _propTypes.default.object }), dockTop: _propTypes.default.number, intl: _reactIntl.intlShape, keywordValue: _propTypes.default.string, recordTypeValue: _propTypes.default.string, vocabularyValue: _propTypes.default.string, advancedSearchCondition: _propTypes.default.instanceOf(_immutable.default.Map), advancedSearchConditionLimitBy: _propTypes.default.instanceOf(_immutable.default.Map), advancedSearchConditionSearchTerms: _propTypes.default.instanceOf(_immutable.default.Map), preferredAdvancedSearchBooleanOp: _propTypes.default.string, recordTypeInputReadOnly: _propTypes.default.bool, recordTypeInputRootType: _propTypes.default.string, recordTypeInputRecordTypes: _propTypes.default.arrayOf(_propTypes.default.string), recordTypeInputServiceTypes: _propTypes.default.arrayOf(_propTypes.default.string), showButtons: _propTypes.default.bool, perms: _propTypes.default.instanceOf(_immutable.default.Map), getAuthorityVocabCsid: _propTypes.default.func, buildRecordFieldOptionLists: _propTypes.default.func, deleteOptionList: _propTypes.default.func, showNewSearch: _propTypes.default.bool, onAdvancedSearchConditionCommit: _propTypes.default.func, onAdvancedSearchConditionLimitByCommit: _propTypes.default.func, onAdvancedSearchConditionSearchTermsCommit: _propTypes.default.func, onClearButtonClick: _propTypes.default.func, onKeywordCommit: _propTypes.default.func, onRecordTypeCommit: _propTypes.default.func, onVocabularyCommit: _propTypes.default.func, onSearch: _propTypes.default.func }; class SearchForm extends _react.Component { constructor() { super(); this.formatRecordTypeLabel = this.formatRecordTypeLabel.bind(this); this.formatVocabularyLabel = this.formatVocabularyLabel.bind(this); this.handleFormSubmit = this.handleFormSubmit.bind(this); this.handleKeywordInputCommit = this.handleKeywordInputCommit.bind(this); this.handleRecordTypeDropdownCommit = this.handleRecordTypeDropdownCommit.bind(this); this.handleVocabularyDropdownCommit = this.handleVocabularyDropdownCommit.bind(this); this.renderVocabularyInput = this.renderVocabularyInput.bind(this); } componentDidMount() { const { config, recordTypeValue, buildRecordFieldOptionLists } = this.props; if (buildRecordFieldOptionLists && recordTypeValue) { buildRecordFieldOptionLists(config, recordTypeValue); } } componentDidUpdate(prevProps) { const { config, recordTypeValue, buildRecordFieldOptionLists, deleteOptionList } = this.props; const { recordTypeValue: prevRecordTypeValue } = prevProps; if (recordTypeValue !== prevRecordTypeValue) { if (deleteOptionList) { deleteOptionList((0, _configHelpers.getRecordFieldOptionListName)(prevRecordTypeValue)); deleteOptionList((0, _configHelpers.getRecordGroupOptionListName)(prevRecordTypeValue)); } if (buildRecordFieldOptionLists && recordTypeValue) { buildRecordFieldOptionLists(config, recordTypeValue); } } } componentWillUnmount() { const { recordTypeValue, deleteOptionList } = this.props; if (deleteOptionList) { deleteOptionList((0, _configHelpers.getRecordFieldOptionListName)(recordTypeValue)); deleteOptionList((0, _configHelpers.getRecordGroupOptionListName)(recordTypeValue)); } } handleFormSubmit(event) { event.preventDefault(); const { onSearch } = this.props; if (onSearch) { onSearch(); } } handleKeywordInputCommit(path, value) { const { onKeywordCommit } = this.props; if (onKeywordCommit) { onKeywordCommit(value); } } handleRecordTypeDropdownCommit(path, value) { const { onRecordTypeCommit } = this.props; if (onRecordTypeCommit) { onRecordTypeCommit(value); } } handleVocabularyDropdownCommit(path, value) { const { onVocabularyCommit } = this.props; if (onVocabularyCommit) { onVocabularyCommit(value); } } formatRecordTypeLabel(name, config) { const { intl } = this.props; return intl.formatMessage(config.messages.record.collectionName) || name; } formatVocabularyLabel(name, config) { const { intl } = this.props; return intl.formatMessage(config.messages.name) || name; } renderVocabularyInput(recordTypes) { const { intl, recordTypeValue, vocabularyValue } = this.props; if (!recordTypeValue || !recordTypes[recordTypeValue] || !recordTypes[recordTypeValue].vocabularies) { return null; } return /*#__PURE__*/_react.default.createElement("div", { className: _SearchFormVocab.default.common }, /*#__PURE__*/_react.default.createElement(Label, null, intl.formatMessage(messages.vocabulary)), /*#__PURE__*/_react.default.createElement(VocabularyInput, { recordTypes: recordTypes, recordType: recordTypeValue, value: vocabularyValue, formatVocabularyLabel: this.formatVocabularyLabel, onCommit: this.handleVocabularyDropdownCommit })); } render() { const { advancedSearchCondition, advancedSearchConditionLimitBy, advancedSearchConditionSearchTerms, config, dockTop, intl, keywordValue, perms, preferredAdvancedSearchBooleanOp, recordTypeValue, recordTypeInputReadOnly, recordTypeInputRootType, recordTypeInputRecordTypes, recordTypeInputServiceTypes, showButtons, getAuthorityVocabCsid, showNewSearch, onAdvancedSearchConditionCommit, onAdvancedSearchConditionLimitByCommit, onAdvancedSearchConditionSearchTermsCommit, onClearButtonClick } = this.props; const fullTextPanelHeader = /*#__PURE__*/_react.default.createElement("h3", null, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.fullTextSearch)); // If showButtons is false, render the button bar anyway, but with height 0, so that the submit // button will exist on the page, invisibly. This allows pressing enter on fields to submit the // form. const topButtonBar = /*#__PURE__*/_react.default.createElement(_SearchButtonBar.default, { onClearButtonClick: onClearButtonClick }); let header; if (showButtons) { header = /*#__PURE__*/_react.default.createElement(_Dock.default, { dockTop: dockTop, isSidebarOpen: false }, topButtonBar); } else { header = /*#__PURE__*/_react.default.createElement("div", { style: { height: '0', overflow: 'hidden', margin: '0' } }, topButtonBar); } let footer; if (showButtons) { footer = /*#__PURE__*/_react.default.createElement("footer", null, /*#__PURE__*/_react.default.createElement(_SearchButtonBar.default, { onClearButtonClick: onClearButtonClick })); } const searchableRecordTypes = (0, _searchHelpers.getSearchableRecordTypes)(getAuthorityVocabCsid, config, perms); let recordTypes; if (recordTypeInputRecordTypes) { recordTypes = {}; // Filter out searchable record types that are not included in the desired record types list. recordTypeInputRecordTypes.forEach(recordType => { recordTypes[recordType] = searchableRecordTypes[recordType]; }); } else { recordTypes = searchableRecordTypes; } return showNewSearch ? /*#__PURE__*/_react.default.createElement(_SearchFormContentNew.default, { header: header, footer: footer, recordTypes: recordTypes, recordTypeInputRootType: recordTypeInputRootType, recordTypeInputServiceTypes: recordTypeInputServiceTypes, recordTypeValue: recordTypeValue, intl: intl, messages: messages, config: config, formatRecordTypeLabel: this.formatRecordTypeLabel, handleRecordTypeDropdownCommit: this.handleRecordTypeDropdownCommit, renderVocabularyInput: this.renderVocabularyInput, keywordValue: keywordValue, handleKeywordInputCommit: this.handleKeywordInputCommit, advancedSearchConditionSearchTerms: advancedSearchConditionSearchTerms, advancedSearchConditionLimitBy: advancedSearchConditionLimitBy, onAdvancedSearchConditionSearchTermsCommit: onAdvancedSearchConditionSearchTermsCommit, onAdvancedSearchConditionLimitByCommit: onAdvancedSearchConditionLimitByCommit, handleFormSubmit: this.handleFormSubmit }) : /*#__PURE__*/_react.default.createElement(_SearchFormContent.default, { header: header, footer: footer, recordTypeStyles: _SearchFormRecordType.default, recordTypes: recordTypes, recordTypeInputRootType: recordTypeInputRootType, recordTypeInputServiceTypes: recordTypeInputServiceTypes, recordTypeValue: recordTypeValue, intl: intl, messages: messages, formatRecordTypeLabel: this.formatRecordTypeLabel, handleRecordTypeDropdownCommit: this.handleRecordTypeDropdownCommit, renderVocabularyInput: this.renderVocabularyInput, fullTextPanelHeader: fullTextPanelHeader, keywordValue: keywordValue, handleKeywordInputCommit: this.handleKeywordInputCommit, advancedSearchCondition: advancedSearchCondition, config: config, preferredAdvancedSearchBooleanOp: preferredAdvancedSearchBooleanOp, onAdvancedSearchConditionCommit: onAdvancedSearchConditionCommit, handleFormSubmit: this.handleFormSubmit, recordTypeInputReadOnly: recordTypeInputReadOnly }); } } exports.default = SearchForm; SearchForm.propTypes = propTypes;