@abcagency/hc-ui-components 1.3.56 → 1.3.57
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.
|
@@ -2,6 +2,7 @@ import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _
|
|
|
2
2
|
import React__default, { useState, useEffect } from 'react';
|
|
3
3
|
import { useTrackEvent } from '../../../contexts/trackEventContext.js';
|
|
4
4
|
import FilterItem from '../../modules/filter/item.js';
|
|
5
|
+
import { useMapList } from '../../../contexts/mapListContext.js';
|
|
5
6
|
|
|
6
7
|
var _excluded = ["className", "item", "type", "itemKey", "hasCount", "field", "isExternalLink", "externalLinkUrl", "selectedFilters", "setSelectedFilters"];
|
|
7
8
|
var FilterItemContainer = function FilterItemContainer(_ref) {
|
|
@@ -36,6 +37,8 @@ var FilterItemContainer = function FilterItemContainer(_ref) {
|
|
|
36
37
|
if (!selectedFilters || isExternalLink) return;
|
|
37
38
|
setActiveItem(!!((_selectedFilters$fiel2 = selectedFilters[field]) !== null && _selectedFilters$fiel2 !== void 0 && _selectedFilters$fiel2[itemKey]));
|
|
38
39
|
}, [selectedFilters, field, itemKey]);
|
|
40
|
+
var _useMapList = useMapList(),
|
|
41
|
+
filteredListings = _useMapList.filteredListings;
|
|
39
42
|
var changeHandler = function changeHandler() {
|
|
40
43
|
if (!isActive || isExternalLink) {
|
|
41
44
|
trackEvent(eventTypes.FILTER_APPLIED, {
|
|
@@ -45,7 +48,7 @@ var FilterItemContainer = function FilterItemContainer(_ref) {
|
|
|
45
48
|
}
|
|
46
49
|
setSelectedFilters(function (prevFilters) {
|
|
47
50
|
var updatedFilters = _objectSpread2({}, prevFilters);
|
|
48
|
-
if (field
|
|
51
|
+
if (field === 'city' || field === 'state' || field === 'cityState') {
|
|
49
52
|
delete updatedFilters['entityName'];
|
|
50
53
|
}
|
|
51
54
|
if (!isActive) {
|
|
@@ -56,9 +59,34 @@ var FilterItemContainer = function FilterItemContainer(_ref) {
|
|
|
56
59
|
return updatedFilters;
|
|
57
60
|
}
|
|
58
61
|
delete updatedFilters[field][itemKey];
|
|
59
|
-
if (Object.keys(updatedFilters[field]).length === 0) {
|
|
62
|
+
if (updatedFilters[field] && Object.keys(updatedFilters[field]).length === 0) {
|
|
60
63
|
delete updatedFilters[field];
|
|
61
64
|
}
|
|
65
|
+
if (field === 'categoryClass') {
|
|
66
|
+
var activeCategoryClass = itemKey;
|
|
67
|
+
var categoriesToConsiderForRemoval = new Set(filteredListings.filter(function (listing) {
|
|
68
|
+
return listing.fields.categoryClass === activeCategoryClass;
|
|
69
|
+
}).flatMap(function (listing) {
|
|
70
|
+
return listing.fields.category || [];
|
|
71
|
+
}));
|
|
72
|
+
var categoriesToRetain = new Set(filteredListings.filter(function (listing) {
|
|
73
|
+
return listing.fields.categoryClass !== activeCategoryClass;
|
|
74
|
+
}).flatMap(function (listing) {
|
|
75
|
+
return listing.fields.category || [];
|
|
76
|
+
}).filter(function (category) {
|
|
77
|
+
return categoriesToConsiderForRemoval.has(category);
|
|
78
|
+
}));
|
|
79
|
+
if (updatedFilters['category']) {
|
|
80
|
+
Object.keys(updatedFilters['category']).forEach(function (categoryKey) {
|
|
81
|
+
if (categoriesToConsiderForRemoval.has(categoryKey) && !categoriesToRetain.has(categoryKey)) {
|
|
82
|
+
delete updatedFilters['category'][categoryKey];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
if (Object.keys(updatedFilters['category']).length === 0) {
|
|
86
|
+
delete updatedFilters['category'];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
62
90
|
return updatedFilters;
|
|
63
91
|
});
|
|
64
92
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-item-container.js","sources":["../../../../src/components/containers/filter/filter-item-container.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\
|
|
1
|
+
{"version":3,"file":"filter-item-container.js","sources":["../../../../src/components/containers/filter/filter-item-container.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { useTrackEvent } from '~/contexts/trackEventContext';\nimport FilterItem from '~/components/modules/filter/item';\nimport { useMapList } from '~/contexts/mapListContext';\n\nconst FilterItemContainer = ({\n\tclassName,\n\titem,\n\ttype = 'checkbox',\n\titemKey = null,\n\thasCount = true,\n\tfield,\n\tisExternalLink = false,\n\texternalLinkUrl,\n\tselectedFilters,\n\tsetSelectedFilters,\n\t...rest\n}) => {\n\tconst { trackEvent, eventTypes } = useTrackEvent();\n\tconst itemName = item.name ? item.name : item;\n\titemKey = itemKey === null ? itemName : itemKey;\n\tconst isActive = selectedFilters != undefined && !!selectedFilters[field]?.[itemKey];\n\tconst [activeItem, setActiveItem] = useState(isActive);\n\n\tuseEffect(() => {\n\t\tif (!selectedFilters || isExternalLink) return;\n\t\tsetActiveItem(!!selectedFilters[field]?.[itemKey]);\n\t}, [selectedFilters, field, itemKey]);\n\n\tconst { filteredListings } = useMapList();\n\tconst changeHandler = () => {\n\t\tif (!isActive || isExternalLink) {\n\t\t\ttrackEvent(eventTypes.FILTER_APPLIED, { filterType: field, filterChecked: itemKey });\n\t\t}\n\n\t\tsetSelectedFilters(prevFilters => {\n\t\t\tconst updatedFilters = { ...prevFilters };\n\n\t\t\tif (field === 'city' || field === 'state' || field === 'cityState') {\n\t\t\t\tdelete updatedFilters['entityName'];\n\t\t\t}\n\n\t\t\tif (!isActive) {\n\t\t\t\tif (!updatedFilters[field]) {\n\t\t\t\t\tupdatedFilters[field] = {};\n\t\t\t\t}\n\t\t\t\tupdatedFilters[field][itemKey] = true;\n\t\t\t\treturn updatedFilters;\n\t\t\t}\n\n\t\t\tdelete updatedFilters[field][itemKey];\n\n\t\t\tif (updatedFilters[field] && Object.keys(updatedFilters[field]).length === 0) {\n\t\t\t\tdelete updatedFilters[field];\n\t\t\t}\n\n\t\t\tif (field === 'categoryClass') {\n\t\t\t\tconst activeCategoryClass = itemKey;\n\t\t\t\tconst categoriesToConsiderForRemoval = new Set(\n\t\t\t\t\tfilteredListings\n\t\t\t\t\t\t.filter(listing => listing.fields.categoryClass === activeCategoryClass)\n\t\t\t\t\t\t.flatMap(listing => listing.fields.category || [])\n\t\t\t\t);\n\n\t\t\t\tconst categoriesToRetain = new Set(\n\t\t\t\t\tfilteredListings\n\t\t\t\t\t\t.filter(listing => listing.fields.categoryClass !== activeCategoryClass)\n\t\t\t\t\t\t.flatMap(listing => listing.fields.category || [])\n\t\t\t\t\t\t.filter(category => categoriesToConsiderForRemoval.has(category))\n\t\t\t\t);\n\n\t\t\t\tif (updatedFilters['category']) {\n\t\t\t\t\tObject.keys(updatedFilters['category']).forEach(categoryKey => {\n\t\t\t\t\t\tif (categoriesToConsiderForRemoval.has(categoryKey) && !categoriesToRetain.has(categoryKey)) {\n\t\t\t\t\t\t\tdelete updatedFilters['category'][categoryKey];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (Object.keys(updatedFilters['category']).length === 0) {\n\t\t\t\t\t\tdelete updatedFilters['category'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn updatedFilters;\n\t\t});\n\t};\n\n\tuseEffect(() => {\n\t\tif (selectedFilters && selectedFilters[field] && Object.keys(selectedFilters[field])?.length > 0) return;\n\t\telse if (activeItem === true) {\n\t\t\tsetActiveItem(false);\n\t\t}\n\t}, [selectedFilters]);\n\n\treturn (\n\t\t<FilterItem\n\t\t\tclassName={className}\n\t\t\titem={item}\n\t\t\ttype={type}\n\t\t\titemKey={itemKey}\n\t\t\thasCount={hasCount}\n\t\t\tfield={field}\n\t\t\tactiveItem={activeItem}\n\t\t\tsetActiveItem={setActiveItem}\n\t\t\tchangeHandler={changeHandler}\n\t\t\tisExternalLink={isExternalLink}\n\t\t\texternalLinkUrl={externalLinkUrl}\n\t\t\ttrackEvent={trackEvent}\n\t\t\teventTypes={eventTypes}\n\t\t\t{...rest}\n\t\t/>\n\t);\n};\n\nexport default FilterItemContainer;\n"],"names":["FilterItemContainer","_ref","_selectedFilters$fiel","className","item","_ref$type","type","_ref$itemKey","itemKey","_ref$hasCount","hasCount","field","_ref$isExternalLink","isExternalLink","externalLinkUrl","selectedFilters","setSelectedFilters","rest","_objectWithoutProperties","_excluded","_useTrackEvent","useTrackEvent","trackEvent","eventTypes","itemName","name","isActive","undefined","_useState","useState","_useState2","_slicedToArray","activeItem","setActiveItem","useEffect","_selectedFilters$fiel2","_useMapList","useMapList","filteredListings","changeHandler","FILTER_APPLIED","filterType","filterChecked","prevFilters","updatedFilters","_objectSpread","Object","keys","length","activeCategoryClass","categoriesToConsiderForRemoval","Set","filter","listing","fields","categoryClass","flatMap","category","categoriesToRetain","has","forEach","categoryKey","_Object$keys","React","createElement","FilterItem","_extends"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,80 +1,116 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { useTrackEvent } from '~/contexts/trackEventContext';
|
|
3
|
-
import FilterItem from '~/components/modules/filter/item';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import { useTrackEvent } from '~/contexts/trackEventContext';
|
|
3
|
+
import FilterItem from '~/components/modules/filter/item';
|
|
4
|
+
import { useMapList } from '~/contexts/mapListContext';
|
|
5
|
+
|
|
6
|
+
const FilterItemContainer = ({
|
|
7
|
+
className,
|
|
8
|
+
item,
|
|
9
|
+
type = 'checkbox',
|
|
10
|
+
itemKey = null,
|
|
11
|
+
hasCount = true,
|
|
12
|
+
field,
|
|
13
|
+
isExternalLink = false,
|
|
14
|
+
externalLinkUrl,
|
|
15
|
+
selectedFilters,
|
|
16
|
+
setSelectedFilters,
|
|
17
|
+
...rest
|
|
18
|
+
}) => {
|
|
19
|
+
const { trackEvent, eventTypes } = useTrackEvent();
|
|
20
|
+
const itemName = item.name ? item.name : item;
|
|
21
|
+
itemKey = itemKey === null ? itemName : itemKey;
|
|
22
|
+
const isActive = selectedFilters != undefined && !!selectedFilters[field]?.[itemKey];
|
|
23
|
+
const [activeItem, setActiveItem] = useState(isActive);
|
|
24
|
+
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (!selectedFilters || isExternalLink) return;
|
|
27
|
+
setActiveItem(!!selectedFilters[field]?.[itemKey]);
|
|
28
|
+
}, [selectedFilters, field, itemKey]);
|
|
29
|
+
|
|
30
|
+
const { filteredListings } = useMapList();
|
|
31
|
+
const changeHandler = () => {
|
|
32
|
+
if (!isActive || isExternalLink) {
|
|
33
|
+
trackEvent(eventTypes.FILTER_APPLIED, { filterType: field, filterChecked: itemKey });
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
setSelectedFilters(prevFilters => {
|
|
37
|
+
const updatedFilters = { ...prevFilters };
|
|
38
|
+
|
|
39
|
+
if (field === 'city' || field === 'state' || field === 'cityState') {
|
|
40
|
+
delete updatedFilters['entityName'];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (!isActive) {
|
|
44
|
+
if (!updatedFilters[field]) {
|
|
45
|
+
updatedFilters[field] = {};
|
|
46
|
+
}
|
|
47
|
+
updatedFilters[field][itemKey] = true;
|
|
48
|
+
return updatedFilters;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
delete updatedFilters[field][itemKey];
|
|
52
|
+
|
|
53
|
+
if (updatedFilters[field] && Object.keys(updatedFilters[field]).length === 0) {
|
|
54
|
+
delete updatedFilters[field];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (field === 'categoryClass') {
|
|
58
|
+
const activeCategoryClass = itemKey;
|
|
59
|
+
const categoriesToConsiderForRemoval = new Set(
|
|
60
|
+
filteredListings
|
|
61
|
+
.filter(listing => listing.fields.categoryClass === activeCategoryClass)
|
|
62
|
+
.flatMap(listing => listing.fields.category || [])
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const categoriesToRetain = new Set(
|
|
66
|
+
filteredListings
|
|
67
|
+
.filter(listing => listing.fields.categoryClass !== activeCategoryClass)
|
|
68
|
+
.flatMap(listing => listing.fields.category || [])
|
|
69
|
+
.filter(category => categoriesToConsiderForRemoval.has(category))
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
if (updatedFilters['category']) {
|
|
73
|
+
Object.keys(updatedFilters['category']).forEach(categoryKey => {
|
|
74
|
+
if (categoriesToConsiderForRemoval.has(categoryKey) && !categoriesToRetain.has(categoryKey)) {
|
|
75
|
+
delete updatedFilters['category'][categoryKey];
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
if (Object.keys(updatedFilters['category']).length === 0) {
|
|
80
|
+
delete updatedFilters['category'];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return updatedFilters;
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (selectedFilters && selectedFilters[field] && Object.keys(selectedFilters[field])?.length > 0) return;
|
|
91
|
+
else if (activeItem === true) {
|
|
92
|
+
setActiveItem(false);
|
|
93
|
+
}
|
|
94
|
+
}, [selectedFilters]);
|
|
95
|
+
|
|
96
|
+
return (
|
|
97
|
+
<FilterItem
|
|
98
|
+
className={className}
|
|
99
|
+
item={item}
|
|
100
|
+
type={type}
|
|
101
|
+
itemKey={itemKey}
|
|
102
|
+
hasCount={hasCount}
|
|
103
|
+
field={field}
|
|
104
|
+
activeItem={activeItem}
|
|
105
|
+
setActiveItem={setActiveItem}
|
|
106
|
+
changeHandler={changeHandler}
|
|
107
|
+
isExternalLink={isExternalLink}
|
|
108
|
+
externalLinkUrl={externalLinkUrl}
|
|
109
|
+
trackEvent={trackEvent}
|
|
110
|
+
eventTypes={eventTypes}
|
|
111
|
+
{...rest}
|
|
112
|
+
/>
|
|
113
|
+
);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export default FilterItemContainer;
|