@abcagency/hc-ui-components 1.3.61 → 1.3.63

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 (279) hide show
  1. package/dist/apis/hcApi.js +85 -85
  2. package/dist/apis/hcApi.js.map +1 -1
  3. package/dist/clientToken.js.map +1 -1
  4. package/dist/components/HireControlMap.js +14 -4
  5. package/dist/components/HireControlMap.js.map +1 -1
  6. package/dist/components/containers/accordions/filter-container.js +10 -3
  7. package/dist/components/containers/accordions/filter-container.js.map +1 -1
  8. package/dist/components/containers/accordions/filter-item-container.js.map +1 -1
  9. package/dist/components/containers/accordions/map-accordion-item-container.js.map +1 -1
  10. package/dist/components/containers/filter/commute-container.js +1 -1
  11. package/dist/components/containers/filter/commute-container.js.map +1 -1
  12. package/dist/components/containers/filter/filter-container.js.map +1 -1
  13. package/dist/components/containers/filter/filter-item-container.js.map +1 -1
  14. package/dist/components/containers/filter/location-container.js.map +1 -1
  15. package/dist/components/containers/filter/points-of-interest-container.js.map +1 -1
  16. package/dist/components/containers/filter/points-of-interest-radio-item-container.js.map +1 -1
  17. package/dist/components/containers/filter/search-container.js.map +1 -1
  18. package/dist/components/containers/jobListing/listing-details-container.js.map +1 -1
  19. package/dist/components/containers/list/item-list-container.js +21 -21
  20. package/dist/components/containers/list/item-list-container.js.map +1 -1
  21. package/dist/components/containers/list/list-item/list-item-container.js.map +1 -1
  22. package/dist/components/containers/maps/info-window-content-container.js.map +1 -1
  23. package/dist/components/containers/maps/map-container.js +1 -1
  24. package/dist/components/containers/maps/map-container.js.map +1 -1
  25. package/dist/components/containers/maps/map-list-container.js.map +1 -1
  26. package/dist/components/containers/maps/map-marker-container.js +1 -1
  27. package/dist/components/containers/maps/map-marker-container.js.map +1 -1
  28. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -1
  29. package/dist/components/modules/accordions/default.js +2 -2
  30. package/dist/components/modules/accordions/default.js.map +1 -1
  31. package/dist/components/modules/accordions/filterItem.js.map +1 -1
  32. package/dist/components/modules/accordions/filters.js.map +1 -1
  33. package/dist/components/modules/buttons/button-group-apply.js +1 -1
  34. package/dist/components/modules/buttons/button-group-apply.js.map +1 -1
  35. package/dist/components/modules/buttons/commute-pill.js.map +1 -1
  36. package/dist/components/modules/buttons/default.js +2 -2
  37. package/dist/components/modules/buttons/default.js.map +1 -1
  38. package/dist/components/modules/buttons/items-pill.js +5 -8
  39. package/dist/components/modules/buttons/items-pill.js.map +1 -1
  40. package/dist/components/modules/buttons/pill-wrapper.js.map +1 -1
  41. package/dist/components/modules/buttons/show-all-button.js.map +1 -1
  42. package/dist/components/modules/cards/default.js +2 -2
  43. package/dist/components/modules/cards/default.js.map +1 -1
  44. package/dist/components/modules/cards/filter.js.map +1 -1
  45. package/dist/components/modules/dialogs/apply-dialog.js +1 -1
  46. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -1
  47. package/dist/components/modules/filter/commute.js +2 -2
  48. package/dist/components/modules/filter/commute.js.map +1 -1
  49. package/dist/components/modules/filter/index.js +1 -1
  50. package/dist/components/modules/filter/index.js.map +1 -1
  51. package/dist/components/modules/filter/item.js.map +1 -1
  52. package/dist/components/modules/filter/location.js.map +1 -1
  53. package/dist/components/modules/filter/radio-item.js.map +1 -1
  54. package/dist/components/modules/filter/search.js.map +1 -1
  55. package/dist/components/modules/filter/sort.js +2 -2
  56. package/dist/components/modules/filter/sort.js.map +1 -1
  57. package/dist/components/modules/grid.js +1 -1
  58. package/dist/components/modules/grid.js.map +1 -1
  59. package/dist/components/modules/icon.js +1 -1
  60. package/dist/components/modules/icon.js.map +1 -1
  61. package/dist/components/modules/jobListing/listing-details.js +1 -1
  62. package/dist/components/modules/jobListing/listing-details.js.map +1 -1
  63. package/dist/components/modules/list/field-mapper.js.map +1 -1
  64. package/dist/components/modules/list/header-item.js.map +1 -1
  65. package/dist/components/modules/list/header.js +1 -1
  66. package/dist/components/modules/list/header.js.map +1 -1
  67. package/dist/components/modules/list/item-expand-card/index.js +1 -1
  68. package/dist/components/modules/list/item-expand-card/index.js.map +1 -1
  69. package/dist/components/modules/list/item-expand-card/recruiter-contact-nav.js +38 -38
  70. package/dist/components/modules/list/item-expand-card/recruiter-details.js +40 -40
  71. package/dist/components/modules/list/item-expand-card/recruiter-headshot.js +20 -20
  72. package/dist/components/modules/list/item-list.js +43 -43
  73. package/dist/components/modules/list/item-list.js.map +1 -1
  74. package/dist/components/modules/list/list-item/list-item.js.map +1 -1
  75. package/dist/components/modules/maps/info-window-card.js.map +1 -1
  76. package/dist/components/modules/maps/info-window-content.js.map +1 -1
  77. package/dist/components/modules/maps/map-list.js.map +1 -1
  78. package/dist/components/modules/maps/map-marker.js +1 -1
  79. package/dist/components/modules/maps/map-marker.js.map +1 -1
  80. package/dist/components/modules/maps/map.js +1 -1
  81. package/dist/components/modules/maps/map.js.map +1 -1
  82. package/dist/components/modules/maps/place-marker.js +1 -1
  83. package/dist/components/modules/maps/place-marker.js.map +1 -1
  84. package/dist/components/modules/maps/tabs.js +1 -1
  85. package/dist/components/modules/maps/tabs.js.map +1 -1
  86. package/dist/constants/eventTypes.js.map +1 -1
  87. package/dist/constants/placeTypes.js.map +1 -1
  88. package/dist/contexts/mapContext.js +83 -83
  89. package/dist/contexts/mapContext.js.map +1 -1
  90. package/dist/contexts/mapListContext.js +211 -192
  91. package/dist/contexts/mapListContext.js.map +1 -1
  92. package/dist/contexts/placesContext.js.map +1 -1
  93. package/dist/contexts/themeContext.js.map +1 -1
  94. package/dist/contexts/trackEventContext.js.map +1 -1
  95. package/dist/hooks/useList.js.map +1 -1
  96. package/dist/services/configService.js +9 -9
  97. package/dist/services/configService.js.map +1 -1
  98. package/dist/services/googlePlacesNearbyService.js +32 -32
  99. package/dist/services/googlePlacesNearbyService.js.map +1 -1
  100. package/dist/services/listingAggregatorService.js +34 -34
  101. package/dist/services/listingAggregatorService.js.map +1 -1
  102. package/dist/services/listingEntityService.js +9 -9
  103. package/dist/services/listingEntityService.js.map +1 -1
  104. package/dist/services/listingService.js +24 -24
  105. package/dist/services/listingService.js.map +1 -1
  106. package/dist/services/recruiterService.js +10 -10
  107. package/dist/services/recruiterService.js.map +1 -1
  108. package/dist/styles/index.css +1 -1
  109. package/dist/types/apis/hcApi.d.ts +5 -5
  110. package/dist/types/clientToken.d.ts +2 -2
  111. package/dist/types/components/containers/accordions/map-accordion-item-container.d.ts +12 -12
  112. package/dist/types/components/containers/jobListing/listing-details-container.d.ts +6 -6
  113. package/dist/types/components/containers/list/item-list-container.d.ts +9 -9
  114. package/dist/types/components/containers/list/list-item/list-item-container.d.ts +14 -14
  115. package/dist/types/components/modules/accordions/MapAccordionItem.d.ts +10 -10
  116. package/dist/types/components/modules/accordions/default.d.ts +19 -19
  117. package/dist/types/components/modules/buttons/button-group-apply.d.ts +24 -24
  118. package/dist/types/components/modules/buttons/commute-pill.d.ts +5 -5
  119. package/dist/types/components/modules/buttons/default.d.ts +48 -48
  120. package/dist/types/components/modules/buttons/pill-wrapper.d.ts +3 -3
  121. package/dist/types/components/modules/dialogs/apply-dialog.d.ts +8 -8
  122. package/dist/types/components/modules/filter/sort.d.ts +8 -8
  123. package/dist/types/components/modules/grid.d.ts +8 -8
  124. package/dist/types/components/modules/icon.d.ts +10 -10
  125. package/dist/types/components/modules/jobListing/listing-details.d.ts +20 -20
  126. package/dist/types/components/modules/list/field-mapper.d.ts +10 -10
  127. package/dist/types/components/modules/list/header-item.d.ts +11 -11
  128. package/dist/types/components/modules/list/header.d.ts +12 -12
  129. package/dist/types/components/modules/list/item-expand-card/index.d.ts +7 -7
  130. package/dist/types/components/modules/list/item-expand-card/recruiter-contact-nav.d.ts +17 -17
  131. package/dist/types/components/modules/list/item-expand-card/recruiter-details.d.ts +21 -21
  132. package/dist/types/components/modules/list/item-expand-card/recruiter-headshot.d.ts +8 -8
  133. package/dist/types/components/modules/list/item-list.d.ts +20 -20
  134. package/dist/types/components/modules/list/list-item/list-item.d.ts +3 -3
  135. package/dist/types/constants/eventTypes.d.ts +15 -15
  136. package/dist/types/contexts/mapContext.d.ts +29 -29
  137. package/dist/types/contexts/mapListContext.d.ts +69 -65
  138. package/dist/types/contexts/trackEventContext.d.ts +6 -6
  139. package/dist/types/enums/SectionType.d.ts +9 -9
  140. package/dist/types/hooks/useList.d.ts +13 -13
  141. package/dist/types/services/configService.d.ts +6 -6
  142. package/dist/types/services/googlePlacesNearbyService.d.ts +5 -5
  143. package/dist/types/services/listingAggregatorService.d.ts +12 -12
  144. package/dist/types/services/listingEntityService.d.ts +6 -6
  145. package/dist/types/services/listingService.d.ts +9 -9
  146. package/dist/types/services/recruiterService.d.ts +6 -6
  147. package/dist/types/types/Address.d.ts +7 -7
  148. package/dist/types/types/ContentSection.d.ts +8 -8
  149. package/dist/types/types/GetListingParams.d.ts +8 -8
  150. package/dist/types/types/LatLng.d.ts +4 -4
  151. package/dist/types/types/ListingEntity.d.ts +10 -10
  152. package/dist/types/types/ListingFields.d.ts +25 -25
  153. package/dist/types/types/Listings.d.ts +31 -31
  154. package/dist/types/types/Recruiter.d.ts +9 -9
  155. package/dist/types/types/SimilarListing.d.ts +24 -24
  156. package/dist/types/types/config/Colors.d.ts +8 -8
  157. package/dist/types/types/config/MapConfig.d.ts +30 -30
  158. package/dist/types/types/config/PointsOfInterestConfig.d.ts +13 -13
  159. package/dist/types/types/config/SearchConfig.d.ts +4 -4
  160. package/dist/types/util/filterUtil.d.ts +28 -28
  161. package/dist/types/util/loading.d.ts +3 -3
  162. package/dist/types/util/localStorageUtil.d.ts +3 -3
  163. package/dist/types/util/mapUtil.d.ts +16 -16
  164. package/dist/types/util/sortUtil.d.ts +1 -1
  165. package/dist/types/util/stringUtils.d.ts +1 -1
  166. package/dist/types/util/urlFilterUtil.d.ts +8 -8
  167. package/dist/util/filterUtil.js +1 -1
  168. package/dist/util/filterUtil.js.map +1 -1
  169. package/dist/util/loading.js.map +1 -1
  170. package/dist/util/localStorageUtil.js +37 -37
  171. package/dist/util/localStorageUtil.js.map +1 -1
  172. package/dist/util/mapIconUtil.js.map +1 -1
  173. package/dist/util/mapUtil.js.map +1 -1
  174. package/dist/util/sortUtil.js.map +1 -1
  175. package/dist/util/stringUtils.js.map +1 -1
  176. package/dist/util/urlFilterUtil.js.map +1 -1
  177. package/package.json +90 -90
  178. package/src/.editorconfig +12 -12
  179. package/src/apis/hcApi.ts +109 -109
  180. package/src/bundleIndex.js +14 -14
  181. package/src/clientToken.js +9 -9
  182. package/src/components/HireControlMap.js +153 -148
  183. package/src/components/containers/accordions/filter-container.js +52 -48
  184. package/src/components/containers/accordions/filter-item-container.js +83 -83
  185. package/src/components/containers/accordions/map-accordion-item-container.js +70 -70
  186. package/src/components/containers/filter/commute-container.js +89 -89
  187. package/src/components/containers/filter/filter-container.js +76 -76
  188. package/src/components/containers/filter/filter-item-container.js +117 -117
  189. package/src/components/containers/filter/location-container.js +45 -45
  190. package/src/components/containers/filter/points-of-interest-container.js +33 -33
  191. package/src/components/containers/filter/points-of-interest-radio-item-container.js +35 -35
  192. package/src/components/containers/filter/search-container.js +61 -61
  193. package/src/components/containers/jobListing/listing-details-container.js +42 -42
  194. package/src/components/containers/list/item-list-container.tsx +81 -81
  195. package/src/components/containers/list/list-item/list-item-container.js +43 -43
  196. package/src/components/containers/maps/info-window-content-container.js +53 -53
  197. package/src/components/containers/maps/map-container.js +249 -249
  198. package/src/components/containers/maps/map-list-container.js +50 -50
  199. package/src/components/containers/maps/map-marker-container.js +78 -78
  200. package/src/components/modules/accordions/MapAccordionItem.js +30 -30
  201. package/src/components/modules/accordions/default.js +171 -171
  202. package/src/components/modules/accordions/filterItem.js +27 -27
  203. package/src/components/modules/accordions/filters.js +32 -32
  204. package/src/components/modules/buttons/button-group-apply.js +115 -115
  205. package/src/components/modules/buttons/commute-pill.js +22 -22
  206. package/src/components/modules/buttons/default.js +194 -194
  207. package/src/components/modules/buttons/items-pill.js +31 -35
  208. package/src/components/modules/buttons/pill-wrapper.js +27 -27
  209. package/src/components/modules/buttons/show-all-button.js +19 -19
  210. package/src/components/modules/cards/default.js +167 -167
  211. package/src/components/modules/cards/filter.js +56 -56
  212. package/src/components/modules/dialogs/apply-dialog.js +48 -48
  213. package/src/components/modules/filter/commute.js +108 -108
  214. package/src/components/modules/filter/index.js +55 -55
  215. package/src/components/modules/filter/item.js +69 -69
  216. package/src/components/modules/filter/location.js +51 -51
  217. package/src/components/modules/filter/radio-item.js +42 -42
  218. package/src/components/modules/filter/search.js +79 -79
  219. package/src/components/modules/filter/sort.js +83 -83
  220. package/src/components/modules/grid.js +54 -54
  221. package/src/components/modules/icon.js +33 -33
  222. package/src/components/modules/jobListing/listing-details.js +110 -110
  223. package/src/components/modules/list/field-mapper.js +130 -130
  224. package/src/components/modules/list/header-item.js +92 -92
  225. package/src/components/modules/list/header.js +51 -51
  226. package/src/components/modules/list/item-expand-card/index.js +22 -22
  227. package/src/components/modules/list/item-expand-card/recruiter-contact-nav.js +50 -50
  228. package/src/components/modules/list/item-expand-card/recruiter-details.js +68 -68
  229. package/src/components/modules/list/item-expand-card/recruiter-headshot.js +22 -22
  230. package/src/components/modules/list/item-list.tsx +117 -117
  231. package/src/components/modules/list/list-item/list-item.js +130 -130
  232. package/src/components/modules/maps/info-window-card.js +17 -17
  233. package/src/components/modules/maps/info-window-content.js +64 -64
  234. package/src/components/modules/maps/map-list.js +38 -38
  235. package/src/components/modules/maps/map-marker.js +29 -29
  236. package/src/components/modules/maps/map.js +64 -64
  237. package/src/components/modules/maps/place-marker.js +41 -41
  238. package/src/components/modules/maps/tabs.js +81 -81
  239. package/src/constants/eventTypes.js +15 -15
  240. package/src/constants/placeTypes.js +8 -8
  241. package/src/contexts/mapContext.tsx +129 -129
  242. package/src/contexts/mapListContext.tsx +351 -326
  243. package/src/contexts/placesContext.js +102 -102
  244. package/src/contexts/themeContext.js +40 -40
  245. package/src/contexts/trackEventContext.js +14 -14
  246. package/src/enums/SectionType.ts +9 -9
  247. package/src/hooks/useList.js +89 -89
  248. package/src/index.js +3 -3
  249. package/src/services/configService.ts +16 -16
  250. package/src/services/googlePlacesNearbyService.ts +42 -42
  251. package/src/services/listingAggregatorService.ts +76 -76
  252. package/src/services/listingEntityService.ts +16 -16
  253. package/src/services/listingService.ts +40 -40
  254. package/src/services/recruiterService.ts +18 -18
  255. package/src/styles/bundle.css +268 -268
  256. package/src/styles/index.css +33 -33
  257. package/src/types/Address.ts +7 -7
  258. package/src/types/ContentSection.ts +9 -9
  259. package/src/types/GetListingParams.ts +8 -8
  260. package/src/types/LatLng.ts +4 -4
  261. package/src/types/ListingEntity.ts +11 -11
  262. package/src/types/ListingFields.ts +25 -25
  263. package/src/types/Listings.ts +32 -32
  264. package/src/types/Recruiter.ts +9 -9
  265. package/src/types/SimilarListing.ts +24 -24
  266. package/src/types/config/Colors.ts +8 -8
  267. package/src/types/config/MapConfig.ts +31 -31
  268. package/src/types/config/PointsOfInterestConfig.ts +13 -13
  269. package/src/types/config/SearchConfig.ts +4 -4
  270. package/src/util/arrayUtil.js +3 -3
  271. package/src/util/fieldMapper.js +22 -22
  272. package/src/util/filterUtil.js +311 -311
  273. package/src/util/loading.js +17 -17
  274. package/src/util/localStorageUtil.ts +34 -34
  275. package/src/util/mapIconUtil.js +180 -180
  276. package/src/util/mapUtil.js +92 -92
  277. package/src/util/sortUtil.js +32 -32
  278. package/src/util/stringUtils.js +6 -6
  279. package/src/util/urlFilterUtil.js +85 -85
@@ -1,148 +1,153 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { useLoadScript } from '@react-google-maps/api';
3
-
4
- import Grid from '~/components/modules/grid';
5
- import Filter from '~/components/containers/filter/filter-container';
6
- import MapList from '~/components/containers/maps/map-list-container';
7
-
8
- import { MapProvider } from '~/contexts/mapContext';
9
- import { PlacesProvider } from '~/contexts/placesContext';
10
- import { MapListProvider } from '~/contexts/mapListContext';
11
- import { TrackEventProvider } from '~/contexts/trackEventContext';
12
-
13
- import { getMapConfig } from '~/services/configService';
14
- import { setClientAuthKey } from '~/clientToken.js';
15
-
16
- import '../styles/index.css';
17
- import { ThemeProvider } from '~/contexts/themeContext';
18
-
19
- const libraries = ['places'];
20
-
21
- export const HireControlMap = ({
22
- clientToken,
23
- navigateToDetails = null,
24
- navigateToEasyApply = null,
25
- handleUrlUpdate = null,
26
- Link = null,
27
- linkFormat = '/jobs/[slug]',
28
- easyApplyUrl = null,
29
- easyApplyText = 'Easy Apply',
30
- trackEvent = (eventType, eventObj) => {console.log(eventType); console.log(eventObj);},
31
- listings = [],
32
- setFiltersUrl = null
33
- }) => {
34
- const [siteConfig, setSiteconfig] = useState(null);
35
-
36
- useEffect(() => {
37
- setClientAuthKey(clientToken);
38
- const fetchSiteConfig = async () => {
39
- try {
40
- const configData = await getMapConfig(clientToken);
41
- setSiteconfig(configData);
42
- } catch (error) {
43
- console.error('Failed to fetch site configuration:', error);
44
- }
45
- };
46
-
47
- fetchSiteConfig();
48
- }, [clientToken]);
49
-
50
- const { isLoaded } = useLoadScript({
51
- googleMapsApiKey: process.env.GOOGLE_MAPS_API_KEY,
52
- version: 'quarterly',
53
- libraries: libraries
54
- });
55
-
56
- return (
57
- <div>
58
- {isLoaded && siteConfig && (
59
- <HomeBody
60
- siteConfig={siteConfig}
61
- navigateToDetails={navigateToDetails}
62
- navigateToEasyApply={navigateToEasyApply}
63
- Link={Link}
64
- linkFormat={linkFormat}
65
- easyApplyUrl={easyApplyUrl}
66
- easyApplyText={easyApplyText}
67
- trackEvent={trackEvent}
68
- listings={listings}
69
- setFiltersUrl={setFiltersUrl}
70
- handleUrlUpdate={handleUrlUpdate}
71
- />
72
- )}
73
- </div>
74
- );
75
- };
76
-
77
- const HomeBody = ({ siteConfig, navigateToDetails, navigateToEasyApply, Link, linkFormat, easyApplyUrl, easyApplyText, trackEvent, listings, setFiltersUrl, handleUrlUpdate }) => {
78
- const resetFilters = false;
79
-
80
- return (
81
- <TrackEventProvider trackEvent={trackEvent}>
82
- <ThemeProvider uiText={siteConfig.colors.uiText} uiAccent={siteConfig.colors.uiAccent} primary={siteConfig.colors.primary} primaryDark={siteConfig.colors.primaryDark} secondary={siteConfig.colors.secondary} secondaryDark={siteConfig.colors.secondaryDark}>
83
- <MapListProvider
84
- siteConfig={siteConfig}
85
- resetFilters={resetFilters}
86
- navigateToDetails={navigateToDetails}
87
- navigateToEasyApply={navigateToEasyApply}
88
- Link={Link}
89
- linkFormat={linkFormat}
90
- easyApplyUrl={easyApplyUrl}
91
- easyApplyText={easyApplyText}
92
- listings={listings}
93
- setFiltersUrl={setFiltersUrl}
94
- handleUrlUpdate={handleUrlUpdate}
95
- >
96
- <MapProvider resetFilters={resetFilters}>
97
- <PlacesProvider
98
- placeMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}
99
- markerColors={{
100
- fillColor: siteConfig.colors.primary,
101
- strokeColor: siteConfig.colors.primaryDark,
102
- selectedFillColor: siteConfig.colors.secondary,
103
- selectedStrokeColor: siteConfig.colors.secondaryDark,
104
- placeMarkers: {
105
- colors: siteConfig.pointsOfInterestConfig.placeMarkerColors,
106
- size: siteConfig.pointsOfInterestConfig.placeMarkerSize
107
- }
108
- }}
109
- >
110
- <Grid
111
- as='section'
112
- id='job-search-interface'
113
- columns='md:hc-grid-cols-[1fr_2.5fr] lg:hc-grid-cols-[1fr_3.5fr]'
114
- gap='hc-gap-0'
115
- autoRows={false}
116
- className='hc-bundle hc-items-stretch hc-h-screen hc-min-h-[30rem] hc-divide-x hc-divide-uiAccent/20'
117
- >
118
- <Grid.Item className='hc-bg-gray-100'>
119
- <Filter showMap={siteConfig.showMap} className='hc-hidden md:hc-block' />
120
- </Grid.Item>
121
- <MapList
122
- markerConfigs={{
123
- fillColor: siteConfig.colors.primary,
124
- strokeColor: siteConfig.colors.primaryDark,
125
- selectedFillColor: siteConfig.colors.secondary,
126
- selectedStrokeColor: siteConfig.colors.secondaryDark,
127
- placeMarkers: {
128
- colors: siteConfig.pointsOfInterestConfig.placeMarkerColors,
129
- size: siteConfig.pointsOfInterestConfig.placeMarkerSize
130
- }
131
- }}
132
- mapPosition={siteConfig.mapPosition}
133
- showMap={siteConfig.showMap}
134
- fieldsShown={siteConfig.fieldsShown}
135
- specialFeatures={siteConfig.specialFeatures}
136
- fieldNames={siteConfig.fieldNames}
137
- placeMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}
138
- />
139
- </Grid>
140
- </PlacesProvider>
141
- </MapProvider>
142
- </MapListProvider>
143
- </ThemeProvider>
144
- </TrackEventProvider>
145
- );
146
- };
147
-
148
- export default HireControlMap;
1
+ import React, { useEffect, useState } from 'react';
2
+ import { useLoadScript } from '@react-google-maps/api';
3
+
4
+ import Grid from '~/components/modules/grid';
5
+ import Filter from '~/components/containers/filter/filter-container';
6
+ import MapList from '~/components/containers/maps/map-list-container';
7
+
8
+ import { MapProvider } from '~/contexts/mapContext';
9
+ import { PlacesProvider } from '~/contexts/placesContext';
10
+ import { MapListProvider } from '~/contexts/mapListContext';
11
+ import { TrackEventProvider } from '~/contexts/trackEventContext';
12
+
13
+ import { getMapConfig } from '~/services/configService';
14
+ import { setClientAuthKey } from '~/clientToken.js';
15
+
16
+ import '../styles/index.css';
17
+ import { ThemeProvider } from '~/contexts/themeContext';
18
+
19
+ const libraries = ['places'];
20
+
21
+ export const HireControlMap = ({
22
+ clientToken,
23
+ navigateToDetails = null,
24
+ navigateToEasyApply = null,
25
+ handleUrlUpdate = null,
26
+ Link = null,
27
+ linkFormat = '/jobs/[slug]',
28
+ easyApplyUrl = null,
29
+ easyApplyText = 'Easy Apply',
30
+ trackEvent = (eventType, eventObj) => {console.log(eventType); console.log(eventObj);},
31
+ listings = [],
32
+ defaultFilters = null,
33
+ hiddenFilters = null,
34
+ setFiltersUrl = null
35
+ }) => {
36
+ const [siteConfig, setSiteconfig] = useState(null);
37
+ useEffect(() => {
38
+ setClientAuthKey(clientToken);
39
+ const fetchSiteConfig = async () => {
40
+ try {
41
+ const configData = await getMapConfig(clientToken);
42
+ setSiteconfig(configData);
43
+ } catch (error) {
44
+ console.error('Failed to fetch site configuration:', error);
45
+ }
46
+ };
47
+
48
+ fetchSiteConfig();
49
+ }, [clientToken]);
50
+
51
+ const { isLoaded } = useLoadScript({
52
+ googleMapsApiKey: process.env.GOOGLE_MAPS_API_KEY,
53
+ version: 'quarterly',
54
+ libraries: libraries
55
+ });
56
+
57
+ return (
58
+ <div>
59
+ {isLoaded && siteConfig && (
60
+ <HomeBody
61
+ siteConfig={siteConfig}
62
+ navigateToDetails={navigateToDetails}
63
+ navigateToEasyApply={navigateToEasyApply}
64
+ Link={Link}
65
+ linkFormat={linkFormat}
66
+ easyApplyUrl={easyApplyUrl}
67
+ easyApplyText={easyApplyText}
68
+ trackEvent={trackEvent}
69
+ listings={listings}
70
+ setFiltersUrl={setFiltersUrl}
71
+ hiddenFilters={hiddenFilters}
72
+ handleUrlUpdate={handleUrlUpdate}
73
+ defaultFilters={defaultFilters}
74
+ />
75
+ )}
76
+ </div>
77
+ );
78
+ };
79
+
80
+ const HomeBody = ({ hiddenFilters, defaultFilters, siteConfig, navigateToDetails, navigateToEasyApply, Link, linkFormat, easyApplyUrl, easyApplyText, trackEvent, listings, setFiltersUrl, handleUrlUpdate }) => {
81
+ const resetFilters = false;
82
+
83
+ return (
84
+ <TrackEventProvider trackEvent={trackEvent}>
85
+ <ThemeProvider uiText={siteConfig.colors.uiText} uiAccent={siteConfig.colors.uiAccent} primary={siteConfig.colors.primary} primaryDark={siteConfig.colors.primaryDark} secondary={siteConfig.colors.secondary} secondaryDark={siteConfig.colors.secondaryDark}>
86
+ <MapListProvider
87
+ siteConfig={siteConfig}
88
+ resetFilters={resetFilters}
89
+ navigateToDetails={navigateToDetails}
90
+ navigateToEasyApply={navigateToEasyApply}
91
+ Link={Link}
92
+ linkFormat={linkFormat}
93
+ easyApplyUrl={easyApplyUrl}
94
+ easyApplyText={easyApplyText}
95
+ listings={listings}
96
+ setFiltersUrl={setFiltersUrl}
97
+ hiddenFilters={hiddenFilters}
98
+ handleUrlUpdate={handleUrlUpdate}
99
+ defaultFilters={defaultFilters}
100
+ >
101
+ <MapProvider resetFilters={resetFilters}>
102
+ <PlacesProvider
103
+ placeMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}
104
+ markerColors={{
105
+ fillColor: siteConfig.colors.primary,
106
+ strokeColor: siteConfig.colors.primaryDark,
107
+ selectedFillColor: siteConfig.colors.secondary,
108
+ selectedStrokeColor: siteConfig.colors.secondaryDark,
109
+ placeMarkers: {
110
+ colors: siteConfig.pointsOfInterestConfig.placeMarkerColors,
111
+ size: siteConfig.pointsOfInterestConfig.placeMarkerSize
112
+ }
113
+ }}
114
+ >
115
+ <Grid
116
+ as='section'
117
+ id='job-search-interface'
118
+ columns='md:hc-grid-cols-[1fr_2.5fr] lg:hc-grid-cols-[1fr_3.5fr]'
119
+ gap='hc-gap-0'
120
+ autoRows={false}
121
+ className='hc-bundle hc-items-stretch hc-h-screen hc-min-h-[30rem] hc-divide-x hc-divide-uiAccent/20'
122
+ >
123
+ <Grid.Item className='hc-bg-gray-100'>
124
+ <Filter showMap={siteConfig.showMap} className='hc-hidden md:hc-block' />
125
+ </Grid.Item>
126
+ <MapList
127
+ markerConfigs={{
128
+ fillColor: siteConfig.colors.primary,
129
+ strokeColor: siteConfig.colors.primaryDark,
130
+ selectedFillColor: siteConfig.colors.secondary,
131
+ selectedStrokeColor: siteConfig.colors.secondaryDark,
132
+ placeMarkers: {
133
+ colors: siteConfig.pointsOfInterestConfig.placeMarkerColors,
134
+ size: siteConfig.pointsOfInterestConfig.placeMarkerSize
135
+ }
136
+ }}
137
+ mapPosition={siteConfig.mapPosition}
138
+ showMap={siteConfig.showMap}
139
+ fieldsShown={siteConfig.fieldsShown}
140
+ specialFeatures={siteConfig.specialFeatures}
141
+ fieldNames={siteConfig.fieldNames}
142
+ placeMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}
143
+ />
144
+ </Grid>
145
+ </PlacesProvider>
146
+ </MapProvider>
147
+ </MapListProvider>
148
+ </ThemeProvider>
149
+ </TrackEventProvider>
150
+ );
151
+ };
152
+
153
+ export default HireControlMap;
@@ -1,48 +1,52 @@
1
- import React from 'react';
2
- import { useMapList } from '~/contexts/mapListContext';
3
- import AccordionFilters from '~/components/modules/accordions/filters';
4
- import AccordionFilterItem from '~/components/containers/accordions/filter-item-container';
5
-
6
- const AccordionFiltersContainer = ({
7
- className,
8
- defaultValue,
9
- setDefaultValue,
10
- setLocation,
11
- setSelectedListItem,
12
- SubcategoryRequireCategory
13
- }) => {
14
- const { filterOptions, selectedFilters, setSelectedFilters, siteConfig } = useMapList();
15
-
16
- const handleSetSelectedFilters = prevFilters => {
17
- setSelectedFilters(prevFilters);
18
- setLocation(null);
19
- setSelectedListItem(null);
20
- };
21
- return (
22
- <AccordionFilters
23
- className={className}
24
- defaultValue={defaultValue}
25
- filterOptions={filterOptions}
26
- >
27
- {filterOptions?.filters?.map(filter => {
28
- if(filter.id === 'category' && SubcategoryRequireCategory === true && (!selectedFilters.categoryClass || Object.keys(selectedFilters.categoryClass).length < 1)){
29
- return;
30
- } else if (filter.id === 'category' && SubcategoryRequireCategory === true && filter.items.length > 0) {
31
- filter.items = filter.items.filter(item => item.count > 0);
32
- }
33
- return (<AccordionFilterItem
34
- key={filter.id}
35
- filter={filter}
36
- externalLinksInFilters={siteConfig.externalLinksInFilters}
37
- setDefaultValue={setDefaultValue}
38
- selectedFilters={selectedFilters}
39
- setSelectedFilters={handleSetSelectedFilters}
40
- subcategoryRequireCategory={siteConfig.subcategoryRequireCategory}
41
- />);
42
- }
43
- )}
44
- </AccordionFilters>
45
- );
46
- };
47
-
48
- export default AccordionFiltersContainer;
1
+ import React from 'react';
2
+ import { useMapList } from '~/contexts/mapListContext';
3
+ import AccordionFilters from '~/components/modules/accordions/filters';
4
+ import AccordionFilterItem from '~/components/containers/accordions/filter-item-container';
5
+
6
+ const AccordionFiltersContainer = ({
7
+ className,
8
+ defaultValue,
9
+ setDefaultValue,
10
+ setLocation,
11
+ setSelectedListItem,
12
+ SubcategoryRequireCategory
13
+ }) => {
14
+ const { filterOptions, selectedFilters, setSelectedFilters, siteConfig, hiddenFilters } = useMapList();
15
+
16
+ const handleSetSelectedFilters = prevFilters => {
17
+ setSelectedFilters(prevFilters);
18
+ setLocation(null);
19
+ setSelectedListItem(null);
20
+ };
21
+ let displayedFilters = filterOptions?.filters;
22
+ if (hiddenFilters) {
23
+ displayedFilters = filterOptions?.filters.filter(filter => !hiddenFilters.includes(filter.id));
24
+ }
25
+ return (
26
+ <AccordionFilters
27
+ className={className}
28
+ defaultValue={defaultValue}
29
+ filterOptions={filterOptions}
30
+ >
31
+ {displayedFilters?.map(filter => {
32
+ if(filter.id === 'category' && SubcategoryRequireCategory === true && (!selectedFilters.categoryClass || Object.keys(selectedFilters.categoryClass).length < 1)){
33
+ return;
34
+ } else if (filter.id === 'category' && SubcategoryRequireCategory === true && filter.items.length > 0) {
35
+ filter.items = filter.items.filter(item => item.count > 0);
36
+ }
37
+ return (<AccordionFilterItem
38
+ key={filter.id}
39
+ filter={filter}
40
+ externalLinksInFilters={siteConfig.externalLinksInFilters}
41
+ setDefaultValue={setDefaultValue}
42
+ selectedFilters={selectedFilters}
43
+ setSelectedFilters={handleSetSelectedFilters}
44
+ subcategoryRequireCategory={siteConfig.subcategoryRequireCategory}
45
+ />);
46
+ }
47
+ )}
48
+ </AccordionFilters>
49
+ );
50
+ };
51
+
52
+ export default AccordionFiltersContainer;
@@ -1,83 +1,83 @@
1
- import React, { memo } from 'react';
2
- import AccordionFilterItem from '~/components/modules/accordions/filterItem';
3
- import FilterItem from '~/components/containers/filter/filter-item-container';
4
- import ItemsPill from '~/components/modules/buttons/items-pill';
5
-
6
- const FilterItemContainer = ({
7
- filter,
8
- setDefaultValue,
9
- setSelectedFilters,
10
- selectedFilters,
11
- subcategoryRequireCategory = false,
12
- externalLinksInFilters
13
- }) => {
14
- const externalLinks = externalLinksInFilters?.filter(x => x.fieldName == filter.id);
15
- const fieldKey = filter.id;
16
- const activeItemsCount = selectedFilters != null && selectedFilters[fieldKey]
17
- ? Object.keys(selectedFilters[fieldKey]).length
18
- : 0;
19
-
20
- const handleClearFilters = event => {
21
- event.stopPropagation();
22
- setSelectedFilters(prevFilters => {
23
- const updatedFilters = { ...prevFilters };
24
- if(subcategoryRequireCategory && fieldKey == 'categoryClass'){
25
- delete updatedFilters['category'];
26
- }
27
- if(fieldKey == 'state' || fieldKey == 'city' || fieldKey == 'cityState'){
28
- delete updatedFilters.entityId;
29
- delete updatedFilters['entityName'];
30
- }
31
- delete updatedFilters[fieldKey];
32
- return updatedFilters;
33
- });
34
- };
35
-
36
- const header = (
37
- <>
38
- {filter.title}
39
- {activeItemsCount > 0 && (
40
- <ItemsPill
41
- activeItemsCount={activeItemsCount}
42
- onClick={handleClearFilters}
43
- />
44
- )}
45
- </>
46
- );
47
-
48
- const body = (
49
- <>
50
- {filter.items.sort().map(item => (
51
- <FilterItem
52
- key={item.name}
53
- item={item}
54
- field={filter.id}
55
- selectedFilters={selectedFilters}
56
- setSelectedFilters={setSelectedFilters}
57
- subcategoryRequireCategory={subcategoryRequireCategory}
58
- />
59
- ))}
60
- {externalLinks && externalLinks.map(link => (
61
- <FilterItem
62
- key={link.externalLink}
63
- item={<a href={link.externalLinkUrl}>{link.externalLink}</a>}
64
- isExternalLink={true}
65
- externalLinkUrl={link.externalLinkUrl}
66
- field={filter.id}
67
- subcategoryRequireCategory={subcategoryRequireCategory}
68
- />
69
- ))}
70
- </>
71
- );
72
-
73
- return (
74
- <AccordionFilterItem
75
- id={filter.id}
76
- setDefaultValue={setDefaultValue}
77
- header={header}
78
- body={body}
79
- />
80
- );
81
- };
82
-
83
- export default memo(FilterItemContainer);
1
+ import React, { memo } from 'react';
2
+ import AccordionFilterItem from '~/components/modules/accordions/filterItem';
3
+ import FilterItem from '~/components/containers/filter/filter-item-container';
4
+ import ItemsPill from '~/components/modules/buttons/items-pill';
5
+
6
+ const FilterItemContainer = ({
7
+ filter,
8
+ setDefaultValue,
9
+ setSelectedFilters,
10
+ selectedFilters,
11
+ subcategoryRequireCategory = false,
12
+ externalLinksInFilters
13
+ }) => {
14
+ const externalLinks = externalLinksInFilters?.filter(x => x.fieldName == filter.id);
15
+ const fieldKey = filter.id;
16
+ const activeItemsCount = selectedFilters != null && selectedFilters[fieldKey]
17
+ ? Object.keys(selectedFilters[fieldKey]).length
18
+ : 0;
19
+
20
+ const handleClearFilters = event => {
21
+ event.stopPropagation();
22
+ setSelectedFilters(prevFilters => {
23
+ const updatedFilters = { ...prevFilters };
24
+ if(subcategoryRequireCategory && fieldKey == 'categoryClass'){
25
+ delete updatedFilters['category'];
26
+ }
27
+ if(fieldKey == 'state' || fieldKey == 'city' || fieldKey == 'cityState'){
28
+ delete updatedFilters.entityId;
29
+ delete updatedFilters['entityName'];
30
+ }
31
+ delete updatedFilters[fieldKey];
32
+ return updatedFilters;
33
+ });
34
+ };
35
+
36
+ const header = (
37
+ <>
38
+ {filter.title}
39
+ {activeItemsCount > 0 && (
40
+ <ItemsPill
41
+ activeItemsCount={activeItemsCount}
42
+ onClick={handleClearFilters}
43
+ />
44
+ )}
45
+ </>
46
+ );
47
+
48
+ const body = (
49
+ <>
50
+ {filter.items.sort().map(item => (
51
+ <FilterItem
52
+ key={item.name}
53
+ item={item}
54
+ field={filter.id}
55
+ selectedFilters={selectedFilters}
56
+ setSelectedFilters={setSelectedFilters}
57
+ subcategoryRequireCategory={subcategoryRequireCategory}
58
+ />
59
+ ))}
60
+ {externalLinks && externalLinks.map(link => (
61
+ <FilterItem
62
+ key={link.externalLink}
63
+ item={<a href={link.externalLinkUrl}>{link.externalLink}</a>}
64
+ isExternalLink={true}
65
+ externalLinkUrl={link.externalLinkUrl}
66
+ field={filter.id}
67
+ subcategoryRequireCategory={subcategoryRequireCategory}
68
+ />
69
+ ))}
70
+ </>
71
+ );
72
+
73
+ return (
74
+ <AccordionFilterItem
75
+ id={filter.id}
76
+ setDefaultValue={setDefaultValue}
77
+ header={header}
78
+ body={body}
79
+ />
80
+ );
81
+ };
82
+
83
+ export default memo(FilterItemContainer);