@abcagency/hc-ui-components 1.3.59 → 1.3.61

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