File "active-attribute-filters.js"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/cache/cache/.wp-cli/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/active-filters/active-attribute-filters.js
File size: 2.17 KB
MIME-type: text/x-java
Charset: utf-8
/**
* External dependencies
*/
import {
useCollection,
useQueryStateByKey,
} from '@woocommerce/base-context/hooks';
import { decodeEntities } from '@wordpress/html-entities';
import { __ } from '@wordpress/i18n';
/**
* Internal dependencies
*/
import { renderRemovableListItem } from './utils';
import { removeAttributeFilterBySlug } from '../../utils/attributes-query';
/**
* Component that renders active attribute (terms) filters.
*
* @param {Object} props Incoming props for the component.
* @param {Object} props.attributeObject The attribute object.
* @param {Array} props.slugs The slugs for attributes.
* @param {string} props.operator The operator for the filter.
* @param {string} props.displayStyle The style used for displaying the filters.
*/
const ActiveAttributeFilters = ( {
attributeObject = {},
slugs = [],
operator = 'in',
displayStyle,
} ) => {
const { results, isLoading } = useCollection( {
namespace: '/wc/store',
resourceName: 'products/attributes/terms',
resourceValues: [ attributeObject.id ],
} );
const [ productAttributes, setProductAttributes ] = useQueryStateByKey(
'attributes',
[]
);
if ( isLoading ) {
return null;
}
const attributeLabel = attributeObject.label;
return (
<li>
<span className="wc-block-active-filters__list-item-type">
{ attributeLabel }:
</span>
<ul>
{ slugs.map( ( slug, index ) => {
const termObject = results.find( ( term ) => {
return term.slug === slug;
} );
if ( ! termObject ) {
return null;
}
let prefix = '';
if ( index > 0 && operator === 'and' ) {
prefix = (
<span className="wc-block-active-filters__list-item-operator">
{ __( 'and', 'woocommerce' ) }
</span>
);
}
return renderRemovableListItem( {
type: attributeLabel,
name: decodeEntities( termObject.name || slug ),
prefix,
removeCallback: () => {
removeAttributeFilterBySlug(
productAttributes,
setProductAttributes,
attributeObject,
slug
);
},
showLabel: false,
displayStyle,
} );
} ) }
</ul>
</li>
);
};
export default ActiveAttributeFilters;