2022-09-01 13:13:19 +00:00
|
|
|
/**
|
|
|
|
* External dependencies
|
|
|
|
*/
|
2023-01-05 21:23:34 +00:00
|
|
|
import { getSetting } from '@woocommerce/settings';
|
2022-09-23 13:07:44 +00:00
|
|
|
import type { InnerBlockTemplate } from '@wordpress/blocks';
|
2022-09-01 13:13:19 +00:00
|
|
|
|
2022-08-18 08:02:21 +00:00
|
|
|
/**
|
|
|
|
* Internal dependencies
|
|
|
|
*/
|
2022-09-23 13:07:44 +00:00
|
|
|
import { QueryBlockAttributes } from './types';
|
2022-12-05 15:56:53 +00:00
|
|
|
import { VARIATION_NAME as PRODUCT_TITLE_ID } from './variations/elements/product-title';
|
2022-12-30 15:51:27 +00:00
|
|
|
import { VARIATION_NAME as PRODUCT_TEMPLATE_ID } from './variations/elements/product-template';
|
2022-08-18 08:02:21 +00:00
|
|
|
|
2022-10-27 17:40:10 +00:00
|
|
|
/**
|
|
|
|
* Returns an object without a key.
|
|
|
|
*/
|
|
|
|
function objectOmit< T, K extends keyof T >( obj: T, key: K ) {
|
|
|
|
const { [ key ]: omit, ...rest } = obj;
|
|
|
|
|
|
|
|
return rest;
|
|
|
|
}
|
|
|
|
|
|
|
|
export const QUERY_LOOP_ID = 'core/query';
|
|
|
|
|
2022-11-21 18:21:58 +00:00
|
|
|
export const DEFAULT_CORE_ALLOWED_CONTROLS = [ 'taxQuery', 'search' ];
|
2022-09-23 13:07:44 +00:00
|
|
|
|
2022-11-21 18:21:58 +00:00
|
|
|
export const ALL_PRODUCT_QUERY_CONTROLS = [
|
2022-11-29 13:44:52 +00:00
|
|
|
'attributes',
|
2022-11-21 18:21:58 +00:00
|
|
|
'presets',
|
|
|
|
'onSale',
|
|
|
|
'stockStatus',
|
2022-12-12 15:06:25 +00:00
|
|
|
'wooInherit',
|
2022-11-21 18:21:58 +00:00
|
|
|
];
|
2022-09-23 13:07:44 +00:00
|
|
|
|
|
|
|
export const DEFAULT_ALLOWED_CONTROLS = [
|
|
|
|
...DEFAULT_CORE_ALLOWED_CONTROLS,
|
|
|
|
...ALL_PRODUCT_QUERY_CONTROLS,
|
|
|
|
];
|
|
|
|
|
2022-10-27 17:40:10 +00:00
|
|
|
export const STOCK_STATUS_OPTIONS = getSetting< Record< string, string > >(
|
|
|
|
'stockStatusOptions',
|
|
|
|
[]
|
|
|
|
);
|
|
|
|
|
|
|
|
const GLOBAL_HIDE_OUT_OF_STOCK = getSetting< boolean >(
|
|
|
|
'hideOutOfStockItems',
|
|
|
|
false
|
|
|
|
);
|
|
|
|
|
2023-01-24 10:04:00 +00:00
|
|
|
const isArchiveProductTemplate = getSetting< boolean >(
|
|
|
|
'is_archive_product_template',
|
|
|
|
false
|
|
|
|
);
|
|
|
|
|
2022-09-23 13:07:44 +00:00
|
|
|
export const QUERY_DEFAULT_ATTRIBUTES: QueryBlockAttributes = {
|
2022-10-11 14:04:54 +00:00
|
|
|
allowedControls: DEFAULT_ALLOWED_CONTROLS,
|
2022-09-01 13:13:19 +00:00
|
|
|
displayLayout: {
|
|
|
|
type: 'flex',
|
|
|
|
columns: 3,
|
|
|
|
},
|
2022-08-18 08:02:21 +00:00
|
|
|
query: {
|
2022-12-05 12:46:50 +00:00
|
|
|
perPage: 9,
|
2022-08-18 08:02:21 +00:00
|
|
|
pages: 0,
|
|
|
|
offset: 0,
|
|
|
|
postType: 'product',
|
2022-12-12 15:06:25 +00:00
|
|
|
order: 'asc',
|
|
|
|
orderBy: 'title',
|
2022-08-18 08:02:21 +00:00
|
|
|
author: '',
|
|
|
|
search: '',
|
|
|
|
exclude: [],
|
|
|
|
sticky: '',
|
2023-01-24 10:04:00 +00:00
|
|
|
inherit: isArchiveProductTemplate,
|
2022-11-29 13:44:52 +00:00
|
|
|
__woocommerceAttributes: [],
|
2022-10-27 17:40:10 +00:00
|
|
|
__woocommerceStockStatus: GLOBAL_HIDE_OUT_OF_STOCK
|
|
|
|
? Object.keys( objectOmit( STOCK_STATUS_OPTIONS, 'outofstock' ) )
|
|
|
|
: Object.keys( STOCK_STATUS_OPTIONS ),
|
2022-08-18 08:02:21 +00:00
|
|
|
},
|
|
|
|
};
|
2022-09-01 13:13:19 +00:00
|
|
|
|
|
|
|
export const INNER_BLOCKS_TEMPLATE: InnerBlockTemplate[] = [
|
|
|
|
[
|
|
|
|
'core/post-template',
|
2022-12-30 15:51:27 +00:00
|
|
|
{ __woocommerceNamespace: PRODUCT_TEMPLATE_ID },
|
2022-09-01 13:13:19 +00:00
|
|
|
[
|
2022-09-23 13:07:44 +00:00
|
|
|
[ 'woocommerce/product-image' ],
|
2022-09-01 13:13:19 +00:00
|
|
|
[
|
|
|
|
'core/post-title',
|
|
|
|
{
|
2022-12-05 12:46:50 +00:00
|
|
|
textAlign: 'center',
|
2022-09-01 13:13:19 +00:00
|
|
|
level: 3,
|
2022-12-05 12:46:50 +00:00
|
|
|
fontSize: 'medium',
|
2022-12-05 15:56:53 +00:00
|
|
|
__woocommerceNamespace: PRODUCT_TITLE_ID,
|
2022-12-05 12:46:50 +00:00
|
|
|
},
|
|
|
|
[],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'woocommerce/product-price',
|
2023-01-20 14:56:29 +00:00
|
|
|
{
|
|
|
|
textAlign: 'center',
|
|
|
|
fontSize: 'small',
|
|
|
|
style: {
|
|
|
|
spacing: {
|
|
|
|
margin: { bottom: '1rem' },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2022-12-05 12:46:50 +00:00
|
|
|
[],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'woocommerce/product-button',
|
2023-01-20 15:23:00 +00:00
|
|
|
{
|
|
|
|
textAlign: 'center',
|
|
|
|
fontSize: 'small',
|
|
|
|
style: {
|
|
|
|
spacing: {
|
|
|
|
margin: { bottom: '1rem' },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2022-09-01 13:13:19 +00:00
|
|
|
[],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
],
|
2022-12-13 13:53:26 +00:00
|
|
|
[
|
|
|
|
'core/query-pagination',
|
|
|
|
{
|
|
|
|
layout: {
|
|
|
|
type: 'flex',
|
|
|
|
justifyContent: 'center',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[],
|
|
|
|
],
|
2023-01-05 21:23:34 +00:00
|
|
|
[ 'core/query-no-results' ],
|
2022-09-01 13:13:19 +00:00
|
|
|
];
|