@blaze-cms/react-page-builder 0.113.0 → 0.114.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/lib/components/SearchFilter/SearchFilter/SearchFilter.js +53 -20
  3. package/lib/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
  4. package/lib/components/SearchFilter/SearchFilterContainer.js +8 -4
  5. package/lib/components/SearchFilter/SearchFilterContainer.js.map +1 -1
  6. package/lib/components/SearchFilter/constants.js +13 -1
  7. package/lib/components/SearchFilter/constants.js.map +1 -1
  8. package/lib/components/SearchFilter/helpers/get-responsive-filter-classnames.js +29 -0
  9. package/lib/components/SearchFilter/helpers/get-responsive-filter-classnames.js.map +1 -0
  10. package/lib/components/SearchFilter/helpers/index.js +8 -0
  11. package/lib/components/SearchFilter/helpers/index.js.map +1 -1
  12. package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js +47 -21
  13. package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
  14. package/lib-es/components/SearchFilter/SearchFilterContainer.js +8 -4
  15. package/lib-es/components/SearchFilter/SearchFilterContainer.js.map +1 -1
  16. package/lib-es/components/SearchFilter/constants.js +12 -1
  17. package/lib-es/components/SearchFilter/constants.js.map +1 -1
  18. package/lib-es/components/SearchFilter/helpers/get-responsive-filter-classnames.js +20 -0
  19. package/lib-es/components/SearchFilter/helpers/get-responsive-filter-classnames.js.map +1 -0
  20. package/lib-es/components/SearchFilter/helpers/index.js +2 -1
  21. package/lib-es/components/SearchFilter/helpers/index.js.map +1 -1
  22. package/package.json +2 -2
  23. package/src/components/SearchFilter/SearchFilter/SearchFilter.js +71 -25
  24. package/src/components/SearchFilter/SearchFilterContainer.js +8 -4
  25. package/src/components/SearchFilter/constants.js +14 -1
  26. package/src/components/SearchFilter/helpers/get-responsive-filter-classnames.js +22 -0
  27. package/src/components/SearchFilter/helpers/index.js +2 -0
  28. package/tests/unit/src/components/SearchFilter/SearchFilter/SearchFilter.test.js +29 -3
  29. package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/SearchFilter.test.js.snap +304 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SearchFilter/SearchFilter/SearchFilter.js"],"names":["React","useState","useEffect","useReducer","PropTypes","classnames","debounce","FiltersList","isDeviceDesktop","buildQuery","getInitialFilterValues","CloseMobileForm","ResetDesktopForm","MobileFormToolbar","SEARCH","REFINE","reducer","state","action","newValues","type","shouldSearch","Error","SearchFilter","searchFilterRef","data","filters","hasUrl","entity","handleSearch","name","isCollapsedOnResponsive","displaySearchFilter","setDisplaySearchFilter","initialFilterValues","groupAfter","isDesktop","setIsDesktop","pageWidth","setPageWidth","moreFiltersCollapsed","setMoreFiltersCollapsed","filterValues","dispatch","handleSubmit","newQuery","window","innerWidth","handleResize","target","addEventListener","removeEventListener","isDesktopFormDisplayed","isMobileFormDisplayed","formClass","moreFiltersWrapperClass","moreFiltersTogglerClass","formId","handleReset","updateFilterValues","e","preventDefault","slice","propTypes","object","isRequired","array","bool","string","func","number"],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useReducer } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport FiltersList from './FiltersList';\nimport { isDeviceDesktop, buildQuery, getInitialFilterValues } from '../helpers';\nimport CloseMobileForm from './CloseMobileForm';\nimport ResetDesktopForm from './ResetDesktopForm';\nimport MobileFormToolbar from './MobileFormToolbar';\nimport { SEARCH, REFINE } from '../constants';\n\nconst reducer = (state, action) => {\n const { newValues, type, shouldSearch = true } = action;\n\n switch (type) {\n case 'update':\n return { ...state, ...newValues, shouldSearch };\n case 'resetSearch':\n return { ...state, shouldSearch: false };\n case 'reset':\n return { ...newValues, shouldSearch };\n default:\n throw new Error();\n }\n};\n\nconst SearchFilter = ({\n searchFilterRef,\n data,\n filters,\n hasUrl,\n entity,\n handleSearch,\n name,\n isCollapsedOnResponsive,\n displaySearchFilter,\n setDisplaySearchFilter,\n initialFilterValues,\n groupAfter\n}) => {\n const [isDesktop, setIsDesktop] = useState(true);\n const [pageWidth, setPageWidth] = useState(null);\n const [moreFiltersCollapsed, setMoreFiltersCollapsed] = useState(true);\n const [filterValues, dispatch] = useReducer(reducer, initialFilterValues);\n\n const handleSubmit = debounce(newValues => {\n const newQuery = buildQuery(newValues, filters);\n handleSearch(newQuery);\n }, 200);\n\n useEffect(\n () => {\n if (window && !pageWidth) {\n setPageWidth(window.innerWidth);\n setIsDesktop(isDeviceDesktop());\n }\n\n const handleResize = ({ target: { innerWidth } }) => {\n setIsDesktop(isDeviceDesktop());\n setPageWidth(innerWidth);\n if (isDesktop) setDisplaySearchFilter(false);\n };\n\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n },\n [isDesktop, pageWidth, setDisplaySearchFilter]\n );\n\n useEffect(\n () => {\n if (filterValues.shouldSearch) {\n handleSubmit(filterValues);\n dispatch({ type: 'resetSearch' });\n }\n },\n [filterValues, handleSubmit]\n );\n\n let isDesktopFormDisplayed = true;\n let isMobileFormDisplayed = false;\n\n if (!isDesktop && isCollapsedOnResponsive) {\n isMobileFormDisplayed = displaySearchFilter;\n isDesktopFormDisplayed = false;\n }\n\n const formClass = classnames({\n 'filter__form filter__form--mobile': isMobileFormDisplayed\n });\n\n const moreFiltersWrapperClass = classnames('filter__more-filters-wrapper', {\n 'filter__more-filters-wrapper--open': !moreFiltersCollapsed\n });\n\n const moreFiltersTogglerClass = classnames('filter__more-filters-toggler', {\n 'filter__more-filters-toggler--open': !moreFiltersCollapsed\n });\n\n const formId = `filter-${name}-form`;\n\n const handleReset = () => {\n const newValues = getInitialFilterValues(data, filters, {});\n\n dispatch({ newValues, type: 'reset' });\n };\n\n const updateFilterValues = (newValues, shouldSearch) => {\n dispatch({ newValues, shouldSearch, type: 'update' });\n };\n\n return (\n <>\n {isDesktopFormDisplayed || isMobileFormDisplayed ? (\n <form\n ref={searchFilterRef}\n className={formClass}\n data-testid={formId}\n id={formId}\n onSubmit={e => {\n e.preventDefault();\n const newQuery = buildQuery(filterValues, filters);\n handleSearch(newQuery);\n }}>\n {isMobileFormDisplayed && (\n <CloseMobileForm handleClose={() => setDisplaySearchFilter(false)} />\n )}\n\n <div className=\"filter filter--search-refine\">\n {isDesktopFormDisplayed && <ResetDesktopForm handleReset={handleReset} />}\n\n <div className=\"filter__wrapper filter__wrapper--search-refine\">\n {!groupAfter && (\n <FiltersList\n data={data}\n filters={filters}\n hasUrl={hasUrl}\n entity={entity}\n filterValues={filterValues}\n updateFilterValues={updateFilterValues}\n />\n )}\n\n {!!groupAfter && (\n <>\n <FiltersList\n data={data}\n filters={filters.slice(0, groupAfter)}\n hasUrl={hasUrl}\n entity={entity}\n filterValues={filterValues}\n updateFilterValues={updateFilterValues}\n />\n\n <button\n className={moreFiltersTogglerClass}\n type=\"button\"\n onClick={() => setMoreFiltersCollapsed(!moreFiltersCollapsed)}>\n More filters\n </button>\n\n <div className={moreFiltersWrapperClass}>\n <div className=\"filter__more-filters-content\">\n <FiltersList\n data={data}\n filters={filters.slice(groupAfter)}\n hasUrl={hasUrl}\n entity={entity}\n filterValues={filterValues}\n updateFilterValues={updateFilterValues}\n />\n </div>\n\n <div className=\"filter__more-filters-buttons\">\n <ResetDesktopForm handleReset={handleReset} />\n\n <button className=\"button button--full-width\" type=\"submit\">\n {SEARCH}\n </button>\n </div>\n </div>\n </>\n )}\n\n <br />\n\n {isDesktopFormDisplayed && (\n <button className=\"button button--full-width\" type=\"submit\">\n {SEARCH}\n </button>\n )}\n </div>\n </div>\n\n {isMobileFormDisplayed && <MobileFormToolbar formId={formId} handleReset={handleReset} />}\n </form>\n ) : (\n <>\n {isCollapsedOnResponsive && (\n <div\n className=\"filter__refine filter__refine--mobile-close\"\n data-testid=\"refine-mobile\">\n <div role=\"button\" onClick={() => setDisplaySearchFilter(true)}>\n {REFINE}\n </div>\n </div>\n )}\n </>\n )}\n </>\n );\n};\n\nSearchFilter.propTypes = {\n data: PropTypes.object.isRequired,\n filters: PropTypes.array.isRequired,\n searchFilterRef: PropTypes.object.isRequired,\n hasUrl: PropTypes.bool.isRequired,\n entity: PropTypes.string.isRequired,\n handleSearch: PropTypes.func.isRequired,\n name: PropTypes.string.isRequired,\n displaySearchFilter: PropTypes.bool.isRequired,\n setDisplaySearchFilter: PropTypes.func.isRequired,\n isCollapsedOnResponsive: PropTypes.bool.isRequired,\n groupAfter: PropTypes.number.isRequired,\n initialFilterValues: PropTypes.object.isRequired\n};\n\nexport default SearchFilter;\n"],"file":"SearchFilter.js"}
1
+ {"version":3,"sources":["../../../../src/components/SearchFilter/SearchFilter/SearchFilter.js"],"names":["React","useState","useEffect","useReducer","PropTypes","classnames","debounce","FiltersList","isDeviceDesktop","buildQuery","getInitialFilterValues","getResponsiveFilterClassnames","CloseMobileForm","ResetDesktopForm","MobileFormToolbar","SEARCH","REFINE","MORE_FILTERS_CLASSES","reducer","state","action","newValues","type","shouldSearch","Error","SearchFilter","searchFilterRef","data","filters","hasUrl","entity","handleSearch","name","isCollapsedOnResponsive","displaySearchFilter","setDisplaySearchFilter","initialFilterValues","groupAfterDesktop","groupAfterMobile","isDesktop","setIsDesktop","pageWidth","setPageWidth","moreFiltersMobileCollapsed","setMoreFiltersMobileCollapsed","moreFiltersDesktopCollapsed","setMoreFiltersDesktopCollapsed","filterValues","dispatch","handleSubmit","newQuery","window","innerWidth","handleResize","target","addEventListener","removeEventListener","isDesktopFormDisplayed","isMobileFormDisplayed","formClass","moreFiltersMobileWrapperClass","moreFiltersMobileTogglerClass","moreFiltersDesktopWrapperClass","moreFiltersDesktopTogglerClass","formId","handleReset","updateFilterValues","shouldGroup","e","preventDefault","slice","MOBILE_CONTENT","DESKTOP_CONTENT","DESKTOP_BUTTONS","MOBILE_BUTTONS","propTypes","object","isRequired","array","bool","string","func","number"],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useReducer } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport FiltersList from './FiltersList';\nimport {\n isDeviceDesktop,\n buildQuery,\n getInitialFilterValues,\n getResponsiveFilterClassnames\n} from '../helpers';\nimport CloseMobileForm from './CloseMobileForm';\nimport ResetDesktopForm from './ResetDesktopForm';\nimport MobileFormToolbar from './MobileFormToolbar';\nimport { SEARCH, REFINE, MORE_FILTERS_CLASSES } from '../constants';\n\nconst reducer = (state, action) => {\n const { newValues, type, shouldSearch = true } = action;\n\n switch (type) {\n case 'update':\n return { ...state, ...newValues, shouldSearch };\n case 'resetSearch':\n return { ...state, shouldSearch: false };\n case 'reset':\n return { ...newValues, shouldSearch };\n default:\n throw new Error();\n }\n};\n\nconst SearchFilter = ({\n searchFilterRef,\n data,\n filters,\n hasUrl,\n entity,\n handleSearch,\n name,\n isCollapsedOnResponsive,\n displaySearchFilter,\n setDisplaySearchFilter,\n initialFilterValues,\n groupAfterDesktop,\n groupAfterMobile\n}) => {\n const [isDesktop, setIsDesktop] = useState(true);\n const [pageWidth, setPageWidth] = useState(null);\n const [moreFiltersMobileCollapsed, setMoreFiltersMobileCollapsed] = useState(true);\n const [moreFiltersDesktopCollapsed, setMoreFiltersDesktopCollapsed] = useState(true);\n const [filterValues, dispatch] = useReducer(reducer, initialFilterValues);\n\n const handleSubmit = debounce(newValues => {\n const newQuery = buildQuery(newValues, filters);\n handleSearch(newQuery);\n }, 200);\n\n useEffect(\n () => {\n if (window && !pageWidth) {\n setPageWidth(window.innerWidth);\n setIsDesktop(isDeviceDesktop());\n }\n\n const handleResize = ({ target: { innerWidth } }) => {\n setIsDesktop(isDeviceDesktop());\n setPageWidth(innerWidth);\n if (isDesktop) setDisplaySearchFilter(false);\n };\n\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n },\n [isDesktop, pageWidth, setDisplaySearchFilter]\n );\n\n useEffect(\n () => {\n if (filterValues.shouldSearch) {\n handleSubmit(filterValues);\n dispatch({ type: 'resetSearch' });\n }\n },\n [filterValues, handleSubmit]\n );\n\n let isDesktopFormDisplayed = true;\n let isMobileFormDisplayed = false;\n\n if (!isDesktop && isCollapsedOnResponsive) {\n isMobileFormDisplayed = displaySearchFilter;\n isDesktopFormDisplayed = false;\n }\n\n const formClass = classnames({\n 'filter__form filter__form--mobile': isMobileFormDisplayed\n });\n\n const {\n moreFiltersMobileWrapperClass,\n moreFiltersMobileTogglerClass,\n moreFiltersDesktopWrapperClass,\n moreFiltersDesktopTogglerClass\n } = getResponsiveFilterClassnames(moreFiltersDesktopCollapsed, moreFiltersMobileCollapsed);\n\n const formId = `filter-${name}-form`;\n\n const handleReset = () => {\n const newValues = getInitialFilterValues(data, filters, {});\n\n dispatch({ newValues, type: 'reset' });\n };\n\n const updateFilterValues = (newValues, shouldSearch) => {\n dispatch({ newValues, shouldSearch, type: 'update' });\n };\n\n const shouldGroup = !!(groupAfterDesktop || groupAfterMobile);\n\n return (\n <>\n {isDesktopFormDisplayed || isMobileFormDisplayed ? (\n <form\n ref={searchFilterRef}\n className={formClass}\n data-testid={formId}\n id={formId}\n onSubmit={e => {\n e.preventDefault();\n const newQuery = buildQuery(filterValues, filters);\n handleSearch(newQuery);\n }}>\n {isMobileFormDisplayed && (\n <CloseMobileForm handleClose={() => setDisplaySearchFilter(false)} />\n )}\n\n <div className=\"filter filter--search-refine\">\n {isDesktopFormDisplayed && <ResetDesktopForm handleReset={handleReset} />}\n\n <div className=\"filter__wrapper filter__wrapper--search-refine\">\n {!shouldGroup && (\n <FiltersList\n data={data}\n filters={filters}\n hasUrl={hasUrl}\n entity={entity}\n filterValues={filterValues}\n updateFilterValues={updateFilterValues}\n />\n )}\n\n {shouldGroup && (\n <>\n <FiltersList\n data={data}\n filters={filters.slice(0, groupAfterMobile)}\n hasUrl={hasUrl}\n entity={entity}\n filterValues={filterValues}\n updateFilterValues={updateFilterValues}\n />\n\n {!!groupAfterMobile && (\n <button\n className={moreFiltersMobileTogglerClass}\n type=\"button\"\n onClick={() => setMoreFiltersMobileCollapsed(!moreFiltersMobileCollapsed)}>\n Filters\n </button>\n )}\n\n <div className={moreFiltersMobileWrapperClass}>\n <div className={MORE_FILTERS_CLASSES.MOBILE_CONTENT}>\n <FiltersList\n data={data}\n filters={filters.slice(\n groupAfterMobile,\n groupAfterDesktop ? groupAfterDesktop - 1 : 0\n )}\n hasUrl={hasUrl}\n entity={entity}\n filterValues={filterValues}\n updateFilterValues={updateFilterValues}\n />\n\n {!!groupAfterDesktop && (\n <button\n className={moreFiltersDesktopTogglerClass}\n type=\"button\"\n onClick={() =>\n setMoreFiltersDesktopCollapsed(!moreFiltersDesktopCollapsed)\n }>\n More filters\n </button>\n )}\n\n <div className={moreFiltersDesktopWrapperClass}>\n <div className={MORE_FILTERS_CLASSES.DESKTOP_CONTENT}>\n <FiltersList\n data={data}\n filters={filters.slice(groupAfterDesktop)}\n hasUrl={hasUrl}\n entity={entity}\n filterValues={filterValues}\n updateFilterValues={updateFilterValues}\n />\n </div>\n\n <div className={MORE_FILTERS_CLASSES.DESKTOP_BUTTONS}>\n <ResetDesktopForm handleReset={handleReset} />\n\n <button className=\"button button--full-width\" type=\"submit\">\n {SEARCH}\n </button>\n </div>\n </div>\n </div>\n\n <div className={MORE_FILTERS_CLASSES.MOBILE_BUTTONS}>\n <ResetDesktopForm handleReset={handleReset} />\n\n <button className=\"button button--full-width\" type=\"submit\">\n {SEARCH}\n </button>\n </div>\n </div>\n </>\n )}\n\n <br />\n\n {isDesktopFormDisplayed && (\n <button className=\"button button--full-width\" type=\"submit\">\n {SEARCH}\n </button>\n )}\n </div>\n </div>\n\n {isMobileFormDisplayed && <MobileFormToolbar formId={formId} handleReset={handleReset} />}\n </form>\n ) : (\n <>\n {isCollapsedOnResponsive && (\n <div\n className=\"filter__refine filter__refine--mobile-close\"\n data-testid=\"refine-mobile\">\n <div role=\"button\" onClick={() => setDisplaySearchFilter(true)}>\n {REFINE}\n </div>\n </div>\n )}\n </>\n )}\n </>\n );\n};\n\nSearchFilter.propTypes = {\n data: PropTypes.object.isRequired,\n filters: PropTypes.array.isRequired,\n searchFilterRef: PropTypes.object.isRequired,\n hasUrl: PropTypes.bool.isRequired,\n entity: PropTypes.string.isRequired,\n handleSearch: PropTypes.func.isRequired,\n name: PropTypes.string.isRequired,\n displaySearchFilter: PropTypes.bool.isRequired,\n setDisplaySearchFilter: PropTypes.func.isRequired,\n isCollapsedOnResponsive: PropTypes.bool.isRequired,\n groupAfterDesktop: PropTypes.number.isRequired,\n groupAfterMobile: PropTypes.number.isRequired,\n initialFilterValues: PropTypes.object.isRequired\n};\n\nexport default SearchFilter;\n"],"file":"SearchFilter.js"}
@@ -17,7 +17,8 @@ const SearchFilterContainer = ({
17
17
  filters,
18
18
  name,
19
19
  isCollapsedOnResponsive,
20
- groupAfter
20
+ groupAfterMobile,
21
+ groupAfterDesktop
21
22
  }) => {
22
23
  const router = useRouter();
23
24
  const searchFilterRef = useRef(null);
@@ -127,7 +128,8 @@ const SearchFilterContainer = ({
127
128
  isCollapsedOnResponsive: isCollapsedOnResponsive,
128
129
  displaySearchFilter: displaySearchFilter,
129
130
  setDisplaySearchFilter: setDisplaySearchFilter,
130
- groupAfter: groupAfter
131
+ groupAfterMobile: groupAfterMobile,
132
+ groupAfterDesktop: groupAfterDesktop
131
133
  });
132
134
  };
133
135
 
@@ -137,14 +139,16 @@ SearchFilterContainer.propTypes = {
137
139
  filters: PropTypes.array,
138
140
  name: PropTypes.string.isRequired,
139
141
  isCollapsedOnResponsive: PropTypes.bool,
140
- groupAfter: PropTypes.number
142
+ groupAfterMobile: PropTypes.number,
143
+ groupAfterDesktop: PropTypes.number
141
144
  };
142
145
  SearchFilterContainer.defaultProps = {
143
146
  url: null,
144
147
  filters: [],
145
148
  entity: '',
146
149
  isCollapsedOnResponsive: true,
147
- groupAfter: 0
150
+ groupAfterMobile: 0,
151
+ groupAfterDesktop: 0
148
152
  };
149
153
  export default withTitle(SearchFilterContainer);
150
154
  //# sourceMappingURL=SearchFilterContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SearchFilter/SearchFilterContainer.js"],"names":["React","useState","useRef","useRouter","useQuery","PropTypes","parseUrl","stringify","SearchFilter","withTitle","getSearchPublishedContent","buildNewQuery","buildRawQueryStringified","getInitialFilterValues","decodeValue","getEntityData","RAW_RESULTS","RANGE","CHECKBOX_SELECT","SCROLL_OFFSET","SearchFilterContainer","entity","url","filters","name","isCollapsedOnResponsive","groupAfter","router","searchFilterRef","key","setKey","displaySearchFilter","setDisplaySearchFilter","hasUrl","currentUrl","query","sort","sortby","asPath","sortValues","baseQuery","action","rawQueryStringified","checkboxSelectValues","rangeValues","forEach","type","propsToDisplay","includes","push","docType","data","error","loading","variables","limit","skip","message","length","searchPublishedContent","rawResults","aggregations","filterData","initialFilterValues","handleSearch","newQuery","scrollToFirstList","shallow","scroll","then","Date","now","newUrl","list","document","getElementsByClassName","shouldScrollToFirstList","window","scrollTo","left","top","pageYOffset","getBoundingClientRect","propTypes","string","array","isRequired","bool","number","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState, useRef } from 'react';\nimport { useRouter } from 'next/router';\nimport { useQuery } from '@apollo/react-hooks';\nimport PropTypes from 'prop-types';\nimport { parseUrl, stringify } from 'query-string';\nimport SearchFilter from './SearchFilter';\nimport { withTitle } from '../../HOC';\nimport { getSearchPublishedContent } from '../../application/query';\nimport {\n buildNewQuery,\n buildRawQueryStringified,\n getInitialFilterValues,\n decodeValue\n} from './helpers';\n\nimport { getEntityData } from '../../helpers';\nimport { RAW_RESULTS, RANGE, CHECKBOX_SELECT } from './constants';\nimport { SCROLL_OFFSET } from '../../constants';\n\nconst SearchFilterContainer = ({\n entity,\n url,\n filters,\n name,\n isCollapsedOnResponsive,\n groupAfter\n}) => {\n const router = useRouter();\n const searchFilterRef = useRef(null);\n const [key, setKey] = useState(`filter-${name}`);\n const [displaySearchFilter, setDisplaySearchFilter] = useState(false);\n const hasUrl = !!url;\n const {\n url: currentUrl,\n query: { sort, sortby },\n query\n } = parseUrl(decodeValue(router.asPath));\n const sortValues = sort && sortby ? stringify({ sort, sortby }) : '';\n const baseQuery = sortValues ? `${currentUrl}?${sortValues}` : currentUrl;\n\n const action = getSearchPublishedContent(RAW_RESULTS);\n\n let rawQueryStringified = '';\n\n const checkboxSelectValues = [];\n const rangeValues = [];\n\n filters.forEach(({ type, propsToDisplay }) => {\n if (CHECKBOX_SELECT.includes(type)) {\n checkboxSelectValues.push(propsToDisplay[0]);\n } else if (type === RANGE) {\n rangeValues.push(...propsToDisplay);\n }\n });\n\n const { docType } = getEntityData(entity);\n\n rawQueryStringified = buildRawQueryStringified(checkboxSelectValues, rangeValues, docType);\n\n const { data, error, loading } = useQuery(action, {\n variables: { rawQueryStringified, limit: 0 }, // we only want aggs so limit=0 for no search results\n skip: !rawQueryStringified\n });\n\n if (loading) return null;\n if (error) return error.message;\n if (!filters.length) return null;\n\n const { searchPublishedContent: { rawResults: { aggregations: filterData = {} } = {} } = {} } =\n data || {};\n\n const initialFilterValues = getInitialFilterValues(filterData, filters, query);\n\n const handleSearch = newQuery => {\n setDisplaySearchFilter(false);\n\n if (!newQuery) {\n scrollToFirstList();\n return router.push('/Resolver', baseQuery, { shallow: !hasUrl, scroll: false }).then(() => {\n setKey(`filter-${name}:${Date.now()}`); // remove after range component update\n });\n }\n const newUrl = buildNewQuery(url, currentUrl, newQuery, sortValues);\n scrollToFirstList();\n return router.push('/Resolver', newUrl, { shallow: !hasUrl, scroll: false });\n };\n\n const scrollToFirstList = () => {\n const [list] = document.getElementsByClassName('list-top');\n const shouldScrollToFirstList = !hasUrl && list;\n\n if (shouldScrollToFirstList) {\n window.scrollTo({\n left: 0,\n top: window.pageYOffset - SCROLL_OFFSET + list.getBoundingClientRect().top\n });\n } else {\n window.scrollTo(0, 0);\n }\n };\n\n return (\n <SearchFilter\n key={key}\n searchFilterRef={searchFilterRef}\n data={filterData}\n filters={filters}\n hasUrl={hasUrl}\n entity={entity}\n handleSearch={handleSearch}\n initialFilterValues={initialFilterValues}\n name={name}\n isCollapsedOnResponsive={isCollapsedOnResponsive}\n displaySearchFilter={displaySearchFilter}\n setDisplaySearchFilter={setDisplaySearchFilter}\n groupAfter={groupAfter}\n />\n );\n};\n\nSearchFilterContainer.propTypes = {\n entity: PropTypes.string,\n url: PropTypes.string,\n filters: PropTypes.array,\n name: PropTypes.string.isRequired,\n isCollapsedOnResponsive: PropTypes.bool,\n groupAfter: PropTypes.number\n};\n\nSearchFilterContainer.defaultProps = {\n url: null,\n filters: [],\n entity: '',\n isCollapsedOnResponsive: true,\n groupAfter: 0\n};\n\nexport default withTitle(SearchFilterContainer);\n"],"file":"SearchFilterContainer.js"}
1
+ {"version":3,"sources":["../../../src/components/SearchFilter/SearchFilterContainer.js"],"names":["React","useState","useRef","useRouter","useQuery","PropTypes","parseUrl","stringify","SearchFilter","withTitle","getSearchPublishedContent","buildNewQuery","buildRawQueryStringified","getInitialFilterValues","decodeValue","getEntityData","RAW_RESULTS","RANGE","CHECKBOX_SELECT","SCROLL_OFFSET","SearchFilterContainer","entity","url","filters","name","isCollapsedOnResponsive","groupAfterMobile","groupAfterDesktop","router","searchFilterRef","key","setKey","displaySearchFilter","setDisplaySearchFilter","hasUrl","currentUrl","query","sort","sortby","asPath","sortValues","baseQuery","action","rawQueryStringified","checkboxSelectValues","rangeValues","forEach","type","propsToDisplay","includes","push","docType","data","error","loading","variables","limit","skip","message","length","searchPublishedContent","rawResults","aggregations","filterData","initialFilterValues","handleSearch","newQuery","scrollToFirstList","shallow","scroll","then","Date","now","newUrl","list","document","getElementsByClassName","shouldScrollToFirstList","window","scrollTo","left","top","pageYOffset","getBoundingClientRect","propTypes","string","array","isRequired","bool","number","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState, useRef } from 'react';\nimport { useRouter } from 'next/router';\nimport { useQuery } from '@apollo/react-hooks';\nimport PropTypes from 'prop-types';\nimport { parseUrl, stringify } from 'query-string';\nimport SearchFilter from './SearchFilter';\nimport { withTitle } from '../../HOC';\nimport { getSearchPublishedContent } from '../../application/query';\nimport {\n buildNewQuery,\n buildRawQueryStringified,\n getInitialFilterValues,\n decodeValue\n} from './helpers';\n\nimport { getEntityData } from '../../helpers';\nimport { RAW_RESULTS, RANGE, CHECKBOX_SELECT } from './constants';\nimport { SCROLL_OFFSET } from '../../constants';\n\nconst SearchFilterContainer = ({\n entity,\n url,\n filters,\n name,\n isCollapsedOnResponsive,\n groupAfterMobile,\n groupAfterDesktop\n}) => {\n const router = useRouter();\n const searchFilterRef = useRef(null);\n const [key, setKey] = useState(`filter-${name}`);\n const [displaySearchFilter, setDisplaySearchFilter] = useState(false);\n const hasUrl = !!url;\n const {\n url: currentUrl,\n query: { sort, sortby },\n query\n } = parseUrl(decodeValue(router.asPath));\n const sortValues = sort && sortby ? stringify({ sort, sortby }) : '';\n const baseQuery = sortValues ? `${currentUrl}?${sortValues}` : currentUrl;\n\n const action = getSearchPublishedContent(RAW_RESULTS);\n\n let rawQueryStringified = '';\n\n const checkboxSelectValues = [];\n const rangeValues = [];\n\n filters.forEach(({ type, propsToDisplay }) => {\n if (CHECKBOX_SELECT.includes(type)) {\n checkboxSelectValues.push(propsToDisplay[0]);\n } else if (type === RANGE) {\n rangeValues.push(...propsToDisplay);\n }\n });\n\n const { docType } = getEntityData(entity);\n\n rawQueryStringified = buildRawQueryStringified(checkboxSelectValues, rangeValues, docType);\n\n const { data, error, loading } = useQuery(action, {\n variables: { rawQueryStringified, limit: 0 }, // we only want aggs so limit=0 for no search results\n skip: !rawQueryStringified\n });\n\n if (loading) return null;\n if (error) return error.message;\n if (!filters.length) return null;\n\n const { searchPublishedContent: { rawResults: { aggregations: filterData = {} } = {} } = {} } =\n data || {};\n\n const initialFilterValues = getInitialFilterValues(filterData, filters, query);\n\n const handleSearch = newQuery => {\n setDisplaySearchFilter(false);\n\n if (!newQuery) {\n scrollToFirstList();\n return router.push('/Resolver', baseQuery, { shallow: !hasUrl, scroll: false }).then(() => {\n setKey(`filter-${name}:${Date.now()}`); // remove after range component update\n });\n }\n const newUrl = buildNewQuery(url, currentUrl, newQuery, sortValues);\n scrollToFirstList();\n return router.push('/Resolver', newUrl, { shallow: !hasUrl, scroll: false });\n };\n\n const scrollToFirstList = () => {\n const [list] = document.getElementsByClassName('list-top');\n const shouldScrollToFirstList = !hasUrl && list;\n\n if (shouldScrollToFirstList) {\n window.scrollTo({\n left: 0,\n top: window.pageYOffset - SCROLL_OFFSET + list.getBoundingClientRect().top\n });\n } else {\n window.scrollTo(0, 0);\n }\n };\n\n return (\n <SearchFilter\n key={key}\n searchFilterRef={searchFilterRef}\n data={filterData}\n filters={filters}\n hasUrl={hasUrl}\n entity={entity}\n handleSearch={handleSearch}\n initialFilterValues={initialFilterValues}\n name={name}\n isCollapsedOnResponsive={isCollapsedOnResponsive}\n displaySearchFilter={displaySearchFilter}\n setDisplaySearchFilter={setDisplaySearchFilter}\n groupAfterMobile={groupAfterMobile}\n groupAfterDesktop={groupAfterDesktop}\n />\n );\n};\n\nSearchFilterContainer.propTypes = {\n entity: PropTypes.string,\n url: PropTypes.string,\n filters: PropTypes.array,\n name: PropTypes.string.isRequired,\n isCollapsedOnResponsive: PropTypes.bool,\n groupAfterMobile: PropTypes.number,\n groupAfterDesktop: PropTypes.number\n};\n\nSearchFilterContainer.defaultProps = {\n url: null,\n filters: [],\n entity: '',\n isCollapsedOnResponsive: true,\n groupAfterMobile: 0,\n groupAfterDesktop: 0\n};\n\nexport default withTitle(SearchFilterContainer);\n"],"file":"SearchFilterContainer.js"}
@@ -23,5 +23,16 @@ const RESET = 'Reset all filters';
23
23
  const SEARCH = 'Search';
24
24
  const REFINE = `Refine Search`;
25
25
  const MOBILE_REFINEMENT_TITLE = 'Search refinement';
26
- export { CHECKBOX, SELECT, TEXT_SEARCH, SEARCH_TERM, SIZE, KEYWORD, RAW_RESULTS, DEFAULT_OPTION, DEFAULT_VALUES, RANGE, CHECKBOX_SELECT, LIMIT_MIN, LIMIT_MAX, MORE, LESS, DOWN, UP, UPDATED_RANGES, MIN_VALUE, MAX_VALUE, TABLET_WIDTH, RESET, SEARCH, REFINE, MOBILE_REFINEMENT_TITLE };
26
+ const MORE_FILTERS_CLASSES_BASE = 'filter__more-filters';
27
+ const MORE_FILTERS_CLASSES = {
28
+ MOBILE_WRAPPER: `${MORE_FILTERS_CLASSES_BASE}-mobile-wrapper`,
29
+ MOBILE_CONTENT: `${MORE_FILTERS_CLASSES_BASE}-mobile-content`,
30
+ MOBILE_TOGGLER: `${MORE_FILTERS_CLASSES_BASE}-mobile-toggler`,
31
+ MOBILE_BUTTONS: `${MORE_FILTERS_CLASSES_BASE}-mobile-buttons`,
32
+ DESKTOP_WRAPPER: `${MORE_FILTERS_CLASSES_BASE}-desktop-wrapper`,
33
+ DESKTOP_CONTENT: `${MORE_FILTERS_CLASSES_BASE}-desktop-content`,
34
+ DESKTOP_TOGGLER: `${MORE_FILTERS_CLASSES_BASE}-desktop-toggler`,
35
+ DESKTOP_BUTTONS: `${MORE_FILTERS_CLASSES_BASE}-desktop-buttons`
36
+ };
37
+ export { CHECKBOX, SELECT, TEXT_SEARCH, SEARCH_TERM, SIZE, KEYWORD, RAW_RESULTS, DEFAULT_OPTION, DEFAULT_VALUES, RANGE, CHECKBOX_SELECT, LIMIT_MIN, LIMIT_MAX, MORE, LESS, DOWN, UP, UPDATED_RANGES, MIN_VALUE, MAX_VALUE, TABLET_WIDTH, RESET, SEARCH, REFINE, MOBILE_REFINEMENT_TITLE, MORE_FILTERS_CLASSES };
27
38
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SearchFilter/constants.js"],"names":["CHECKBOX","SELECT","TEXT_SEARCH","SEARCH_TERM","SIZE","KEYWORD","RAW_RESULTS","DEFAULT_OPTION","DEFAULT_VALUES","RANGE","CHECKBOX_SELECT","LIMIT_MIN","LIMIT_MAX","MORE","LESS","DOWN","UP","UPDATED_RANGES","MIN_VALUE","MAX_VALUE","TABLET_WIDTH","RESET","SEARCH","REFINE","MOBILE_REFINEMENT_TITLE"],"mappings":"AAAA,MAAMA,QAAQ,GAAG,UAAjB;AACA,MAAMC,MAAM,GAAG,QAAf;AACA,MAAMC,WAAW,GAAG,aAApB;AACA,MAAMC,WAAW,GAAG,aAApB;AACA,MAAMC,IAAI,GAAG,EAAb;AACA,MAAMC,OAAO,GAAG,SAAhB;AACA,MAAMC,WAAW,GAAG,YAApB;AACA,MAAMC,cAAc,GAAG,KAAvB;AACA,MAAMC,cAAc,GAAG,CAAC,KAAD,EAAQ,kBAAR,CAAvB;AACA,MAAMC,KAAK,GAAG,OAAd;AACA,MAAMC,eAAe,GAAG,CAAC,UAAD,EAAa,QAAb,CAAxB;AACA,MAAMC,SAAS,GAAG,CAAlB;AACA,MAAMC,SAAS,GAAG,IAAlB;AACA,MAAMC,IAAI,GAAG,MAAb;AACA,MAAMC,IAAI,GAAG,MAAb;AACA,MAAMC,IAAI,GAAG,MAAb;AACA,MAAMC,EAAE,GAAG,IAAX;AACA,MAAMC,cAAc,GAAG,gBAAvB;AACA,MAAMC,SAAS,GAAG,WAAlB;AACA,MAAMC,SAAS,GAAG,WAAlB;AACA,MAAMC,YAAY,GAAG,GAArB;AACA,MAAMC,KAAK,GAAG,mBAAd;AACA,MAAMC,MAAM,GAAG,QAAf;AACA,MAAMC,MAAM,GAAI,eAAhB;AACA,MAAMC,uBAAuB,GAAG,mBAAhC;AAEA,SACExB,QADF,EAEEC,MAFF,EAGEC,WAHF,EAIEC,WAJF,EAKEC,IALF,EAMEC,OANF,EAOEC,WAPF,EAQEC,cARF,EASEC,cATF,EAUEC,KAVF,EAWEC,eAXF,EAYEC,SAZF,EAaEC,SAbF,EAcEC,IAdF,EAeEC,IAfF,EAgBEC,IAhBF,EAiBEC,EAjBF,EAkBEC,cAlBF,EAmBEC,SAnBF,EAoBEC,SApBF,EAqBEC,YArBF,EAsBEC,KAtBF,EAuBEC,MAvBF,EAwBEC,MAxBF,EAyBEC,uBAzBF","sourcesContent":["const CHECKBOX = 'checkbox';\nconst SELECT = 'select';\nconst TEXT_SEARCH = 'text-search';\nconst SEARCH_TERM = 'search_term';\nconst SIZE = 50;\nconst KEYWORD = 'keyword';\nconst RAW_RESULTS = 'rawResults';\nconst DEFAULT_OPTION = 'Any';\nconst DEFAULT_VALUES = ['Any', 'Please Choose...'];\nconst RANGE = 'range';\nconst CHECKBOX_SELECT = ['checkbox', 'select'];\nconst LIMIT_MIN = 5;\nconst LIMIT_MAX = 1000;\nconst MORE = 'more';\nconst LESS = 'less';\nconst DOWN = 'down';\nconst UP = 'up';\nconst UPDATED_RANGES = 'updated_ranges';\nconst MIN_VALUE = 'min-value';\nconst MAX_VALUE = 'max-value';\nconst TABLET_WIDTH = 768;\nconst RESET = 'Reset all filters';\nconst SEARCH = 'Search';\nconst REFINE = `Refine Search`;\nconst MOBILE_REFINEMENT_TITLE = 'Search refinement';\n\nexport {\n CHECKBOX,\n SELECT,\n TEXT_SEARCH,\n SEARCH_TERM,\n SIZE,\n KEYWORD,\n RAW_RESULTS,\n DEFAULT_OPTION,\n DEFAULT_VALUES,\n RANGE,\n CHECKBOX_SELECT,\n LIMIT_MIN,\n LIMIT_MAX,\n MORE,\n LESS,\n DOWN,\n UP,\n UPDATED_RANGES,\n MIN_VALUE,\n MAX_VALUE,\n TABLET_WIDTH,\n RESET,\n SEARCH,\n REFINE,\n MOBILE_REFINEMENT_TITLE\n};\n"],"file":"constants.js"}
1
+ {"version":3,"sources":["../../../src/components/SearchFilter/constants.js"],"names":["CHECKBOX","SELECT","TEXT_SEARCH","SEARCH_TERM","SIZE","KEYWORD","RAW_RESULTS","DEFAULT_OPTION","DEFAULT_VALUES","RANGE","CHECKBOX_SELECT","LIMIT_MIN","LIMIT_MAX","MORE","LESS","DOWN","UP","UPDATED_RANGES","MIN_VALUE","MAX_VALUE","TABLET_WIDTH","RESET","SEARCH","REFINE","MOBILE_REFINEMENT_TITLE","MORE_FILTERS_CLASSES_BASE","MORE_FILTERS_CLASSES","MOBILE_WRAPPER","MOBILE_CONTENT","MOBILE_TOGGLER","MOBILE_BUTTONS","DESKTOP_WRAPPER","DESKTOP_CONTENT","DESKTOP_TOGGLER","DESKTOP_BUTTONS"],"mappings":"AAAA,MAAMA,QAAQ,GAAG,UAAjB;AACA,MAAMC,MAAM,GAAG,QAAf;AACA,MAAMC,WAAW,GAAG,aAApB;AACA,MAAMC,WAAW,GAAG,aAApB;AACA,MAAMC,IAAI,GAAG,EAAb;AACA,MAAMC,OAAO,GAAG,SAAhB;AACA,MAAMC,WAAW,GAAG,YAApB;AACA,MAAMC,cAAc,GAAG,KAAvB;AACA,MAAMC,cAAc,GAAG,CAAC,KAAD,EAAQ,kBAAR,CAAvB;AACA,MAAMC,KAAK,GAAG,OAAd;AACA,MAAMC,eAAe,GAAG,CAAC,UAAD,EAAa,QAAb,CAAxB;AACA,MAAMC,SAAS,GAAG,CAAlB;AACA,MAAMC,SAAS,GAAG,IAAlB;AACA,MAAMC,IAAI,GAAG,MAAb;AACA,MAAMC,IAAI,GAAG,MAAb;AACA,MAAMC,IAAI,GAAG,MAAb;AACA,MAAMC,EAAE,GAAG,IAAX;AACA,MAAMC,cAAc,GAAG,gBAAvB;AACA,MAAMC,SAAS,GAAG,WAAlB;AACA,MAAMC,SAAS,GAAG,WAAlB;AACA,MAAMC,YAAY,GAAG,GAArB;AACA,MAAMC,KAAK,GAAG,mBAAd;AACA,MAAMC,MAAM,GAAG,QAAf;AACA,MAAMC,MAAM,GAAI,eAAhB;AACA,MAAMC,uBAAuB,GAAG,mBAAhC;AAEA,MAAMC,yBAAyB,GAAG,sBAAlC;AACA,MAAMC,oBAAoB,GAAG;AAC3BC,EAAAA,cAAc,EAAG,GAAEF,yBAA0B,iBADlB;AAE3BG,EAAAA,cAAc,EAAG,GAAEH,yBAA0B,iBAFlB;AAG3BI,EAAAA,cAAc,EAAG,GAAEJ,yBAA0B,iBAHlB;AAI3BK,EAAAA,cAAc,EAAG,GAAEL,yBAA0B,iBAJlB;AAK3BM,EAAAA,eAAe,EAAG,GAAEN,yBAA0B,kBALnB;AAM3BO,EAAAA,eAAe,EAAG,GAAEP,yBAA0B,kBANnB;AAO3BQ,EAAAA,eAAe,EAAG,GAAER,yBAA0B,kBAPnB;AAQ3BS,EAAAA,eAAe,EAAG,GAAET,yBAA0B;AARnB,CAA7B;AAWA,SACEzB,QADF,EAEEC,MAFF,EAGEC,WAHF,EAIEC,WAJF,EAKEC,IALF,EAMEC,OANF,EAOEC,WAPF,EAQEC,cARF,EASEC,cATF,EAUEC,KAVF,EAWEC,eAXF,EAYEC,SAZF,EAaEC,SAbF,EAcEC,IAdF,EAeEC,IAfF,EAgBEC,IAhBF,EAiBEC,EAjBF,EAkBEC,cAlBF,EAmBEC,SAnBF,EAoBEC,SApBF,EAqBEC,YArBF,EAsBEC,KAtBF,EAuBEC,MAvBF,EAwBEC,MAxBF,EAyBEC,uBAzBF,EA0BEE,oBA1BF","sourcesContent":["const CHECKBOX = 'checkbox';\nconst SELECT = 'select';\nconst TEXT_SEARCH = 'text-search';\nconst SEARCH_TERM = 'search_term';\nconst SIZE = 50;\nconst KEYWORD = 'keyword';\nconst RAW_RESULTS = 'rawResults';\nconst DEFAULT_OPTION = 'Any';\nconst DEFAULT_VALUES = ['Any', 'Please Choose...'];\nconst RANGE = 'range';\nconst CHECKBOX_SELECT = ['checkbox', 'select'];\nconst LIMIT_MIN = 5;\nconst LIMIT_MAX = 1000;\nconst MORE = 'more';\nconst LESS = 'less';\nconst DOWN = 'down';\nconst UP = 'up';\nconst UPDATED_RANGES = 'updated_ranges';\nconst MIN_VALUE = 'min-value';\nconst MAX_VALUE = 'max-value';\nconst TABLET_WIDTH = 768;\nconst RESET = 'Reset all filters';\nconst SEARCH = 'Search';\nconst REFINE = `Refine Search`;\nconst MOBILE_REFINEMENT_TITLE = 'Search refinement';\n\nconst MORE_FILTERS_CLASSES_BASE = 'filter__more-filters';\nconst MORE_FILTERS_CLASSES = {\n MOBILE_WRAPPER: `${MORE_FILTERS_CLASSES_BASE}-mobile-wrapper`,\n MOBILE_CONTENT: `${MORE_FILTERS_CLASSES_BASE}-mobile-content`,\n MOBILE_TOGGLER: `${MORE_FILTERS_CLASSES_BASE}-mobile-toggler`,\n MOBILE_BUTTONS: `${MORE_FILTERS_CLASSES_BASE}-mobile-buttons`,\n DESKTOP_WRAPPER: `${MORE_FILTERS_CLASSES_BASE}-desktop-wrapper`,\n DESKTOP_CONTENT: `${MORE_FILTERS_CLASSES_BASE}-desktop-content`,\n DESKTOP_TOGGLER: `${MORE_FILTERS_CLASSES_BASE}-desktop-toggler`,\n DESKTOP_BUTTONS: `${MORE_FILTERS_CLASSES_BASE}-desktop-buttons`\n};\n\nexport {\n CHECKBOX,\n SELECT,\n TEXT_SEARCH,\n SEARCH_TERM,\n SIZE,\n KEYWORD,\n RAW_RESULTS,\n DEFAULT_OPTION,\n DEFAULT_VALUES,\n RANGE,\n CHECKBOX_SELECT,\n LIMIT_MIN,\n LIMIT_MAX,\n MORE,\n LESS,\n DOWN,\n UP,\n UPDATED_RANGES,\n MIN_VALUE,\n MAX_VALUE,\n TABLET_WIDTH,\n RESET,\n SEARCH,\n REFINE,\n MOBILE_REFINEMENT_TITLE,\n MORE_FILTERS_CLASSES\n};\n"],"file":"constants.js"}
@@ -0,0 +1,20 @@
1
+ import classnames from 'classnames';
2
+ import { MORE_FILTERS_CLASSES } from '../constants';
3
+
4
+ const getResponsiveFilterClassnames = (moreFiltersDesktopCollapsed, moreFiltersMobileCollapsed) => ({
5
+ moreFiltersMobileWrapperClass: classnames(MORE_FILTERS_CLASSES.MOBILE_WRAPPER, {
6
+ [`${MORE_FILTERS_CLASSES.MOBILE_WRAPPER}--open`]: !moreFiltersMobileCollapsed
7
+ }),
8
+ moreFiltersMobileTogglerClass: classnames(MORE_FILTERS_CLASSES.MOBILE_TOGGLER, {
9
+ [`${MORE_FILTERS_CLASSES.MOBILE_TOGGLER}--open`]: !moreFiltersMobileCollapsed
10
+ }),
11
+ moreFiltersDesktopWrapperClass: classnames(MORE_FILTERS_CLASSES.DESKTOP_WRAPPER, {
12
+ [`${MORE_FILTERS_CLASSES.DESKTOP_WRAPPER}--open`]: !moreFiltersDesktopCollapsed
13
+ }),
14
+ moreFiltersDesktopTogglerClass: classnames(MORE_FILTERS_CLASSES.DESKTOP_TOGGLER, {
15
+ [`${MORE_FILTERS_CLASSES.DESKTOP_TOGGLER}--open`]: !moreFiltersDesktopCollapsed
16
+ })
17
+ });
18
+
19
+ export default getResponsiveFilterClassnames;
20
+ //# sourceMappingURL=get-responsive-filter-classnames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/SearchFilter/helpers/get-responsive-filter-classnames.js"],"names":["classnames","MORE_FILTERS_CLASSES","getResponsiveFilterClassnames","moreFiltersDesktopCollapsed","moreFiltersMobileCollapsed","moreFiltersMobileWrapperClass","MOBILE_WRAPPER","moreFiltersMobileTogglerClass","MOBILE_TOGGLER","moreFiltersDesktopWrapperClass","DESKTOP_WRAPPER","moreFiltersDesktopTogglerClass","DESKTOP_TOGGLER"],"mappings":"AAAA,OAAOA,UAAP,MAAuB,YAAvB;AACA,SAASC,oBAAT,QAAqC,cAArC;;AAEA,MAAMC,6BAA6B,GAAG,CACpCC,2BADoC,EAEpCC,0BAFoC,MAGhC;AACJC,EAAAA,6BAA6B,EAAEL,UAAU,CAACC,oBAAoB,CAACK,cAAtB,EAAsC;AAC7E,KAAE,GAAEL,oBAAoB,CAACK,cAAe,QAAxC,GAAkD,CAACF;AAD0B,GAAtC,CADrC;AAIJG,EAAAA,6BAA6B,EAAEP,UAAU,CAACC,oBAAoB,CAACO,cAAtB,EAAsC;AAC7E,KAAE,GAAEP,oBAAoB,CAACO,cAAe,QAAxC,GAAkD,CAACJ;AAD0B,GAAtC,CAJrC;AAOJK,EAAAA,8BAA8B,EAAET,UAAU,CAACC,oBAAoB,CAACS,eAAtB,EAAuC;AAC/E,KAAE,GAAET,oBAAoB,CAACS,eAAgB,QAAzC,GAAmD,CAACP;AAD2B,GAAvC,CAPtC;AAUJQ,EAAAA,8BAA8B,EAAEX,UAAU,CAACC,oBAAoB,CAACW,eAAtB,EAAuC;AAC/E,KAAE,GAAEX,oBAAoB,CAACW,eAAgB,QAAzC,GAAmD,CAACT;AAD2B,GAAvC;AAVtC,CAHgC,CAAtC;;AAkBA,eAAeD,6BAAf","sourcesContent":["import classnames from 'classnames';\nimport { MORE_FILTERS_CLASSES } from '../constants';\n\nconst getResponsiveFilterClassnames = (\n moreFiltersDesktopCollapsed,\n moreFiltersMobileCollapsed\n) => ({\n moreFiltersMobileWrapperClass: classnames(MORE_FILTERS_CLASSES.MOBILE_WRAPPER, {\n [`${MORE_FILTERS_CLASSES.MOBILE_WRAPPER}--open`]: !moreFiltersMobileCollapsed\n }),\n moreFiltersMobileTogglerClass: classnames(MORE_FILTERS_CLASSES.MOBILE_TOGGLER, {\n [`${MORE_FILTERS_CLASSES.MOBILE_TOGGLER}--open`]: !moreFiltersMobileCollapsed\n }),\n moreFiltersDesktopWrapperClass: classnames(MORE_FILTERS_CLASSES.DESKTOP_WRAPPER, {\n [`${MORE_FILTERS_CLASSES.DESKTOP_WRAPPER}--open`]: !moreFiltersDesktopCollapsed\n }),\n moreFiltersDesktopTogglerClass: classnames(MORE_FILTERS_CLASSES.DESKTOP_TOGGLER, {\n [`${MORE_FILTERS_CLASSES.DESKTOP_TOGGLER}--open`]: !moreFiltersDesktopCollapsed\n })\n});\n\nexport default getResponsiveFilterClassnames;\n"],"file":"get-responsive-filter-classnames.js"}
@@ -2,6 +2,7 @@ import buildNewQuery from './build-new-query';
2
2
  import buildRawQueryStringified from './build-raw-query-stringified';
3
3
  import { decodeValue, encodeValue } from './decode-encode';
4
4
  import checkIfRangeUpdated from './check-if-range-updated';
5
+ import getResponsiveFilterClassnames from './get-responsive-filter-classnames';
5
6
  import getDisplayValue from './get-display-value';
6
7
  import calculateStep from './calculate-step';
7
8
  import calculateMinMax from './calculate-min-max';
@@ -12,5 +13,5 @@ import isDeviceDesktop from './is-device-desktop';
12
13
  import getInitialFilterValues from './get-initial-filter-values';
13
14
  import getFilterValueFromQuery from './get-filter-value-from-query';
14
15
  import buildQuery from './build-query';
15
- export { buildQuery, buildNewQuery, buildRawQueryStringified, decodeValue, encodeValue, checkIfRangeUpdated, getDisplayValue, calculateStep, calculateMinMax, getIntersectedProp, getRangeValue, getSelectOptions, isDeviceDesktop, getInitialFilterValues, getFilterValueFromQuery };
16
+ export { buildQuery, buildNewQuery, buildRawQueryStringified, decodeValue, encodeValue, checkIfRangeUpdated, getResponsiveFilterClassnames, getDisplayValue, calculateStep, calculateMinMax, getIntersectedProp, getRangeValue, getSelectOptions, isDeviceDesktop, getInitialFilterValues, getFilterValueFromQuery };
16
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SearchFilter/helpers/index.js"],"names":["buildNewQuery","buildRawQueryStringified","decodeValue","encodeValue","checkIfRangeUpdated","getDisplayValue","calculateStep","calculateMinMax","getIntersectedProp","getRangeValue","getSelectOptions","isDeviceDesktop","getInitialFilterValues","getFilterValueFromQuery","buildQuery"],"mappings":"AAAA,OAAOA,aAAP,MAA0B,mBAA1B;AACA,OAAOC,wBAAP,MAAqC,+BAArC;AACA,SAASC,WAAT,EAAsBC,WAAtB,QAAyC,iBAAzC;AACA,OAAOC,mBAAP,MAAgC,0BAAhC;AACA,OAAOC,eAAP,MAA4B,qBAA5B;AACA,OAAOC,aAAP,MAA0B,kBAA1B;AACA,OAAOC,eAAP,MAA4B,qBAA5B;AACA,OAAOC,kBAAP,MAA+B,wBAA/B;AACA,OAAOC,aAAP,MAA0B,mBAA1B;AACA,OAAOC,gBAAP,MAA6B,sBAA7B;AACA,OAAOC,eAAP,MAA4B,qBAA5B;AACA,OAAOC,sBAAP,MAAmC,6BAAnC;AACA,OAAOC,uBAAP,MAAoC,+BAApC;AACA,OAAOC,UAAP,MAAuB,eAAvB;AAEA,SACEA,UADF,EAEEd,aAFF,EAGEC,wBAHF,EAIEC,WAJF,EAKEC,WALF,EAMEC,mBANF,EAOEC,eAPF,EAQEC,aARF,EASEC,eATF,EAUEC,kBAVF,EAWEC,aAXF,EAYEC,gBAZF,EAaEC,eAbF,EAcEC,sBAdF,EAeEC,uBAfF","sourcesContent":["import buildNewQuery from './build-new-query';\nimport buildRawQueryStringified from './build-raw-query-stringified';\nimport { decodeValue, encodeValue } from './decode-encode';\nimport checkIfRangeUpdated from './check-if-range-updated';\nimport getDisplayValue from './get-display-value';\nimport calculateStep from './calculate-step';\nimport calculateMinMax from './calculate-min-max';\nimport getIntersectedProp from './get-intersected-prop';\nimport getRangeValue from './get-range-value';\nimport getSelectOptions from './get-select-options';\nimport isDeviceDesktop from './is-device-desktop';\nimport getInitialFilterValues from './get-initial-filter-values';\nimport getFilterValueFromQuery from './get-filter-value-from-query';\nimport buildQuery from './build-query';\n\nexport {\n buildQuery,\n buildNewQuery,\n buildRawQueryStringified,\n decodeValue,\n encodeValue,\n checkIfRangeUpdated,\n getDisplayValue,\n calculateStep,\n calculateMinMax,\n getIntersectedProp,\n getRangeValue,\n getSelectOptions,\n isDeviceDesktop,\n getInitialFilterValues,\n getFilterValueFromQuery\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../../src/components/SearchFilter/helpers/index.js"],"names":["buildNewQuery","buildRawQueryStringified","decodeValue","encodeValue","checkIfRangeUpdated","getResponsiveFilterClassnames","getDisplayValue","calculateStep","calculateMinMax","getIntersectedProp","getRangeValue","getSelectOptions","isDeviceDesktop","getInitialFilterValues","getFilterValueFromQuery","buildQuery"],"mappings":"AAAA,OAAOA,aAAP,MAA0B,mBAA1B;AACA,OAAOC,wBAAP,MAAqC,+BAArC;AACA,SAASC,WAAT,EAAsBC,WAAtB,QAAyC,iBAAzC;AACA,OAAOC,mBAAP,MAAgC,0BAAhC;AACA,OAAOC,6BAAP,MAA0C,oCAA1C;AACA,OAAOC,eAAP,MAA4B,qBAA5B;AACA,OAAOC,aAAP,MAA0B,kBAA1B;AACA,OAAOC,eAAP,MAA4B,qBAA5B;AACA,OAAOC,kBAAP,MAA+B,wBAA/B;AACA,OAAOC,aAAP,MAA0B,mBAA1B;AACA,OAAOC,gBAAP,MAA6B,sBAA7B;AACA,OAAOC,eAAP,MAA4B,qBAA5B;AACA,OAAOC,sBAAP,MAAmC,6BAAnC;AACA,OAAOC,uBAAP,MAAoC,+BAApC;AACA,OAAOC,UAAP,MAAuB,eAAvB;AAEA,SACEA,UADF,EAEEf,aAFF,EAGEC,wBAHF,EAIEC,WAJF,EAKEC,WALF,EAMEC,mBANF,EAOEC,6BAPF,EAQEC,eARF,EASEC,aATF,EAUEC,eAVF,EAWEC,kBAXF,EAYEC,aAZF,EAaEC,gBAbF,EAcEC,eAdF,EAeEC,sBAfF,EAgBEC,uBAhBF","sourcesContent":["import buildNewQuery from './build-new-query';\nimport buildRawQueryStringified from './build-raw-query-stringified';\nimport { decodeValue, encodeValue } from './decode-encode';\nimport checkIfRangeUpdated from './check-if-range-updated';\nimport getResponsiveFilterClassnames from './get-responsive-filter-classnames';\nimport getDisplayValue from './get-display-value';\nimport calculateStep from './calculate-step';\nimport calculateMinMax from './calculate-min-max';\nimport getIntersectedProp from './get-intersected-prop';\nimport getRangeValue from './get-range-value';\nimport getSelectOptions from './get-select-options';\nimport isDeviceDesktop from './is-device-desktop';\nimport getInitialFilterValues from './get-initial-filter-values';\nimport getFilterValueFromQuery from './get-filter-value-from-query';\nimport buildQuery from './build-query';\n\nexport {\n buildQuery,\n buildNewQuery,\n buildRawQueryStringified,\n decodeValue,\n encodeValue,\n checkIfRangeUpdated,\n getResponsiveFilterClassnames,\n getDisplayValue,\n calculateStep,\n calculateMinMax,\n getIntersectedProp,\n getRangeValue,\n getSelectOptions,\n isDeviceDesktop,\n getInitialFilterValues,\n getFilterValueFromQuery\n};\n"],"file":"index.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/react-page-builder",
3
- "version": "0.113.0",
3
+ "version": "0.114.0-alpha.0",
4
4
  "description": "Blaze react page builder",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -88,5 +88,5 @@
88
88
  "lib/*",
89
89
  "lib-es/*"
90
90
  ],
91
- "gitHead": "4454dafe48e59a36dec55076208e90d2b3f64afd"
91
+ "gitHead": "28a128c55187783ae2f1ed47eda71e4d94b72109"
92
92
  }
@@ -3,11 +3,16 @@ import PropTypes from 'prop-types';
3
3
  import classnames from 'classnames';
4
4
  import debounce from 'lodash.debounce';
5
5
  import FiltersList from './FiltersList';
6
- import { isDeviceDesktop, buildQuery, getInitialFilterValues } from '../helpers';
6
+ import {
7
+ isDeviceDesktop,
8
+ buildQuery,
9
+ getInitialFilterValues,
10
+ getResponsiveFilterClassnames
11
+ } from '../helpers';
7
12
  import CloseMobileForm from './CloseMobileForm';
8
13
  import ResetDesktopForm from './ResetDesktopForm';
9
14
  import MobileFormToolbar from './MobileFormToolbar';
10
- import { SEARCH, REFINE } from '../constants';
15
+ import { SEARCH, REFINE, MORE_FILTERS_CLASSES } from '../constants';
11
16
 
12
17
  const reducer = (state, action) => {
13
18
  const { newValues, type, shouldSearch = true } = action;
@@ -36,11 +41,13 @@ const SearchFilter = ({
36
41
  displaySearchFilter,
37
42
  setDisplaySearchFilter,
38
43
  initialFilterValues,
39
- groupAfter
44
+ groupAfterDesktop,
45
+ groupAfterMobile
40
46
  }) => {
41
47
  const [isDesktop, setIsDesktop] = useState(true);
42
48
  const [pageWidth, setPageWidth] = useState(null);
43
- const [moreFiltersCollapsed, setMoreFiltersCollapsed] = useState(true);
49
+ const [moreFiltersMobileCollapsed, setMoreFiltersMobileCollapsed] = useState(true);
50
+ const [moreFiltersDesktopCollapsed, setMoreFiltersDesktopCollapsed] = useState(true);
44
51
  const [filterValues, dispatch] = useReducer(reducer, initialFilterValues);
45
52
 
46
53
  const handleSubmit = debounce(newValues => {
@@ -91,13 +98,12 @@ const SearchFilter = ({
91
98
  'filter__form filter__form--mobile': isMobileFormDisplayed
92
99
  });
93
100
 
94
- const moreFiltersWrapperClass = classnames('filter__more-filters-wrapper', {
95
- 'filter__more-filters-wrapper--open': !moreFiltersCollapsed
96
- });
97
-
98
- const moreFiltersTogglerClass = classnames('filter__more-filters-toggler', {
99
- 'filter__more-filters-toggler--open': !moreFiltersCollapsed
100
- });
101
+ const {
102
+ moreFiltersMobileWrapperClass,
103
+ moreFiltersMobileTogglerClass,
104
+ moreFiltersDesktopWrapperClass,
105
+ moreFiltersDesktopTogglerClass
106
+ } = getResponsiveFilterClassnames(moreFiltersDesktopCollapsed, moreFiltersMobileCollapsed);
101
107
 
102
108
  const formId = `filter-${name}-form`;
103
109
 
@@ -111,6 +117,8 @@ const SearchFilter = ({
111
117
  dispatch({ newValues, shouldSearch, type: 'update' });
112
118
  };
113
119
 
120
+ const shouldGroup = !!(groupAfterDesktop || groupAfterMobile);
121
+
114
122
  return (
115
123
  <>
116
124
  {isDesktopFormDisplayed || isMobileFormDisplayed ? (
@@ -132,7 +140,7 @@ const SearchFilter = ({
132
140
  {isDesktopFormDisplayed && <ResetDesktopForm handleReset={handleReset} />}
133
141
 
134
142
  <div className="filter__wrapper filter__wrapper--search-refine">
135
- {!groupAfter && (
143
+ {!shouldGroup && (
136
144
  <FiltersList
137
145
  data={data}
138
146
  filters={filters}
@@ -143,37 +151,74 @@ const SearchFilter = ({
143
151
  />
144
152
  )}
145
153
 
146
- {!!groupAfter && (
154
+ {shouldGroup && (
147
155
  <>
148
156
  <FiltersList
149
157
  data={data}
150
- filters={filters.slice(0, groupAfter)}
158
+ filters={filters.slice(0, groupAfterMobile)}
151
159
  hasUrl={hasUrl}
152
160
  entity={entity}
153
161
  filterValues={filterValues}
154
162
  updateFilterValues={updateFilterValues}
155
163
  />
156
164
 
157
- <button
158
- className={moreFiltersTogglerClass}
159
- type="button"
160
- onClick={() => setMoreFiltersCollapsed(!moreFiltersCollapsed)}>
161
- More filters
162
- </button>
165
+ {!!groupAfterMobile && (
166
+ <button
167
+ className={moreFiltersMobileTogglerClass}
168
+ type="button"
169
+ onClick={() => setMoreFiltersMobileCollapsed(!moreFiltersMobileCollapsed)}>
170
+ Filters
171
+ </button>
172
+ )}
163
173
 
164
- <div className={moreFiltersWrapperClass}>
165
- <div className="filter__more-filters-content">
174
+ <div className={moreFiltersMobileWrapperClass}>
175
+ <div className={MORE_FILTERS_CLASSES.MOBILE_CONTENT}>
166
176
  <FiltersList
167
177
  data={data}
168
- filters={filters.slice(groupAfter)}
178
+ filters={filters.slice(
179
+ groupAfterMobile,
180
+ groupAfterDesktop ? groupAfterDesktop - 1 : 0
181
+ )}
169
182
  hasUrl={hasUrl}
170
183
  entity={entity}
171
184
  filterValues={filterValues}
172
185
  updateFilterValues={updateFilterValues}
173
186
  />
187
+
188
+ {!!groupAfterDesktop && (
189
+ <button
190
+ className={moreFiltersDesktopTogglerClass}
191
+ type="button"
192
+ onClick={() =>
193
+ setMoreFiltersDesktopCollapsed(!moreFiltersDesktopCollapsed)
194
+ }>
195
+ More filters
196
+ </button>
197
+ )}
198
+
199
+ <div className={moreFiltersDesktopWrapperClass}>
200
+ <div className={MORE_FILTERS_CLASSES.DESKTOP_CONTENT}>
201
+ <FiltersList
202
+ data={data}
203
+ filters={filters.slice(groupAfterDesktop)}
204
+ hasUrl={hasUrl}
205
+ entity={entity}
206
+ filterValues={filterValues}
207
+ updateFilterValues={updateFilterValues}
208
+ />
209
+ </div>
210
+
211
+ <div className={MORE_FILTERS_CLASSES.DESKTOP_BUTTONS}>
212
+ <ResetDesktopForm handleReset={handleReset} />
213
+
214
+ <button className="button button--full-width" type="submit">
215
+ {SEARCH}
216
+ </button>
217
+ </div>
218
+ </div>
174
219
  </div>
175
220
 
176
- <div className="filter__more-filters-buttons">
221
+ <div className={MORE_FILTERS_CLASSES.MOBILE_BUTTONS}>
177
222
  <ResetDesktopForm handleReset={handleReset} />
178
223
 
179
224
  <button className="button button--full-width" type="submit">
@@ -224,7 +269,8 @@ SearchFilter.propTypes = {
224
269
  displaySearchFilter: PropTypes.bool.isRequired,
225
270
  setDisplaySearchFilter: PropTypes.func.isRequired,
226
271
  isCollapsedOnResponsive: PropTypes.bool.isRequired,
227
- groupAfter: PropTypes.number.isRequired,
272
+ groupAfterDesktop: PropTypes.number.isRequired,
273
+ groupAfterMobile: PropTypes.number.isRequired,
228
274
  initialFilterValues: PropTypes.object.isRequired
229
275
  };
230
276
 
@@ -23,7 +23,8 @@ const SearchFilterContainer = ({
23
23
  filters,
24
24
  name,
25
25
  isCollapsedOnResponsive,
26
- groupAfter
26
+ groupAfterMobile,
27
+ groupAfterDesktop
27
28
  }) => {
28
29
  const router = useRouter();
29
30
  const searchFilterRef = useRef(null);
@@ -113,7 +114,8 @@ const SearchFilterContainer = ({
113
114
  isCollapsedOnResponsive={isCollapsedOnResponsive}
114
115
  displaySearchFilter={displaySearchFilter}
115
116
  setDisplaySearchFilter={setDisplaySearchFilter}
116
- groupAfter={groupAfter}
117
+ groupAfterMobile={groupAfterMobile}
118
+ groupAfterDesktop={groupAfterDesktop}
117
119
  />
118
120
  );
119
121
  };
@@ -124,7 +126,8 @@ SearchFilterContainer.propTypes = {
124
126
  filters: PropTypes.array,
125
127
  name: PropTypes.string.isRequired,
126
128
  isCollapsedOnResponsive: PropTypes.bool,
127
- groupAfter: PropTypes.number
129
+ groupAfterMobile: PropTypes.number,
130
+ groupAfterDesktop: PropTypes.number
128
131
  };
129
132
 
130
133
  SearchFilterContainer.defaultProps = {
@@ -132,7 +135,8 @@ SearchFilterContainer.defaultProps = {
132
135
  filters: [],
133
136
  entity: '',
134
137
  isCollapsedOnResponsive: true,
135
- groupAfter: 0
138
+ groupAfterMobile: 0,
139
+ groupAfterDesktop: 0
136
140
  };
137
141
 
138
142
  export default withTitle(SearchFilterContainer);
@@ -24,6 +24,18 @@ const SEARCH = 'Search';
24
24
  const REFINE = `Refine Search`;
25
25
  const MOBILE_REFINEMENT_TITLE = 'Search refinement';
26
26
 
27
+ const MORE_FILTERS_CLASSES_BASE = 'filter__more-filters';
28
+ const MORE_FILTERS_CLASSES = {
29
+ MOBILE_WRAPPER: `${MORE_FILTERS_CLASSES_BASE}-mobile-wrapper`,
30
+ MOBILE_CONTENT: `${MORE_FILTERS_CLASSES_BASE}-mobile-content`,
31
+ MOBILE_TOGGLER: `${MORE_FILTERS_CLASSES_BASE}-mobile-toggler`,
32
+ MOBILE_BUTTONS: `${MORE_FILTERS_CLASSES_BASE}-mobile-buttons`,
33
+ DESKTOP_WRAPPER: `${MORE_FILTERS_CLASSES_BASE}-desktop-wrapper`,
34
+ DESKTOP_CONTENT: `${MORE_FILTERS_CLASSES_BASE}-desktop-content`,
35
+ DESKTOP_TOGGLER: `${MORE_FILTERS_CLASSES_BASE}-desktop-toggler`,
36
+ DESKTOP_BUTTONS: `${MORE_FILTERS_CLASSES_BASE}-desktop-buttons`
37
+ };
38
+
27
39
  export {
28
40
  CHECKBOX,
29
41
  SELECT,
@@ -49,5 +61,6 @@ export {
49
61
  RESET,
50
62
  SEARCH,
51
63
  REFINE,
52
- MOBILE_REFINEMENT_TITLE
64
+ MOBILE_REFINEMENT_TITLE,
65
+ MORE_FILTERS_CLASSES
53
66
  };
@@ -0,0 +1,22 @@
1
+ import classnames from 'classnames';
2
+ import { MORE_FILTERS_CLASSES } from '../constants';
3
+
4
+ const getResponsiveFilterClassnames = (
5
+ moreFiltersDesktopCollapsed,
6
+ moreFiltersMobileCollapsed
7
+ ) => ({
8
+ moreFiltersMobileWrapperClass: classnames(MORE_FILTERS_CLASSES.MOBILE_WRAPPER, {
9
+ [`${MORE_FILTERS_CLASSES.MOBILE_WRAPPER}--open`]: !moreFiltersMobileCollapsed
10
+ }),
11
+ moreFiltersMobileTogglerClass: classnames(MORE_FILTERS_CLASSES.MOBILE_TOGGLER, {
12
+ [`${MORE_FILTERS_CLASSES.MOBILE_TOGGLER}--open`]: !moreFiltersMobileCollapsed
13
+ }),
14
+ moreFiltersDesktopWrapperClass: classnames(MORE_FILTERS_CLASSES.DESKTOP_WRAPPER, {
15
+ [`${MORE_FILTERS_CLASSES.DESKTOP_WRAPPER}--open`]: !moreFiltersDesktopCollapsed
16
+ }),
17
+ moreFiltersDesktopTogglerClass: classnames(MORE_FILTERS_CLASSES.DESKTOP_TOGGLER, {
18
+ [`${MORE_FILTERS_CLASSES.DESKTOP_TOGGLER}--open`]: !moreFiltersDesktopCollapsed
19
+ })
20
+ });
21
+
22
+ export default getResponsiveFilterClassnames;
@@ -2,6 +2,7 @@ import buildNewQuery from './build-new-query';
2
2
  import buildRawQueryStringified from './build-raw-query-stringified';
3
3
  import { decodeValue, encodeValue } from './decode-encode';
4
4
  import checkIfRangeUpdated from './check-if-range-updated';
5
+ import getResponsiveFilterClassnames from './get-responsive-filter-classnames';
5
6
  import getDisplayValue from './get-display-value';
6
7
  import calculateStep from './calculate-step';
7
8
  import calculateMinMax from './calculate-min-max';
@@ -20,6 +21,7 @@ export {
20
21
  decodeValue,
21
22
  encodeValue,
22
23
  checkIfRangeUpdated,
24
+ getResponsiveFilterClassnames,
23
25
  getDisplayValue,
24
26
  calculateStep,
25
27
  calculateMinMax,
@@ -22,7 +22,8 @@ const mockedProps = {
22
22
  handleSearch: jest.fn(),
23
23
  resetFilters: jest.fn(),
24
24
  name: 'test',
25
- groupAfter: 0,
25
+ groupAfterMobile: 0,
26
+ groupAfterDesktop: 0,
26
27
  isCollapsedOnResponsive: true,
27
28
  displaySearchFilter: false
28
29
  };
@@ -139,10 +140,35 @@ describe('SearchFilter component', () => {
139
140
  });
140
141
  });
141
142
 
142
- describe('when groupAfter > 0', () => {
143
+ describe('when groupAfterMobile > 0 and groupAfterDesktop = 0', () => {
143
144
  const specificMockedProps = {
144
145
  ...mockedProps,
145
- groupAfter: 1
146
+ groupAfterMobile: 1
147
+ };
148
+
149
+ it('should render without throwing error and match snapshot', () => {
150
+ const { asFragment } = renderComponent(SearchFilter, specificMockedProps);
151
+ expect(asFragment()).toMatchSnapshot();
152
+ });
153
+ });
154
+
155
+ describe('when groupAfterMobile = 0 and groupAfterDesktop > 0', () => {
156
+ const specificMockedProps = {
157
+ ...mockedProps,
158
+ groupAfterDesktop: 1
159
+ };
160
+
161
+ it('should render without throwing error and match snapshot', () => {
162
+ const { asFragment } = renderComponent(SearchFilter, specificMockedProps);
163
+ expect(asFragment()).toMatchSnapshot();
164
+ });
165
+ });
166
+
167
+ describe('when groupAfterMobile > 0 and groupAfterDesktop > 0', () => {
168
+ const specificMockedProps = {
169
+ ...mockedProps,
170
+ groupAfterMobile: 1,
171
+ groupAfterDesktop: 1
146
172
  };
147
173
 
148
174
  it('should render without throwing error and match snapshot', () => {