@blaze-cms/react-page-builder 0.131.0 → 0.132.0-admin-updates.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.
- package/CHANGELOG.md +38 -0
- package/lib/components/Button.js +2 -1
- package/lib/components/Button.js.map +1 -1
- package/lib/components/Card/CardsRender.js +13 -6
- package/lib/components/Card/CardsRender.js.map +1 -1
- package/lib/components/Card/helpers/get-updated-items-to-display.js +55 -0
- package/lib/components/Card/helpers/get-updated-items-to-display.js.map +1 -0
- package/lib/components/Card/helpers/index.js +7 -0
- package/lib/components/Card/helpers/index.js.map +1 -1
- package/lib/components/CarouselWrapper/SmoothScrollCarousel.js +2 -2
- package/lib/components/CarouselWrapper/SmoothScrollCarousel.js.map +1 -1
- package/lib/components/Code/Code.js +7 -3
- package/lib/components/Code/Code.js.map +1 -1
- package/lib/components/DataSummary/helpers/build-loop-props-content.js +6 -3
- package/lib/components/DataSummary/helpers/build-loop-props-content.js.map +1 -1
- package/lib/components/DataSummary/helpers/build-props-to-display-with-content.js +3 -2
- package/lib/components/DataSummary/helpers/build-props-to-display-with-content.js.map +1 -1
- package/lib/components/DataSummary/helpers/get-link-to-published-content.js +2 -0
- package/lib/components/DataSummary/helpers/get-link-to-published-content.js.map +1 -1
- package/lib/components/List/ListFactory.js +16 -11
- package/lib/components/List/ListFactory.js.map +1 -1
- package/lib/components/List/helpers/get-list-query.js +43 -0
- package/lib/components/List/helpers/get-list-query.js.map +1 -0
- package/lib/components/List/helpers/get-list-specific-search-filter.js +21 -0
- package/lib/components/List/helpers/get-list-specific-search-filter.js.map +1 -0
- package/lib/components/List/helpers/index.js +14 -0
- package/lib/components/List/helpers/index.js.map +1 -1
- package/lib/components/List/helpers/strip-query-key.js +14 -0
- package/lib/components/List/helpers/strip-query-key.js.map +1 -0
- package/lib/components/SearchContent/SearchContent.js +8 -8
- package/lib/components/SearchContent/SearchContent.js.map +1 -1
- package/lib/components/SearchFilter/SearchFilter/SearchFilter.js +17 -13
- package/lib/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
- package/lib/components/SearchFilter/SearchFilterContainer.js +64 -83
- package/lib/components/SearchFilter/SearchFilterContainer.js.map +1 -1
- package/lib/components/SearchFilter/helpers/build-filters-query.js +3 -1
- package/lib/components/SearchFilter/helpers/build-filters-query.js.map +1 -1
- package/lib/components/SearchFilter/helpers/build-new-url.js +17 -0
- package/lib/components/SearchFilter/helpers/build-new-url.js.map +1 -0
- package/lib/components/SearchFilter/helpers/build-url-query.js +49 -0
- package/lib/components/SearchFilter/helpers/build-url-query.js.map +1 -0
- package/lib/components/SearchFilter/helpers/get-filter-ranges-and-checkboxes-values.js +32 -0
- package/lib/components/SearchFilter/helpers/get-filter-ranges-and-checkboxes-values.js.map +1 -0
- package/lib/components/SearchFilter/helpers/get-filter-values.js +31 -0
- package/lib/components/SearchFilter/helpers/get-filter-values.js.map +1 -0
- package/lib/components/SearchFilter/helpers/index.js +18 -11
- package/lib/components/SearchFilter/helpers/index.js.map +1 -1
- package/lib/components/SearchFilter/index.js.map +1 -1
- package/lib/components/SearchFilter/searchFilterReducer.js +43 -0
- package/lib/components/SearchFilter/searchFilterReducer.js.map +1 -0
- package/lib/components/SearchFilterSort/SearchFilterSort.js +31 -11
- package/lib/components/SearchFilterSort/SearchFilterSort.js.map +1 -1
- package/lib/components/SearchFilterSort/helpers/handle-sort-update.js +19 -5
- package/lib/components/SearchFilterSort/helpers/handle-sort-update.js.map +1 -1
- package/lib/components/SearchFilterSort/helpers/update-sort.js +9 -5
- package/lib/components/SearchFilterSort/helpers/update-sort.js.map +1 -1
- package/lib/helpers/build-inherited-filters.js +2 -0
- package/lib/helpers/build-inherited-filters.js.map +1 -1
- package/lib/helpers/build-props-query.js +5 -2
- package/lib/helpers/build-props-query.js.map +1 -1
- package/lib/helpers/build-query-key.js +16 -0
- package/lib/helpers/build-query-key.js.map +1 -0
- package/lib/helpers/build-set-filters.js +5 -1
- package/lib/helpers/build-set-filters.js.map +1 -1
- package/lib/helpers/get-entities-with-banner.js +8 -2
- package/lib/helpers/get-entities-with-banner.js.map +1 -1
- package/lib/helpers/get-query-filters.js +6 -8
- package/lib/helpers/get-query-filters.js.map +1 -1
- package/lib/helpers/get-query-props.js +13 -2
- package/lib/helpers/get-query-props.js.map +1 -1
- package/lib/helpers/get-wrapped-value-with-link.js +2 -3
- package/lib/helpers/get-wrapped-value-with-link.js.map +1 -1
- package/lib/helpers/index.js +14 -0
- package/lib/helpers/index.js.map +1 -1
- package/lib/helpers/parse-props-to-display.js +13 -8
- package/lib/helpers/parse-props-to-display.js.map +1 -1
- package/lib/helpers/process-data-summary-value.js +56 -0
- package/lib/helpers/process-data-summary-value.js.map +1 -0
- package/lib-es/components/Button.js +2 -1
- package/lib-es/components/Button.js.map +1 -1
- package/lib-es/components/Card/CardsRender.js +14 -7
- package/lib-es/components/Card/CardsRender.js.map +1 -1
- package/lib-es/components/Card/helpers/get-updated-items-to-display.js +32 -0
- package/lib-es/components/Card/helpers/get-updated-items-to-display.js.map +1 -0
- package/lib-es/components/Card/helpers/index.js +1 -0
- package/lib-es/components/Card/helpers/index.js.map +1 -1
- package/lib-es/components/CarouselWrapper/SmoothScrollCarousel.js +2 -2
- package/lib-es/components/CarouselWrapper/SmoothScrollCarousel.js.map +1 -1
- package/lib-es/components/Code/Code.js +8 -4
- package/lib-es/components/Code/Code.js.map +1 -1
- package/lib-es/components/DataSummary/helpers/build-loop-props-content.js +6 -3
- package/lib-es/components/DataSummary/helpers/build-loop-props-content.js.map +1 -1
- package/lib-es/components/DataSummary/helpers/build-props-to-display-with-content.js +4 -3
- package/lib-es/components/DataSummary/helpers/build-props-to-display-with-content.js.map +1 -1
- package/lib-es/components/DataSummary/helpers/get-link-to-published-content.js +2 -1
- package/lib-es/components/DataSummary/helpers/get-link-to-published-content.js.map +1 -1
- package/lib-es/components/List/ListFactory.js +16 -12
- package/lib-es/components/List/ListFactory.js.map +1 -1
- package/lib-es/components/List/helpers/get-list-query.js +24 -0
- package/lib-es/components/List/helpers/get-list-query.js.map +1 -0
- package/lib-es/components/List/helpers/get-list-specific-search-filter.js +12 -0
- package/lib-es/components/List/helpers/get-list-specific-search-filter.js.map +1 -0
- package/lib-es/components/List/helpers/index.js +2 -0
- package/lib-es/components/List/helpers/index.js.map +1 -1
- package/lib-es/components/List/helpers/strip-query-key.js +6 -0
- package/lib-es/components/List/helpers/strip-query-key.js.map +1 -0
- package/lib-es/components/SearchContent/SearchContent.js +8 -8
- package/lib-es/components/SearchContent/SearchContent.js.map +1 -1
- package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js +18 -13
- package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
- package/lib-es/components/SearchFilter/SearchFilterContainer.js +48 -70
- package/lib-es/components/SearchFilter/SearchFilterContainer.js.map +1 -1
- package/lib-es/components/SearchFilter/helpers/build-filters-query.js +2 -0
- package/lib-es/components/SearchFilter/helpers/build-filters-query.js.map +1 -1
- package/lib-es/components/SearchFilter/helpers/build-new-url.js +8 -0
- package/lib-es/components/SearchFilter/helpers/build-new-url.js.map +1 -0
- package/lib-es/components/SearchFilter/helpers/build-url-query.js +31 -0
- package/lib-es/components/SearchFilter/helpers/build-url-query.js.map +1 -0
- package/lib-es/components/SearchFilter/helpers/get-filter-ranges-and-checkboxes-values.js +18 -0
- package/lib-es/components/SearchFilter/helpers/get-filter-ranges-and-checkboxes-values.js.map +1 -0
- package/lib-es/components/SearchFilter/helpers/get-filter-values.js +19 -0
- package/lib-es/components/SearchFilter/helpers/get-filter-values.js.map +1 -0
- package/lib-es/components/SearchFilter/helpers/index.js +5 -4
- package/lib-es/components/SearchFilter/helpers/index.js.map +1 -1
- package/lib-es/components/SearchFilter/index.js +2 -2
- package/lib-es/components/SearchFilter/index.js.map +1 -1
- package/lib-es/components/SearchFilter/searchFilterReducer.js +26 -0
- package/lib-es/components/SearchFilter/searchFilterReducer.js.map +1 -0
- package/lib-es/components/SearchFilterSort/SearchFilterSort.js +26 -10
- package/lib-es/components/SearchFilterSort/SearchFilterSort.js.map +1 -1
- package/lib-es/components/SearchFilterSort/helpers/handle-sort-update.js +21 -4
- package/lib-es/components/SearchFilterSort/helpers/handle-sort-update.js.map +1 -1
- package/lib-es/components/SearchFilterSort/helpers/update-sort.js +8 -4
- package/lib-es/components/SearchFilterSort/helpers/update-sort.js.map +1 -1
- package/lib-es/helpers/build-inherited-filters.js +2 -0
- package/lib-es/helpers/build-inherited-filters.js.map +1 -1
- package/lib-es/helpers/build-props-query.js +4 -2
- package/lib-es/helpers/build-props-query.js.map +1 -1
- package/lib-es/helpers/build-query-key.js +7 -0
- package/lib-es/helpers/build-query-key.js.map +1 -0
- package/lib-es/helpers/build-set-filters.js +5 -1
- package/lib-es/helpers/build-set-filters.js.map +1 -1
- package/lib-es/helpers/get-entities-with-banner.js +9 -2
- package/lib-es/helpers/get-entities-with-banner.js.map +1 -1
- package/lib-es/helpers/get-query-filters.js +6 -8
- package/lib-es/helpers/get-query-filters.js.map +1 -1
- package/lib-es/helpers/get-query-props.js +10 -2
- package/lib-es/helpers/get-query-props.js.map +1 -1
- package/lib-es/helpers/get-wrapped-value-with-link.js +2 -2
- package/lib-es/helpers/get-wrapped-value-with-link.js.map +1 -1
- package/lib-es/helpers/index.js +2 -0
- package/lib-es/helpers/index.js.map +1 -1
- package/lib-es/helpers/parse-props-to-display.js +12 -9
- package/lib-es/helpers/parse-props-to-display.js.map +1 -1
- package/lib-es/helpers/process-data-summary-value.js +36 -0
- package/lib-es/helpers/process-data-summary-value.js.map +1 -0
- package/package.json +10 -10
- package/src/components/Button.js +2 -1
- package/src/components/Card/CardsRender.js +27 -7
- package/src/components/Card/helpers/get-updated-items-to-display.js +32 -0
- package/src/components/Card/helpers/index.js +1 -0
- package/src/components/CarouselWrapper/SmoothScrollCarousel.js +2 -2
- package/src/components/Code/Code.js +7 -3
- package/src/components/DataSummary/helpers/build-loop-props-content.js +7 -3
- package/src/components/DataSummary/helpers/build-props-to-display-with-content.js +6 -3
- package/src/components/DataSummary/helpers/get-link-to-published-content.js +4 -1
- package/src/components/List/ListFactory.js +25 -15
- package/src/components/List/helpers/get-list-query.js +28 -0
- package/src/components/List/helpers/get-list-specific-search-filter.js +10 -0
- package/src/components/List/helpers/index.js +2 -0
- package/src/components/List/helpers/strip-query-key.js +6 -0
- package/src/components/SearchContent/SearchContent.js +8 -8
- package/src/components/SearchFilter/SearchFilter/SearchFilter.js +21 -18
- package/src/components/SearchFilter/SearchFilterContainer.js +59 -67
- package/src/components/SearchFilter/helpers/build-filters-query.js +9 -1
- package/src/components/SearchFilter/helpers/build-new-url.js +8 -0
- package/src/components/SearchFilter/helpers/build-url-query.js +33 -0
- package/src/components/SearchFilter/helpers/get-filter-ranges-and-checkboxes-values.js +17 -0
- package/src/components/SearchFilter/helpers/get-filter-values.js +21 -0
- package/src/components/SearchFilter/helpers/index.js +9 -7
- package/src/components/SearchFilter/index.js +2 -2
- package/src/components/SearchFilter/searchFilterReducer.js +15 -0
- package/src/components/SearchFilterSort/SearchFilterSort.js +18 -8
- package/src/components/SearchFilterSort/helpers/handle-sort-update.js +14 -5
- package/src/components/SearchFilterSort/helpers/update-sort.js +7 -3
- package/src/helpers/build-inherited-filters.js +3 -1
- package/src/helpers/build-props-query.js +4 -2
- package/src/helpers/build-query-key.js +7 -0
- package/src/helpers/build-set-filters.js +2 -1
- package/src/helpers/get-entities-with-banner.js +3 -2
- package/src/helpers/get-query-filters.js +4 -4
- package/src/helpers/get-query-props.js +12 -4
- package/src/helpers/get-wrapped-value-with-link.js +6 -3
- package/src/helpers/index.js +2 -0
- package/src/helpers/parse-props-to-display.js +25 -21
- package/src/helpers/process-data-summary-value.js +22 -0
- package/tests/helpers/mocks.js +3 -5
- package/tests/unit/src/components/Card/helpers/get-updated-items-to-display.test.js +72 -0
- package/tests/unit/src/components/Code/Code.test.js +5 -0
- package/tests/unit/src/components/Code/__snapshots__/Code.test.js.snap +8 -0
- package/tests/unit/src/components/DataSummary/helpers/build-loop-props-content.test.js +50 -0
- package/tests/unit/src/components/DataSummary/helpers/get-link-to-published-content.test.js +21 -0
- package/tests/unit/src/components/SearchFilter/__snapshots__/SearchFilterContainer.test.js.snap +1 -7
- package/tests/unit/src/components/SearchFilter/helpers/build-new-query.test.js +10 -10
- package/tests/unit/src/components/SearchFilter/helpers/build-query.test.js +24 -7
- package/tests/unit/src/components/SearchFilter/helpers/get-initial-filter-values.test.js +10 -10
- package/tests/unit/src/components/SearchFilterSort/SearchFilterSort.test.js +4 -1
- package/tests/unit/src/components/SearchFilterSort/helpers/handle-sort-update.test.js +26 -19
- package/tests/unit/src/components/SearchFilterSort/helpers/update-sort.test.js +10 -1
- package/tests/unit/src/helpers/__snapshots__/get-wrapped-value-with-link.test.js.snap +18 -0
- package/tests/unit/src/helpers/build-props-query.test.js +25 -0
- package/tests/unit/src/helpers/get-wrapped-value-with-link.test.js +2 -2
- package/tests/unit/src/helpers/parse-props-to-display.test.js +4 -0
- package/tests/unit/src/helpers/prcoess-data-summary-value.test.js +52 -0
- package/lib/components/SearchFilter/helpers/build-new-query.js +0 -15
- package/lib/components/SearchFilter/helpers/build-new-query.js.map +0 -1
- package/lib/components/SearchFilter/helpers/build-query.js +0 -37
- package/lib/components/SearchFilter/helpers/build-query.js.map +0 -1
- package/lib/components/SearchFilter/helpers/get-initial-filter-values.js +0 -43
- package/lib/components/SearchFilter/helpers/get-initial-filter-values.js.map +0 -1
- package/lib-es/components/SearchFilter/helpers/build-new-query.js +0 -6
- package/lib-es/components/SearchFilter/helpers/build-new-query.js.map +0 -1
- package/lib-es/components/SearchFilter/helpers/build-query.js +0 -23
- package/lib-es/components/SearchFilter/helpers/build-query.js.map +0 -1
- package/lib-es/components/SearchFilter/helpers/get-initial-filter-values.js +0 -26
- package/lib-es/components/SearchFilter/helpers/get-initial-filter-values.js.map +0 -1
- package/src/components/SearchFilter/helpers/build-new-query.js +0 -6
- package/src/components/SearchFilter/helpers/build-query.js +0 -26
- package/src/components/SearchFilter/helpers/get-initial-filter-values.js +0 -30
|
@@ -7,7 +7,13 @@ import { MainContext } from '@blaze-cms/nextjs-components';
|
|
|
7
7
|
import { generateSingleItemQuery, getItemList } from '../../application/query';
|
|
8
8
|
import ListBuilder from './ListBuilder';
|
|
9
9
|
import { AZ_LIST_TYPE } from './constants';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
getAzQueryFilter,
|
|
12
|
+
getSortProps,
|
|
13
|
+
hasRequiredItemListDetails,
|
|
14
|
+
getListSpecificSearchFilter,
|
|
15
|
+
getListQuery
|
|
16
|
+
} from './helpers';
|
|
11
17
|
import {
|
|
12
18
|
getGenericProps,
|
|
13
19
|
getRequiredSchemas,
|
|
@@ -37,7 +43,7 @@ const ListFactory = props => {
|
|
|
37
43
|
type,
|
|
38
44
|
sortby: defaultSortBy,
|
|
39
45
|
sort: defaultSort,
|
|
40
|
-
|
|
46
|
+
allSearchFilters,
|
|
41
47
|
operator: filterOperator,
|
|
42
48
|
sortProperties,
|
|
43
49
|
itemListName
|
|
@@ -46,11 +52,13 @@ const ListFactory = props => {
|
|
|
46
52
|
const router = useRouter();
|
|
47
53
|
const { asPath } = router;
|
|
48
54
|
const parsedQuery = asPath.replace(/%5D/g, ']').replace(/%5B/g, '[');
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
} = parseUrl(parsedQuery);
|
|
55
|
+
const [searchFilter, hasListSpecificFilters] = getListSpecificSearchFilter(
|
|
56
|
+
allSearchFilters,
|
|
57
|
+
name
|
|
58
|
+
);
|
|
59
|
+
const { query, url, query: { itemListId: queryItemListId } = {} } = parseUrl(parsedQuery);
|
|
60
|
+
const updatedQuery = getListQuery(query, hasListSpecificFilters, name);
|
|
61
|
+
const { sort: querySort, sortby: querySortBy } = updatedQuery;
|
|
54
62
|
const { sortbyFilters, updatedSortProperties } = getSortProps({
|
|
55
63
|
querySort,
|
|
56
64
|
sortProperties,
|
|
@@ -62,8 +70,8 @@ const ListFactory = props => {
|
|
|
62
70
|
const itemListId = getItemListId(itemListName, queryItemListId);
|
|
63
71
|
const { itemEntity: parentEntity, itemId: parentId } = parent;
|
|
64
72
|
const updatedParentEntity = getUnpublishedEntityName(parentEntity);
|
|
65
|
-
const paginationIndex = getPaginationIndex(
|
|
66
|
-
const azFilter = getAzQueryFilter(
|
|
73
|
+
const paginationIndex = getPaginationIndex(updatedQuery, name);
|
|
74
|
+
const azFilter = getAzQueryFilter(updatedQuery, name);
|
|
67
75
|
|
|
68
76
|
const entitiesToUse = entities && entities.length ? entities : [legacyEntity];
|
|
69
77
|
const [filterEntity] = entitiesToUse;
|
|
@@ -123,10 +131,12 @@ const ListFactory = props => {
|
|
|
123
131
|
const [textFilter] = getSearchFilterType(searchFilter, TEXT_SEARCH);
|
|
124
132
|
const shouldApplyTextFilter = textFilter && textFilter.propsToDisplay.length;
|
|
125
133
|
const operator = shouldApplyTextFilter ? getElasticsearchOperator(textFilter) : AND_OPERATOR;
|
|
126
|
-
const valuesText = shouldApplyTextFilter
|
|
127
|
-
|
|
134
|
+
const valuesText = shouldApplyTextFilter
|
|
135
|
+
? buildSearchValuesText(textFilter, updatedQuery, name)
|
|
136
|
+
: [];
|
|
137
|
+
const { valuesAnd, valuesOr } = getQueryFilters(searchFilter, updatedQuery, name);
|
|
128
138
|
const isTextSearchFilterApplied = !!(
|
|
129
|
-
|
|
139
|
+
updatedQuery.search_term &&
|
|
130
140
|
searchFilter &&
|
|
131
141
|
getSearchFilterType(searchFilter, TEXT_SEARCH).length
|
|
132
142
|
);
|
|
@@ -139,7 +149,7 @@ const ListFactory = props => {
|
|
|
139
149
|
const listProps = {
|
|
140
150
|
...props,
|
|
141
151
|
...genericProps,
|
|
142
|
-
query,
|
|
152
|
+
query: updatedQuery,
|
|
143
153
|
url,
|
|
144
154
|
isCard,
|
|
145
155
|
isAZ,
|
|
@@ -179,7 +189,7 @@ ListFactory.propTypes = {
|
|
|
179
189
|
name: PropTypes.string,
|
|
180
190
|
sortby: PropTypes.array,
|
|
181
191
|
sort: PropTypes.string,
|
|
182
|
-
|
|
192
|
+
allSearchFilters: PropTypes.array,
|
|
183
193
|
sortProperties: PropTypes.array,
|
|
184
194
|
itemListName: PropTypes.string
|
|
185
195
|
};
|
|
@@ -195,7 +205,7 @@ ListFactory.defaultProps = {
|
|
|
195
205
|
sortProperties: [],
|
|
196
206
|
sort: '',
|
|
197
207
|
operator: AND,
|
|
198
|
-
|
|
208
|
+
allSearchFilters: [],
|
|
199
209
|
itemListName: ''
|
|
200
210
|
};
|
|
201
211
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import stripQueryKey from './strip-query-key';
|
|
2
|
+
|
|
3
|
+
const getListQuery = (query, hasListSpecificFilters, name) => {
|
|
4
|
+
const updatedQuery = {};
|
|
5
|
+
const listKey = `pb[${name}]`;
|
|
6
|
+
const paginationKey = `${listKey}[page]`;
|
|
7
|
+
const sortKey = `${listKey}[sort]`;
|
|
8
|
+
const sortByKey = `${listKey}[sortby]`;
|
|
9
|
+
|
|
10
|
+
Object.keys(query).forEach(queryKey => {
|
|
11
|
+
const isListKey = queryKey.indexOf(`${listKey}`) !== -1;
|
|
12
|
+
const decodedQueryValue = Array.isArray(query[queryKey])
|
|
13
|
+
? query[queryKey].map(value => decodeURIComponent(value))
|
|
14
|
+
: decodeURIComponent(query[queryKey]);
|
|
15
|
+
if (hasListSpecificFilters) {
|
|
16
|
+
const strippedKey = stripQueryKey(queryKey, listKey, paginationKey);
|
|
17
|
+
if (isListKey) updatedQuery[strippedKey] = decodedQueryValue;
|
|
18
|
+
} else {
|
|
19
|
+
if (queryKey.indexOf('pb[') === -1) updatedQuery[queryKey] = decodedQueryValue;
|
|
20
|
+
if (queryKey.indexOf(paginationKey) !== -1) updatedQuery[queryKey] = decodedQueryValue;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
updatedQuery.sort = query[sortKey] || query.sort;
|
|
24
|
+
updatedQuery.sortby = query[sortByKey] || query.sortby;
|
|
25
|
+
return updatedQuery;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export default getListQuery;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const getListSpecificSearchFilter = (searchFilters, listName) => {
|
|
2
|
+
const searchFilterMatch = searchFilters.find(
|
|
3
|
+
({ settings: { listComponentName } }) => listComponentName === listName
|
|
4
|
+
);
|
|
5
|
+
const hasListSpecificFilters = !!searchFilterMatch;
|
|
6
|
+
const searchFilterToUse = searchFilterMatch || searchFilters[0] || {};
|
|
7
|
+
return [searchFilterToUse, hasListSpecificFilters];
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default getListSpecificSearchFilter;
|
|
@@ -7,3 +7,5 @@ export { default as getItemsPerPageToUse } from './get-items-per-page-to-use';
|
|
|
7
7
|
export { default as getSortProps } from './get-sort-props';
|
|
8
8
|
export { default as hasRequiredItemListDetails } from './has-required-item-list-details';
|
|
9
9
|
export { default as getListComponent } from './get-list-component';
|
|
10
|
+
export { default as getListQuery } from './get-list-query';
|
|
11
|
+
export { default as getListSpecificSearchFilter } from './get-list-specific-search-filter';
|
|
@@ -10,12 +10,12 @@ const SearchContent = ({
|
|
|
10
10
|
searchInputAlignment,
|
|
11
11
|
searchInputWrapperMobile,
|
|
12
12
|
searchInputWrapperDesktop,
|
|
13
|
-
collapsible,
|
|
14
13
|
isMobile,
|
|
15
14
|
placeholder,
|
|
16
|
-
modifier
|
|
15
|
+
modifier,
|
|
16
|
+
collapsedSearch
|
|
17
17
|
}) => {
|
|
18
|
-
const [collapsed, setCollapsed] = useState(
|
|
18
|
+
const [collapsed, setCollapsed] = useState(collapsedSearch);
|
|
19
19
|
const router = useRouter();
|
|
20
20
|
|
|
21
21
|
const { results, searchTerm, setSearchTerm, debouncedSearchTerm } = useDebounceSearch({
|
|
@@ -50,7 +50,7 @@ const SearchContent = ({
|
|
|
50
50
|
};
|
|
51
51
|
|
|
52
52
|
const handleOnBlur = () => {
|
|
53
|
-
if (!
|
|
53
|
+
if (!collapsedSearch) return;
|
|
54
54
|
if (!debouncedSearchTerm || debouncedSearchTerm === '') setCollapsed(true);
|
|
55
55
|
};
|
|
56
56
|
|
|
@@ -118,9 +118,9 @@ SearchContent.propTypes = {
|
|
|
118
118
|
searchInputWrapperDesktop: PropTypes.string,
|
|
119
119
|
placeholder: PropTypes.string,
|
|
120
120
|
isMobile: PropTypes.bool,
|
|
121
|
-
collapsible: PropTypes.bool,
|
|
122
121
|
entities: PropTypes.array.isRequired,
|
|
123
|
-
modifier: PropTypes.string
|
|
122
|
+
modifier: PropTypes.string,
|
|
123
|
+
collapsedSearch: PropTypes.bool
|
|
124
124
|
};
|
|
125
125
|
|
|
126
126
|
SearchContent.defaultProps = {
|
|
@@ -129,8 +129,8 @@ SearchContent.defaultProps = {
|
|
|
129
129
|
searchInputWrapperDesktop: '',
|
|
130
130
|
placeholder: '',
|
|
131
131
|
isMobile: false,
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
modifier: '',
|
|
133
|
+
collapsedSearch: false
|
|
134
134
|
};
|
|
135
135
|
|
|
136
136
|
export default SearchContent;
|
|
@@ -3,12 +3,7 @@ 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 {
|
|
7
|
-
isDeviceDesktop,
|
|
8
|
-
buildQuery,
|
|
9
|
-
getInitialFilterValues,
|
|
10
|
-
getResponsiveFilterClassnames
|
|
11
|
-
} from '../helpers';
|
|
6
|
+
import { isDeviceDesktop, buildUrlQuery, getResponsiveFilterClassnames } from '../helpers';
|
|
12
7
|
import CloseMobileForm from './CloseMobileForm';
|
|
13
8
|
import ResetDesktopForm from './ResetDesktopForm';
|
|
14
9
|
import MobileFormToolbar from './MobileFormToolbar';
|
|
@@ -16,6 +11,7 @@ import { SEARCH, REFINE, MORE_FILTERS_CLASSES } from '../constants';
|
|
|
16
11
|
|
|
17
12
|
const SearchFilter = ({
|
|
18
13
|
searchFilterRef,
|
|
14
|
+
listComponentName,
|
|
19
15
|
data,
|
|
20
16
|
filters,
|
|
21
17
|
hasUrl,
|
|
@@ -28,13 +24,14 @@ const SearchFilter = ({
|
|
|
28
24
|
groupAfterDesktop,
|
|
29
25
|
groupAfterMobile,
|
|
30
26
|
filterValues,
|
|
31
|
-
setAppliedFilters
|
|
27
|
+
setAppliedFilters,
|
|
28
|
+
query
|
|
32
29
|
}) => {
|
|
33
30
|
const [moreFiltersMobileCollapsed, setMoreFiltersMobileCollapsed] = useState(true);
|
|
34
31
|
const [moreFiltersDesktopCollapsed, setMoreFiltersDesktopCollapsed] = useState(true);
|
|
35
32
|
|
|
36
|
-
const doSubmit =
|
|
37
|
-
const newQuery =
|
|
33
|
+
const doSubmit = newValues => {
|
|
34
|
+
const newQuery = buildUrlQuery(newValues, filters, listComponentName, query);
|
|
38
35
|
handleSearch(newQuery);
|
|
39
36
|
setMoreFiltersDesktopCollapsed(true);
|
|
40
37
|
setMoreFiltersMobileCollapsed(true);
|
|
@@ -69,9 +66,8 @@ const SearchFilter = ({
|
|
|
69
66
|
const formId = `filter-${name}-form`;
|
|
70
67
|
|
|
71
68
|
const handleReset = () => {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
doSubmit(newValues);
|
|
69
|
+
setAppliedFilters({ type: 'reset' });
|
|
70
|
+
doSubmit();
|
|
75
71
|
};
|
|
76
72
|
|
|
77
73
|
const updateFilterValues = (newValues, shouldSubmit) => {
|
|
@@ -79,7 +75,7 @@ const SearchFilter = ({
|
|
|
79
75
|
};
|
|
80
76
|
|
|
81
77
|
const shouldGroup = !!(groupAfterDesktop || groupAfterMobile);
|
|
82
|
-
|
|
78
|
+
|
|
83
79
|
return (
|
|
84
80
|
<>
|
|
85
81
|
<form
|
|
@@ -89,7 +85,7 @@ const SearchFilter = ({
|
|
|
89
85
|
id={formId}
|
|
90
86
|
onSubmit={e => {
|
|
91
87
|
e.preventDefault();
|
|
92
|
-
doSubmit();
|
|
88
|
+
doSubmit(filterValues);
|
|
93
89
|
}}>
|
|
94
90
|
{displaySearchFilter && (
|
|
95
91
|
<CloseMobileForm handleClose={() => setDisplaySearchFilter(false)} />
|
|
@@ -101,7 +97,7 @@ const SearchFilter = ({
|
|
|
101
97
|
<div className="filter__wrapper filter__wrapper--search-refine">
|
|
102
98
|
{!shouldGroup && (
|
|
103
99
|
<FiltersList
|
|
104
|
-
shouldSearch={
|
|
100
|
+
shouldSearch={!hasUrl}
|
|
105
101
|
data={data}
|
|
106
102
|
filters={filters}
|
|
107
103
|
hasUrl={hasUrl}
|
|
@@ -114,7 +110,7 @@ const SearchFilter = ({
|
|
|
114
110
|
{shouldGroup && (
|
|
115
111
|
<>
|
|
116
112
|
<FiltersList
|
|
117
|
-
shouldSearch={
|
|
113
|
+
shouldSearch={!hasUrl}
|
|
118
114
|
data={data}
|
|
119
115
|
filters={filters.slice(0, groupAfterMobile)}
|
|
120
116
|
hasUrl={hasUrl}
|
|
@@ -136,7 +132,7 @@ const SearchFilter = ({
|
|
|
136
132
|
<div className={moreFiltersMobileWrapperClass}>
|
|
137
133
|
<div className={MORE_FILTERS_CLASSES.MOBILE_CONTENT}>
|
|
138
134
|
<FiltersList
|
|
139
|
-
shouldSearch={
|
|
135
|
+
shouldSearch={!hasUrl && isDeviceDesktop()}
|
|
140
136
|
data={data}
|
|
141
137
|
filters={filters.slice(
|
|
142
138
|
groupAfterMobile,
|
|
@@ -233,7 +229,14 @@ SearchFilter.propTypes = {
|
|
|
233
229
|
groupAfterDesktop: PropTypes.number.isRequired,
|
|
234
230
|
groupAfterMobile: PropTypes.number.isRequired,
|
|
235
231
|
filterValues: PropTypes.object.isRequired,
|
|
236
|
-
setAppliedFilters: PropTypes.func.isRequired
|
|
232
|
+
setAppliedFilters: PropTypes.func.isRequired,
|
|
233
|
+
listComponentName: PropTypes.string,
|
|
234
|
+
query: PropTypes.object
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
SearchFilter.defaultProps = {
|
|
238
|
+
listComponentName: '',
|
|
239
|
+
query: {}
|
|
237
240
|
};
|
|
238
241
|
|
|
239
242
|
export default SearchFilter;
|
|
@@ -2,33 +2,37 @@ import React, { useState, useRef, useReducer, useEffect } from 'react';
|
|
|
2
2
|
import { useRouter } from 'next/router';
|
|
3
3
|
import { useQuery } from '@apollo/client';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
|
-
import { parseUrl
|
|
5
|
+
import { parseUrl } from 'query-string';
|
|
6
6
|
import SearchFilter from './SearchFilter';
|
|
7
7
|
import { withTitle } from '../../HOC';
|
|
8
8
|
import { getSearchPublishedContent } from '../../application/query';
|
|
9
9
|
import {
|
|
10
|
-
|
|
10
|
+
buildNewUrl,
|
|
11
11
|
buildRawQueryStringified,
|
|
12
|
-
|
|
13
|
-
buildFiltersQuery
|
|
12
|
+
getFilterValues,
|
|
13
|
+
buildFiltersQuery,
|
|
14
|
+
getFilterRangesAndCheckboxesValues
|
|
14
15
|
} from './helpers';
|
|
15
16
|
import { getEntityData } from '../../helpers';
|
|
16
|
-
import { RAW_RESULTS
|
|
17
|
+
import { RAW_RESULTS } from './constants';
|
|
17
18
|
import { SCROLL_OFFSET } from '../../constants';
|
|
19
|
+
import searchFilterReducer from './searchFilterReducer';
|
|
20
|
+
|
|
21
|
+
const getFiltersUrlQuery = (query, listName) => {
|
|
22
|
+
if (!listName) return query;
|
|
23
|
+
const updatedQuery = {};
|
|
24
|
+
const listKey = `pb[${listName}]`;
|
|
25
|
+
Object.keys(query).forEach(queryKey => {
|
|
26
|
+
const isListKey = queryKey.indexOf(`${listName}`) !== -1;
|
|
27
|
+
if (!isListKey) return;
|
|
28
|
+
const decodedQueryValue = Array.isArray(query[queryKey])
|
|
29
|
+
? query[queryKey].map(value => decodeURIComponent(value))
|
|
30
|
+
: decodeURIComponent(query[queryKey]);
|
|
31
|
+
const strippedKey = queryKey.substring(listKey.length + 1, queryKey.length - 1);
|
|
32
|
+
if (isListKey) updatedQuery[strippedKey] = decodedQueryValue;
|
|
33
|
+
});
|
|
18
34
|
|
|
19
|
-
|
|
20
|
-
const { newValues, type, shouldSearch = true } = action;
|
|
21
|
-
|
|
22
|
-
switch (type) {
|
|
23
|
-
case 'update':
|
|
24
|
-
return { ...state, ...newValues, shouldSearch };
|
|
25
|
-
case 'resetSearch':
|
|
26
|
-
return { ...state, shouldSearch: false };
|
|
27
|
-
case 'reset':
|
|
28
|
-
return { ...newValues, shouldSearch: false };
|
|
29
|
-
default:
|
|
30
|
-
throw new Error();
|
|
31
|
-
}
|
|
35
|
+
return updatedQuery;
|
|
32
36
|
};
|
|
33
37
|
|
|
34
38
|
const SearchFilterContainer = ({
|
|
@@ -41,7 +45,8 @@ const SearchFilterContainer = ({
|
|
|
41
45
|
groupAfterDesktop,
|
|
42
46
|
filterBy,
|
|
43
47
|
filterByProperty,
|
|
44
|
-
shouldAddFilters
|
|
48
|
+
shouldAddFilters,
|
|
49
|
+
listComponentName
|
|
45
50
|
}) => {
|
|
46
51
|
const router = useRouter();
|
|
47
52
|
const { asPath } = router;
|
|
@@ -49,15 +54,10 @@ const SearchFilterContainer = ({
|
|
|
49
54
|
const [key, setKey] = useState(`filter-${name}`);
|
|
50
55
|
const [displaySearchFilter, setDisplaySearchFilter] = useState(false);
|
|
51
56
|
const [urlPath, setUrlPath] = useState(asPath); // used as asPath can take too long to update
|
|
52
|
-
const {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
} = parseUrl(urlPath);
|
|
57
|
-
const [filterValues, dispatch] = useReducer(
|
|
58
|
-
reducer,
|
|
59
|
-
getInitialFilterValues(null, filters, query)
|
|
60
|
-
);
|
|
57
|
+
const { url: currentUrl, query } = parseUrl(urlPath);
|
|
58
|
+
const updatedQuery = getFiltersUrlQuery(query, listComponentName);
|
|
59
|
+
|
|
60
|
+
const [filterValues, dispatch] = useReducer(searchFilterReducer, null);
|
|
61
61
|
|
|
62
62
|
useEffect(
|
|
63
63
|
() => {
|
|
@@ -66,34 +66,19 @@ const SearchFilterContainer = ({
|
|
|
66
66
|
[asPath]
|
|
67
67
|
);
|
|
68
68
|
|
|
69
|
-
const hasUrl = !!url;
|
|
70
|
-
|
|
71
|
-
const sortValues = sort && sortby ? stringify({ sort, sortby }) : '';
|
|
72
|
-
const baseQuery = sortValues ? `${currentUrl}?${sortValues}` : currentUrl;
|
|
73
|
-
|
|
74
69
|
const action = getSearchPublishedContent(RAW_RESULTS);
|
|
75
|
-
const checkboxSelectValues =
|
|
76
|
-
const rangeValues = [];
|
|
77
|
-
|
|
78
|
-
filters.forEach(({ type, propsToDisplay }) => {
|
|
79
|
-
if (CHECKBOX_SELECT.includes(type)) {
|
|
80
|
-
checkboxSelectValues.push(propsToDisplay[0]);
|
|
81
|
-
} else if (type === RANGE) {
|
|
82
|
-
rangeValues.push(...propsToDisplay);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
70
|
+
const [checkboxSelectValues, rangeValues] = getFilterRangesAndCheckboxesValues(filters);
|
|
85
71
|
|
|
86
72
|
const { docType } = getEntityData(entity);
|
|
87
73
|
|
|
88
|
-
const filtersQuery =
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
: [];
|
|
74
|
+
const filtersQuery = buildFiltersQuery({
|
|
75
|
+
shouldAddFilters,
|
|
76
|
+
query: filterValues || {},
|
|
77
|
+
filterBy,
|
|
78
|
+
filterByProperty,
|
|
79
|
+
rangeValues,
|
|
80
|
+
queryKeys: Object.keys(updatedQuery)
|
|
81
|
+
});
|
|
97
82
|
|
|
98
83
|
const rawQueryStringified = buildRawQueryStringified(
|
|
99
84
|
checkboxSelectValues,
|
|
@@ -102,7 +87,7 @@ const SearchFilterContainer = ({
|
|
|
102
87
|
filtersQuery
|
|
103
88
|
);
|
|
104
89
|
|
|
105
|
-
const { data, error } = useQuery(action, {
|
|
90
|
+
const { data, error, loading } = useQuery(action, {
|
|
106
91
|
variables: { rawQueryStringified, limit: 0 }, // we only want aggs so limit=0 for no search results
|
|
107
92
|
skip: !rawQueryStringified
|
|
108
93
|
});
|
|
@@ -113,30 +98,32 @@ const SearchFilterContainer = ({
|
|
|
113
98
|
const { searchPublishedContent: { rawResults: { aggregations: filterData } = {} } = {} } =
|
|
114
99
|
data || {};
|
|
115
100
|
|
|
116
|
-
if (filterValues
|
|
117
|
-
const
|
|
118
|
-
dispatch({ newValues
|
|
101
|
+
if (!filterValues && !loading && (filterData || !rawQueryStringified)) {
|
|
102
|
+
const newValues = getFilterValues(filterData, filters, updatedQuery);
|
|
103
|
+
dispatch({ newValues, shouldSearch: false, type: 'update' });
|
|
104
|
+
return null;
|
|
119
105
|
}
|
|
120
106
|
|
|
121
107
|
const handleSearch = newQuery => {
|
|
122
108
|
setDisplaySearchFilter(false);
|
|
123
|
-
|
|
109
|
+
const hashBit = asPath.split('#')[1] || '';
|
|
110
|
+
const parsedHashBit = hashBit ? `#${hashBit}` : '';
|
|
111
|
+
scrollToFirstList();
|
|
124
112
|
if (!newQuery) {
|
|
125
|
-
|
|
113
|
+
const baseQuery = `${currentUrl}${parsedHashBit}`;
|
|
126
114
|
setUrlPath(baseQuery);
|
|
127
|
-
return router.push('/Resolver', baseQuery, { shallow: !
|
|
115
|
+
return router.push('/Resolver', baseQuery, { shallow: !url, scroll: false }).then(() => {
|
|
128
116
|
setKey(`filter-${name}:${Date.now()}`); // remove after range component update
|
|
129
117
|
});
|
|
130
118
|
}
|
|
131
|
-
const newUrl =
|
|
132
|
-
scrollToFirstList();
|
|
119
|
+
const newUrl = buildNewUrl(url, currentUrl, newQuery, hashBit);
|
|
133
120
|
setUrlPath(newUrl);
|
|
134
|
-
return router.push('/Resolver', newUrl, { shallow: !
|
|
121
|
+
return router.push('/Resolver', newUrl, { shallow: !url, scroll: false });
|
|
135
122
|
};
|
|
136
123
|
|
|
137
124
|
const scrollToFirstList = () => {
|
|
138
125
|
const [list] = document.getElementsByClassName('list-top');
|
|
139
|
-
const shouldScrollToFirstList = !
|
|
126
|
+
const shouldScrollToFirstList = !url && list;
|
|
140
127
|
|
|
141
128
|
if (shouldScrollToFirstList) {
|
|
142
129
|
window.scrollTo({
|
|
@@ -147,16 +134,19 @@ const SearchFilterContainer = ({
|
|
|
147
134
|
window.scrollTo(0, 0);
|
|
148
135
|
}
|
|
149
136
|
};
|
|
150
|
-
|
|
137
|
+
|
|
138
|
+
if (!filterValues) return null;
|
|
151
139
|
|
|
152
140
|
return (
|
|
153
141
|
<SearchFilter
|
|
154
142
|
key={key}
|
|
155
143
|
setAppliedFilters={dispatch}
|
|
144
|
+
query={updatedQuery}
|
|
145
|
+
listComponentName={listComponentName}
|
|
156
146
|
searchFilterRef={searchFilterRef}
|
|
157
147
|
data={filterData}
|
|
158
148
|
filters={filters}
|
|
159
|
-
hasUrl={
|
|
149
|
+
hasUrl={!!url}
|
|
160
150
|
entity={entity}
|
|
161
151
|
handleSearch={handleSearch}
|
|
162
152
|
filterValues={filterValues}
|
|
@@ -180,7 +170,8 @@ SearchFilterContainer.propTypes = {
|
|
|
180
170
|
groupAfterDesktop: PropTypes.number,
|
|
181
171
|
filterBy: PropTypes.array,
|
|
182
172
|
filterByProperty: PropTypes.array,
|
|
183
|
-
shouldAddFilters: PropTypes.bool
|
|
173
|
+
shouldAddFilters: PropTypes.bool,
|
|
174
|
+
listComponentName: PropTypes.string
|
|
184
175
|
};
|
|
185
176
|
|
|
186
177
|
SearchFilterContainer.defaultProps = {
|
|
@@ -192,7 +183,8 @@ SearchFilterContainer.defaultProps = {
|
|
|
192
183
|
groupAfterDesktop: 0,
|
|
193
184
|
filterBy: [],
|
|
194
185
|
filterByProperty: [],
|
|
195
|
-
shouldAddFilters: false
|
|
186
|
+
shouldAddFilters: false,
|
|
187
|
+
listComponentName: ''
|
|
196
188
|
};
|
|
197
189
|
|
|
198
190
|
export default withTitle(SearchFilterContainer);
|
|
@@ -29,7 +29,15 @@ const builFilterObject = ({ queryKey, value, filters, isRange, isInQuery }) => {
|
|
|
29
29
|
filters.push({ match: { [key]: filterValue } });
|
|
30
30
|
});
|
|
31
31
|
};
|
|
32
|
-
const buildFiltersQuery = ({
|
|
32
|
+
const buildFiltersQuery = ({
|
|
33
|
+
shouldAddFilters,
|
|
34
|
+
query,
|
|
35
|
+
filterBy,
|
|
36
|
+
filterByProperty,
|
|
37
|
+
rangeValues,
|
|
38
|
+
queryKeys
|
|
39
|
+
}) => {
|
|
40
|
+
if (!shouldAddFilters) return [];
|
|
33
41
|
const mustFilters = [];
|
|
34
42
|
Object.keys(query).forEach(queryKey => {
|
|
35
43
|
if (QUERY_KEYS_TO_IGNORE.includes(queryKey)) return;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const buildNewUrl = (url, currentUrl, queryParams, hashBit) => {
|
|
2
|
+
const encodedQuery = encodeURI(queryParams);
|
|
3
|
+
const baseUrl = url || currentUrl;
|
|
4
|
+
const newUrl = encodedQuery ? `${baseUrl}?${encodedQuery}` : `${baseUrl}`;
|
|
5
|
+
return hashBit ? `${newUrl}#${hashBit}` : newUrl;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export default buildNewUrl;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SEARCH_TERM, TEXT_SEARCH } from '../constants';
|
|
2
|
+
import parseFilterValue from './parse-filter-value';
|
|
3
|
+
import { buildQueryKey } from '../../../helpers';
|
|
4
|
+
|
|
5
|
+
const buildUrlQuery = (filterValues, filters, listComponentName = '', query = {}) => {
|
|
6
|
+
if (!filterValues) return '';
|
|
7
|
+
|
|
8
|
+
const newQuery = [];
|
|
9
|
+
const queryKeys = [];
|
|
10
|
+
const searchValue = filterValues[SEARCH_TERM];
|
|
11
|
+
const searchKey = buildQueryKey(SEARCH_TERM, listComponentName);
|
|
12
|
+
queryKeys.push(searchKey);
|
|
13
|
+
if (searchValue) newQuery.push(`${searchKey}=${searchValue}`);
|
|
14
|
+
|
|
15
|
+
filters.forEach(({ propsToDisplay, type }) => {
|
|
16
|
+
if (type === TEXT_SEARCH) return;
|
|
17
|
+
propsToDisplay.forEach(prop => {
|
|
18
|
+
const value = filterValues[prop];
|
|
19
|
+
const filterKey = buildQueryKey(prop, listComponentName);
|
|
20
|
+
queryKeys.push(filterKey);
|
|
21
|
+
const parsedValue = parseFilterValue(filterKey, type, value, newQuery);
|
|
22
|
+
if (parsedValue && !newQuery.includes(parsedValue)) newQuery.push(parsedValue);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
Object.keys(query).forEach(key => {
|
|
27
|
+
if (queryKeys.indexOf(key) === -1) newQuery.push(`${key}=${query[key]}`);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
return newQuery.join('&');
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default buildUrlQuery;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RANGE, CHECKBOX_SELECT } from '../constants';
|
|
2
|
+
|
|
3
|
+
const getFilterRangesAndCheckboxesValues = filters => {
|
|
4
|
+
const checkboxSelectValues = [];
|
|
5
|
+
const rangeValues = [];
|
|
6
|
+
|
|
7
|
+
filters.forEach(({ type, propsToDisplay }) => {
|
|
8
|
+
if (CHECKBOX_SELECT.includes(type)) {
|
|
9
|
+
checkboxSelectValues.push(propsToDisplay[0]);
|
|
10
|
+
} else if (type === RANGE) {
|
|
11
|
+
rangeValues.push(...propsToDisplay);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
return [checkboxSelectValues, rangeValues];
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export default getFilterRangesAndCheckboxesValues;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SEARCH_TERM, TEXT_SEARCH } from '../constants';
|
|
2
|
+
import getFilterValueFromQuery from './get-filter-value-from-query';
|
|
3
|
+
|
|
4
|
+
const getFilterValues = (filterData, filters, query) => {
|
|
5
|
+
const filterValues = {};
|
|
6
|
+
filterValues[SEARCH_TERM] = query[SEARCH_TERM] || '';
|
|
7
|
+
|
|
8
|
+
filters.forEach(filterProps => {
|
|
9
|
+
const {
|
|
10
|
+
propsToDisplay: [key],
|
|
11
|
+
type
|
|
12
|
+
} = filterProps;
|
|
13
|
+
if (type === TEXT_SEARCH) return;
|
|
14
|
+
const data = filterData && filterData[key] ? filterData[key] : {};
|
|
15
|
+
filterValues[key] = getFilterValueFromQuery(key, filterProps, data, query);
|
|
16
|
+
});
|
|
17
|
+
filterValues.dataNotSet = !filterData;
|
|
18
|
+
return filterValues;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default getFilterValues;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import buildNewUrl from './build-new-url';
|
|
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';
|
|
@@ -10,14 +10,15 @@ import getIntersectedProp from './get-intersected-prop';
|
|
|
10
10
|
import getRangeValue from './get-range-value';
|
|
11
11
|
import getSelectOptions from './get-select-options';
|
|
12
12
|
import isDeviceDesktop from './is-device-desktop';
|
|
13
|
-
import
|
|
13
|
+
import getFilterValues from './get-filter-values';
|
|
14
14
|
import getFilterValueFromQuery from './get-filter-value-from-query';
|
|
15
|
-
import
|
|
15
|
+
import buildUrlQuery from './build-url-query';
|
|
16
16
|
import buildFiltersQuery from './build-filters-query';
|
|
17
|
+
import getFilterRangesAndCheckboxesValues from './get-filter-ranges-and-checkboxes-values';
|
|
17
18
|
|
|
18
19
|
export {
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
buildUrlQuery,
|
|
21
|
+
buildNewUrl,
|
|
21
22
|
buildRawQueryStringified,
|
|
22
23
|
decodeValue,
|
|
23
24
|
encodeValue,
|
|
@@ -30,7 +31,8 @@ export {
|
|
|
30
31
|
getRangeValue,
|
|
31
32
|
getSelectOptions,
|
|
32
33
|
isDeviceDesktop,
|
|
33
|
-
|
|
34
|
+
getFilterValues,
|
|
34
35
|
getFilterValueFromQuery,
|
|
35
|
-
buildFiltersQuery
|
|
36
|
+
buildFiltersQuery,
|
|
37
|
+
getFilterRangesAndCheckboxesValues
|
|
36
38
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
1
|
+
import SearchFilter from './SearchFilterContainer';
|
|
2
2
|
|
|
3
|
-
export default
|
|
3
|
+
export default SearchFilter;
|