diff --git a/static/src/js/components/CollectionResults/CollectionResultsItem.js b/static/src/js/components/CollectionResults/CollectionResultsItem.js index 574f928010..79b2765904 100644 --- a/static/src/js/components/CollectionResults/CollectionResultsItem.js +++ b/static/src/js/components/CollectionResults/CollectionResultsItem.js @@ -6,6 +6,7 @@ import { FaClock, FaCloud, FaCogs, + FaCubes, FaFileAlt, FaGlobe, FaInfoCircle, @@ -54,6 +55,7 @@ export const CollectionResultsItem = forwardRef(({ displayOrganization, granuleCount, hasFormats, + hasCombine, hasMapImagery, hasSpatialSubsetting, hasTemporalSubsetting, @@ -205,6 +207,7 @@ export const CollectionResultsItem = forwardRef(({ || hasTransforms || hasFormats || hasTemporalSubsetting + || hasCombine ) && ( ) } + { + hasCombine && ( + + ) + } ) } @@ -284,7 +297,7 @@ export const CollectionResultsItem = forwardRef(({ size="0.725rem" icon={FaGlobe} /> - Spatial subsetting + Spatial subset ) } @@ -297,7 +310,7 @@ export const CollectionResultsItem = forwardRef(({ size="0.725rem" icon={FaClock} /> - Temporal subsetting + Temporal subset ) } @@ -310,7 +323,7 @@ export const CollectionResultsItem = forwardRef(({ size="0.725rem" icon={FaTags} /> - Variable subsetting + Variable subset ) } @@ -323,7 +336,7 @@ export const CollectionResultsItem = forwardRef(({ size="0.725rem" icon={FaSlidersH} /> - Transformation + Transform ) } @@ -336,7 +349,20 @@ export const CollectionResultsItem = forwardRef(({ size="0.725rem" icon={FaFileAlt} /> - Reformatting + Reformat + + ) + } + { + hasCombine && ( +
  • + + Combine
  • ) } diff --git a/static/src/js/components/CollectionResults/CollectionResultsTable.js b/static/src/js/components/CollectionResults/CollectionResultsTable.js index 0472cdd4c7..f7675fc0ef 100644 --- a/static/src/js/components/CollectionResults/CollectionResultsTable.js +++ b/static/src/js/components/CollectionResults/CollectionResultsTable.js @@ -6,7 +6,9 @@ import { OverlayTrigger, Tooltip } from 'react-bootstrap' + import { FaCheck, FaInfoCircle } from 'react-icons/fa' + import { commafy } from '../../util/commafy' import { collectionMetadataPropType } from '../../util/propTypes/collectionMetadata' @@ -285,6 +287,19 @@ export const CollectionResultsTable = ({ customProps: { centerContent: true } + }, + { + Header: 'Combine', + Cell: ({ value }) => ( +
    + {value ? : '-'} +
    + ), + accessor: 'hasCombine', + width: '120', + customProps: { + centerContent: true + } } /* eslint-enable */ ]) diff --git a/static/src/js/components/CollectionResults/__tests__/CollectionResultsItem.test.js b/static/src/js/components/CollectionResults/__tests__/CollectionResultsItem.test.js index 6aceaeb273..9a31428b15 100644 --- a/static/src/js/components/CollectionResults/__tests__/CollectionResultsItem.test.js +++ b/static/src/js/components/CollectionResults/__tests__/CollectionResultsItem.test.js @@ -3,6 +3,7 @@ import Enzyme, { shallow } from 'enzyme' import Adapter from '@wojtekmaj/enzyme-adapter-react-17' import { FaClock, + FaCubes, FaFileAlt, FaGlobe, FaSlidersH, @@ -408,6 +409,23 @@ describe('CollectionResultsList component', () => { expect(metaIcon.props().metadata.props.children[1].props.icon).toEqual(FaClock) }) }) + + describe('combination icon', () => { + test('renders the metadata correctly', () => { + const { enzymeWrapper } = setup({ + collectionMetadata: { + ...collectionListItemProps.collectionMetadata, + hasCombine: true + } + }) + const metaContainer = enzymeWrapper.find('.collection-results-item__meta') + const featureItem = metaContainer.find('#feature-icon-list-view__customize') + const metaIcon = featureItem.find(MetaIcon) + + expect(featureItem.length).toEqual(1) + expect(metaIcon.props().metadata.props.children[5].props.icon).toEqual(FaCubes) + }) + }) }) }) diff --git a/static/src/js/components/CollectionResults/__tests__/CollectionResultsTable.test.js b/static/src/js/components/CollectionResults/__tests__/CollectionResultsTable.test.js index 7334caef3c..21e509e499 100644 --- a/static/src/js/components/CollectionResults/__tests__/CollectionResultsTable.test.js +++ b/static/src/js/components/CollectionResults/__tests__/CollectionResultsTable.test.js @@ -114,6 +114,11 @@ describe('CollectionResultsTable component', () => { accessor: 'hasFormats' })) + expect(columns[15]).toEqual(expect.objectContaining({ + Header: 'Combine', + accessor: 'hasCombine' + })) + expect(table.props().data).toEqual(collectionData) expect(table.props().itemCount).toEqual(props.itemCount) expect(table.props().loadMoreItems).toEqual(props.loadMoreItems) diff --git a/static/src/js/components/CollectionResults/__tests__/mocks.js b/static/src/js/components/CollectionResults/__tests__/mocks.js index ff2772d4ac..b08b19939a 100644 --- a/static/src/js/components/CollectionResults/__tests__/mocks.js +++ b/static/src/js/components/CollectionResults/__tests__/mocks.js @@ -7,6 +7,7 @@ export const collectionListItemProps = { datasetId: 'Test Collection', displayOrganization: 'TESTORG', granuleCount: 10, + hasCombine: false, hasFormats: false, hasSpatialSubsetting: false, hasTemporalSubsetting: false, @@ -39,6 +40,7 @@ export const collectionResultsBodyData = { datasetId: 'test dataset id', displayOrganization: 'test/org', granuleCount: 42, + hasCombine: false, hasFormats: false, hasMapImagery: false, hasSpatialSubsetting: false, @@ -67,6 +69,7 @@ export const collectionData = [{ datasetId: 'Test Collection', displayOrganization: 'TESTORG', granuleCount: 10, + hasCombine: false, hasFormats: false, hasSpatialSubsetting: false, hasTemporalSubsetting: false, diff --git a/static/src/js/util/__tests__/formatCollectionList.test.js b/static/src/js/util/__tests__/formatCollectionList.test.js index 5598d6511a..62f78421aa 100644 --- a/static/src/js/util/__tests__/formatCollectionList.test.js +++ b/static/src/js/util/__tests__/formatCollectionList.test.js @@ -59,6 +59,7 @@ describe('formatCollectionList', () => { datasetId: 'test dataset id', displayOrganization: 'test/org', granuleCount: 42, + hasCombine: false, hasFormats: false, hasMapImagery: false, hasSpatialSubsetting: false, @@ -104,6 +105,7 @@ describe('formatCollectionList', () => { datasetId: null, displayOrganization: '', granuleCount: 0, + hasCombine: false, hasFormats: false, hasMapImagery: false, hasSpatialSubsetting: false, @@ -233,6 +235,7 @@ describe('formatCollectionList', () => { datasetId: 'test dataset id', displayOrganization: 'test/org', granuleCount: 42, + hasCombine: false, hasFormats: true, hasMapImagery: false, hasSpatialSubsetting: true, diff --git a/static/src/js/util/formatCollectionList.js b/static/src/js/util/formatCollectionList.js index 3d1d291825..fcfe5bf548 100644 --- a/static/src/js/util/formatCollectionList.js +++ b/static/src/js/util/formatCollectionList.js @@ -90,6 +90,7 @@ export const formatCollectionList = (collections, metadata, projectIds = [], bro const isLast = index === collectionIds.length - 1 // Determine service feature flags + let hasCombine = false let hasFormats = false let hasSpatialSubsetting = false let hasTemporalSubsetting = false @@ -100,6 +101,7 @@ export const formatCollectionList = (collections, metadata, projectIds = [], bro const service = serviceFeatures[key] const { + has_combine: serviceHasCombine, has_formats: serviceHasFormats, has_spatial_subsetting: serviceHasSpatialSubsetting, has_temporal_subsetting: serviceHasTemporalSubsetting, @@ -107,6 +109,7 @@ export const formatCollectionList = (collections, metadata, projectIds = [], bro has_variables: serviceHasVariables } = service + if (serviceHasCombine) hasCombine = true if (serviceHasFormats) hasFormats = true if (serviceHasSpatialSubsetting) hasSpatialSubsetting = true if (serviceHasTemporalSubsetting) hasTemporalSubsetting = true @@ -139,6 +142,7 @@ export const formatCollectionList = (collections, metadata, projectIds = [], bro datasetId, displayOrganization, granuleCount, + hasCombine, hasFormats, hasMapImagery, hasSpatialSubsetting,