UNPKG

terriajs

Version:

Geospatial data visualization platform.

83 lines (68 loc) 2.51 kB
import React from 'react'; import createReactClass from 'create-react-class'; import PropTypes from 'prop-types'; import naturalSort from 'javascript-natural-sort'; import parseCustomMarkdownToReact from '../Custom/parseCustomMarkdownToReact'; import ObserveModelMixin from '../ObserveModelMixin'; import Styles from './data-preview.scss'; naturalSort.insensitive = true; // Should get it from option const DEFAULT_SECTION_ORDER = [ 'Disclaimer', 'Description', 'Data Description', 'Dataset Description', 'Service Description', 'Resource Description', 'Licence', 'Access Constraints', 'Author', 'Contact', 'Created', 'Modified', 'Update Frequency' ]; /** * CatalogItem-defined sections that sit within the preview description. These are ordered according to the catalog item's * order if available. */ const DataPreviewSections = createReactClass({ displayName: 'DataPreviewSections', mixins: [ObserveModelMixin], propTypes: { metadataItem: PropTypes.object.isRequired }, sortInfoSections(items) { const infoSectionOrder = this.props.metadataItem.infoSectionOrder || DEFAULT_SECTION_ORDER; items.sort(function(a, b) { const aIndex = infoSectionOrder.indexOf(a.name); const bIndex = infoSectionOrder.indexOf(b.name); if (aIndex >= 0 && bIndex < 0) { return -1; } else if (aIndex < 0 && bIndex >= 0) { return 1; } else if (aIndex < 0 && bIndex < 0) { return naturalSort(a.name, b.name); } return aIndex - bIndex; }); return items; }, render() { const metadataItem = this.props.metadataItem; const items = metadataItem.hideSource ? metadataItem.infoWithoutSources : metadataItem.info.slice(); return ( <div> <For each="item" index="i" of={this.sortInfoSections(items)}> <If condition={item.content && item.content.length > 0}> <div key={i}> <h4 className={Styles.h4}>{item.name}</h4> {parseCustomMarkdownToReact(item.content, {catalogItem: metadataItem})} </div> </If> </For> </div> ); }, }); export default DataPreviewSections;