cspace-ui
Version:
CollectionSpace user interface for browsers
98 lines (93 loc) • 3.25 kB
JSX
import React from 'react';
import PropTypes from 'prop-types';
import { Panel } from 'cspace-layout';
import { components as inputComponents } from 'cspace-input';
import AdvancedSearchBuilderContainer from '../../containers/search/AdvancedSearchBuilderContainer';
import { ConnectedPanel } from '../../containers/layout/PanelContainer';
import styles from '../../../styles/cspace-ui/SearchForm.css';
import recordTypeStyles from '../../../styles/cspace-ui/SearchFormRecordType.css';
const { LineInput, RecordTypeInput } = inputComponents;
const SearchFormContent = ({
header,
footer,
recordTypes,
recordTypeInputRootType,
recordTypeInputServiceTypes,
recordTypeValue,
intl,
messages,
formatRecordTypeLabel,
handleRecordTypeDropdownCommit,
renderVocabularyInput,
fullTextPanelHeader,
keywordValue,
handleKeywordInputCommit,
advancedSearchCondition,
config,
preferredAdvancedSearchBooleanOp,
onAdvancedSearchConditionCommit,
handleFormSubmit,
recordTypeInputReadOnly,
}) => (
<form autoComplete="off" className={styles.common} onSubmit={handleFormSubmit}>
{header}
<Panel>
<div className={recordTypeStyles.common}>
<RecordTypeInput
label={intl.formatMessage(messages.recordType)}
recordTypes={recordTypes}
rootType={recordTypeInputRootType}
serviceTypes={recordTypeInputServiceTypes}
value={recordTypeValue}
formatRecordTypeLabel={formatRecordTypeLabel}
onCommit={handleRecordTypeDropdownCommit}
readOnly={recordTypeInputReadOnly}
/>
{renderVocabularyInput(recordTypes)}
</div>
<ConnectedPanel
collapsible
header={fullTextPanelHeader}
name="fullTextSearch"
recordType={recordTypeValue}
>
<LineInput
label={intl.formatMessage(messages.keyword)}
value={keywordValue}
onCommit={handleKeywordInputCommit}
/>
</ConnectedPanel>
<AdvancedSearchBuilderContainer
condition={advancedSearchCondition}
config={config}
preferredBooleanOp={preferredAdvancedSearchBooleanOp}
recordType={recordTypeValue}
onConditionCommit={onAdvancedSearchConditionCommit}
/>
</Panel>
{footer}
</form>
);
SearchFormContent.propTypes = {
header: PropTypes.node,
footer: PropTypes.node,
recordTypes: PropTypes.object,
recordTypeInputRootType: PropTypes.string,
recordTypeInputServiceTypes: PropTypes.array,
recordTypeValue: PropTypes.string,
intl: PropTypes.object.isRequired,
messages: PropTypes.object.isRequired,
formatRecordTypeLabel: PropTypes.func.isRequired,
handleRecordTypeDropdownCommit: PropTypes.func.isRequired,
renderVocabularyInput: PropTypes.func.isRequired,
fullTextPanelHeader: PropTypes.node.isRequired,
keywordValue: PropTypes.string,
handleKeywordInputCommit: PropTypes.func.isRequired,
advancedSearchCondition: PropTypes.object,
config: PropTypes.object,
preferredAdvancedSearchBooleanOp: PropTypes.string,
onAdvancedSearchConditionCommit: PropTypes.func.isRequired,
handleFormSubmit: PropTypes.func.isRequired,
recordTypeInputReadOnly: PropTypes.bool,
};
export default SearchFormContent;