woocommerce/plugins/woocommerce-blocks/assets/js/blocks/product-query/utils.tsx

55 lines
1.4 KiB
TypeScript

/**
* Internal dependencies
*/
import {
ProductQueryArguments,
ProductQueryBlock,
QueryVariation,
} from './types';
/**
* Identifies if a block is a Query block variation from our conventions
*
* We are extending Gutenberg's core Query block with our variations, and
* also adding extra namespaced attributes. If those namespaced attributes
* are present, we can be fairly sure it is our own registered variation.
*/
export function isWooQueryBlockVariation( block: ProductQueryBlock ) {
return (
block.name === 'core/query' &&
block.attributes.__woocommerceVariationProps &&
Object.values( QueryVariation ).includes(
block.attributes.__woocommerceVariationProps
.name as unknown as QueryVariation
)
);
}
/**
* Sets the new query arguments of a Product Query block
*
* Because we add a new set of deeply nested attributes to the query
* block, this utility function makes it easier to change just the
* options relating to our custom query, while keeping the code
* clean.
*/
export function setCustomQueryAttribute(
block: ProductQueryBlock,
attributes: Partial< ProductQueryArguments >
) {
const { __woocommerceVariationProps } = block.attributes;
block.setAttributes( {
__woocommerceVariationProps: {
...__woocommerceVariationProps,
attributes: {
...__woocommerceVariationProps.attributes,
query: {
...__woocommerceVariationProps.attributes?.query,
...attributes,
},
},
},
} );
}