@blaze-cms/react-page-builder 0.124.0-alpha.8 → 0.124.0-alpha.9

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.
package/CHANGELOG.md CHANGED
@@ -3,9 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- # [0.124.0-alpha.8](https://github.com/thebyte9/blaze/compare/v0.124.0-alpha.7...v0.124.0-alpha.8) (2022-05-06)
6
+ # [0.124.0-alpha.9](https://github.com/thebyte9/blaze/compare/v0.124.0-alpha.8...v0.124.0-alpha.9) (2022-05-10)
7
7
 
8
8
 
9
+ ### Bug Fixes
10
+
11
+ * close search filter toggles on submit ([#3461](https://github.com/thebyte9/blaze/issues/3461)) ([412ebf1](https://github.com/thebyte9/blaze/commit/412ebf1a93760405f8942af59b8debf4fa69b994))
12
+ * enable changing filter aggregation size ([#3459](https://github.com/thebyte9/blaze/issues/3459)) ([d65111f](https://github.com/thebyte9/blaze/commit/d65111f8353a17a18cb82b0ba63470347f3b63b6))
13
+ * fix apollo client version to 3.5.x while investigating ssr issue ([#3466](https://github.com/thebyte9/blaze/issues/3466)) ([8f14f8e](https://github.com/thebyte9/blaze/commit/8f14f8e9946f0e1e2ed3d9eb747a6d01c34e9937))
14
+
15
+
16
+
17
+
18
+
19
+ # [0.124.0-alpha.8](https://github.com/thebyte9/blaze/compare/v0.124.0-alpha.7...v0.124.0-alpha.8) (2022-05-06)
20
+
9
21
  ### Bug Fixes
10
22
 
11
23
  * enable changing filter aggregation size ([#3459](https://github.com/thebyte9/blaze/issues/3459)) ([#3460](https://github.com/thebyte9/blaze/issues/3460)) ([04ea731](https://github.com/thebyte9/blaze/commit/04ea7311902ac195f0badd7807fa827e00f1f946))
@@ -13,6 +25,19 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
13
25
 
14
26
 
15
27
 
28
+ ## [0.122.5](https://github.com/thebyte9/blaze/compare/v0.122.4...v0.122.5) (2022-05-06)
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * enable changing filter aggregation size ([#3458](https://github.com/thebyte9/blaze/issues/3458)) ([5693f8a](https://github.com/thebyte9/blaze/commit/5693f8aebc30b4b2e0996a0cbb55f0d732f4e39e))
34
+
35
+
36
+
37
+
38
+
39
+
40
+
16
41
 
17
42
  # [0.124.0-alpha.7](https://github.com/thebyte9/blaze/compare/v0.124.0-alpha.6...v0.124.0-alpha.7) (2022-05-06)
18
43
 
@@ -130,9 +130,16 @@ var SearchFilter = function SearchFilter(_ref) {
130
130
  filterValues = _useReducer2[0],
131
131
  dispatch = _useReducer2[1];
132
132
 
133
- var handleSubmit = (0, _lodash["default"])(function (newValues) {
133
+ var doSubmit = function doSubmit() {
134
+ var newValues = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filterValues;
134
135
  var newQuery = (0, _helpers.buildQuery)(newValues, filters);
135
136
  handleSearch(newQuery);
137
+ setMoreFiltersDesktopCollapsed(true);
138
+ setMoreFiltersMobileCollapsed(true);
139
+ };
140
+
141
+ var handleSubmit = (0, _lodash["default"])(function (newValues) {
142
+ doSubmit(newValues);
136
143
  }, 200);
137
144
  (0, _react.useEffect)(function () {
138
145
  if (filterValues.shouldSearch) {
@@ -180,8 +187,7 @@ var SearchFilter = function SearchFilter(_ref) {
180
187
  id: formId,
181
188
  onSubmit: function onSubmit(e) {
182
189
  e.preventDefault();
183
- var newQuery = (0, _helpers.buildQuery)(filterValues, filters);
184
- handleSearch(newQuery);
190
+ doSubmit();
185
191
  }
186
192
  }, displaySearchFilter && /*#__PURE__*/_react["default"].createElement(_CloseMobileForm["default"], {
187
193
  handleClose: function handleClose() {
@@ -210,6 +216,7 @@ var SearchFilter = function SearchFilter(_ref) {
210
216
  filterValues: filterValues,
211
217
  updateFilterValues: updateFilterValues
212
218
  }), !!groupAfterMobile && /*#__PURE__*/_react["default"].createElement("button", {
219
+ "data-testId": "search-filter-mobile-toggler",
213
220
  className: moreFiltersMobileTogglerClass,
214
221
  type: "button",
215
222
  onClick: function onClick() {
@@ -228,6 +235,7 @@ var SearchFilter = function SearchFilter(_ref) {
228
235
  filterValues: filterValues,
229
236
  updateFilterValues: updateFilterValues
230
237
  }), !!groupAfterDesktop && /*#__PURE__*/_react["default"].createElement("button", {
238
+ "data-testId": "search-filter-desktop-toggler",
231
239
  className: moreFiltersDesktopTogglerClass,
232
240
  type: "button",
233
241
  onClick: function onClick() {
@@ -1 +1 @@
1
- {"version":3,"file":"SearchFilter.js","names":["reducer","state","action","newValues","type","shouldSearch","Error","SearchFilter","searchFilterRef","data","filters","hasUrl","entity","handleSearch","name","isCollapsedOnResponsive","displaySearchFilter","setDisplaySearchFilter","initialFilterValues","groupAfterDesktop","groupAfterMobile","moreFiltersMobileCollapsed","setMoreFiltersMobileCollapsed","moreFiltersDesktopCollapsed","setMoreFiltersDesktopCollapsed","filterValues","dispatch","handleSubmit","newQuery","formClass","moreFiltersMobileWrapperClass","moreFiltersMobileTogglerClass","moreFiltersDesktopWrapperClass","moreFiltersDesktopTogglerClass","formId","handleReset","updateFilterValues","shouldSubmit","shouldGroup","e","preventDefault","slice","MORE_FILTERS_CLASSES","MOBILE_CONTENT","DESKTOP_CONTENT","DESKTOP_BUTTONS","SEARCH","MOBILE_BUTTONS","REFINE","propTypes","PropTypes","object","isRequired","array","bool","string","func","number"],"sources":["../../../../src/components/SearchFilter/SearchFilter/SearchFilter.js"],"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 [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 (filterValues.shouldSearch) {\n handleSubmit(filterValues);\n dispatch({ type: 'resetSearch' });\n }\n },\n [filterValues, handleSubmit]\n );\n\n const formClass = classnames('filter__form filter__form--initial', {\n 'filter__form--mobile': isCollapsedOnResponsive && displaySearchFilter,\n 'filter__form--collapsible': isCollapsedOnResponsive\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, shouldSubmit) => {\n dispatch({ newValues, shouldSearch: shouldSubmit, type: 'update' });\n };\n\n const shouldGroup = !!(groupAfterDesktop || groupAfterMobile);\n const shouldSearch = !hasUrl;\n\n return (\n <>\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 {displaySearchFilter && (\n <CloseMobileForm handleClose={() => setDisplaySearchFilter(false)} />\n )}\n\n <div className=\"filter filter--search-refine\">\n <ResetDesktopForm handleReset={handleReset} />\n\n <div className=\"filter__wrapper filter__wrapper--search-refine\">\n {!shouldGroup && (\n <FiltersList\n shouldSearch={shouldSearch}\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 shouldSearch={shouldSearch}\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 shouldSearch={shouldSearch && isDeviceDesktop()}\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 shouldSearch={false}\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 {!displaySearchFilter && (\n <button className=\"button button--full-width\" type=\"submit\">\n {SEARCH}\n </button>\n )}\n </div>\n </div>\n\n {displaySearchFilter && <MobileFormToolbar formId={formId} handleReset={handleReset} />}\n </form>\n\n {isCollapsedOnResponsive &&\n !displaySearchFilter && (\n <div className=\"filter__refine filter__refine--mobile-close\" data-testid=\"refine-mobile\">\n <div role=\"button\" onClick={() => setDisplaySearchFilter(true)}>\n {REFINE}\n </div>\n </div>\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"],"mappings":"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"}
1
+ {"version":3,"file":"SearchFilter.js","names":["reducer","state","action","newValues","type","shouldSearch","Error","SearchFilter","searchFilterRef","data","filters","hasUrl","entity","handleSearch","name","isCollapsedOnResponsive","displaySearchFilter","setDisplaySearchFilter","initialFilterValues","groupAfterDesktop","groupAfterMobile","moreFiltersMobileCollapsed","setMoreFiltersMobileCollapsed","moreFiltersDesktopCollapsed","setMoreFiltersDesktopCollapsed","filterValues","dispatch","doSubmit","newQuery","handleSubmit","formClass","moreFiltersMobileWrapperClass","moreFiltersMobileTogglerClass","moreFiltersDesktopWrapperClass","moreFiltersDesktopTogglerClass","formId","handleReset","updateFilterValues","shouldSubmit","shouldGroup","e","preventDefault","slice","MORE_FILTERS_CLASSES","MOBILE_CONTENT","DESKTOP_CONTENT","DESKTOP_BUTTONS","SEARCH","MOBILE_BUTTONS","REFINE","propTypes","PropTypes","object","isRequired","array","bool","string","func","number"],"sources":["../../../../src/components/SearchFilter/SearchFilter/SearchFilter.js"],"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 [moreFiltersMobileCollapsed, setMoreFiltersMobileCollapsed] = useState(true);\n const [moreFiltersDesktopCollapsed, setMoreFiltersDesktopCollapsed] = useState(true);\n const [filterValues, dispatch] = useReducer(reducer, initialFilterValues);\n\n const doSubmit = (newValues = filterValues) => {\n const newQuery = buildQuery(newValues, filters);\n handleSearch(newQuery);\n setMoreFiltersDesktopCollapsed(true);\n setMoreFiltersMobileCollapsed(true);\n };\n\n const handleSubmit = debounce(newValues => {\n doSubmit(newValues);\n }, 200);\n\n useEffect(\n () => {\n if (filterValues.shouldSearch) {\n handleSubmit(filterValues);\n dispatch({ type: 'resetSearch' });\n }\n },\n [filterValues, handleSubmit]\n );\n\n const formClass = classnames('filter__form filter__form--initial', {\n 'filter__form--mobile': isCollapsedOnResponsive && displaySearchFilter,\n 'filter__form--collapsible': isCollapsedOnResponsive\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, shouldSubmit) => {\n dispatch({ newValues, shouldSearch: shouldSubmit, type: 'update' });\n };\n\n const shouldGroup = !!(groupAfterDesktop || groupAfterMobile);\n const shouldSearch = !hasUrl;\n\n return (\n <>\n <form\n ref={searchFilterRef}\n className={formClass}\n data-testid={formId}\n id={formId}\n onSubmit={e => {\n e.preventDefault();\n doSubmit();\n }}>\n {displaySearchFilter && (\n <CloseMobileForm handleClose={() => setDisplaySearchFilter(false)} />\n )}\n\n <div className=\"filter filter--search-refine\">\n <ResetDesktopForm handleReset={handleReset} />\n\n <div className=\"filter__wrapper filter__wrapper--search-refine\">\n {!shouldGroup && (\n <FiltersList\n shouldSearch={shouldSearch}\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 shouldSearch={shouldSearch}\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 data-testId=\"search-filter-mobile-toggler\"\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 shouldSearch={shouldSearch && isDeviceDesktop()}\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 data-testId=\"search-filter-desktop-toggler\"\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 shouldSearch={false}\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 {!displaySearchFilter && (\n <button className=\"button button--full-width\" type=\"submit\">\n {SEARCH}\n </button>\n )}\n </div>\n </div>\n\n {displaySearchFilter && <MobileFormToolbar formId={formId} handleReset={handleReset} />}\n </form>\n\n {isCollapsedOnResponsive &&\n !displaySearchFilter && (\n <div className=\"filter__refine filter__refine--mobile-close\" data-testid=\"refine-mobile\">\n <div role=\"button\" onClick={() => setDisplaySearchFilter(true)}>\n {REFINE}\n </div>\n </div>\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"],"mappings":"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"}
@@ -61,9 +61,16 @@ const SearchFilter = ({
61
61
  const [moreFiltersMobileCollapsed, setMoreFiltersMobileCollapsed] = useState(true);
62
62
  const [moreFiltersDesktopCollapsed, setMoreFiltersDesktopCollapsed] = useState(true);
63
63
  const [filterValues, dispatch] = useReducer(reducer, initialFilterValues);
64
- const handleSubmit = debounce(newValues => {
64
+
65
+ const doSubmit = (newValues = filterValues) => {
65
66
  const newQuery = buildQuery(newValues, filters);
66
67
  handleSearch(newQuery);
68
+ setMoreFiltersDesktopCollapsed(true);
69
+ setMoreFiltersMobileCollapsed(true);
70
+ };
71
+
72
+ const handleSubmit = debounce(newValues => {
73
+ doSubmit(newValues);
67
74
  }, 200);
68
75
  useEffect(() => {
69
76
  if (filterValues.shouldSearch) {
@@ -110,8 +117,7 @@ const SearchFilter = ({
110
117
  id: formId,
111
118
  onSubmit: e => {
112
119
  e.preventDefault();
113
- const newQuery = buildQuery(filterValues, filters);
114
- handleSearch(newQuery);
120
+ doSubmit();
115
121
  }
116
122
  }, displaySearchFilter && /*#__PURE__*/React.createElement(CloseMobileForm, {
117
123
  handleClose: () => setDisplaySearchFilter(false)
@@ -138,6 +144,7 @@ const SearchFilter = ({
138
144
  filterValues: filterValues,
139
145
  updateFilterValues: updateFilterValues
140
146
  }), !!groupAfterMobile && /*#__PURE__*/React.createElement("button", {
147
+ "data-testId": "search-filter-mobile-toggler",
141
148
  className: moreFiltersMobileTogglerClass,
142
149
  type: "button",
143
150
  onClick: () => setMoreFiltersMobileCollapsed(!moreFiltersMobileCollapsed)
@@ -154,6 +161,7 @@ const SearchFilter = ({
154
161
  filterValues: filterValues,
155
162
  updateFilterValues: updateFilterValues
156
163
  }), !!groupAfterDesktop && /*#__PURE__*/React.createElement("button", {
164
+ "data-testId": "search-filter-desktop-toggler",
157
165
  className: moreFiltersDesktopTogglerClass,
158
166
  type: "button",
159
167
  onClick: () => setMoreFiltersDesktopCollapsed(!moreFiltersDesktopCollapsed)
@@ -1 +1 @@
1
- {"version":3,"file":"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","moreFiltersMobileCollapsed","setMoreFiltersMobileCollapsed","moreFiltersDesktopCollapsed","setMoreFiltersDesktopCollapsed","filterValues","dispatch","handleSubmit","newQuery","formClass","moreFiltersMobileWrapperClass","moreFiltersMobileTogglerClass","moreFiltersDesktopWrapperClass","moreFiltersDesktopTogglerClass","formId","handleReset","updateFilterValues","shouldSubmit","shouldGroup","e","preventDefault","slice","MOBILE_CONTENT","DESKTOP_CONTENT","DESKTOP_BUTTONS","MOBILE_BUTTONS","propTypes","object","isRequired","array","bool","string","func","number"],"sources":["../../../../src/components/SearchFilter/SearchFilter/SearchFilter.js"],"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 [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 (filterValues.shouldSearch) {\n handleSubmit(filterValues);\n dispatch({ type: 'resetSearch' });\n }\n },\n [filterValues, handleSubmit]\n );\n\n const formClass = classnames('filter__form filter__form--initial', {\n 'filter__form--mobile': isCollapsedOnResponsive && displaySearchFilter,\n 'filter__form--collapsible': isCollapsedOnResponsive\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, shouldSubmit) => {\n dispatch({ newValues, shouldSearch: shouldSubmit, type: 'update' });\n };\n\n const shouldGroup = !!(groupAfterDesktop || groupAfterMobile);\n const shouldSearch = !hasUrl;\n\n return (\n <>\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 {displaySearchFilter && (\n <CloseMobileForm handleClose={() => setDisplaySearchFilter(false)} />\n )}\n\n <div className=\"filter filter--search-refine\">\n <ResetDesktopForm handleReset={handleReset} />\n\n <div className=\"filter__wrapper filter__wrapper--search-refine\">\n {!shouldGroup && (\n <FiltersList\n shouldSearch={shouldSearch}\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 shouldSearch={shouldSearch}\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 shouldSearch={shouldSearch && isDeviceDesktop()}\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 shouldSearch={false}\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 {!displaySearchFilter && (\n <button className=\"button button--full-width\" type=\"submit\">\n {SEARCH}\n </button>\n )}\n </div>\n </div>\n\n {displaySearchFilter && <MobileFormToolbar formId={formId} handleReset={handleReset} />}\n </form>\n\n {isCollapsedOnResponsive &&\n !displaySearchFilter && (\n <div className=\"filter__refine filter__refine--mobile-close\" data-testid=\"refine-mobile\">\n <div role=\"button\" onClick={() => setDisplaySearchFilter(true)}>\n {REFINE}\n </div>\n </div>\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"],"mappings":"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"}
1
+ {"version":3,"file":"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","moreFiltersMobileCollapsed","setMoreFiltersMobileCollapsed","moreFiltersDesktopCollapsed","setMoreFiltersDesktopCollapsed","filterValues","dispatch","doSubmit","newQuery","handleSubmit","formClass","moreFiltersMobileWrapperClass","moreFiltersMobileTogglerClass","moreFiltersDesktopWrapperClass","moreFiltersDesktopTogglerClass","formId","handleReset","updateFilterValues","shouldSubmit","shouldGroup","e","preventDefault","slice","MOBILE_CONTENT","DESKTOP_CONTENT","DESKTOP_BUTTONS","MOBILE_BUTTONS","propTypes","object","isRequired","array","bool","string","func","number"],"sources":["../../../../src/components/SearchFilter/SearchFilter/SearchFilter.js"],"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 [moreFiltersMobileCollapsed, setMoreFiltersMobileCollapsed] = useState(true);\n const [moreFiltersDesktopCollapsed, setMoreFiltersDesktopCollapsed] = useState(true);\n const [filterValues, dispatch] = useReducer(reducer, initialFilterValues);\n\n const doSubmit = (newValues = filterValues) => {\n const newQuery = buildQuery(newValues, filters);\n handleSearch(newQuery);\n setMoreFiltersDesktopCollapsed(true);\n setMoreFiltersMobileCollapsed(true);\n };\n\n const handleSubmit = debounce(newValues => {\n doSubmit(newValues);\n }, 200);\n\n useEffect(\n () => {\n if (filterValues.shouldSearch) {\n handleSubmit(filterValues);\n dispatch({ type: 'resetSearch' });\n }\n },\n [filterValues, handleSubmit]\n );\n\n const formClass = classnames('filter__form filter__form--initial', {\n 'filter__form--mobile': isCollapsedOnResponsive && displaySearchFilter,\n 'filter__form--collapsible': isCollapsedOnResponsive\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, shouldSubmit) => {\n dispatch({ newValues, shouldSearch: shouldSubmit, type: 'update' });\n };\n\n const shouldGroup = !!(groupAfterDesktop || groupAfterMobile);\n const shouldSearch = !hasUrl;\n\n return (\n <>\n <form\n ref={searchFilterRef}\n className={formClass}\n data-testid={formId}\n id={formId}\n onSubmit={e => {\n e.preventDefault();\n doSubmit();\n }}>\n {displaySearchFilter && (\n <CloseMobileForm handleClose={() => setDisplaySearchFilter(false)} />\n )}\n\n <div className=\"filter filter--search-refine\">\n <ResetDesktopForm handleReset={handleReset} />\n\n <div className=\"filter__wrapper filter__wrapper--search-refine\">\n {!shouldGroup && (\n <FiltersList\n shouldSearch={shouldSearch}\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 shouldSearch={shouldSearch}\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 data-testId=\"search-filter-mobile-toggler\"\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 shouldSearch={shouldSearch && isDeviceDesktop()}\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 data-testId=\"search-filter-desktop-toggler\"\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 shouldSearch={false}\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 {!displaySearchFilter && (\n <button className=\"button button--full-width\" type=\"submit\">\n {SEARCH}\n </button>\n )}\n </div>\n </div>\n\n {displaySearchFilter && <MobileFormToolbar formId={formId} handleReset={handleReset} />}\n </form>\n\n {isCollapsedOnResponsive &&\n !displaySearchFilter && (\n <div className=\"filter__refine filter__refine--mobile-close\" data-testid=\"refine-mobile\">\n <div role=\"button\" onClick={() => setDisplaySearchFilter(true)}>\n {REFINE}\n </div>\n </div>\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"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/react-page-builder",
3
- "version": "0.124.0-alpha.8",
3
+ "version": "0.124.0-alpha.9",
4
4
  "description": "Blaze react page builder",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -84,5 +84,5 @@
84
84
  "lib/*",
85
85
  "lib-es/*"
86
86
  ],
87
- "gitHead": "b1315a8be908a92e7f0c103166ce2ace52cc4b1c"
87
+ "gitHead": "11dbadf5c746132e31fa3a8f4f24ac2ae2ed229c"
88
88
  }
@@ -48,9 +48,15 @@ const SearchFilter = ({
48
48
  const [moreFiltersDesktopCollapsed, setMoreFiltersDesktopCollapsed] = useState(true);
49
49
  const [filterValues, dispatch] = useReducer(reducer, initialFilterValues);
50
50
 
51
- const handleSubmit = debounce(newValues => {
51
+ const doSubmit = (newValues = filterValues) => {
52
52
  const newQuery = buildQuery(newValues, filters);
53
53
  handleSearch(newQuery);
54
+ setMoreFiltersDesktopCollapsed(true);
55
+ setMoreFiltersMobileCollapsed(true);
56
+ };
57
+
58
+ const handleSubmit = debounce(newValues => {
59
+ doSubmit(newValues);
54
60
  }, 200);
55
61
 
56
62
  useEffect(
@@ -99,8 +105,7 @@ const SearchFilter = ({
99
105
  id={formId}
100
106
  onSubmit={e => {
101
107
  e.preventDefault();
102
- const newQuery = buildQuery(filterValues, filters);
103
- handleSearch(newQuery);
108
+ doSubmit();
104
109
  }}>
105
110
  {displaySearchFilter && (
106
111
  <CloseMobileForm handleClose={() => setDisplaySearchFilter(false)} />
@@ -136,6 +141,7 @@ const SearchFilter = ({
136
141
 
137
142
  {!!groupAfterMobile && (
138
143
  <button
144
+ data-testId="search-filter-mobile-toggler"
139
145
  className={moreFiltersMobileTogglerClass}
140
146
  type="button"
141
147
  onClick={() => setMoreFiltersMobileCollapsed(!moreFiltersMobileCollapsed)}>
@@ -160,6 +166,7 @@ const SearchFilter = ({
160
166
 
161
167
  {!!groupAfterDesktop && (
162
168
  <button
169
+ data-testId="search-filter-desktop-toggler"
163
170
  className={moreFiltersDesktopTogglerClass}
164
171
  type="button"
165
172
  onClick={() =>
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { render, screen } from '@testing-library/react';
2
+ import { render, screen, fireEvent } from '@testing-library/react';
3
3
  import '@testing-library/jest-dom';
4
4
  import SearchFilter from '../../../../../../src/components/SearchFilter/SearchFilter';
5
5
 
@@ -153,5 +153,27 @@ describe('SearchFilter component', () => {
153
153
  const { asFragment } = renderComponent(SearchFilter, specificMockedProps);
154
154
  expect(asFragment()).toMatchSnapshot();
155
155
  });
156
+
157
+ it('should toggle open and close classes on click and submit', () => {
158
+ const { getByTestId } = renderComponent(SearchFilter, specificMockedProps);
159
+ const mobileToggler = getByTestId('search-filter-mobile-toggler');
160
+ const desktopToggler = getByTestId('search-filter-desktop-toggler');
161
+ const form = screen.getByTestId(`filter-${specificMockedProps.name}-form`);
162
+
163
+ fireEvent.click(mobileToggler);
164
+ expect(mobileToggler).toHaveClass(
165
+ 'filter__more-filters-mobile-toggler filter__more-filters-mobile-toggler--open'
166
+ );
167
+
168
+ fireEvent.click(desktopToggler);
169
+ expect(desktopToggler).toHaveClass(
170
+ 'filter__more-filters-desktop-toggler filter__more-filters-desktop-toggler--open'
171
+ );
172
+
173
+ fireEvent.submit(form);
174
+
175
+ expect(mobileToggler).toHaveClass('filter__more-filters-mobile-toggler');
176
+ expect(desktopToggler).toHaveClass('filter__more-filters-desktop-toggler');
177
+ });
156
178
  });
157
179
  });
@@ -121,6 +121,7 @@ exports[`SearchFilter component when groupAfterMobile = 0 and groupAfterDesktop
121
121
  >
122
122
  <button
123
123
  class="filter__more-filters-desktop-toggler"
124
+ data-testid="search-filter-desktop-toggler"
124
125
  type="button"
125
126
  >
126
127
  More filters
@@ -288,6 +289,7 @@ exports[`SearchFilter component when groupAfterMobile > 0 and groupAfterDesktop
288
289
  >
289
290
  <button
290
291
  class="filter__more-filters-mobile-toggler"
292
+ data-testid="search-filter-mobile-toggler"
291
293
  type="button"
292
294
  >
293
295
  Filters
@@ -461,6 +463,7 @@ exports[`SearchFilter component when groupAfterMobile > 0 and groupAfterDesktop
461
463
  >
462
464
  <button
463
465
  class="filter__more-filters-mobile-toggler"
466
+ data-testid="search-filter-mobile-toggler"
464
467
  type="button"
465
468
  >
466
469
  Filters
@@ -473,6 +476,7 @@ exports[`SearchFilter component when groupAfterMobile > 0 and groupAfterDesktop
473
476
  >
474
477
  <button
475
478
  class="filter__more-filters-desktop-toggler"
479
+ data-testid="search-filter-desktop-toggler"
476
480
  type="button"
477
481
  >
478
482
  More filters