rebase from live enviornment
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
* External dependencies
|
||||
*/
|
||||
import {
|
||||
AttributeObject,
|
||||
AttributeQuery,
|
||||
AttributeTerm,
|
||||
} from '@woocommerce/types';
|
||||
import { sort } from 'fast-sort';
|
||||
|
||||
/**
|
||||
* Given a query object, removes an attribute filter by a single slug.
|
||||
*
|
||||
* @param {Array} query Current query object.
|
||||
* @param {Function} setQuery Callback to update the current query object.
|
||||
* @param {Object} attribute An attribute object.
|
||||
* @param {string} slug Term slug to remove.
|
||||
*/
|
||||
export const removeAttributeFilterBySlug = (
|
||||
query: AttributeQuery[] = [],
|
||||
setQuery: ( query: AttributeQuery[] ) => void,
|
||||
attribute: AttributeObject,
|
||||
slug = ''
|
||||
) => {
|
||||
// Get current filter for provided attribute.
|
||||
const foundQuery = query.filter(
|
||||
( item ) => item.attribute === attribute.taxonomy
|
||||
);
|
||||
|
||||
const currentQuery = foundQuery.length ? foundQuery[ 0 ] : null;
|
||||
|
||||
if (
|
||||
! currentQuery ||
|
||||
! currentQuery.slug ||
|
||||
! Array.isArray( currentQuery.slug ) ||
|
||||
! currentQuery.slug.includes( slug )
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const newSlugs = currentQuery.slug.filter( ( item ) => item !== slug );
|
||||
|
||||
// Remove current attribute filter from query.
|
||||
const returnQuery = query.filter(
|
||||
( item ) => item.attribute !== attribute.taxonomy
|
||||
);
|
||||
|
||||
// Add a new query for selected terms, if provided.
|
||||
if ( newSlugs.length > 0 ) {
|
||||
currentQuery.slug = newSlugs.sort();
|
||||
returnQuery.push( currentQuery );
|
||||
}
|
||||
|
||||
setQuery( sort( returnQuery ).asc( 'attribute' ) );
|
||||
};
|
||||
|
||||
/**
|
||||
* Given a query object, sets the query up to filter by a given attribute and attribute terms.
|
||||
*
|
||||
* @param {Array} query Current query object.
|
||||
* @param {Function} setQuery Callback to update the current query object.
|
||||
* @param {Object} attribute An attribute object.
|
||||
* @param {Array} attributeTerms Array of term objects.
|
||||
* @param {string} operator Operator for the filter. Valid values: in, and.
|
||||
*
|
||||
* @return {Object} An attribute object.
|
||||
*/
|
||||
export const updateAttributeFilter = (
|
||||
query: AttributeQuery[] = [],
|
||||
setQuery: ( query: AttributeQuery[] ) => void,
|
||||
attribute?: AttributeObject,
|
||||
attributeTerms: AttributeTerm[] = [],
|
||||
operator: 'in' | 'and' = 'in'
|
||||
) => {
|
||||
if ( ! attribute || ! attribute.taxonomy ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const returnQuery = query.filter(
|
||||
( item ) => item.attribute !== attribute.taxonomy
|
||||
);
|
||||
|
||||
if ( attributeTerms.length === 0 ) {
|
||||
setQuery( returnQuery );
|
||||
} else {
|
||||
returnQuery.push( {
|
||||
attribute: attribute.taxonomy,
|
||||
operator,
|
||||
slug: attributeTerms.map( ( { slug } ) => slug ).sort(),
|
||||
} );
|
||||
setQuery( sort( returnQuery ).asc( 'attribute' ) );
|
||||
}
|
||||
|
||||
return returnQuery;
|
||||
};
|
||||
Reference in New Issue
Block a user