2019-08-17 09:14:11 +00:00
|
|
|
/**
|
|
|
|
* Internal dependencies
|
|
|
|
*/
|
|
|
|
import { DEFAULT_COLUMNS, DEFAULT_ROWS } from '../constants';
|
|
|
|
|
2019-02-07 20:26:47 +00:00
|
|
|
export default function getShortcode( props, name ) {
|
|
|
|
const blockAttributes = props.attributes;
|
2019-01-31 22:55:54 +00:00
|
|
|
const {
|
2019-02-07 20:26:47 +00:00
|
|
|
attributes,
|
|
|
|
attrOperator,
|
2019-01-31 22:55:54 +00:00
|
|
|
categories,
|
|
|
|
catOperator,
|
|
|
|
orderby,
|
|
|
|
products,
|
2019-02-07 20:26:47 +00:00
|
|
|
} = blockAttributes;
|
2019-08-17 09:14:11 +00:00
|
|
|
const columns = blockAttributes.columns || DEFAULT_COLUMNS;
|
|
|
|
const rows = blockAttributes.rows || DEFAULT_ROWS;
|
2018-11-19 16:33:17 +00:00
|
|
|
|
|
|
|
const shortcodeAtts = new Map();
|
|
|
|
shortcodeAtts.set( 'limit', rows * columns );
|
|
|
|
shortcodeAtts.set( 'columns', columns );
|
|
|
|
|
2018-12-13 17:19:55 +00:00
|
|
|
if ( categories && categories.length ) {
|
|
|
|
shortcodeAtts.set( 'category', categories.join( ',' ) );
|
2018-12-17 20:16:01 +00:00
|
|
|
if ( catOperator && 'all' === catOperator ) {
|
|
|
|
shortcodeAtts.set( 'cat_operator', 'AND' );
|
|
|
|
}
|
2018-12-13 17:19:55 +00:00
|
|
|
}
|
|
|
|
|
2019-02-07 20:26:47 +00:00
|
|
|
if ( attributes && attributes.length ) {
|
|
|
|
shortcodeAtts.set( 'terms', attributes.map( ( { id } ) => id ).join( ',' ) );
|
|
|
|
shortcodeAtts.set( 'attribute', attributes[ 0 ].attr_slug );
|
|
|
|
if ( attrOperator && 'all' === attrOperator ) {
|
|
|
|
shortcodeAtts.set( 'terms_operator', 'AND' );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-13 17:19:55 +00:00
|
|
|
if ( orderby ) {
|
|
|
|
if ( 'price_desc' === orderby ) {
|
|
|
|
shortcodeAtts.set( 'orderby', 'price' );
|
|
|
|
shortcodeAtts.set( 'order', 'DESC' );
|
|
|
|
} else if ( 'price_asc' === orderby ) {
|
|
|
|
shortcodeAtts.set( 'orderby', 'price' );
|
|
|
|
shortcodeAtts.set( 'order', 'ASC' );
|
|
|
|
} else if ( 'date' === orderby ) {
|
|
|
|
shortcodeAtts.set( 'orderby', 'date' );
|
|
|
|
shortcodeAtts.set( 'order', 'DESC' );
|
|
|
|
} else {
|
|
|
|
shortcodeAtts.set( 'orderby', orderby );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Toggle shortcode atts depending on block type.
|
|
|
|
switch ( name ) {
|
|
|
|
case 'woocommerce/product-best-sellers':
|
|
|
|
shortcodeAtts.set( 'best_selling', '1' );
|
|
|
|
break;
|
2018-12-14 19:45:19 +00:00
|
|
|
case 'woocommerce/product-top-rated':
|
2018-12-15 01:48:46 +00:00
|
|
|
shortcodeAtts.set( 'orderby', 'rating' );
|
2018-12-14 20:21:56 +00:00
|
|
|
break;
|
2018-12-14 23:47:16 +00:00
|
|
|
case 'woocommerce/product-on-sale':
|
|
|
|
shortcodeAtts.set( 'on_sale', '1' );
|
|
|
|
break;
|
2018-12-18 19:45:49 +00:00
|
|
|
case 'woocommerce/product-new':
|
|
|
|
shortcodeAtts.set( 'orderby', 'date' );
|
|
|
|
shortcodeAtts.set( 'order', 'DESC' );
|
|
|
|
break;
|
2018-12-22 00:10:17 +00:00
|
|
|
case 'woocommerce/handpicked-products':
|
|
|
|
if ( ! products.length ) {
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
shortcodeAtts.set( 'ids', products.join( ',' ) );
|
|
|
|
shortcodeAtts.set( 'limit', products.length );
|
|
|
|
break;
|
2019-01-04 21:34:37 +00:00
|
|
|
case 'woocommerce/product-category':
|
|
|
|
if ( ! categories || ! categories.length ) {
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
break;
|
2019-02-07 20:26:47 +00:00
|
|
|
case 'woocommerce/products-by-attribute':
|
|
|
|
if ( ! attributes || ! attributes.length ) {
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
break;
|
2018-11-19 16:33:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Build the shortcode string out of the set shortcode attributes.
|
|
|
|
let shortcode = '[products';
|
|
|
|
for ( const [ key, value ] of shortcodeAtts ) {
|
|
|
|
shortcode += ' ' + key + '="' + value + '"';
|
|
|
|
}
|
|
|
|
shortcode += ']';
|
|
|
|
|
|
|
|
return shortcode;
|
|
|
|
}
|