2020-06-12 07:17:17 +00:00
/ * *
* External dependencies
* /
import { _ _ } from '@wordpress/i18n' ;
import { Fragment } from '@wordpress/element' ;
import { compose } from '@wordpress/compose' ;
import { Spinner } from '@wordpress/components' ;
import classnames from 'classnames' ;
import { withDispatch , withSelect } from '@wordpress/data' ;
import PropTypes from 'prop-types' ;
/ * *
* WooCommerce dependencies
* /
import { Card } from '@woocommerce/components' ;
/ * *
* Internal dependencies
* /
import './style.scss'
import RecommendedExtensionsItem from './item' ;
import { STORE _KEY } from '../../data/constants' ;
const RecommendedExtensions = ( {
extensions ,
isLoading ,
title ,
description ,
category ,
} ) => {
if ( extensions . length === 0 && ! isLoading ) {
return null ;
}
const categoryClass = ( category ) ? ` woocommerce-marketing-recommended-extensions-card__category- ${ category } ` : '' ;
return (
< Card
title = { title }
description = { description }
className = { classnames (
'woocommerce-marketing-recommended-extensions-card' ,
categoryClass ,
) }
>
< Fragment >
{ isLoading ? < Spinner / > : (
< div className = { classnames (
'woocommerce-marketing-recommended-extensions-card__items' ,
` woocommerce-marketing-recommended-extensions-card__items--count- ${ extensions . length } ` ,
) } >
{ extensions . map ( ( extension ) => (
< RecommendedExtensionsItem
key = { extension . product }
2020-07-16 05:52:06 +00:00
category = { category }
2020-06-12 07:17:17 +00:00
{ ... extension }
/ >
) ) }
< / d i v >
) }
< / F r a g m e n t >
< / C a r d >
)
}
RecommendedExtensions . propTypes = {
/ * *
* Array of recommended extensions .
* /
extensions : PropTypes . arrayOf ( PropTypes . object ) . isRequired ,
/ * *
* Whether the card is loading .
* /
isLoading : PropTypes . bool . isRequired ,
/ * *
* Cart title .
* /
title : PropTypes . string ,
/ * *
* Card description .
* /
description : PropTypes . string ,
/ * *
* Category of extensions to display .
* /
category : PropTypes . string ,
} ;
RecommendedExtensions . defaultProps = {
title : _ _ ( 'Recommended extensions' , 'woocommerce-admin' ) ,
description : _ _ ( 'Great marketing requires the right tools. Take your marketing to the next level with our recommended marketing extensions.' , 'woocommerce-admin' ) ,
} ;
export { RecommendedExtensions }
export default compose (
withSelect ( ( select , props ) => {
const { getRecommendedPlugins , isResolving } = select ( STORE _KEY ) ;
return {
extensions : getRecommendedPlugins ( props . category ) ,
isLoading : isResolving ( 'getRecommendedPlugins' , [ props . category ] ) ,
} ;
} ) ,
withDispatch ( ( dispatch ) => {
const { createNotice } = dispatch ( 'core/notices' ) ;
return {
createNotice ,
} ;
} )
) ( RecommendedExtensions ) ;