Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Product Collection - Add keyword control to sidebar settings #9583

Merged
merged 20 commits into from
May 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
e4abb25
Add columns control to product collection block editor settings
imanish003 May 15, 2023
43b2d1c
Merge branch 'trunk' into 9356-product-collection-editor-settings-col…
imanish003 May 15, 2023
65582af
Refactor: Simplify Fallback Return in ColumnsControl Component
imanish003 May 16, 2023
e03ecf6
Feature: Add 'Order By' Control to Product Collection Inspector
imanish003 May 16, 2023
91b5cb4
Merge branch 'trunk' of https://github.com/woocommerce/woocommerce-bl…
imanish003 May 16, 2023
5e5c6b1
Add more options to OrderBy type
imanish003 May 16, 2023
9cfa07e
Merge branch 'trunk' into 9359-product-collection-editor-settings-ord…
imanish003 May 17, 2023
7954c13
Add orderby handling on frontend & editor
imanish003 May 17, 2023
b756198
Merge branch 'trunk' into 9359-product-collection-editor-settings-ord…
imanish003 May 17, 2023
bed6be4
Merge branch 'trunk' into 9359-product-collection-editor-settings-ord…
imanish003 May 18, 2023
724f894
Merge branch 'trunk' of https://github.com/woocommerce/woocommerce-bl…
imanish003 May 19, 2023
e5a43cf
Add 'on sale' filter and enhance settings management in product colle…
imanish003 May 19, 2023
2e77956
Merge branch 'trunk' into 9361-product-collection-filters-on-sale
imanish003 May 22, 2023
a832d97
Add stock status filter to WooCommerce product collection block
imanish003 May 24, 2023
c4188da
Refactor Stock Status control of Product Collection block
imanish003 May 24, 2023
2d5e3f9
Merge branch 'trunk' into 9362-product-collection-filters-stock-status
imanish003 May 24, 2023
07fc6fe
Add keyword search control to Product Collection block
imanish003 May 24, 2023
1f6a425
Resolve conflicts
imanish003 May 25, 2023
acbdc06
Resolve conflicts
imanish003 May 26, 2023
3b1b6c6
remove unused import of getDefaultStockStatuses
imanish003 May 26, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/**
* External dependencies
*/
import { getSetting } from '@woocommerce/settings';
import { objectOmit } from '@woocommerce/utils';

/**
* Internal dependencies
*/
import blockJson from '../block.json';
import {
ProductCollectionAttributes,
ProductCollectionQuery,
TProductCollectionOrder,
TProductCollectionOrderBy,
} from '../types';

const defaultQuery = blockJson.attributes.query.default;

export const STOCK_STATUS_OPTIONS = getSetting< Record< string, string > >(
'stockStatusOptions',
[]
);

const GLOBAL_HIDE_OUT_OF_STOCK = getSetting< boolean >(
'hideOutOfStockItems',
false
);

export const getDefaultStockStatuses = () => {
return GLOBAL_HIDE_OUT_OF_STOCK
? Object.keys( objectOmit( STOCK_STATUS_OPTIONS, 'outofstock' ) )
: Object.keys( STOCK_STATUS_OPTIONS );
};

export const DEFAULT_FILTERS: Partial< ProductCollectionQuery > = {
woocommerceOnSale: defaultQuery.woocommerceOnSale,
woocommerceStockStatus: getDefaultStockStatuses(),
search: '',
};

export const getDefaultSettings = (
currentAttributes: ProductCollectionAttributes
): Partial< ProductCollectionAttributes > => ( {
displayLayout: blockJson.attributes.displayLayout.default,
query: {
...currentAttributes.query,
orderBy: blockJson.attributes.query.default
.orderBy as TProductCollectionOrderBy,
order: blockJson.attributes.query.default
.order as TProductCollectionOrder,
},
} );
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import OnSaleControl from './on-sale-control';
import { setQueryAttribute } from './utils';
import { DEFAULT_FILTERS, getDefaultSettings } from '../constants';
import StockStatusControl from './stock-status-control';
import KeywordControl from './keyword-control';

const ProductCollectionInspectorControls = (
props: BlockEditProps< ProductCollectionAttributes >
Expand All @@ -41,12 +42,14 @@ const ProductCollectionInspectorControls = (

<ToolsPanel
label={ __( 'Filters', 'woo-gutenberg-products-block' ) }
resetAll={ () => {
resetAll={ ( resetAllFilters: ( () => void )[] ) => {
setQueryAttribute( props, DEFAULT_FILTERS );
resetAllFilters.forEach( ( resetFilter ) => resetFilter() );
} }
>
<OnSaleControl { ...props } />
<StockStatusControl { ...props } />
<KeywordControl { ...props } />
</ToolsPanel>
</InspectorControls>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/**
* External dependencies
*/
import { __ } from '@wordpress/i18n';
import { BlockEditProps } from '@wordpress/blocks';
import { useEffect, useState } from '@wordpress/element';
import { useDebounce } from '@wordpress/compose';
import {
TextControl,
// @ts-expect-error Using experimental features
// eslint-disable-next-line @wordpress/no-unsafe-wp-apis
__experimentalToolsPanelItem as ToolsPanelItem,
} from '@wordpress/components';

/**
* Internal dependencies
*/
import { ProductCollectionAttributes } from '../types';
import { setQueryAttribute } from './utils';

const KeywordControl = (
props: BlockEditProps< ProductCollectionAttributes >
) => {
const { query } = props.attributes;
const [ querySearch, setQuerySearch ] = useState( query.search );

const onChangeDebounced = useDebounce( () => {
if ( query.search !== querySearch ) {
setQueryAttribute( props, { search: querySearch } );
}
}, 250 );

useEffect( () => {
onChangeDebounced();
return onChangeDebounced.cancel;
}, [ querySearch, onChangeDebounced ] );

return (
<ToolsPanelItem
hasValue={ () => !! querySearch }
label={ __( 'Keyword', 'woo-gutenberg-products-block' ) }
onDeselect={ () => setQuerySearch( '' ) }
resetAllFilter={ () => setQuerySearch( '' ) }
>
<TextControl
label={ __( 'Keyword', 'woo-gutenberg-products-block' ) }
value={ querySearch }
onChange={ setQuerySearch }
/>
</ToolsPanelItem>
);
};

export default KeywordControl;
1 change: 1 addition & 0 deletions src/BlockTypes/ProductCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ public function build_query( $query, $block, $page ) {
'post_type' => 'product',
'tax_query' => array(),
'paged' => $page,
's' => $block_context_query['search'],
);

$is_on_sale = $block_context_query['woocommerceOnSale'] ?? false;
Expand Down