@abcagency/hc-ui-components 1.3.14 → 1.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
  2. package/dist/apis/hcApi.js +1 -1
  3. package/dist/apis/hcApi.js.map +1 -1
  4. package/dist/clientToken.js.map +1 -1
  5. package/dist/components/HireControlMap.js +15 -5
  6. package/dist/components/HireControlMap.js.map +1 -1
  7. package/dist/components/modules/accordions/MapAccordionItem.js +11 -1
  8. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -1
  9. package/dist/components/modules/accordions/default.js.map +1 -1
  10. package/dist/components/modules/accordions/filterItem.js +2 -1
  11. package/dist/components/modules/accordions/filterItem.js.map +1 -1
  12. package/dist/components/modules/accordions/filters.js +0 -3
  13. package/dist/components/modules/accordions/filters.js.map +1 -1
  14. package/dist/components/modules/buttons/button-group-apply.js +36 -15
  15. package/dist/components/modules/buttons/button-group-apply.js.map +1 -1
  16. package/dist/components/modules/buttons/commute-pill.js.map +1 -1
  17. package/dist/components/modules/buttons/default.js.map +1 -1
  18. package/dist/components/modules/buttons/items-pill.js.map +1 -1
  19. package/dist/components/modules/buttons/pill-wrapper.js.map +1 -1
  20. package/dist/components/modules/buttons/show-all-button.js.map +1 -1
  21. package/dist/components/modules/cards/default.js.map +1 -1
  22. package/dist/components/modules/cards/filter.js.map +1 -1
  23. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -1
  24. package/dist/components/modules/filter/commute.js +22 -6
  25. package/dist/components/modules/filter/commute.js.map +1 -1
  26. package/dist/components/modules/filter/index.js +7 -0
  27. package/dist/components/modules/filter/index.js.map +1 -1
  28. package/dist/components/modules/filter/item.js +16 -1
  29. package/dist/components/modules/filter/item.js.map +1 -1
  30. package/dist/components/modules/filter/location.js +1 -1
  31. package/dist/components/modules/filter/location.js.map +1 -1
  32. package/dist/components/modules/filter/points-of-interest.js.map +1 -1
  33. package/dist/components/modules/filter/radio-item.js +7 -0
  34. package/dist/components/modules/filter/radio-item.js.map +1 -1
  35. package/dist/components/modules/filter/search.js.map +1 -1
  36. package/dist/components/modules/filter/sort.js.map +1 -1
  37. package/dist/components/modules/grid.js.map +1 -1
  38. package/dist/components/modules/icon.js.map +1 -1
  39. package/dist/components/modules/jobListing/listing-details.js +6 -0
  40. package/dist/components/modules/jobListing/listing-details.js.map +1 -1
  41. package/dist/components/modules/maps/info-window-card.js.map +1 -1
  42. package/dist/components/modules/maps/info-window-content.js +20 -0
  43. package/dist/components/modules/maps/info-window-content.js.map +1 -1
  44. package/dist/components/modules/maps/list/field-mapper.js.map +1 -1
  45. package/dist/components/modules/maps/list/header-item.js.map +1 -1
  46. package/dist/components/modules/maps/list/header.js.map +1 -1
  47. package/dist/components/modules/maps/list/index.js +21 -12
  48. package/dist/components/modules/maps/list/index.js.map +1 -1
  49. package/dist/components/modules/maps/list/item-expand-card/index.js.map +1 -1
  50. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js.map +1 -1
  51. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js.map +1 -1
  52. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js.map +1 -1
  53. package/dist/components/modules/maps/list/list-item/index.js +12 -2
  54. package/dist/components/modules/maps/list/list-item/index.js.map +1 -1
  55. package/dist/components/modules/maps/map-list.js.map +1 -1
  56. package/dist/components/modules/maps/map-marker.js +10 -0
  57. package/dist/components/modules/maps/map-marker.js.map +1 -1
  58. package/dist/components/modules/maps/map.js.map +1 -1
  59. package/dist/components/modules/maps/place-marker.js.map +1 -1
  60. package/dist/components/modules/maps/tabs.js.map +1 -1
  61. package/dist/constants/eventTypes.js +16 -0
  62. package/dist/constants/eventTypes.js.map +1 -0
  63. package/dist/constants/placeTypes.js.map +1 -1
  64. package/dist/contexts/mapContext.js +9 -27
  65. package/dist/contexts/mapContext.js.map +1 -1
  66. package/dist/contexts/mapListContext.js +57 -38
  67. package/dist/contexts/mapListContext.js.map +1 -1
  68. package/dist/contexts/placesContext.js.map +1 -1
  69. package/dist/contexts/trackEventContext.js +20 -0
  70. package/dist/contexts/trackEventContext.js.map +1 -0
  71. package/dist/hooks/useList.js +1 -13
  72. package/dist/hooks/useList.js.map +1 -1
  73. package/dist/services/apis/hcApi.js +1 -1
  74. package/dist/services/apis/hcApi.js.map +1 -1
  75. package/dist/services/clientToken.js.map +1 -1
  76. package/dist/services/configService.js.map +1 -1
  77. package/dist/services/googlePlacesNearbyService.js.map +1 -1
  78. package/dist/services/listingAggregatorService.js +43 -16
  79. package/dist/services/listingAggregatorService.js.map +1 -1
  80. package/dist/services/listingEntityService.js.map +1 -1
  81. package/dist/services/listingService.js.map +1 -1
  82. package/dist/services/recruiterService.js.map +1 -1
  83. package/dist/util/filterUtil.js.map +1 -1
  84. package/dist/util/loading.js.map +1 -1
  85. package/dist/util/localStorageUtil.js.map +1 -1
  86. package/dist/util/mapIconUtil.js.map +1 -1
  87. package/dist/util/mapUtil.js.map +1 -1
  88. package/dist/util/sortUtil.js.map +1 -1
  89. package/dist/util/stringUtils.js.map +1 -1
  90. package/jsconfig.json +7 -7
  91. package/package.json +60 -60
  92. package/postcss.config.js +13 -13
  93. package/preset.default.js +15 -15
  94. package/rollup.config.mjs +88 -87
  95. package/src/apis/hcApi.js +93 -93
  96. package/src/clientToken.js +9 -9
  97. package/src/components/HireControlMap.js +129 -124
  98. package/src/components/modules/accordions/MapAccordionItem.js +74 -72
  99. package/src/components/modules/accordions/default.js +171 -171
  100. package/src/components/modules/accordions/filterItem.js +55 -53
  101. package/src/components/modules/accordions/filters.js +47 -47
  102. package/src/components/modules/buttons/button-group-apply.js +123 -116
  103. package/src/components/modules/buttons/commute-pill.js +22 -22
  104. package/src/components/modules/buttons/default.js +194 -194
  105. package/src/components/modules/buttons/items-pill.js +35 -35
  106. package/src/components/modules/buttons/pill-wrapper.js +27 -27
  107. package/src/components/modules/buttons/show-all-button.js +20 -20
  108. package/src/components/modules/cards/default.js +167 -167
  109. package/src/components/modules/cards/filter.js +56 -56
  110. package/src/components/modules/dialogs/apply-dialog.js +48 -48
  111. package/src/components/modules/filter/commute.js +154 -149
  112. package/src/components/modules/filter/index.js +89 -87
  113. package/src/components/modules/filter/item.js +87 -76
  114. package/src/components/modules/filter/location.js +71 -71
  115. package/src/components/modules/filter/points-of-interest.js +44 -44
  116. package/src/components/modules/filter/radio-item.js +57 -53
  117. package/src/components/modules/filter/search.js +92 -92
  118. package/src/components/modules/filter/sort.js +83 -83
  119. package/src/components/modules/grid.js +54 -54
  120. package/src/components/modules/icon.js +33 -33
  121. package/src/components/modules/jobListing/listing-details.js +99 -95
  122. package/src/components/modules/maps/info-window-card.js +17 -17
  123. package/src/components/modules/maps/info-window-content.js +81 -74
  124. package/src/components/modules/maps/list/field-mapper.js +112 -112
  125. package/src/components/modules/maps/list/header-item.js +91 -91
  126. package/src/components/modules/maps/list/header.js +47 -47
  127. package/src/components/modules/maps/list/index.js +112 -107
  128. package/src/components/modules/maps/list/item-expand-card/index.js +22 -22
  129. package/src/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +50 -50
  130. package/src/components/modules/maps/list/item-expand-card/recruiter-details.js +68 -68
  131. package/src/components/modules/maps/list/item-expand-card/recruiter-headshot.js +22 -22
  132. package/src/components/modules/maps/list/list-item/index.js +135 -133
  133. package/src/components/modules/maps/map-list.js +74 -74
  134. package/src/components/modules/maps/map-marker.js +88 -86
  135. package/src/components/modules/maps/map.js +230 -230
  136. package/src/components/modules/maps/place-marker.js +41 -41
  137. package/src/components/modules/maps/tabs.js +81 -81
  138. package/src/constants/eventTypes.js +13 -0
  139. package/src/constants/placeTypes.js +8 -8
  140. package/src/contexts/mapContext.js +101 -115
  141. package/src/contexts/mapListContext.js +242 -222
  142. package/src/contexts/placesContext.js +102 -102
  143. package/src/contexts/trackEventContext.js +14 -0
  144. package/src/hooks/useList.js +89 -100
  145. package/src/index.js +3 -3
  146. package/src/services/configService.js +16 -16
  147. package/src/services/googlePlacesNearbyService.js +33 -33
  148. package/src/services/listingAggregatorService.js +50 -45
  149. package/src/services/listingEntityService.js +15 -15
  150. package/src/services/listingService.js +26 -26
  151. package/src/services/recruiterService.js +17 -17
  152. package/src/styles/index.css +23 -23
  153. package/src/util/arrayUtil.js +3 -3
  154. package/src/util/fieldMapper.js +22 -22
  155. package/src/util/filterUtil.js +195 -195
  156. package/src/util/loading.js +17 -17
  157. package/src/util/localStorageUtil.js +26 -26
  158. package/src/util/mapIconUtil.js +180 -180
  159. package/src/util/mapUtil.js +91 -91
  160. package/src/util/sortUtil.js +32 -32
  161. package/src/util/stringUtils.js +6 -6
  162. package/src/util/urlFilterUtil.js +90 -90
  163. package/tailwind.config.js +126 -126
  164. package/.editorconfig +0 -12
  165. package/.eslintrc +0 -105
  166. package/.prettierignore +0 -3
@@ -1,222 +1,242 @@
1
- import React, { createContext, useState, useEffect, useContext } from 'react';
2
-
3
- import { generateFilterOptions, applyFilters, filterListingsByLocation } from '~/util/filterUtil';
4
- import { getStorageObject, setStorageObject } from '~/util/localStorageUtil';
5
-
6
- import { getListingEntities } from "~/services/listingEntityService";
7
- import fetchListings from '~/services/listingAggregatorService';
8
-
9
- const MapListContext = createContext();
10
-
11
- export const useMapList = () => useContext(MapListContext);
12
-
13
- const getQuery = () => {
14
- let query;
15
- //if (!hasQueryInUrl(location)) {
16
- query = typeof window !== 'undefined' ? localStorage.getItem('query') : '';
17
- // }
18
- //else {
19
- // query = filtersFromURL(location).query;
20
- // }
21
- return query;
22
- };
23
-
24
- export const MapListProvider = ({
25
- children,
26
- siteConfig,
27
- resetFilters,
28
- navigateToDetails,
29
- navigateToEasyApply,
30
- Link,
31
- linkFormat
32
- }) => {
33
- // const location = useLocation();
34
- // const navigate = useNavigate();
35
- const [allListings, setAllListings] = useState(getStorageObject("listings", []));
36
- const [filteredListings, setFilteredListings] = useState([]);
37
- const [loading, setLoading] = useState(false);
38
- const [mapItems, setMapItems] = useState(getStorageObject('mapItems', []));
39
- const [query, setQuery] = useState(() => resetFilters ? null : getQuery());
40
- const [listingEntities, setListingEntities] = useState(getStorageObject("listingEntities", null));
41
- const [firstLoad, setFirstLoad] = useState(true);
42
- const [commuteLocation, setCommuteLocation] = useState(null);
43
- const [selectedFilters, setSelectedFilters] = useState(() => resetFilters ? {} : getStorageObject('selectedFilters', {}));//hasFiltersInURL(location) ? filtersFromURL(location).filters : getStorageObject('selectedFilters', {}));
44
- const [filterOptions, setFilterOptions] = useState();
45
- const [recruiters, setRecruiters] = useState(getStorageObject("recruiters", {}));
46
- const [filterDialogIsOpen, setFilterDialogIsOpen] = useState(false);
47
- const [mobileTab, setMobileTab] = useState("listTab");
48
- const [favorites, setFavorites] = useState([]);
49
- const [filterByFavorites, setFilterByFavorites] = useState(false);
50
-
51
- useEffect(() => {
52
- const loadedFavorites = JSON.parse(localStorage.getItem('favorites')) || [];
53
- setFavorites(loadedFavorites);
54
- }, []);
55
-
56
- useEffect(() => {
57
- if (commuteLocation === null || commuteLocation === '') return;
58
- async function fetchEntities() {
59
- const distinctEntityIds = [
60
- // eslint-disable-next-line no-undef
61
- ...new Set(allListings.map(listing => listing.entityId))
62
- ];
63
- try {
64
- const fetchedEntities = await getListingEntities(
65
- distinctEntityIds,
66
- `${commuteLocation.lat}, ${commuteLocation.lng}`
67
- );
68
- setListingEntities(fetchedEntities);
69
- var newFilteredListings = filteredListings;
70
- for (var i = 0; i < allListings.length; i++) {
71
- if (newFilteredListings[i].entityId != -1) {
72
- newFilteredListings[i].fields.travelTime = fetchedEntities[newFilteredListings[i].entityId].travelTime;
73
- }
74
- }
75
- for (var j = 0; j < newFilteredListings.length; j++) {
76
- if (newFilteredListings[j].entityId != -1) {
77
- newFilteredListings[j].fields.travelTime = fetchedEntities[newFilteredListings[j].entityId].travelTime;
78
- }
79
- }
80
- setFilteredListings(newFilteredListings);
81
- } catch (error) {
82
- console.error("Failed to fetch listing entities:", error);
83
- }
84
- }
85
-
86
- fetchEntities();
87
- }, [commuteLocation, allListings, siteConfig.companyId]);
88
-
89
- useEffect(() => {
90
- const handleFetchListings = async () => {
91
- if (!getStorageObject('listings', []).length > 0) {
92
- setLoading(true);
93
- }
94
-
95
- try {
96
- const {
97
- listingsResult,
98
- fetchedRecruiters,
99
- fetchedEntities,
100
- distinctItems
101
- } = await fetchListings(query, siteConfig);
102
- setAllListings(listingsResult);
103
- setRecruiters(fetchedRecruiters);
104
- setListingEntities(fetchedEntities);
105
- setMapItems(distinctItems);
106
- setStorageObject("mapItems", distinctItems);
107
- setStorageObject("listingEntities", fetchedEntities);
108
- setStorageObject("recruiters", fetchedRecruiters);
109
- setStorageObject("listings", listingsResult);
110
- } catch (error) {
111
- console.log(error);
112
- }
113
- setLoading(false);
114
- };
115
- handleFetchListings();
116
- }, [query, siteConfig]);
117
-
118
- useEffect(() => {
119
- const processListings = () => {
120
- let { filteredListings, mapItems } = applyFilters(
121
- allListings,
122
- selectedFilters,
123
- query,
124
- listingEntities,
125
- favorites,
126
- siteConfig
127
- );
128
- if (filterByFavorites) {
129
- filteredListings = filteredListings.filter(x => favorites.includes(x.id));
130
- }
131
- setFilteredListings(filteredListings);
132
- // if (firstLoad && hasFiltersInURL(location)) {
133
- // const { filters } = filtersFromURL(location);
134
- // setSelectedFilters(filters);
135
- // }
136
- if (firstLoad && selectedFilters) {
137
- //updateURLWithFilters(selectedFilters,location, navigate, query);
138
- } else if (Object.keys(selectedFilters).length === 0 && !firstLoad) {
139
- localStorage.removeItem('selectedFilters');
140
- //updateURLWithFilters(selectedFilters,location, navigate, query);
141
- } else if (!firstLoad) {
142
- setStorageObject('selectedFilters', selectedFilters);
143
- //updateURLWithFilters(selectedFilters,location, navigate, query);
144
- }
145
- query != null ? localStorage.setItem('query', query) : localStorage.removeItem('query');
146
- setMapItems(mapItems);
147
-
148
- if (selectedFilters) {
149
- const keys = Object.keys(selectedFilters);
150
- const lastKey = keys[keys.length - 1];
151
- const options = generateFilterOptions(
152
- firstLoad ? allListings : filteredListings,
153
- allListings,
154
- siteConfig,
155
- filterOptions,
156
- lastKey,
157
- favorites
158
- );
159
- if (options) {
160
- setFilterOptions(options);
161
- if (firstLoad) setFirstLoad(false);
162
- }
163
- }
164
- };
165
-
166
- processListings();
167
- }, [selectedFilters, query, listingEntities, filterByFavorites, favorites]);
168
-
169
- const handleFilterListingsByLocation = selectedLocation => {
170
- const { filteredListings } = filterListingsByLocation(
171
- allListings,
172
- selectedLocation,
173
- listingEntities
174
- );
175
- setFilteredListings(filteredListings);
176
- //setMapItems(mapItems);
177
- };
178
-
179
- const handleSettingFavorites = newFavorites => {
180
- if (newFavorites == null) {
181
- localStorage.removeItem('favorites');
182
- } else {
183
- setFavorites(newFavorites);
184
- localStorage.setItem('favorites', JSON.stringify(newFavorites));
185
- }
186
- };
187
-
188
- return (
189
- <MapListContext.Provider value={{
190
- loading,
191
- allListings,
192
- filteredListings,
193
- mapItems,
194
- query,
195
- setFilteredListings,
196
- setQuery,
197
- listingEntities,
198
- selectedFilters,
199
- setSelectedFilters,
200
- filterOptions,
201
- recruiters,
202
- handleFilterListingsByLocation,
203
- filterDialogIsOpen,
204
- setFilterDialogIsOpen,
205
- setMobileTab,
206
- mobileTab,
207
- siteConfig,
208
- favorites,
209
- handleSettingFavorites,
210
- setFilterByFavorites,
211
- filterByFavorites,
212
- commuteLocation,
213
- setCommuteLocation,
214
- navigateToDetails,
215
- navigateToEasyApply,
216
- Link,
217
- linkFormat
218
- }}>
219
- {children}
220
- </MapListContext.Provider>
221
- );
222
- };
1
+ import React, { createContext, useState, useEffect, useContext } from 'react';
2
+
3
+ import { generateFilterOptions, applyFilters, filterListingsByLocation } from '~/util/filterUtil';
4
+ import { getStorageObject, setStorageObject } from '~/util/localStorageUtil';
5
+
6
+ import { getListingEntities } from "~/services/listingEntityService";
7
+ import fetchListings from '~/services/listingAggregatorService';
8
+
9
+ const MapListContext = createContext();
10
+
11
+ export const useMapList = () => useContext(MapListContext);
12
+
13
+ const getQuery = () => {
14
+ let query;
15
+ //if (!hasQueryInUrl(location)) {
16
+ query = typeof window !== 'undefined' ? localStorage.getItem('query') : '';
17
+ // }
18
+ //else {
19
+ // query = filtersFromURL(location).query;
20
+ // }
21
+ return query;
22
+ };
23
+
24
+ export const MapListProvider = ({
25
+ children,
26
+ siteConfig,
27
+ resetFilters,
28
+ navigateToDetails,
29
+ navigateToEasyApply,
30
+ Link,
31
+ linkFormat,
32
+ trackEvent
33
+ }) => {
34
+ // const location = useLocation();
35
+ // const navigate = useNavigate();
36
+ const [allListings, setAllListings] = useState(getStorageObject("listings", []));
37
+ const [filteredListings, setFilteredListings] = useState([]);
38
+ const [loading, setLoading] = useState(false);
39
+ const [mapItems, setMapItems] = useState(getStorageObject('mapItems', []));
40
+ const [query, setQuery] = useState(() => resetFilters ? null : getQuery());
41
+ const [sortSetting, setSortSetting] = useState(getStorageObject('sortSetting', null));
42
+ const [listingEntities, setListingEntities] = useState(getStorageObject("listingEntities", null));
43
+ const [firstLoad, setFirstLoad] = useState(true);
44
+ const [commuteLocation, setCommuteLocation] = useState(getStorageObject('commuteLocation'));
45
+ const [selectedFilters, setSelectedFilters] = useState(() => resetFilters ? {} : getStorageObject('selectedFilters', {}));//hasFiltersInURL(location) ? filtersFromURL(location).filters : getStorageObject('selectedFilters', {}));
46
+ const [filterOptions, setFilterOptions] = useState();
47
+ const [recruiters, setRecruiters] = useState(getStorageObject("recruiters", {}));
48
+ const [filterDialogIsOpen, setFilterDialogIsOpen] = useState(false);
49
+ const [mobileTab, setMobileTab] = useState("listTab");
50
+ const [favorites, setFavorites] = useState([]);
51
+ const [filterByFavorites, setFilterByFavorites] = useState(false);
52
+
53
+ const setNewFilteredListings = filteredListings =>{
54
+ setFilteredListings(filteredListings);
55
+ };
56
+
57
+ useEffect(() => {
58
+ if (!sortSetting) return;
59
+ localStorage.setItem('sortSetting', JSON.stringify(sortSetting));
60
+ setNewFilteredListings(filteredListings);
61
+ }, [sortSetting]);
62
+
63
+ useEffect(() => {
64
+ const loadedFavorites = JSON.parse(localStorage.getItem('favorites')) || [];
65
+ setFavorites(loadedFavorites);
66
+ }, []);
67
+
68
+ useEffect(() => {
69
+ setStorageObject("commuteLocation", commuteLocation);
70
+ }, [commuteLocation]);
71
+
72
+ useEffect(() => {
73
+ if (commuteLocation === null || commuteLocation === '') return;
74
+ async function fetchEntities() {
75
+ const distinctEntityIds = [
76
+ // eslint-disable-next-line no-undef
77
+ ...new Set(allListings.map(listing => listing.entityId))
78
+ ];
79
+ try {
80
+ const fetchedEntities = await getListingEntities(
81
+ distinctEntityIds,
82
+ `${commuteLocation.lat}, ${commuteLocation.lng}`
83
+ );
84
+ setListingEntities(fetchedEntities);
85
+ var newFilteredListings = filteredListings;
86
+ for (var i = 0; i < allListings.length; i++) {
87
+ if (newFilteredListings[i].entityId != -1) {
88
+ newFilteredListings[i].fields.travelTime = fetchedEntities[newFilteredListings[i].entityId].travelTime;
89
+ }
90
+ }
91
+ for (var j = 0; j < newFilteredListings.length; j++) {
92
+ if (newFilteredListings[j].entityId != -1) {
93
+ newFilteredListings[j].fields.travelTime = fetchedEntities[newFilteredListings[j].entityId].travelTime;
94
+ }
95
+ }
96
+ setNewFilteredListings(newFilteredListings);
97
+ } catch (error) {
98
+ console.error("Failed to fetch listing entities:", error);
99
+ }
100
+ }
101
+
102
+ fetchEntities();
103
+ }, [commuteLocation, allListings, siteConfig.companyId]);
104
+
105
+ useEffect(() => {
106
+ const handleFetchListings = async () => {
107
+ if (!getStorageObject('listings', []).length > 0) {
108
+ setLoading(true);
109
+ }
110
+
111
+ try {
112
+ const {
113
+ listingsResult,
114
+ fetchedRecruiters,
115
+ fetchedEntities,
116
+ distinctItems
117
+ } = await fetchListings(query, siteConfig, commuteLocation);
118
+ setAllListings(listingsResult);
119
+ setRecruiters(fetchedRecruiters);
120
+ setListingEntities(fetchedEntities);
121
+ setMapItems(distinctItems);
122
+ setStorageObject("mapItems", distinctItems);
123
+ setStorageObject("listingEntities", fetchedEntities);
124
+ setStorageObject("recruiters", fetchedRecruiters);
125
+ setStorageObject("listings", listingsResult);
126
+ } catch (error) {
127
+ console.log(error);
128
+ }
129
+ setLoading(false);
130
+ };
131
+ handleFetchListings();
132
+ }, [query, siteConfig]);
133
+
134
+ useEffect(() => {
135
+ const processListings = () => {
136
+ let { filteredListings, mapItems } = applyFilters(
137
+ allListings,
138
+ selectedFilters,
139
+ query,
140
+ listingEntities,
141
+ favorites,
142
+ siteConfig
143
+ );
144
+ if (filterByFavorites) {
145
+ filteredListings = filteredListings.filter(x => favorites.includes(x.id));
146
+ }
147
+ setNewFilteredListings(filteredListings);
148
+ // if (firstLoad && hasFiltersInURL(location)) {
149
+ // const { filters } = filtersFromURL(location);
150
+ // setSelectedFilters(filters);
151
+ // }
152
+ if (firstLoad && selectedFilters) {
153
+ //updateURLWithFilters(selectedFilters,location, navigate, query);
154
+ } else if (Object.keys(selectedFilters).length === 0 && !firstLoad) {
155
+ localStorage.removeItem('selectedFilters');
156
+ //updateURLWithFilters(selectedFilters,location, navigate, query);
157
+ } else if (!firstLoad) {
158
+ setStorageObject('selectedFilters', selectedFilters);
159
+ //updateURLWithFilters(selectedFilters,location, navigate, query);
160
+ }
161
+ query != null ? localStorage.setItem('query', query) : localStorage.removeItem('query');
162
+ setMapItems(mapItems);
163
+
164
+ if (selectedFilters) {
165
+ const keys = Object.keys(selectedFilters);
166
+ const lastKey = keys[keys.length - 1];
167
+ const options = generateFilterOptions(
168
+ firstLoad ? allListings : filteredListings,
169
+ allListings,
170
+ siteConfig,
171
+ filterOptions,
172
+ lastKey,
173
+ favorites
174
+ );
175
+ if (options) {
176
+ setFilterOptions(options);
177
+ if (firstLoad) setFirstLoad(false);
178
+ }
179
+ }
180
+ };
181
+
182
+ processListings();
183
+ }, [selectedFilters, query, listingEntities, filterByFavorites, favorites]);
184
+
185
+ const handleFilterListingsByLocation = selectedLocation => {
186
+ let { filteredListings } = filterListingsByLocation(
187
+ allListings,
188
+ selectedLocation,
189
+ listingEntities
190
+ );
191
+
192
+ setNewFilteredListings(filteredListings);
193
+ //setMapItems(mapItems);
194
+ };
195
+
196
+ const handleSettingFavorites = newFavorites => {
197
+ if (newFavorites == null) {
198
+ localStorage.removeItem('favorites');
199
+ } else {
200
+ setFavorites(newFavorites);
201
+ localStorage.setItem('favorites', JSON.stringify(newFavorites));
202
+ }
203
+ };
204
+
205
+ return (
206
+ <MapListContext.Provider value={{
207
+ loading,
208
+ allListings,
209
+ filteredListings,
210
+ mapItems,
211
+ query,
212
+ setNewFilteredListings,
213
+ setQuery,
214
+ listingEntities,
215
+ selectedFilters,
216
+ setSelectedFilters,
217
+ filterOptions,
218
+ recruiters,
219
+ handleFilterListingsByLocation,
220
+ filterDialogIsOpen,
221
+ setFilterDialogIsOpen,
222
+ setMobileTab,
223
+ mobileTab,
224
+ siteConfig,
225
+ favorites,
226
+ handleSettingFavorites,
227
+ setFilterByFavorites,
228
+ filterByFavorites,
229
+ commuteLocation,
230
+ setCommuteLocation,
231
+ navigateToDetails,
232
+ navigateToEasyApply,
233
+ Link,
234
+ linkFormat,
235
+ sortSetting,
236
+ setSortSetting,
237
+ trackEvent
238
+ }}>
239
+ {children}
240
+ </MapListContext.Provider>
241
+ );
242
+ };