@abcagency/hc-ui-components 1.3.59 → 1.3.60

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 +48 -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,130 +1,130 @@
1
- import React, { forwardRef } from 'react';
2
- import Grid from '~/components/modules/grid';
3
- import Icon from '~/components/modules/icon';
4
- import FieldMapper from '~/components/modules/list/field-mapper';
5
-
6
- const ListItem = forwardRef(
7
- (
8
- {
9
- isActive,
10
- bodyClassName,
11
- className,
12
- item,
13
- fieldsShown,
14
- specialFeatures,
15
- onItemSelected,
16
- showMap,
17
- setMobileTab,
18
- handleSettingFavorites,
19
- favorites,
20
- includeFavorite = true,
21
- siteConfig,
22
- trackEvent,
23
- eventTypes,
24
- ...props
25
- },
26
- ref
27
- ) => {
28
- const mapPinColor = !showMap ? null : siteConfig.colors.primary.replace("#", "");
29
-
30
- const handleClick = () => {
31
- if (onItemSelected) {
32
- onItemSelected(item);
33
- }
34
- };
35
- let isFavorite = favorites.includes(item.id);
36
-
37
- const handleFavouriteClick = (event, item) => {
38
- if(!includeFavorite)return;
39
- event.stopPropagation();
40
- let updatedFavorites;
41
- if (isFavorite) {
42
- updatedFavorites = favorites.filter(fav => fav !== item.id);
43
- } else {
44
- updatedFavorites = [...favorites, item.id];
45
- }
46
- isFavorite = !isFavorite;
47
- handleSettingFavorites(updatedFavorites);
48
- };
49
- return (
50
- <button
51
- ref={ref}
52
- onClick={() => { handleClick(); }}
53
- className={`
54
- hc-group hc-relative hc-flex md:hc-flex-col hc-w-full hc-text-left hc-bg-clip-border hc-border hc-border-transparent hc-break-words hc-overflow-hidden hc-cursor-pointer hc-transition-colors hover:hc-bg-uiAccent/5 focus:hover:hc-bg-uiAccent/5
55
- ${isActive ? "hc-bg-uiAccent/5 hc-border-secondary hc-border" : "hc-text-uiText hc-bg-white"}
56
- ${className ?? ""}
57
- `}
58
- {...props}
59
- >
60
- <Grid
61
- columns="hc-pl-2 hc-md-pl-0 hc-grid-flow-col hc-auto-cols-fr"
62
- gap="hc-gap-0"
63
- isAnimated={false}
64
- className={`
65
- hc-block md:hc-grid hc-py-2 hc-w-full hc-grow hc-leading-tight hc-text-sm md:hc-text-xs lg:hc-text-sm
66
- ${bodyClassName ?? ""}
67
- `}
68
- >
69
- <Grid.Item className="hc-hidden md:hc-block md:hc-absolute md:hc-left-1.5 hc-top-1.5">
70
- <span className="hc-sr-only">Expand row</span>
71
- <Icon
72
- icon="fluent-emoji-high-contrast:plus"
73
- size="hc-size-2.5"
74
- className={`
75
- hc-opacity-0 hc-text-uiText/60 hc-transition group-hover:hc-opacity-100 group-active:hc-opacity-100
76
- ${isActive ? "hc-opacity-100 hc-rotate-45" : ""}
77
- `}
78
- />
79
- </Grid.Item>
80
- <FieldMapper
81
- item={item}
82
- fieldsShown={fieldsShown}
83
- specialFeatures={specialFeatures}
84
- isFavorite={isFavorite}
85
- includeFavorite={includeFavorite}
86
- handleFavouriteClick={handleFavouriteClick}
87
- />
88
- {includeFavorite &&
89
- <Grid.Item
90
- key={"favorites"}
91
- className="hc-hidden md:hc-block hc-col-span-1 hc-px-2"
92
- >
93
- <Icon
94
- icon={isFavorite ? "mdi:heart" : "mdi:heart-outline"}
95
- size="hc-size-3.5"
96
- iconClasses={isFavorite ? "hc-text-primary" : ""}
97
- title={!isFavorite ? 'Add job to favorites' : 'Remove job from favorites'}
98
- className="hc-pr-2 hc-transition-opacity hc-duration-300 hc-cursor-pointer hc-opacity-100"
99
- onClick={e => {handleFavouriteClick(e, item);}}
100
- />
101
- </Grid.Item>
102
- }
103
- </Grid>
104
- {showMap && (
105
- <div onClick={() => { setMobileTab("mapTab"); handleClick(); }} className="md:hc-hidden hc-w-2/5 sm:hc-w-1/3 hc-p-1.5 hc-my-1 hc-bg-uiAccent/5 hc-border hc-border-uiAccent/10 hc-rounded-sm">
106
- <img
107
- src={`https://maps.googleapis.com/maps/api/staticmap?scale=2&center=${item.mapDetails?.latitude},${item.mapDetails?.longitude}&zoom=10&size=240x180&maptype=roadmap&markers=color:0x${mapPinColor}%7Clabel:•%7C${item.mapDetails?.latitude},${item.mapDetails?.longitude}&key=${process.env.GOOGLE_MAPS_API_KEY}`}
108
- alt={`Map of location for ${item.fields.position}`}
109
- className="hc-w-full hc-h-full hc-object-cover"
110
- />
111
- </div>
112
- )}
113
- </button>
114
- );
115
- }
116
- );
117
-
118
- ListItem.displayName = "ListItem";
119
-
120
- export default React.memo(ListItem, (prevProps, nextProps) => {
121
- return (
122
- prevProps.isActive === nextProps.isActive &&
123
- prevProps.favorites === nextProps.favorites &&
124
- prevProps.item.id === nextProps.item.id &&
125
- prevProps.item.fields.travelTime === nextProps.item.fields.travelTime &&
126
- prevProps.fieldsShown === nextProps.fieldsShown &&
127
- prevProps.bodyClassName === nextProps.bodyClassName &&
128
- prevProps.className === nextProps.className
129
- );
130
- });
1
+ import React, { forwardRef } from 'react';
2
+ import Grid from '~/components/modules/grid';
3
+ import Icon from '~/components/modules/icon';
4
+ import FieldMapper from '~/components/modules/list/field-mapper';
5
+
6
+ const ListItem = forwardRef(
7
+ (
8
+ {
9
+ isActive,
10
+ bodyClassName,
11
+ className,
12
+ item,
13
+ fieldsShown,
14
+ specialFeatures,
15
+ onItemSelected,
16
+ showMap,
17
+ setMobileTab,
18
+ handleSettingFavorites,
19
+ favorites,
20
+ includeFavorite = true,
21
+ siteConfig,
22
+ trackEvent,
23
+ eventTypes,
24
+ ...props
25
+ },
26
+ ref
27
+ ) => {
28
+ const mapPinColor = !showMap ? null : siteConfig.colors.primary.replace("#", "");
29
+
30
+ const handleClick = () => {
31
+ if (onItemSelected) {
32
+ onItemSelected(item);
33
+ }
34
+ };
35
+ let isFavorite = favorites.includes(item.id);
36
+
37
+ const handleFavouriteClick = (event, item) => {
38
+ if(!includeFavorite)return;
39
+ event.stopPropagation();
40
+ let updatedFavorites;
41
+ if (isFavorite) {
42
+ updatedFavorites = favorites.filter(fav => fav !== item.id);
43
+ } else {
44
+ updatedFavorites = [...favorites, item.id];
45
+ }
46
+ isFavorite = !isFavorite;
47
+ handleSettingFavorites(updatedFavorites);
48
+ };
49
+ return (
50
+ <button
51
+ ref={ref}
52
+ onClick={() => { handleClick(); }}
53
+ className={`
54
+ hc-group hc-relative hc-flex md:hc-flex-col hc-w-full hc-text-left hc-bg-clip-border hc-border hc-border-transparent hc-break-words hc-overflow-hidden hc-cursor-pointer hc-transition-colors hover:hc-bg-uiAccent/5 focus:hover:hc-bg-uiAccent/5
55
+ ${isActive ? "hc-bg-uiAccent/5 hc-border-secondary hc-border" : "hc-text-uiText hc-bg-white"}
56
+ ${className ?? ""}
57
+ `}
58
+ {...props}
59
+ >
60
+ <Grid
61
+ columns="hc-pl-2 hc-md-pl-0 hc-grid-flow-col hc-auto-cols-fr"
62
+ gap="hc-gap-0"
63
+ isAnimated={false}
64
+ className={`
65
+ hc-block md:hc-grid hc-py-2 hc-w-full hc-grow hc-leading-tight hc-text-sm md:hc-text-xs lg:hc-text-sm
66
+ ${bodyClassName ?? ""}
67
+ `}
68
+ >
69
+ <Grid.Item className="hc-hidden md:hc-block md:hc-absolute md:hc-left-1.5 hc-top-1.5">
70
+ <span className="hc-sr-only">Expand row</span>
71
+ <Icon
72
+ icon="fluent-emoji-high-contrast:plus"
73
+ size="hc-size-2.5"
74
+ className={`
75
+ hc-opacity-0 hc-text-uiText/60 hc-transition group-hover:hc-opacity-100 group-active:hc-opacity-100
76
+ ${isActive ? "hc-opacity-100 hc-rotate-45" : ""}
77
+ `}
78
+ />
79
+ </Grid.Item>
80
+ <FieldMapper
81
+ item={item}
82
+ fieldsShown={fieldsShown}
83
+ specialFeatures={specialFeatures}
84
+ isFavorite={isFavorite}
85
+ includeFavorite={includeFavorite}
86
+ handleFavouriteClick={handleFavouriteClick}
87
+ />
88
+ {includeFavorite &&
89
+ <Grid.Item
90
+ key={"favorites"}
91
+ className="hc-hidden md:hc-block hc-col-span-1 hc-px-2"
92
+ >
93
+ <Icon
94
+ icon={isFavorite ? "mdi:heart" : "mdi:heart-outline"}
95
+ size="hc-size-3.5"
96
+ iconClasses={isFavorite ? "hc-text-primary" : ""}
97
+ title={!isFavorite ? 'Add job to favorites' : 'Remove job from favorites'}
98
+ className="hc-pr-2 hc-transition-opacity hc-duration-300 hc-cursor-pointer hc-opacity-100"
99
+ onClick={e => {handleFavouriteClick(e, item);}}
100
+ />
101
+ </Grid.Item>
102
+ }
103
+ </Grid>
104
+ {showMap && (
105
+ <div onClick={() => { setMobileTab("mapTab"); handleClick(); }} className="md:hc-hidden hc-w-2/5 sm:hc-w-1/3 hc-p-1.5 hc-my-1 hc-bg-uiAccent/5 hc-border hc-border-uiAccent/10 hc-rounded-sm">
106
+ <img
107
+ src={`https://maps.googleapis.com/maps/api/staticmap?scale=2&center=${item.mapDetails?.latitude},${item.mapDetails?.longitude}&zoom=10&size=240x180&maptype=roadmap&markers=color:0x${mapPinColor}%7Clabel:•%7C${item.mapDetails?.latitude},${item.mapDetails?.longitude}&key=${process.env.GOOGLE_MAPS_API_KEY}`}
108
+ alt={`Map of location for ${item.fields.position}`}
109
+ className="hc-w-full hc-h-full hc-object-cover"
110
+ />
111
+ </div>
112
+ )}
113
+ </button>
114
+ );
115
+ }
116
+ );
117
+
118
+ ListItem.displayName = "ListItem";
119
+
120
+ export default React.memo(ListItem, (prevProps, nextProps) => {
121
+ return (
122
+ prevProps.isActive === nextProps.isActive &&
123
+ prevProps.favorites === nextProps.favorites &&
124
+ prevProps.item.id === nextProps.item.id &&
125
+ prevProps.item.fields.travelTime === nextProps.item.fields.travelTime &&
126
+ prevProps.fieldsShown === nextProps.fieldsShown &&
127
+ prevProps.bodyClassName === nextProps.bodyClassName &&
128
+ prevProps.className === nextProps.className
129
+ );
130
+ });
@@ -1,17 +1,17 @@
1
- import React from 'react';
2
-
3
- const CardInfoWindow = ({ className, content, id }) => {
4
- return (
5
- <div
6
- id={id}
7
- className={`
8
- hc-relative hc-flex hc-flex-col hc-break-words hc-bg-clip-border
9
- ${className ?? ""}
10
- `}
11
- >
12
- {content}
13
- </div>
14
- );
15
- };
16
-
17
- export default CardInfoWindow;
1
+ import React from 'react';
2
+
3
+ const CardInfoWindow = ({ className, content, id }) => {
4
+ return (
5
+ <div
6
+ id={id}
7
+ className={`
8
+ hc-relative hc-flex hc-flex-col hc-break-words hc-bg-clip-border
9
+ ${className ?? ""}
10
+ `}
11
+ >
12
+ {content}
13
+ </div>
14
+ );
15
+ };
16
+
17
+ export default CardInfoWindow;
@@ -1,64 +1,64 @@
1
- import React from 'react';
2
-
3
- const InfoWindowContent = ({
4
- items,
5
- fullAddress,
6
- applyFilters,
7
- mapInfoWindowConfig
8
- }) => {
9
- if (!items || items.length < 0) {
10
- return null;
11
- }
12
-
13
- let mapDetails = items[0].mapDetails;
14
- let entityDisplayName = mapDetails?.entityDisplayName;
15
- let address = mapDetails?.address;
16
-
17
- let displayHeader = entityDisplayName;
18
- let displayAddress = fullAddress;
19
-
20
- if (mapInfoWindowConfig) {
21
- if (mapInfoWindowConfig.entityHeaderField && mapDetails[mapInfoWindowConfig.entityHeaderField]) {
22
- displayHeader = mapDetails[mapInfoWindowConfig.entityHeaderField];
23
- }
24
-
25
- if (mapInfoWindowConfig.showEntityAddressFields) {
26
- const addressFields = mapInfoWindowConfig.showEntityAddressFields
27
- .map(field => address[field])
28
- .filter(Boolean)
29
- .join(', ');
30
- displayAddress = addressFields;
31
- }
32
- } else {
33
- if (!entityDisplayName.includes(address?.street) && !entityDisplayName.includes(address?.zip)) {
34
- displayAddress = fullAddress;
35
- } else {
36
- displayAddress = '';
37
- }
38
- }
39
-
40
- return (
41
- <div className="hc-flex-auto hc-p-2">
42
- <div>
43
- <div>
44
- <h4 className="hc-text-lg hc-font-bold hc-leading-tight hc-mb-3">
45
- {displayHeader}
46
- </h4>
47
- <p>{displayAddress}</p>
48
- <div className="hc-pt-2">
49
- <button
50
- className="hc-cursor-pointer hover:hc-opacity-70 hc-text-primary"
51
- onClick={applyFilters}
52
- >
53
- {items.length > 1
54
- ? `View All ${items.length} jobs at this location`
55
- : `View job at this location`}
56
- </button>
57
- </div>
58
- </div>
59
- </div>
60
- </div>
61
- );
62
- };
63
-
64
- export default InfoWindowContent;
1
+ import React from 'react';
2
+
3
+ const InfoWindowContent = ({
4
+ items,
5
+ fullAddress,
6
+ applyFilters,
7
+ mapInfoWindowConfig
8
+ }) => {
9
+ if (!items || items.length < 0) {
10
+ return null;
11
+ }
12
+
13
+ let mapDetails = items[0].mapDetails;
14
+ let entityDisplayName = mapDetails?.entityDisplayName;
15
+ let address = mapDetails?.address;
16
+
17
+ let displayHeader = entityDisplayName;
18
+ let displayAddress = fullAddress;
19
+
20
+ if (mapInfoWindowConfig) {
21
+ if (mapInfoWindowConfig.entityHeaderField && mapDetails[mapInfoWindowConfig.entityHeaderField]) {
22
+ displayHeader = mapDetails[mapInfoWindowConfig.entityHeaderField];
23
+ }
24
+
25
+ if (mapInfoWindowConfig.showEntityAddressFields) {
26
+ const addressFields = mapInfoWindowConfig.showEntityAddressFields
27
+ .map(field => address[field])
28
+ .filter(Boolean)
29
+ .join(', ');
30
+ displayAddress = addressFields;
31
+ }
32
+ } else {
33
+ if (!entityDisplayName.includes(address?.street) && !entityDisplayName.includes(address?.zip)) {
34
+ displayAddress = fullAddress;
35
+ } else {
36
+ displayAddress = '';
37
+ }
38
+ }
39
+
40
+ return (
41
+ <div className="hc-flex-auto hc-p-2">
42
+ <div>
43
+ <div>
44
+ <h4 className="hc-text-lg hc-font-bold hc-leading-tight hc-mb-3">
45
+ {displayHeader}
46
+ </h4>
47
+ <p>{displayAddress}</p>
48
+ <div className="hc-pt-2">
49
+ <button
50
+ className="hc-cursor-pointer hover:hc-opacity-70 hc-text-primary"
51
+ onClick={applyFilters}
52
+ >
53
+ {items.length > 1
54
+ ? `View All ${items.length} jobs at this location`
55
+ : `View job at this location`}
56
+ </button>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ );
62
+ };
63
+
64
+ export default InfoWindowContent;
@@ -1,38 +1,38 @@
1
- import React from 'react';
2
- import Tabs from '~/components/modules/maps/tabs';
3
-
4
- const MapList = ({ showMap, loading, list, map, filter, mapPosition }) => {
5
- return (
6
- <>
7
- <div
8
- className={`
9
- ${showMap === false ? "md:hc-grid-rows-[100vh]" : "md:hc-grid-rows-[50vh_50vh]"}
10
- md:hc-grid md:hc-pt-4 hc-overflow-hidden hc-relative bg-gray-100
11
- `}
12
- >
13
- {mapPosition && mapPosition === 'top' && showMap ? (
14
- <>
15
- <div>{map}</div>
16
- <div>{list}</div>
17
- </>
18
- ) : (
19
- <>
20
- <div>{list}</div>
21
- <div>{showMap && map}</div>
22
- </>
23
- )}
24
-
25
- </div>
26
- <div className="md:hc-hidden">
27
- <Tabs
28
- showMap={showMap}
29
- list={list}
30
- map={!loading && showMap && map}
31
- filter={filter}
32
- />
33
- </div>
34
- </>
35
- );
36
- };
37
-
38
- export default MapList;
1
+ import React from 'react';
2
+ import Tabs from '~/components/modules/maps/tabs';
3
+
4
+ const MapList = ({ showMap, loading, list, map, filter, mapPosition }) => {
5
+ return (
6
+ <>
7
+ <div
8
+ className={`
9
+ ${showMap === false ? "md:hc-grid-rows-[100vh]" : "md:hc-grid-rows-[50vh_50vh]"}
10
+ md:hc-grid md:hc-pt-4 hc-overflow-hidden hc-relative bg-gray-100
11
+ `}
12
+ >
13
+ {mapPosition && mapPosition === 'top' && showMap ? (
14
+ <>
15
+ <div>{map}</div>
16
+ <div>{list}</div>
17
+ </>
18
+ ) : (
19
+ <>
20
+ <div>{list}</div>
21
+ <div>{showMap && map}</div>
22
+ </>
23
+ )}
24
+
25
+ </div>
26
+ <div className="md:hc-hidden">
27
+ <Tabs
28
+ showMap={showMap}
29
+ list={list}
30
+ map={!loading && showMap && map}
31
+ filter={filter}
32
+ />
33
+ </div>
34
+ </>
35
+ );
36
+ };
37
+
38
+ export default MapList;
@@ -1,29 +1,29 @@
1
- import React from 'react';
2
- import { MarkerF } from '@react-google-maps/api';
3
-
4
- const MapMarker = ({
5
- position,
6
- title,
7
- icon,
8
- zIndex,
9
- onLoad,
10
- onClick,
11
- clusterer,
12
- children
13
- }) => {
14
- return (
15
- <MarkerF
16
- position={position}
17
- title={title}
18
- options={{ icon: icon }}
19
- zIndex={zIndex}
20
- onLoad={onLoad}
21
- onClick={onClick}
22
- clusterer={clusterer}
23
- >
24
- {children}
25
- </MarkerF>
26
- );
27
- };
28
-
29
- export default MapMarker;
1
+ import React from 'react';
2
+ import { MarkerF } from '@react-google-maps/api';
3
+
4
+ const MapMarker = ({
5
+ position,
6
+ title,
7
+ icon,
8
+ zIndex,
9
+ onLoad,
10
+ onClick,
11
+ clusterer,
12
+ children
13
+ }) => {
14
+ return (
15
+ <MarkerF
16
+ position={position}
17
+ title={title}
18
+ options={{ icon: icon }}
19
+ zIndex={zIndex}
20
+ onLoad={onLoad}
21
+ onClick={onClick}
22
+ clusterer={clusterer}
23
+ >
24
+ {children}
25
+ </MarkerF>
26
+ );
27
+ };
28
+
29
+ export default MapMarker;