UNPKG

cspace-ui

Version:
129 lines (105 loc) 3.51 kB
import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import get from 'lodash/get'; import Immutable from 'immutable'; import AdvancedSearchBuilder from './AdvancedSearchBuilder'; import styles from '../../../styles/cspace-ui/SearchToSelectTitleBar.css'; import subtitleStyles from '../../../styles/cspace-ui/Subtitle.css'; const messages = defineMessages({ title: { id: 'searchToSelectTitleBar.title', defaultMessage: 'Select {typeName} {query}', }, keyword: { id: 'searchToSelectTitleBar.keyword', defaultMessage: 'containing "{keyword}"', }, }); const propTypes = { config: PropTypes.shape({ recordTypes: PropTypes.object, }), isSearchInitiated: PropTypes.bool, titleMessage: PropTypes.objectOf(PropTypes.string), recordType: PropTypes.string, vocabulary: PropTypes.string, searchDescriptor: PropTypes.instanceOf(Immutable.Map), singleSelect: PropTypes.bool, }; const defaultProps = { titleMessage: messages.title, }; export default function SearchToSelectTitleBar(props) { const { config, isSearchInitiated, searchDescriptor, singleSelect, titleMessage, } = props; if (!isSearchInitiated) { const { recordType, vocabulary, } = props; const recordTypeConfig = get(config, ['recordTypes', recordType]); if (!recordTypeConfig) { return null; } const vocabularyConfig = vocabulary ? get(recordTypeConfig, ['vocabularies', vocabulary]) : undefined; const nameMessages = vocabularyConfig ? vocabularyConfig.messages : recordTypeConfig.messages.record; const typeNameMessage = singleSelect ? (nameMessages.itemName || nameMessages.name) : nameMessages.collectionName; const typeName = <FormattedMessage {...typeNameMessage} />; return ( <header className={styles.common}> <h1><FormattedMessage {...titleMessage} values={{ typeName, query: '' }} /></h1> </header> ); } const recordType = searchDescriptor.get('recordType'); const vocabulary = searchDescriptor.get('vocabulary'); const recordTypeConfig = get(config, ['recordTypes', recordType]); const vocabularyConfig = vocabulary ? get(recordTypeConfig, ['vocabularies', vocabulary]) : undefined; const searchQuery = searchDescriptor.get('searchQuery'); const advancedSearchCondition = searchQuery.get('as'); const kw = searchQuery.get('kw'); const queryTitle = kw ? <FormattedMessage {...messages.keyword} values={{ keyword: kw }} /> : null; const nameMessages = vocabularyConfig ? vocabularyConfig.messages : recordTypeConfig.messages.record; const typeNameMessage = singleSelect ? (nameMessages.itemName || nameMessages.name) : nameMessages.collectionName; const typeName = <FormattedMessage {...typeNameMessage} />; let subtitle; if (advancedSearchCondition) { subtitle = ( <div className={subtitleStyles.common}> <AdvancedSearchBuilder condition={advancedSearchCondition} config={config} inline readOnly recordType={recordType} /> </div> ); } return ( <header className={styles.common}> <h1> <FormattedMessage {...titleMessage} values={{ typeName, query: queryTitle }} /> </h1> {subtitle} </header> ); } SearchToSelectTitleBar.propTypes = propTypes; SearchToSelectTitleBar.defaultProps = defaultProps;