diff --git a/modules/search/instant-search/components/search-filter-post-types.jsx b/modules/search/instant-search/components/search-filter-post-types.jsx index 188edb8cdca91..7a7bdde18f58f 100644 --- a/modules/search/instant-search/components/search-filter-post-types.jsx +++ b/modules/search/instant-search/components/search-filter-post-types.jsx @@ -17,7 +17,7 @@ export default class SearchFilterPostTypes extends Component { toggleFilter = () => { const selected = getCheckedInputNames( this.filtersList.current ); this.setState( { selected }, () => { - this.props.onChange( 'postTypes', selected ); + this.props.onChange( 'post_types', selected ); } ); }; diff --git a/modules/search/instant-search/components/search-filter-taxonomies.jsx b/modules/search/instant-search/components/search-filter-taxonomies.jsx index fbd93a7fcfdba..5afd3d2ac6f96 100644 --- a/modules/search/instant-search/components/search-filter-taxonomies.jsx +++ b/modules/search/instant-search/components/search-filter-taxonomies.jsx @@ -3,30 +3,51 @@ /** * External dependencies */ -import { h, Component } from 'preact'; +import { h, createRef, Component } from 'preact'; import strip from 'strip'; +import { getCheckedInputNames } from '../lib/dom'; export default class SearchFilterTaxonomies extends Component { + constructor( props ) { + super( props ); + this.state = { selected: this.props.initialValue }; + this.filtersList = createRef(); + } + + toggleFilter = () => { + const selected = getCheckedInputNames( this.filtersList.current ); + this.setState( { selected }, () => { + this.props.onChange( this.props.configuration.taxonomy, selected ); + } ); + }; + + renderTaxonomy = ( { key, doc_count: count } ) => { + return ( +
+ + +
+ ); + }; + render() { return (
-

{ this.props.filter.name }

-
); diff --git a/modules/search/instant-search/components/search-filters-widget.jsx b/modules/search/instant-search/components/search-filters-widget.jsx index 82907070f09a6..8c5a39fa03160 100644 --- a/modules/search/instant-search/components/search-filters-widget.jsx +++ b/modules/search/instant-search/components/search-filters-widget.jsx @@ -23,7 +23,14 @@ export default class SearchFiltersWidget extends Component { return results && ; case 'taxonomy': return ( - results && + results && ( + + ) ); case 'post_type': return ( @@ -31,7 +38,7 @@ export default class SearchFiltersWidget extends Component { diff --git a/modules/search/instant-search/lib/api.js b/modules/search/instant-search/lib/api.js index 70e523b6210e8..ec8c5d41f9e33 100644 --- a/modules/search/instant-search/lib/api.js +++ b/modules/search/instant-search/lib/api.js @@ -43,11 +43,16 @@ function buildFilterObject( filterQuery ) { } const filter = { bool: { must: [] } }; - if ( Array.isArray( filterQuery.postTypes ) && filterQuery.postTypes.length > 0 ) { - filterQuery.postTypes.forEach( postType => { + if ( Array.isArray( filterQuery.post_types ) && filterQuery.post_types.length > 0 ) { + filterQuery.post_types.forEach( postType => { filter.bool.must.push( { term: { post_type: postType } } ); } ); } + if ( Array.isArray( filterQuery.post_tag ) && filterQuery.post_tag.length > 0 ) { + filterQuery.post_tag.forEach( tag => { + filter.bool.must.push( { term: { 'tag.slug': tag } } ); + } ); + } return filter; } diff --git a/modules/search/instant-search/lib/query-string.js b/modules/search/instant-search/lib/query-string.js index 93e51631a28b1..be28d96e6d0ff 100644 --- a/modules/search/instant-search/lib/query-string.js +++ b/modules/search/instant-search/lib/query-string.js @@ -44,7 +44,9 @@ export function getFilterQuery( filterKey ) { } return { - postTypes: getFilterQueryByKey( 'postTypes' ), + category: getFilterQueryByKey( 'category' ), + post_tag: getFilterQueryByKey( 'post_tag' ), + post_types: getFilterQueryByKey( 'post_types' ), }; }