1- import React from 'react' ;
1+ import React , { useState } from 'react' ;
22import { SearchResponse } from '@constructor-io/constructorio-client-javascript/lib/types' ;
33import useSearchResults , { UseSearchResultsReturn } from '../../hooks/useSearchResults' ;
44import ProductCard from '../ProductCard' ;
55import Filters from '../Filters' ;
6+ import FiltersIcon from '../Filters/FiltersIcon' ;
7+ import MobileModal from '../MobileModal' ;
68import Sort from '../Sort' ;
79import Pagination from '../Pagination' ;
810import ZeroResults from './ZeroResults/ZeroResults' ;
@@ -19,14 +21,28 @@ export type CioPlpGridWithRenderProps = IncludeRenderProps<CioPlpGridProps, UseS
1921
2022export default function CioPlpGrid ( props : CioPlpGridWithRenderProps ) {
2123 const { spinner, initialResponse, children } = props ;
24+ const [ isFilterOpen , setIsFilterOpen ] = useState ( false ) ;
2225
2326 const { data, status, refetch } = useSearchResults ( { initialSearchResponse : initialResponse } ) ;
27+
2428 if ( isPlpSearchDataRedirect ( data ) ) {
2529 // Do redirect
2630 return null ;
2731 }
2832
2933 const response = data ?. response ;
34+ const searchTerm = data ?. request ?. term ;
35+
36+ const renderTitle = (
37+ < span className = 'cio-products-header-title' >
38+ < b > { response ?. totalNumResults } </ b > results
39+ { searchTerm && (
40+ < >
41+ for < b > "{ searchTerm } "</ b >
42+ </ >
43+ ) }
44+ </ span >
45+ ) ;
3046
3147 return (
3248 < >
@@ -43,17 +59,30 @@ export default function CioPlpGrid(props: CioPlpGridWithRenderProps) {
4359 < >
4460 { response ?. results ?. length ? (
4561 < div className = 'cio-plp-grid' >
46- < div className = 'cio-filters-container' >
62+ < div className = 'cio-filters-container cio-large-screen-only ' >
4763 < Filters facets = { response . facets } />
4864 </ div >
4965 < div className = 'cio-products-container' >
5066 < div className = 'cio-products-header-container' >
51- < span >
52- < b > { response ?. totalNumResults } </ b > results
53- </ span >
54- < Sort sortOptions = { response . sortOptions } isOpen = { false } />
67+ < div className = 'cio-mobile-products-header-wrapper cio-mobile-only' >
68+ { renderTitle }
69+ </ div >
70+ < div className = 'cio-products-header-wrapper' >
71+ < button
72+ type = 'button'
73+ className = 'cio-filters-modal-button cio-mobile-only'
74+ onClick = { ( ) => setIsFilterOpen ( ! isFilterOpen ) } >
75+ { FiltersIcon }
76+ Filters
77+ </ button >
78+ < span className = 'cio-large-screen-only' > { renderTitle } </ span >
79+ < Sort sortOptions = { response . sortOptions } isOpen = { false } />
80+ </ div >
5581 </ div >
5682 < div className = 'cio-product-tiles-container' >
83+ < MobileModal isOpen = { isFilterOpen } setIsOpen = { setIsFilterOpen } >
84+ < Filters facets = { response . facets } />
85+ </ MobileModal >
5786 { response ?. results ?. map ( ( item ) => (
5887 < div className = 'cio-product-tile' >
5988 < ProductCard key = { item . itemId } item = { item } />
0 commit comments