@abcagency/hc-ui-components 1.1.1 → 1.2.0

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 (234) hide show
  1. package/.editorconfig +12 -0
  2. package/.eslintrc +144 -0
  3. package/.prettierignore +3 -0
  4. package/dist/_virtual/_rollupPluginBabelHelpers.js +516 -0
  5. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  6. package/dist/apis/hcApi.js +189 -0
  7. package/dist/apis/hcApi.js.map +1 -0
  8. package/dist/clientToken.js +10 -0
  9. package/dist/clientToken.js.map +1 -0
  10. package/dist/components/HireControlMap.js +129 -0
  11. package/dist/components/HireControlMap.js.map +1 -0
  12. package/dist/components/modules/accordions/MapAccordionItem.js +76 -0
  13. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -0
  14. package/dist/components/modules/accordions/default.js +108 -0
  15. package/dist/components/modules/accordions/default.js.map +1 -0
  16. package/dist/components/modules/accordions/filterItem.js +50 -0
  17. package/dist/components/modules/accordions/filterItem.js.map +1 -0
  18. package/dist/components/modules/accordions/filters.js +46 -0
  19. package/dist/components/modules/accordions/filters.js.map +1 -0
  20. package/dist/components/modules/buttons/button-group-apply.js +84 -0
  21. package/dist/components/modules/buttons/button-group-apply.js.map +1 -0
  22. package/dist/components/modules/buttons/commute-pill.js +18 -0
  23. package/dist/components/modules/buttons/commute-pill.js.map +1 -0
  24. package/dist/components/modules/buttons/default.js +145 -0
  25. package/dist/components/modules/buttons/default.js.map +1 -0
  26. package/dist/components/modules/buttons/items-pill.js +23 -0
  27. package/dist/components/modules/buttons/items-pill.js.map +1 -0
  28. package/dist/components/modules/buttons/pill-wrapper.js +20 -0
  29. package/dist/components/modules/buttons/pill-wrapper.js.map +1 -0
  30. package/dist/components/modules/buttons/show-all-button.js +39 -0
  31. package/dist/components/modules/buttons/show-all-button.js.map +1 -0
  32. package/dist/components/modules/cards/default.js +102 -0
  33. package/dist/components/modules/cards/default.js.map +1 -0
  34. package/dist/components/modules/cards/filter.js +38 -0
  35. package/dist/components/modules/cards/filter.js.map +1 -0
  36. package/dist/components/modules/dialogs/apply-dialog.js +46 -0
  37. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -0
  38. package/dist/components/modules/filter/commute.js +184 -0
  39. package/dist/components/modules/filter/commute.js.map +1 -0
  40. package/dist/components/modules/filter/index.js +79 -0
  41. package/dist/components/modules/filter/index.js.map +1 -0
  42. package/dist/components/modules/filter/item.js +71 -0
  43. package/dist/components/modules/filter/item.js.map +1 -0
  44. package/dist/components/modules/filter/location.js +68 -0
  45. package/dist/components/modules/filter/location.js.map +1 -0
  46. package/dist/components/modules/filter/points-of-interest.js +38 -0
  47. package/dist/components/modules/filter/points-of-interest.js.map +1 -0
  48. package/dist/components/modules/filter/radio-item.js +46 -0
  49. package/dist/components/modules/filter/radio-item.js.map +1 -0
  50. package/dist/components/modules/filter/search.js +83 -0
  51. package/dist/components/modules/filter/search.js.map +1 -0
  52. package/dist/components/modules/filter/sort.js +93 -0
  53. package/dist/components/modules/filter/sort.js.map +1 -0
  54. package/dist/components/modules/grid.js +39 -0
  55. package/dist/components/modules/grid.js.map +1 -0
  56. package/dist/components/modules/icon.js +23 -0
  57. package/dist/components/modules/icon.js.map +1 -0
  58. package/dist/components/modules/jobListing/listing-details.js +69 -0
  59. package/dist/components/modules/jobListing/listing-details.js.map +1 -0
  60. package/dist/components/modules/maps/info-window-card.js +14 -0
  61. package/dist/components/modules/maps/info-window-card.js.map +1 -0
  62. package/dist/components/modules/maps/info-window-content.js +39 -0
  63. package/dist/components/modules/maps/info-window-content.js.map +1 -0
  64. package/dist/components/modules/maps/list/field-mapper.js +88 -0
  65. package/dist/components/modules/maps/list/field-mapper.js.map +1 -0
  66. package/dist/components/modules/maps/list/header-item.js +59 -0
  67. package/dist/components/modules/maps/list/header-item.js.map +1 -0
  68. package/dist/components/modules/maps/list/header.js +37 -0
  69. package/dist/components/modules/maps/list/header.js.map +1 -0
  70. package/dist/components/modules/maps/list/index.js +93 -0
  71. package/dist/components/modules/maps/list/index.js.map +1 -0
  72. package/dist/components/modules/maps/list/item-expand-card/index.js +16 -0
  73. package/dist/components/modules/maps/list/item-expand-card/index.js.map +1 -0
  74. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +38 -0
  75. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js.map +1 -0
  76. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js +40 -0
  77. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js.map +1 -0
  78. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js +20 -0
  79. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js.map +1 -0
  80. package/dist/components/modules/maps/list/list-item/index.js +98 -0
  81. package/dist/components/modules/maps/list/list-item/index.js.map +1 -0
  82. package/dist/components/modules/maps/map-list.js +57 -0
  83. package/dist/components/modules/maps/map-list.js.map +1 -0
  84. package/dist/components/modules/maps/map-marker.js +85 -0
  85. package/dist/components/modules/maps/map-marker.js.map +1 -0
  86. package/dist/components/modules/maps/map.js +201 -0
  87. package/dist/components/modules/maps/map.js.map +1 -0
  88. package/dist/components/modules/maps/place-marker.js +37 -0
  89. package/dist/components/modules/maps/place-marker.js.map +1 -0
  90. package/dist/components/modules/maps/tabs.js +84 -0
  91. package/dist/components/modules/maps/tabs.js.map +1 -0
  92. package/dist/constants/placeTypes.js +11 -0
  93. package/dist/constants/placeTypes.js.map +1 -0
  94. package/dist/contexts/mapContext.js +133 -0
  95. package/dist/contexts/mapContext.js.map +1 -0
  96. package/dist/contexts/mapListContext.js +278 -0
  97. package/dist/contexts/mapListContext.js.map +1 -0
  98. package/dist/contexts/placesContext.js +152 -0
  99. package/dist/contexts/placesContext.js.map +1 -0
  100. package/dist/hooks/useList.js +119 -0
  101. package/dist/hooks/useList.js.map +1 -0
  102. package/dist/index.js +2 -4536
  103. package/dist/index.js.map +1 -0
  104. package/dist/services/_virtual/_rollupPluginBabelHelpers.js +372 -0
  105. package/dist/services/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  106. package/dist/services/apis/hcApi.js +189 -0
  107. package/dist/services/apis/hcApi.js.map +1 -0
  108. package/dist/services/clientToken.js +7 -0
  109. package/dist/services/clientToken.js.map +1 -0
  110. package/dist/services/configService.js +33 -0
  111. package/dist/services/configService.js.map +1 -0
  112. package/dist/services/googlePlacesNearbyService.js +61 -0
  113. package/dist/services/googlePlacesNearbyService.js.map +1 -0
  114. package/dist/services/listingAggregatorService.js +56 -0
  115. package/dist/services/listingAggregatorService.js.map +1 -0
  116. package/dist/services/listingEntityService.js +36 -0
  117. package/dist/services/listingEntityService.js.map +1 -0
  118. package/dist/services/listingService.js +60 -112
  119. package/dist/services/listingService.js.map +1 -0
  120. package/dist/services/recruiterService.js +36 -0
  121. package/dist/services/recruiterService.js.map +1 -0
  122. package/dist/services/styles/index.css +3 -0
  123. package/dist/styles/index.css +3 -0
  124. package/dist/util/filterUtil.js +213 -0
  125. package/dist/util/filterUtil.js.map +1 -0
  126. package/dist/util/loading.js +16 -0
  127. package/dist/util/loading.js.map +1 -0
  128. package/dist/util/localStorageUtil.js +32 -0
  129. package/dist/util/localStorageUtil.js.map +1 -0
  130. package/dist/util/mapIconUtil.js +73 -0
  131. package/dist/util/mapIconUtil.js.map +1 -0
  132. package/dist/util/mapUtil.js +76 -0
  133. package/dist/util/mapUtil.js.map +1 -0
  134. package/dist/util/sortUtil.js +33 -0
  135. package/dist/util/sortUtil.js.map +1 -0
  136. package/dist/util/stringUtils.js +9 -0
  137. package/dist/util/stringUtils.js.map +1 -0
  138. package/jsconfig.json +7 -0
  139. package/package.json +51 -38
  140. package/postcss.config.js +13 -15
  141. package/{src/tailwind/preset.default.js → preset.default.js} +15 -15
  142. package/rollup.config.mjs +87 -0
  143. package/src/apis/hcApi.js +93 -87
  144. package/src/clientToken.js +9 -9
  145. package/src/components/HireControlMap.js +120 -0
  146. package/src/components/modules/accordions/MapAccordionItem.js +72 -69
  147. package/src/components/modules/accordions/default.js +171 -173
  148. package/src/components/modules/accordions/filterItem.js +53 -53
  149. package/src/components/modules/accordions/filters.js +47 -44
  150. package/src/components/modules/buttons/button-group-apply.js +113 -85
  151. package/src/components/modules/buttons/commute-pill.js +22 -21
  152. package/src/components/modules/buttons/default.js +196 -196
  153. package/src/components/modules/buttons/items-pill.js +32 -31
  154. package/src/components/modules/buttons/pill-wrapper.js +27 -26
  155. package/src/components/modules/buttons/show-all-button.js +20 -20
  156. package/src/components/modules/cards/default.js +167 -168
  157. package/src/components/modules/cards/filter.js +56 -55
  158. package/src/components/modules/dialogs/apply-dialog.js +48 -47
  159. package/src/components/modules/filter/commute.js +148 -151
  160. package/src/components/modules/filter/index.js +87 -86
  161. package/src/components/modules/filter/item.js +76 -77
  162. package/src/components/modules/filter/location.js +71 -69
  163. package/src/components/modules/filter/points-of-interest.js +44 -43
  164. package/src/components/modules/filter/radio-item.js +53 -51
  165. package/src/components/modules/filter/search.js +92 -91
  166. package/src/components/modules/filter/sort.js +83 -83
  167. package/src/components/modules/grid.js +55 -56
  168. package/src/components/modules/icon.js +33 -33
  169. package/src/components/modules/jobListing/listing-details.js +94 -88
  170. package/src/components/modules/maps/info-window-card.js +17 -17
  171. package/src/components/modules/maps/info-window-content.js +58 -60
  172. package/src/components/modules/maps/list/field-mapper.js +112 -111
  173. package/src/components/modules/maps/list/header-item.js +91 -90
  174. package/src/components/modules/maps/list/header.js +47 -46
  175. package/src/components/modules/maps/list/index.js +107 -104
  176. package/src/components/modules/maps/list/item-expand-card/index.js +22 -21
  177. package/src/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +50 -48
  178. package/src/components/modules/maps/list/item-expand-card/recruiter-details.js +68 -67
  179. package/src/components/modules/maps/list/item-expand-card/recruiter-headshot.js +22 -22
  180. package/src/components/modules/maps/list/list-item/index.js +134 -133
  181. package/src/components/modules/maps/map-list.js +74 -73
  182. package/src/components/modules/maps/map-marker.js +86 -84
  183. package/src/components/modules/maps/map.js +229 -226
  184. package/src/components/modules/maps/place-marker.js +1 -1
  185. package/src/components/modules/maps/tabs.js +81 -79
  186. package/src/constants/placeTypes.js +8 -8
  187. package/src/contexts/mapContext.js +20 -19
  188. package/src/contexts/mapListContext.js +20 -15
  189. package/src/contexts/placesContext.js +4 -0
  190. package/src/hooks/useList.js +12 -10
  191. package/src/index.js +3 -103
  192. package/src/services/configService.js +16 -16
  193. package/src/services/googlePlacesNearbyService.js +33 -33
  194. package/src/services/listingAggregatorService.js +5 -4
  195. package/src/services/listingEntityService.js +2 -1
  196. package/src/services/listingService.js +27 -28
  197. package/src/services/recruiterService.js +17 -17
  198. package/src/styles/{globals.css → index.css} +23 -23
  199. package/src/util/arrayUtil.js +3 -3
  200. package/src/util/fieldMapper.js +22 -19
  201. package/src/util/filterUtil.js +19 -19
  202. package/src/util/loading.js +17 -17
  203. package/src/util/localStorageUtil.js +26 -26
  204. package/src/util/mapIconUtil.js +3 -3
  205. package/src/util/sortUtil.js +32 -32
  206. package/src/util/stringUtils.js +6 -6
  207. package/{src/tailwind/tailwind.config.js → tailwind.config.js} +126 -127
  208. package/dist/globals.css +0 -3
  209. package/dist/output.css +0 -784
  210. package/dist/services/globals.css +0 -3
  211. package/rollup.config.js +0 -68
  212. package/src/components/layout/footer.js +0 -34
  213. package/src/components/layout/header.js +0 -23
  214. package/src/components/layout/layout.js +0 -36
  215. package/src/components/modules/animations/slidein.js +0 -41
  216. package/src/components/modules/navigation/nav-link.js +0 -65
  217. package/src/components/modules/navigation/navbar.js +0 -106
  218. package/src/components/modules/navigation/skip-link.js +0 -21
  219. package/src/components/modules/navigation/social.js +0 -29
  220. package/src/components/modules/sections/default.js +0 -59
  221. package/src/components/modules/sections/sectionContext.js +0 -4
  222. package/src/hooks/useClickOutside.js +0 -16
  223. package/src/hooks/useEventListener.js +0 -25
  224. package/src/hooks/useEventTracker.js +0 -19
  225. package/src/hooks/useRefScrollProgress.js +0 -24
  226. package/src/hooks/useScript.js +0 -63
  227. package/src/hooks/useScrollDirection.js +0 -39
  228. package/src/hooks/useSectionTracker.js +0 -95
  229. package/src/hooks/useUserAgent.js +0 -43
  230. package/src/hooks/useWindowSize.js +0 -28
  231. package/src/index.css +0 -25
  232. package/src/styles/fonts.js +0 -0
  233. package/src/util/page-head.js +0 -62
  234. package/src/util/provider.js +0 -12
@@ -1,133 +1,134 @@
1
- import React, { forwardRef } from 'react';
2
- import Grid, { GridItem } from '~/components/modules/grid';
3
- import Icon from '~/components/modules/icon';
4
- import FieldMapper from '~/components/modules/maps/list/field-mapper';
5
- import { useMapList } from '~/contexts/mapListContext';
6
-
7
-
8
- const ListItem = forwardRef(
9
- (
10
- {
11
- isActive,
12
- bodyClassName,
13
- className,
14
- item,
15
- fieldsShown,
16
- specialFeatures,
17
- onItemSelected,
18
- showMap,
19
- setMobileTab,
20
- favorites,
21
- setFavorites,
22
- ...props
23
- },
24
- ref,
25
- ) => {
26
- const { siteConfig } = useMapList();
27
- const mapPinColor = siteConfig.colors.primary.replace("#", "");
28
-
29
- const handleClick = () => {
30
- if (onItemSelected) {
31
- onItemSelected(item);
32
- }
33
- };
34
-
35
- let isFavorite = favorites.includes(item.id);
36
-
37
- const handleFavouriteClick = event => {
38
- event.stopPropagation();
39
- let updatedFavorites;
40
- if (isFavorite) {
41
- updatedFavorites = favorites.filter(fav => fav !== item.id);
42
- } else {
43
- updatedFavorites = [...favorites, item.id];
44
- }
45
- isFavorite = !isFavorite;
46
- setFavorites(updatedFavorites);
47
-
48
- };
49
-
50
- return (
51
- <button
52
- ref={ref}
53
- onClick={handleClick}
54
- className={`
55
- hc-group hc-relative hc-flex md:hc-flex-col hc-w-full md:hc-pl-4 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:hc-hover:bg-uiAccent/5
56
- ${isActive ? "bg-uiAccent/5 border-secondary border" : "text-uiText bg-white"}
57
- ${className ?? ""}
58
- `}
59
- {...props}
60
- >
61
- <Grid
62
- columns="hc-grid-flow-col hc-auto-cols-fr"
63
- gap="hc-gap-2"
64
- isAnimated={false}
65
- className={`
66
- hc-block md:hc-grid hc-flex-auto hc-p-2 hc-ps-4 hc-w-full hc-grow hc-leading-tight hc-text-sm md:hc-text-xs lg:hc-text-sm
67
- ${bodyClassName ?? ""}
68
- `}
69
- >
70
- <Grid.Item className="hc-hidden md:hc-block md:hc-absolute md:hc-left-1.5 hc-top-1.5">
71
- <span className="hc-sr-only">Expand row</span>
72
- <Icon
73
- icon="fluent-emoji-high-contrast:plus"
74
- size="hc-size-2.5"
75
- className={`
76
- hc-opacity-0 hc-text-uiText/60 hc-transition group-hover:hc-opacity-100 group-active:hc-opacity-100
77
- ${isActive ? "hc-opacity-100 hc-rotate-45" : ""}
78
- `}
79
- />
80
-
81
- </Grid.Item>
82
-
83
- <FieldMapper
84
- item={item}
85
- fieldsShown={fieldsShown}
86
- specialFeatures={specialFeatures}
87
- isFavorite={isFavorite}
88
- handleFavouriteClick={handleFavouriteClick}
89
- />
90
- <Grid.Item
91
- key={"favorites"}
92
- className="hc-hidden md:hc-block"
93
- >
94
-
95
- <Icon
96
- icon={isFavorite ? "mdi:heart" : "mdi:heart-outline"}
97
- size="hc-size-3.5"
98
- iconClasses={isFavorite ? "hc-text-primary" : ""}
99
- title={!isFavorite ? 'Add job to favorites' : 'Remove job from favorites'}
100
- className={`
101
- hc-pr-2 hc-transition-opacity hc-duration-300 hc-cursor-pointer hc-opacity-100"
102
- `}
103
- onClick={e => handleFavouriteClick(e)}
104
- />
105
- </Grid.Item>
106
- </Grid>
107
-
108
- {showMap && (
109
- <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">
110
- <img
111
- 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=ToDo`}
112
- alt={`Map of location for ${item.fields.position}`}
113
- className="hc-w-full hc-h-full hc-object-cover"
114
- />
115
- </div>
116
- )}
117
- </button>
118
- );
119
- },
120
- );
121
-
122
- ListItem.displayName = "ListItem";
123
-
124
- export default React.memo(ListItem, (prevProps, nextProps) => {
125
- return (
126
- (prevProps.isActive === nextProps.isActive ||
127
- prevProps.isActive !== nextProps.isActive) &&
128
- prevProps.bodyClassName === nextProps.bodyClassName &&
129
- prevProps.className === nextProps.className &&
130
- prevProps.fieldsShown === nextProps.fieldsShown &&
131
- prevProps.item.id === nextProps.item.id
132
- );
133
- });
1
+ import React, { forwardRef } from 'react';
2
+
3
+ import Grid from '~/components/modules/grid';
4
+ import Icon from '~/components/modules/icon';
5
+ import FieldMapper from '~/components/modules/maps/list/field-mapper';
6
+
7
+ import { useMapList } from '~/contexts/mapListContext';
8
+
9
+ const ListItem = forwardRef(
10
+ (
11
+ {
12
+ isActive,
13
+ bodyClassName,
14
+ className,
15
+ item,
16
+ fieldsShown,
17
+ specialFeatures,
18
+ onItemSelected,
19
+ showMap,
20
+ setMobileTab,
21
+ favorites,
22
+ setFavorites,
23
+ ...props
24
+ },
25
+ ref,
26
+ ) => {
27
+ const { siteConfig } = useMapList();
28
+ const mapPinColor = siteConfig.colors.primary.replace("#", "");
29
+
30
+ const handleClick = () => {
31
+ if (onItemSelected) {
32
+ onItemSelected(item);
33
+ }
34
+ };
35
+
36
+ let isFavorite = favorites.includes(item.id);
37
+
38
+ const handleFavouriteClick = event => {
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
+ setFavorites(updatedFavorites);
48
+
49
+ };
50
+
51
+ return (
52
+ <button
53
+ ref={ref}
54
+ onClick={handleClick}
55
+ className={`
56
+ hc-group hc-relative hc-flex md:hc-flex-col hc-w-full md:hc-pl-4 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
57
+ ${isActive ? "hc-bg-uiAccent/5 hc-border-secondary hc-border" : "hc-text-uiText hc-bg-white"}
58
+ ${className ?? ""}
59
+ `}
60
+ {...props}
61
+ >
62
+ <Grid
63
+ columns="hc-grid-flow-col hc-auto-cols-fr"
64
+ gap="hc-gap-2"
65
+ isAnimated={false}
66
+ className={`
67
+ hc-block md:hc-grid hc-p-2 hc-ps-4 hc-w-full hc-grow hc-leading-tight hc-text-sm md:hc-text-xs lg:hc-text-sm
68
+ ${bodyClassName ?? ""}
69
+ `}
70
+ >
71
+ <Grid.Item className="hc-hidden md:hc-block md:hc-absolute md:hc-left-1.5 hc-top-1.5">
72
+ <span className="hc-sr-only">Expand row</span>
73
+ <Icon
74
+ icon="fluent-emoji-high-contrast:plus"
75
+ size="hc-size-2.5"
76
+ className={`
77
+ hc-opacity-0 hc-text-uiText/60 hc-transition group-hover:hc-opacity-100 group-active:hc-opacity-100
78
+ ${isActive ? "hc-opacity-100 hc-rotate-45" : ""}
79
+ `}
80
+ />
81
+
82
+ </Grid.Item>
83
+
84
+ <FieldMapper
85
+ item={item}
86
+ fieldsShown={fieldsShown}
87
+ specialFeatures={specialFeatures}
88
+ isFavorite={isFavorite}
89
+ handleFavouriteClick={handleFavouriteClick}
90
+ />
91
+ <Grid.Item
92
+ key={"favorites"}
93
+ className="hc-hidden md:hc-block hc-col-span-1"
94
+ >
95
+
96
+ <Icon
97
+ icon={isFavorite ? "mdi:heart" : "mdi:heart-outline"}
98
+ size="hc-size-3.5"
99
+ iconClasses={isFavorite ? "hc-text-primary" : ""}
100
+ title={!isFavorite ? 'Add job to favorites' : 'Remove job from favorites'}
101
+ className={`
102
+ hc-pr-2 hc-transition-opacity hc-duration-300 hc-cursor-pointer hc-opacity-100"
103
+ `}
104
+ onClick={e => handleFavouriteClick(e)}
105
+ />
106
+ </Grid.Item>
107
+ </Grid>
108
+
109
+ {showMap && (
110
+ <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">
111
+ <img
112
+ 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}`}
113
+ alt={`Map of location for ${item.fields.position}`}
114
+ className="hc-w-full hc-h-full hc-object-cover"
115
+ />
116
+ </div>
117
+ )}
118
+ </button>
119
+ );
120
+ },
121
+ );
122
+
123
+ ListItem.displayName = "ListItem";
124
+
125
+ export default React.memo(ListItem, (prevProps, nextProps) => {
126
+ return (
127
+ (prevProps.isActive === nextProps.isActive ||
128
+ prevProps.isActive !== nextProps.isActive) &&
129
+ prevProps.bodyClassName === nextProps.bodyClassName &&
130
+ prevProps.className === nextProps.className &&
131
+ prevProps.fieldsShown === nextProps.fieldsShown &&
132
+ prevProps.item.id === nextProps.item.id
133
+ );
134
+ });
@@ -1,73 +1,74 @@
1
- import List from "~/components/modules/maps/list";
2
- import Map from "~/components/modules/maps/map";
3
- import Tabs from "~/components/modules/maps/tabs";
4
- import Filter from "~/components/modules/filter";
5
- import React from 'react'
6
-
7
- const MapList = ({
8
- loading = false,
9
- mapDetails,
10
- markerConfigs,
11
- itemExpandedContent,
12
- fieldsShown,
13
- specialFeatures,
14
- fieldNames,
15
- showMap,
16
- placeMappings
17
- }) => {
18
-
19
- const listProps = {
20
- fieldsShown: fieldsShown,
21
- fieldNames: fieldNames,
22
- itemExpandedContent: itemExpandedContent,
23
- loading: loading,
24
- showMap: showMap,
25
- specialFeatures: specialFeatures
26
- };
27
-
28
- const mapProps = {
29
- mapDetails: mapDetails,
30
- markerConfigs: markerConfigs,
31
- placeMappings: placeMappings,
32
- clusterGridSize: 60,
33
- showMap: showMap
34
- };
35
-
36
- // useEffect(() => {
37
- // if (selectedItem !== null) {
38
- // trackEvent("Map", "View Location", selectedItem[titlePropName]);
39
- // }
40
- // // eslint-disable-next-line react-hooks/exhaustive-deps
41
- // }, []);
42
- const map = <Map {...mapProps} />;
43
- return (
44
- <>
45
- <div
46
- className={`
47
- ${showMap == false ? "md:hc-grid-rows-[100vh]" : "md:hc-grid-rows-[50vh_50vh]"}
48
- md:hc-grid md:hc-pt-4 hc-overflow-hidden hc-relative
49
- `}
50
- >
51
- <div>
52
- <List {...listProps} />
53
- </div>
54
- <div>{showMap && map}</div>
55
- </div>
56
- <div className="md:hc-hidden">
57
- <Tabs
58
- showMap={showMap}
59
- list={<List {...listProps} />}
60
- map={!loading && showMap && map}
61
- filter={
62
- <Filter
63
- showMap={showMap}
64
- className="md:hc-hidden"
65
- />
66
- }
67
- />
68
- </div>
69
- </>
70
- );
71
- };
72
-
73
- export default MapList;
1
+ import React from 'react';
2
+
3
+ import List from '~/components/modules/maps/list';
4
+ import Map from '~/components/modules/maps/map';
5
+ import Tabs from '~/components/modules/maps/tabs';
6
+ import Filter from '~/components/modules/filter';
7
+
8
+ const MapList = ({
9
+ loading = false,
10
+ mapDetails,
11
+ markerConfigs,
12
+ itemExpandedContent,
13
+ fieldsShown,
14
+ specialFeatures,
15
+ fieldNames,
16
+ showMap,
17
+ placeMappings
18
+ }) => {
19
+
20
+ const listProps = {
21
+ fieldsShown: fieldsShown,
22
+ fieldNames: fieldNames,
23
+ itemExpandedContent: itemExpandedContent,
24
+ loading: loading,
25
+ showMap: showMap,
26
+ specialFeatures: specialFeatures
27
+ };
28
+
29
+ const mapProps = {
30
+ mapDetails: mapDetails,
31
+ markerConfigs: markerConfigs,
32
+ placeMappings: placeMappings,
33
+ clusterGridSize: 60,
34
+ showMap: showMap
35
+ };
36
+
37
+ // useEffect(() => {
38
+ // if (selectedItem !== null) {
39
+ // trackEvent("Map", "View Location", selectedItem[titlePropName]);
40
+ // }
41
+ // // eslint-disable-next-line react-hooks/exhaustive-deps
42
+ // }, []);
43
+ const map = <Map {...mapProps} />;
44
+ return (
45
+ <>
46
+ <div
47
+ className={`
48
+ ${showMap == false ? "md:hc-grid-rows-[100vh]" : "md:hc-grid-rows-[50vh_50vh]"}
49
+ md:hc-grid md:hc-pt-4 hc-overflow-hidden hc-relative bg-gray-100
50
+ `}
51
+ >
52
+ <div>
53
+ <List {...listProps} />
54
+ </div>
55
+ <div>{showMap && map}</div>
56
+ </div>
57
+ <div className="md:hc-hidden">
58
+ <Tabs
59
+ showMap={showMap}
60
+ list={<List {...listProps} />}
61
+ map={!loading && showMap && map}
62
+ filter={
63
+ <Filter
64
+ showMap={showMap}
65
+ className="md:hc-hidden"
66
+ />
67
+ }
68
+ />
69
+ </div>
70
+ </>
71
+ );
72
+ };
73
+
74
+ export default MapList;
@@ -1,84 +1,86 @@
1
- import React, { useEffect, useRef } from "react";
2
- import { MarkerF, InfoWindow } from "@react-google-maps/api";
3
- import InfoWindowCard from "~/components/modules/maps/info-window-card";
4
- import { useMap } from "~/contexts/mapContext";
5
- import { useMapList } from "~/contexts/mapListContext";
6
- import InfoWindowContent from "./info-window-content";
7
-
8
- const MapMarker = ({
9
- item,
10
- markerRefs,
11
- infoWindowClasses,
12
- markerClickHandler,
13
- clusterer,
14
- markerIconSelected,
15
- markerIcon,
16
- selectedLocation,
17
- setMapInteracted
18
- }) => {
19
- const { setLocation, commuteLocation } = useMap();
20
- const isSelected = item.id === selectedLocation?.id;
21
- const markerRef = useRef(null);
22
-
23
- const {
24
- handleFilterListingsByLocation
25
- } = useMapList();
26
-
27
- useEffect(() => {
28
- markerRefs.current[item.id] = markerRef.current;
29
- }, []);
30
-
31
- const onMarkerClick = () => {
32
- setMapInteracted(true);
33
- markerClickHandler(item);
34
- };
35
-
36
- const getInfoWindow = () => {
37
- if (!isSelected || !item || !item.id || !selectedLocation) {
38
- return;
39
- }
40
- //Direct dom removal of empty info windows
41
- document.querySelectorAll("div.gm-style-iw.gm-style-iw-c").forEach(x => { if (!x.innerHTML.includes(item.id)) x.parentElement.remove(); });
42
- return (
43
- <InfoWindow
44
- position={{ lat: item.latitude, lng: item.longitude }}
45
- anchor={markerRefs.current[item.id]}
46
- onCloseClick={() => {
47
- setMapInteracted(true);
48
- setLocation(null);
49
- }}
50
- options={{ maxWidth: 400 }}
51
- >
52
- <InfoWindowCard
53
- className={infoWindowClasses}
54
- id={item.id}
55
- content={<InfoWindowContent
56
- item={item}
57
- commuteLocation={commuteLocation}
58
- filterListingsByLocation={() =>
59
- handleFilterListingsByLocation(selectedLocation)
60
- }
61
- />}
62
- />
63
- </InfoWindow>
64
- );
65
- };
66
- return (
67
- <MarkerF
68
- key={item.id}
69
- position={{ lat: item.latitude, lng: item.longitude }}
70
- title={item.name}
71
- options={{
72
- icon: isSelected ? markerIconSelected : markerIcon
73
- }}
74
- zIndex={isSelected ? 9999 : 1}
75
- onLoad={marker => (markerRef.current = marker)}
76
- onClick={onMarkerClick}
77
- clusterer={clusterer}
78
- >
79
- {isSelected && getInfoWindow()}
80
- </MarkerF>
81
- );
82
- };
83
-
84
- export default MapMarker;
1
+ import React, { useEffect, useRef } from 'react';
2
+ import { MarkerF, InfoWindow } from '@react-google-maps/api';
3
+
4
+ import InfoWindowCard from '~/components/modules/maps/info-window-card';
5
+ import InfoWindowContent from "~/components/modules/maps/info-window-content";
6
+
7
+ import { useMap } from "~/contexts/mapContext";
8
+ import { useMapList } from "~/contexts/mapListContext";
9
+
10
+ const MapMarker = ({
11
+ item,
12
+ markerRefs,
13
+ infoWindowClasses,
14
+ markerClickHandler,
15
+ clusterer,
16
+ markerIconSelected,
17
+ markerIcon,
18
+ selectedLocation,
19
+ setMapInteracted
20
+ }) => {
21
+ const { setLocation, commuteLocation } = useMap();
22
+ const isSelected = item.id === selectedLocation?.id;
23
+ const markerRef = useRef(null);
24
+
25
+ const {
26
+ handleFilterListingsByLocation
27
+ } = useMapList();
28
+
29
+ useEffect(() => {
30
+ markerRefs.current[item.id] = markerRef.current;
31
+ }, []);
32
+
33
+ const onMarkerClick = () => {
34
+ setMapInteracted(true);
35
+ markerClickHandler(item);
36
+ };
37
+
38
+ const getInfoWindow = () => {
39
+ if (!isSelected || !item || !item.id || !selectedLocation) {
40
+ return;
41
+ }
42
+ //Direct dom removal of empty info windows
43
+ document.querySelectorAll("div.gm-style-iw.gm-style-iw-c").forEach(x => { if (!x.innerHTML.includes(item.id)) x.parentElement.remove(); });
44
+ return (
45
+ <InfoWindow
46
+ position={{ lat: item.latitude, lng: item.longitude }}
47
+ anchor={markerRefs.current[item.id]}
48
+ onCloseClick={() => {
49
+ setMapInteracted(true);
50
+ setLocation(null);
51
+ }}
52
+ options={{ maxWidth: 400 }}
53
+ >
54
+ <InfoWindowCard
55
+ className={infoWindowClasses}
56
+ id={item.id}
57
+ content={<InfoWindowContent
58
+ item={item}
59
+ commuteLocation={commuteLocation}
60
+ filterListingsByLocation={() =>
61
+ handleFilterListingsByLocation(selectedLocation)
62
+ }
63
+ />}
64
+ />
65
+ </InfoWindow>
66
+ );
67
+ };
68
+ return (
69
+ <MarkerF
70
+ key={item.id}
71
+ position={{ lat: item.latitude, lng: item.longitude }}
72
+ title={item.name}
73
+ options={{
74
+ icon: isSelected ? markerIconSelected : markerIcon
75
+ }}
76
+ zIndex={isSelected ? 9999 : 1}
77
+ onLoad={marker => (markerRef.current = marker)}
78
+ onClick={onMarkerClick}
79
+ clusterer={clusterer}
80
+ >
81
+ {isSelected && getInfoWindow()}
82
+ </MarkerF>
83
+ );
84
+ };
85
+
86
+ export default MapMarker;