@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 +26 -1
- package/lib/components/SearchFilter/SearchFilter/SearchFilter.js +11 -3
- package/lib/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
- package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js +11 -3
- package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
- package/package.json +2 -2
- package/src/components/SearchFilter/SearchFilter/SearchFilter.js +10 -3
- package/tests/unit/src/components/SearchFilter/SearchFilter/SearchFilter.test.js +23 -1
- package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/SearchFilter.test.js.snap +4 -0
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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": "
|
|
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
|
|
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
|
-
|
|
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
|
});
|
package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/SearchFilter.test.js.snap
CHANGED
|
@@ -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
|