@abcagency/hc-ui-components 1.4.23 → 1.5.1

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 (253) hide show
  1. package/dist/components/HireControlMap.js +21 -34
  2. package/dist/components/HireControlMap.js.map +1 -1
  3. package/dist/components/containers/accordions/filter-container.js +5 -13
  4. package/dist/components/containers/accordions/filter-container.js.map +1 -1
  5. package/dist/components/containers/accordions/filter-item-container.js +9 -9
  6. package/dist/components/containers/accordions/filter-item-container.js.map +1 -1
  7. package/dist/components/containers/accordions/map-accordion-item-container.js +5 -10
  8. package/dist/components/containers/accordions/map-accordion-item-container.js.map +1 -1
  9. package/dist/components/containers/filter/commute-container.js +3 -3
  10. package/dist/components/containers/filter/commute-container.js.map +1 -1
  11. package/dist/components/containers/filter/filter-container.js +5 -6
  12. package/dist/components/containers/filter/filter-container.js.map +1 -1
  13. package/dist/components/containers/filter/filter-item-container.js +12 -12
  14. package/dist/components/containers/filter/filter-item-container.js.map +1 -1
  15. package/dist/components/containers/filter/location-container.js +5 -6
  16. package/dist/components/containers/filter/location-container.js.map +1 -1
  17. package/dist/components/containers/filter/points-of-interest-container.js +5 -5
  18. package/dist/components/containers/filter/points-of-interest-container.js.map +1 -1
  19. package/dist/components/containers/filter/points-of-interest-radio-item-container.js +2 -2
  20. package/dist/components/containers/filter/points-of-interest-radio-item-container.js.map +1 -1
  21. package/dist/components/containers/filter/search-container.js +2 -2
  22. package/dist/components/containers/filter/search-container.js.map +1 -1
  23. package/dist/components/containers/jobListing/listing-details-container.js +2 -2
  24. package/dist/components/containers/jobListing/listing-details-container.js.map +1 -1
  25. package/dist/components/containers/list/item-list-container.js +8 -8
  26. package/dist/components/containers/list/item-list-container.js.map +1 -1
  27. package/dist/components/containers/list/list-item/list-item-container.js +2 -2
  28. package/dist/components/containers/list/list-item/list-item-container.js.map +1 -1
  29. package/dist/components/containers/maps/info-window-content-container.js +2 -2
  30. package/dist/components/containers/maps/info-window-content-container.js.map +1 -1
  31. package/dist/components/containers/maps/map-container.js +9 -8
  32. package/dist/components/containers/maps/map-container.js.map +1 -1
  33. package/dist/components/containers/maps/map-list-container.js +5 -5
  34. package/dist/components/containers/maps/map-list-container.js.map +1 -1
  35. package/dist/components/containers/maps/map-marker-container.js +6 -6
  36. package/dist/components/containers/maps/map-marker-container.js.map +1 -1
  37. package/dist/components/modules/accordions/MapAccordionItem.js +5 -5
  38. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -1
  39. package/dist/components/modules/accordions/default.js +15 -15
  40. package/dist/components/modules/accordions/default.js.map +1 -1
  41. package/dist/components/modules/accordions/filterItem.js +4 -4
  42. package/dist/components/modules/accordions/filterItem.js.map +1 -1
  43. package/dist/components/modules/accordions/filters.js +6 -6
  44. package/dist/components/modules/accordions/filters.js.map +1 -1
  45. package/dist/components/modules/buttons/button-group-apply.js +19 -19
  46. package/dist/components/modules/buttons/button-group-apply.js.map +1 -1
  47. package/dist/components/modules/buttons/default.js +9 -9
  48. package/dist/components/modules/buttons/default.js.map +1 -1
  49. package/dist/components/modules/buttons/items-pill.js +2 -2
  50. package/dist/components/modules/buttons/items-pill.js.map +1 -1
  51. package/dist/components/modules/buttons/pill-wrapper.js +2 -2
  52. package/dist/components/modules/buttons/pill-wrapper.js.map +1 -1
  53. package/dist/components/modules/buttons/show-all-button.js +3 -3
  54. package/dist/components/modules/buttons/show-all-button.js.map +1 -1
  55. package/dist/components/modules/cards/default.js +11 -11
  56. package/dist/components/modules/cards/default.js.map +1 -1
  57. package/dist/components/modules/cards/filter.js +5 -5
  58. package/dist/components/modules/cards/filter.js.map +1 -1
  59. package/dist/components/modules/dialogs/apply-dialog.js +19 -19
  60. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -1
  61. package/dist/components/modules/filter/commute.js +19 -18
  62. package/dist/components/modules/filter/commute.js.map +1 -1
  63. package/dist/components/modules/filter/index.js +10 -10
  64. package/dist/components/modules/filter/index.js.map +1 -1
  65. package/dist/components/modules/filter/item.js +6 -6
  66. package/dist/components/modules/filter/item.js.map +1 -1
  67. package/dist/components/modules/filter/location.js +6 -6
  68. package/dist/components/modules/filter/location.js.map +1 -1
  69. package/dist/components/modules/filter/radio-item.js +6 -6
  70. package/dist/components/modules/filter/radio-item.js.map +1 -1
  71. package/dist/components/modules/filter/search.js +10 -10
  72. package/dist/components/modules/filter/search.js.map +1 -1
  73. package/dist/components/modules/filter/sort.js +28 -28
  74. package/dist/components/modules/filter/sort.js.map +1 -1
  75. package/dist/components/modules/grid.js +4 -4
  76. package/dist/components/modules/grid.js.map +1 -1
  77. package/dist/components/modules/icon.js +4 -4
  78. package/dist/components/modules/icon.js.map +1 -1
  79. package/dist/components/modules/jobListing/listing-details.js +4 -4
  80. package/dist/components/modules/jobListing/listing-details.js.map +1 -1
  81. package/dist/components/modules/list/field-mapper-desktop.js +8 -8
  82. package/dist/components/modules/list/field-mapper-desktop.js.map +1 -1
  83. package/dist/components/modules/list/field-mapper-mobile.js +18 -18
  84. package/dist/components/modules/list/field-mapper-mobile.js.map +1 -1
  85. package/dist/components/modules/list/header-item.js +7 -7
  86. package/dist/components/modules/list/header-item.js.map +1 -1
  87. package/dist/components/modules/list/header.js +5 -5
  88. package/dist/components/modules/list/header.js.map +1 -1
  89. package/dist/components/modules/list/item-expand-card/index.js +3 -3
  90. package/dist/components/modules/list/item-expand-card/index.js.map +1 -1
  91. package/dist/components/modules/list/item-list.js +15 -15
  92. package/dist/components/modules/list/item-list.js.map +1 -1
  93. package/dist/components/modules/list/list-item/list-item.js +13 -13
  94. package/dist/components/modules/list/list-item/list-item.js.map +1 -1
  95. package/dist/components/modules/maps/info-window-card.js +2 -2
  96. package/dist/components/modules/maps/info-window-card.js.map +1 -1
  97. package/dist/components/modules/maps/info-window-content.js +5 -5
  98. package/dist/components/modules/maps/info-window-content.js.map +1 -1
  99. package/dist/components/modules/maps/map-list.js +5 -5
  100. package/dist/components/modules/maps/map-list.js.map +1 -1
  101. package/dist/components/modules/maps/map-marker.js +3 -3
  102. package/dist/components/modules/maps/map-marker.js.map +1 -1
  103. package/dist/components/modules/maps/map.js +5 -5
  104. package/dist/components/modules/maps/map.js.map +1 -1
  105. package/dist/components/modules/maps/place-marker.js +5 -5
  106. package/dist/components/modules/maps/place-marker.js.map +1 -1
  107. package/dist/components/modules/maps/tabs.js +21 -21
  108. package/dist/components/modules/maps/tabs.js.map +1 -1
  109. package/dist/contexts/mapContext.js +18 -18
  110. package/dist/contexts/mapContext.js.map +1 -1
  111. package/dist/contexts/mapListContext.js +34 -27
  112. package/dist/contexts/mapListContext.js.map +1 -1
  113. package/dist/contexts/placesContext.js +2 -2
  114. package/dist/contexts/placesContext.js.map +1 -1
  115. package/dist/contexts/themeContext.js +2 -2
  116. package/dist/contexts/themeContext.js.map +1 -1
  117. package/dist/contexts/trackEventContext.js +2 -2
  118. package/dist/contexts/trackEventContext.js.map +1 -1
  119. package/dist/packages/hc-ui-components/node_modules/@floating-ui/core/dist/floating-ui.core.js +34 -21
  120. package/dist/packages/hc-ui-components/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -1
  121. package/dist/packages/hc-ui-components/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +103 -30
  122. package/dist/packages/hc-ui-components/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -1
  123. package/dist/packages/hc-ui-components/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js +12 -4
  124. package/dist/packages/hc-ui-components/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js.map +1 -1
  125. package/dist/packages/hc-ui-components/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +37 -15
  126. package/dist/packages/hc-ui-components/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -1
  127. package/dist/packages/hc-ui-components/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +9 -8
  128. package/dist/packages/hc-ui-components/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -1
  129. package/dist/packages/hc-ui-components/node_modules/@radix-ui/primitive/dist/index.js +1 -1
  130. package/dist/packages/hc-ui-components/node_modules/@radix-ui/primitive/dist/index.js.map +1 -1
  131. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-accordion/dist/index.js +8 -6
  132. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-accordion/dist/index.js.map +1 -1
  133. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-arrow/dist/index.js +1 -1
  134. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-arrow/dist/index.js.map +1 -1
  135. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-collapsible/dist/index.js +5 -4
  136. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-collapsible/dist/index.js.map +1 -1
  137. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-collection/dist/index.js +5 -3
  138. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-collection/dist/index.js.map +1 -1
  139. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-compose-refs/dist/index.js +24 -3
  140. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +1 -1
  141. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-context/dist/index.js +9 -9
  142. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-context/dist/index.js.map +1 -1
  143. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-dialog/dist/index.js +6 -4
  144. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-dialog/dist/index.js.map +1 -1
  145. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-direction/dist/index.js +1 -1
  146. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-direction/dist/index.js.map +1 -1
  147. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +1 -1
  148. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-focus-guards/dist/index.js +4 -1
  149. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-focus-guards/dist/index.js.map +1 -1
  150. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +1 -1
  151. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-id/dist/index.js +1 -1
  152. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-id/dist/index.js.map +1 -1
  153. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-popper/dist/index.js +6 -1
  154. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-popper/dist/index.js.map +1 -1
  155. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-portal/dist/index.js.map +1 -1
  156. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-presence/dist/index.js +17 -6
  157. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-presence/dist/index.js.map +1 -1
  158. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-primitive/dist/index.js +4 -2
  159. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -1
  160. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-roving-focus/dist/index.js +8 -5
  161. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-roving-focus/dist/index.js.map +1 -1
  162. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-select/dist/index.js +77 -31
  163. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-select/dist/index.js.map +1 -1
  164. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-slot/dist/index.js +46 -38
  165. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -1
  166. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-tabs/dist/index.js +2 -1
  167. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-tabs/dist/index.js.map +1 -1
  168. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-callback-ref/dist/index.js +1 -1
  169. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-callback-ref/dist/index.js.map +1 -1
  170. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +39 -15
  171. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +1 -1
  172. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js +1 -1
  173. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js.map +1 -1
  174. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +2 -2
  175. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-layout-effect/dist/index.js.map +1 -1
  176. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-previous/dist/index.js +1 -1
  177. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-previous/dist/index.js.map +1 -1
  178. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-size/dist/index.js +1 -1
  179. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-size/dist/index.js.map +1 -1
  180. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-visually-hidden/dist/index.js +16 -16
  181. package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-visually-hidden/dist/index.js.map +1 -1
  182. package/dist/packages/hc-ui-components/node_modules/@react-google-maps/api/dist/esm.js +8086 -7852
  183. package/dist/packages/hc-ui-components/node_modules/@react-google-maps/api/dist/esm.js.map +1 -1
  184. package/dist/packages/hc-ui-components/node_modules/@remix-run/router/dist/router.js +2 -2
  185. package/dist/packages/hc-ui-components/node_modules/@remix-run/router/dist/router.js.map +1 -1
  186. package/dist/packages/hc-ui-components/node_modules/@tanstack/react-virtual/dist/esm/index.js +1 -1
  187. package/dist/packages/hc-ui-components/node_modules/@tanstack/react-virtual/dist/esm/index.js.map +1 -1
  188. package/dist/packages/hc-ui-components/node_modules/@tanstack/virtual-core/dist/esm/index.js +213 -152
  189. package/dist/packages/hc-ui-components/node_modules/@tanstack/virtual-core/dist/esm/index.js.map +1 -1
  190. package/dist/packages/hc-ui-components/node_modules/@tanstack/virtual-core/dist/esm/utils.js +6 -2
  191. package/dist/packages/hc-ui-components/node_modules/@tanstack/virtual-core/dist/esm/utils.js.map +1 -1
  192. package/dist/packages/hc-ui-components/node_modules/aria-hidden/dist/es2015/index.js +3 -2
  193. package/dist/packages/hc-ui-components/node_modules/aria-hidden/dist/es2015/index.js.map +1 -1
  194. package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +2 -2
  195. package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/SideEffect.js.map +1 -1
  196. package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/UI.js +2 -2
  197. package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/UI.js.map +1 -1
  198. package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +12 -8
  199. package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/handleScroll.js.map +1 -1
  200. package/dist/packages/hc-ui-components/node_modules/react-router/dist/index.js +6 -6
  201. package/dist/packages/hc-ui-components/node_modules/react-router/dist/index.js.map +1 -1
  202. package/dist/packages/hc-ui-components/node_modules/react-router-dom/dist/index.js +7 -7
  203. package/dist/packages/hc-ui-components/node_modules/react-router-dom/dist/index.js.map +1 -1
  204. package/dist/services/listingAggregatorService.js +15 -19
  205. package/dist/services/listingAggregatorService.js.map +1 -1
  206. package/dist/services/listingEntityService.js +2 -3
  207. package/dist/services/listingEntityService.js.map +1 -1
  208. package/dist/services/listingService.js +16 -1
  209. package/dist/services/listingService.js.map +1 -1
  210. package/dist/styles/index.css +3 -1
  211. package/dist/types/contexts/mapContext.d.ts +0 -1
  212. package/dist/types/services/listingAggregatorService.d.ts +2 -2
  213. package/dist/types/services/listingEntityService.d.ts +3 -2
  214. package/dist/types/types/GetListingParams.d.ts +1 -1
  215. package/dist/types/types/ListingEntity.d.ts +1 -2
  216. package/dist/types/types/ListingFields.d.ts +2 -4
  217. package/dist/types/types/Listings.d.ts +1 -0
  218. package/dist/types/util/mapUtil.d.ts +3 -3
  219. package/dist/util/filterUtil.js +6 -6
  220. package/dist/util/filterUtil.js.map +1 -1
  221. package/dist/util/loading.js +3 -3
  222. package/dist/util/loading.js.map +1 -1
  223. package/dist/util/mapUtil.js +25 -37
  224. package/dist/util/mapUtil.js.map +1 -1
  225. package/package.json +17 -60
  226. package/src/components/HireControlMap.js +8 -19
  227. package/src/components/containers/accordions/filter-container.js +1 -6
  228. package/src/components/containers/accordions/filter-item-container.js +2 -2
  229. package/src/components/containers/accordions/map-accordion-item-container.js +2 -6
  230. package/src/components/containers/filter/filter-container.js +2 -3
  231. package/src/components/containers/filter/filter-item-container.js +10 -10
  232. package/src/components/containers/filter/location-container.js +3 -3
  233. package/src/components/containers/list/item-list-container.tsx +3 -3
  234. package/src/components/containers/maps/info-window-content-container.js +1 -1
  235. package/src/components/containers/maps/map-container.js +1 -2
  236. package/src/components/modules/buttons/button-group-apply.js +8 -8
  237. package/src/components/modules/dialogs/apply-dialog.js +2 -2
  238. package/src/components/modules/list/field-mapper-desktop.jsx +2 -2
  239. package/src/components/modules/list/field-mapper-mobile.jsx +8 -8
  240. package/src/components/modules/list/header-item.js +1 -1
  241. package/src/components/modules/maps/map-list.js +1 -1
  242. package/src/contexts/mapContext.tsx +16 -17
  243. package/src/contexts/mapListContext.tsx +58 -52
  244. package/src/services/listingAggregatorService.ts +21 -29
  245. package/src/services/listingEntityService.ts +3 -3
  246. package/src/services/listingService.ts +11 -1
  247. package/src/types/GetListingParams.ts +1 -1
  248. package/src/types/ListingEntity.ts +1 -2
  249. package/src/types/ListingFields.ts +2 -4
  250. package/src/types/Listings.ts +1 -0
  251. package/src/util/filterUtil.js +6 -6
  252. package/src/util/mapUtil.js +41 -52
  253. package/src/styles/components.css +0 -30
@@ -53,7 +53,6 @@ interface MapListContextProps {
53
53
  hiddenFilters?: string[];
54
54
  containerStyle?: any;
55
55
  ExpandListComponent?: React.ComponentType<{ listing: any }> | ((listing: any) => JSX.Element) | null;
56
- noEntities?: boolean;
57
56
  }
58
57
 
59
58
  const MapListContext = createContext<MapListContextProps | undefined>(undefined);
@@ -94,11 +93,8 @@ interface MapListProviderProps {
94
93
  defaultFilters?: Record<string, any>;
95
94
  containerStyle?: any;
96
95
  localStorageKey: string;
97
- getListingEntitiesCallback?: (origin?: string) => Promise<any>;
96
+ getListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>;
98
97
  ExpandListComponent?: React.ComponentType<{ listing: Listing }> | ((listing: Listing) => JSX.Element) | null;
99
- hideMap?: boolean;
100
- hideFilters?: boolean;
101
- noEntities?: boolean;
102
98
  }
103
99
 
104
100
  export const MapListProvider: React.FC<MapListProviderProps> = ({
@@ -122,24 +118,33 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
122
118
  containerStyle,
123
119
  ExpandListComponent,
124
120
  getListingEntitiesCallback,
125
- localStorageKey,
126
- hideMap = false,
127
- hideFilters = false,
128
- noEntities = false
121
+ localStorageKey
129
122
  }) => {
130
123
  const firstLoadFilters = () =>{
131
124
  let urlFilters = filtersFromURL(window.location)?.filters;
132
125
  return (setFiltersUrl === true && urlFilters && Object.keys(urlFilters).length > 0) ? urlFilters : getStorageObject(localStorageKey + 'selectedFilters', {}) || {}
133
126
  }
127
+
128
+ const firstLoadQuery = (): string | null => {
129
+ if (resetFilters) return null;
130
+ // Check URL first
131
+ const urlData = filtersFromURL(window.location);
132
+ if (setFiltersUrl === true && urlData?.query) {
133
+ return urlData.query;
134
+ }
135
+ // Fall back to localStorage
136
+ return getQuery(localStorageKey);
137
+ }
138
+
134
139
  const [allListings, setAllListings] = useState<Listing[]>([]);
135
140
  const [filteredListings, setFilteredListings] = useState<Listing[]>([]);
136
141
  const [loading, setLoading] = useState<boolean>(false);
137
142
  const [mapItems, setMapItems] = useState<any>(getStorageObject(localStorageKey + 'mapItems', []) || []);
138
- const [query, setQuery] = useState<string | null>(() => resetFilters ? null : getQuery(localStorageKey));
143
+ const [query, setQuery] = useState<string | null>(() => firstLoadQuery());
139
144
  const [sortSetting, setSortSetting] = useState<{ field: string; type: string }>(getStorageObject(localStorageKey + 'sortSetting', { field: 'position', type: 'asc' }) || { field: 'position', type: 'asc' });
140
145
  const [listingEntities, setListingEntities] = useState<Record<number, ListingEntity> | null>({});
141
146
  const [firstLoad, setFirstLoad] = useState<boolean>(true);
142
- const [commuteLocation, setCommuteLocation] = useState<any | null>(getStorageObject(localStorageKey + 'commuteLocation'));
147
+ const [commuteLocation, setCommuteLocation] = useState<any | null>(getStorageObject('commuteLocation'));
143
148
  const [selectedFilters, setSelectedFilters] = useState<Record<string, any>>(() => resetFilters ? {} : firstLoadFilters());
144
149
  const [filterOptions, setFilterOptions] = useState<any>();
145
150
  const [recruiters, setRecruiters] = useState<Record<number, Recruiter>>({});
@@ -156,7 +161,7 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
156
161
  if (!sortSetting) return;
157
162
  localStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));
158
163
  setNewFilteredListings(filteredListings);
159
- }, [sortSetting, localStorageKey, filteredListings]);
164
+ }, [sortSetting, localStorageKey]);
160
165
 
161
166
  useEffect(() => {
162
167
  const loadedFavorites = JSON.parse(localStorage.getItem(localStorageKey + 'favorites') || '[]');
@@ -167,32 +172,34 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
167
172
  setStorageObject(localStorageKey + "commuteLocation", commuteLocation);
168
173
  }, [commuteLocation, localStorageKey]);
169
174
 
170
-
171
175
  useEffect(() => {
172
- if (!commuteLocation || noEntities) return;
176
+ if (!commuteLocation) return;
173
177
 
174
178
  async function fetchEntities() {
179
+ const distinctEntityIds = [
180
+ ...new Set(allListings.map(listing => listing.entityId ?? -1))
181
+ ];
175
182
  try {
176
- let fetchedEntities;
177
- if (getListingEntitiesCallback) {
178
- fetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);
179
- } else {
180
- fetchedEntities = await getListingEntities(`${commuteLocation.lat}, ${commuteLocation.lng}`);
181
- }
183
+ console.log(getListingEntitiesCallback);
184
+ console.log("fetching entities")
185
+ const fetchedEntities = getListingEntitiesCallback !== null && getListingEntitiesCallback !== undefined ? await getListingEntitiesCallback(distinctEntityIds,
186
+ `${commuteLocation.lat}, ${commuteLocation.lng}`) : await getListingEntities(
187
+ distinctEntityIds,
188
+ `${commuteLocation.lat}, ${commuteLocation.lng}`
189
+ );
182
190
  setListingEntities(fetchedEntities);
183
- // Update travelTime on listings
184
- const newFilteredListings: Listing[] = [...filteredListings];
191
+ const newFilteredListings: Listing[] = [...filteredListings] ?? [];
185
192
  for (let i = 0; i < allListings.length; i++) {
186
193
  const listing = newFilteredListings[i];
187
194
  if (
188
195
  listing &&
189
196
  listing.fields &&
190
- listing.fields.entityKey &&
191
- listing.fields.entityKey !== ''
197
+ listing.entityId !== undefined &&
198
+ listing.entityId !== -1
192
199
  ) {
193
- const entityKey = listing.fields.entityKey;
194
- // Try exact match first, then lowercase match for case-insensitive lookup
195
- const travelTime = (fetchedEntities[entityKey] || fetchedEntities[entityKey.toLowerCase()])?.travelTime;
200
+ const entityId = listing.entityId;
201
+ const travelTime = fetchedEntities[entityId]?.travelTime;
202
+
196
203
  if (travelTime !== undefined && listing.fields) {
197
204
  listing.fields.travelTime = travelTime;
198
205
  }
@@ -204,35 +211,35 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
204
211
  }
205
212
 
206
213
  fetchEntities();
207
- }, [commuteLocation, allListings, siteConfig.companyId, getListingEntitiesCallback, noEntities]);
214
+ }, [commuteLocation, allListings, siteConfig.companyId]);
208
215
 
209
216
  useEffect(() => {
210
217
  const handleFetchListings = async () => {
211
- if (!(getStorageObject(localStorageKey + 'listings', []) || []).length) {
212
- setLoading(true);
213
- }
218
+ if (!getStorageObject(localStorageKey + 'listings') ?? [].length) {
219
+ setLoading(true);
220
+ }
214
221
 
215
- try {
216
- const {
217
- listingsResult,
218
- entitiesByKey,
219
- distinctItems
220
- } = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback, noEntities);
221
- if (defaultFilters) {
222
- const filteredListings = listingsResult.filter(listing => {
223
- if (!listing.fields) return false;
222
+ try {
223
+ const {
224
+ listingsResult,
225
+ fetchedEntities,
226
+ distinctItems
227
+ } = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback);
228
+ if (defaultFilters) {
229
+ const filteredListings = listingsResult.filter(listing => {
230
+ if (!listing.fields) return false;
224
231
 
225
- return Object.keys(defaultFilters).every(filterKey => {
226
- const filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];
227
- const listingValue = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;
228
- return filterValues.includes(listingValue);
232
+ return Object.keys(defaultFilters).every(filterKey => {
233
+ const filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];
234
+ const listingValue = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;
235
+ return filterValues.includes(listingValue);
236
+ });
229
237
  });
230
- });
231
- setAllListings(filteredListings);
232
- } else {
233
- setAllListings(listingsResult);
234
- }
235
- setListingEntities(entitiesByKey);
238
+ setAllListings(filteredListings);
239
+ } else {
240
+ setAllListings(listingsResult);
241
+ }
242
+ setListingEntities(fetchedEntities);
236
243
  setMapItems(distinctItems);
237
244
  } catch (error) {
238
245
  console.log(error);
@@ -362,8 +369,7 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
362
369
  defaultFilters,
363
370
  hiddenFilters,
364
371
  containerStyle,
365
- ExpandListComponent,
366
- noEntities
372
+ ExpandListComponent
367
373
  }}>
368
374
  {children}
369
375
  </MapListContext.Provider>
@@ -6,8 +6,7 @@ import { ListingEntity } from '~/types/ListingEntity';
6
6
 
7
7
  interface FetchListingsResult {
8
8
  listingsResult: Listing[];
9
- entitiesByKey: Record<string, ListingEntity>;
10
-
9
+ fetchedEntities: Record<number, ListingEntity>;
11
10
  distinctItems: any; // Update this type based on the return type of getDistinctItemsByProximity
12
11
  }
13
12
 
@@ -15,46 +14,39 @@ const fetchListings = async (
15
14
  commuteLocation: any | null = null,
16
15
  entities: ListingEntity[] | null,
17
16
  listings: Listing[] | null,
18
- getListingEntitiesCallback?: (origin?: string) => Promise<ListingEntity[]>,
19
- noEntities: boolean = false
17
+ getListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>,
20
18
  ): Promise<FetchListingsResult> => {
21
19
  try {
22
20
  const listingsResult = listings && listings.length > 0 ? listings : await getListings();
23
-
24
- // Only fetch entities if noEntities is false
25
- const fetchedEntities = noEntities ? {} : (
26
- !commuteLocation
27
- ? entities && entities.length > 0 ? entities : !getListingEntitiesCallback ? await getListingEntities() : await getListingEntitiesCallback()
28
- : !getListingEntitiesCallback ? await getListingEntities(
29
- `${commuteLocation.lat}, ${commuteLocation.lng}`
30
- ) : await getListingEntitiesCallback(
31
- `${commuteLocation.lat}, ${commuteLocation.lng}`)
32
- );
33
- const entitiesByKey = fetchedEntities;
34
- // Update travel time only if entities were fetched
35
- if (!noEntities && entitiesByKey) {
36
- for (let i = 0; i < listingsResult.length; i++) {
37
- const listing = listingsResult[i];
38
- if (listing.fields && listing.fields.entityKey && listing.fields.entityKey !== '' && listing.fields) {
39
- // Try exact match first, then lowercase match for case-insensitive lookup
40
- const entity = entitiesByKey[listing.fields.entityKey] || entitiesByKey[listing.fields.entityKey.toLowerCase()];
41
- console.log("Entity for listing with travel time", listing.fields.entityKey, entity);
42
-
43
- if (entity) {
44
- listing.fields.travelTime = entity.travelTime;
45
- }
21
+ const distinctEntityIds: number[] = [
22
+ ...new Set(listingsResult.map(listing => listing.entityId))
23
+ ] as number[];
24
+
25
+ const fetchedEntities = !commuteLocation
26
+ ? entities && entities.length > 0 ? entities : !getListingEntitiesCallback ? await getListingEntities(distinctEntityIds) : await getListingEntitiesCallback(distinctEntityIds)
27
+ : !getListingEntitiesCallback ? await getListingEntities(
28
+ distinctEntityIds,
29
+ `${commuteLocation.lat}, ${commuteLocation.lng}`
30
+ ) : await getListingEntitiesCallback( distinctEntityIds,
31
+ `${commuteLocation.lat}, ${commuteLocation.lng}`);
32
+ for (let i = 0; i < listingsResult.length; i++) {
33
+ const listing = listingsResult[i];
34
+ if (listing.entityId && listing.entityId !== -1 && listing.fields) {
35
+ const entity = fetchedEntities[listing.entityId];
36
+ if (entity) {
37
+ listing.fields.travelTime = entity.travelTime;
46
38
  }
47
39
  }
48
40
  }
49
41
 
50
42
  const distinctItems = getDistinctItemsByProximity(
51
43
  listingsResult,
52
- entitiesByKey || {}
44
+ fetchedEntities
53
45
  );
54
46
 
55
47
  return {
56
48
  listingsResult,
57
- entitiesByKey,
49
+ fetchedEntities,
58
50
  distinctItems
59
51
  };
60
52
  } catch (error) {
@@ -1,9 +1,9 @@
1
1
  import api from '~/apis/hcApi';
2
+ import { ListingEntity } from '~/types/ListingEntity';
2
3
 
3
- export const getListingEntities = async (origin = ''): Promise<any> => {
4
+ export const getListingEntities = async (entityIds: number[], origin = ''): Promise<ListingEntity[]> => {
4
5
  try {
5
- //need to update / or add better endpoint fo this to match original functioanlity
6
- const response = await api.get<any>(`/listingentities/MapEntities?origin=${origin}`);
6
+ const response = await api.post<ListingEntity[]>(`/ListingEntities?origin=${origin}`, entityIds);
7
7
  return response;
8
8
  } catch (error) {
9
9
  console.error("Error fetching listing entities:", error);
@@ -5,8 +5,18 @@ import { Listing } from '../types/Listings';
5
5
 
6
6
  export const getListings = async (params?: GetListingsParams): Promise<Listing[]> => {
7
7
  try {
8
- const response = await api.get(`/joblistings/maplistings`);
8
+ const query = new URLSearchParams();
9
9
 
10
+ if (params) {
11
+ if (params.location) params.location.forEach(loc => query.append('location', loc));
12
+ if (params.category) params.category.forEach(cat => query.append('category', cat));
13
+ if (params.categoryClass) params.categoryClass.forEach(catClass => query.append('categoryClass', catClass));
14
+ if (params.education) params.education.forEach(edu => query.append('education', edu));
15
+ if (params.city) params.city.forEach(cty => query.append('city', cty));
16
+ if (params.state) params.state.forEach(st => query.append('state', st));
17
+ }
18
+
19
+ const response = await api.get(`/Listings?${query.toString()}`);
10
20
  return response as Listing[];
11
21
  } catch (error) {
12
22
  console.error(error);
@@ -1,7 +1,7 @@
1
1
  export type GetListingsParams = {
2
2
  location?: string[];
3
3
  category?: string[];
4
- subCategory?: string[];
4
+ categoryClass?: string[];
5
5
  education?: string[];
6
6
  city?: string[];
7
7
  state?: string[];
@@ -1,10 +1,9 @@
1
1
  import { Address } from './Address';
2
2
 
3
3
  export type ListingEntity = {
4
- id: string;
4
+ id: number;
5
5
  listingId: number;
6
6
  latitude: number;
7
- entityKey: string;
8
7
  longitude: number;
9
8
  entityDisplayName?: string;
10
9
  address?: Address;
@@ -2,10 +2,9 @@ export type ListingFields = {
2
2
  posted?: string;
3
3
  subTitle?: string;
4
4
  education?: string;
5
- title?: string;
5
+ position?: string;
6
6
  category?: string;
7
- subCategory?: string;
8
- applyUrl?: string;
7
+ categoryClass?: string;
9
8
  shift?: string;
10
9
  custom1?: string;
11
10
  custom2?: string;
@@ -23,6 +22,5 @@ export type ListingFields = {
23
22
  useClientJobUrl?: boolean;
24
23
  dateCreated: Date;
25
24
  dateLastEdited?: Date;
26
- entityKey: string;
27
25
  travelTime?: string;
28
26
  }
@@ -7,6 +7,7 @@ import { SimilarListing } from './SimilarListing';
7
7
  export type Listing = {
8
8
  id: number;
9
9
  fields?: ListingFields;
10
+ entityId?: number;
10
11
  applyUrl?: string;
11
12
  applyOnline?: number;
12
13
  detailsUrl?: string;
@@ -82,17 +82,17 @@ export const generateFilterOptions = (
82
82
  if (fieldName === parentField && filterOptions?.filters) {
83
83
  return filterOptions.filters.find(filter => filter.id === fieldName);
84
84
  }
85
- if(fieldName == 'category'){
85
+ if(fieldName == 'categoryClass'){
86
86
  return {
87
87
  id: fieldName,
88
88
  title: siteConfig.fieldNames[fieldName],
89
89
  items: getFilterOptions(allListings, allListings, fieldName)
90
90
  };
91
91
  }
92
- if(fieldName == 'subCategory' && selectedFilters.category){
93
- const categoryKeys = Object.keys(selectedFilters.category);
92
+ if(fieldName == 'category' && selectedFilters.categoryClass){
93
+ const categoryClassKeys = Object.keys(selectedFilters.categoryClass);
94
94
  const filteredListings = allListings.filter(
95
- x => categoryKeys.includes(x.fields?.category)
95
+ x => categoryClassKeys.includes(x.fields?.categoryClass)
96
96
  );
97
97
  return {
98
98
  id: fieldName,
@@ -255,9 +255,9 @@ function searchResults(results, query) {
255
255
  'fields.posted',
256
256
  'fields.subtitle',
257
257
  'fields.education',
258
- 'fields.title',
258
+ 'fields.position',
259
259
  'fields.category',
260
- 'fields.subCategory',
260
+ 'fields.categoryclass',
261
261
  'fields.shift',
262
262
  'fields.citystate',
263
263
  'fields.city',
@@ -1,59 +1,54 @@
1
- export const getDistinctItemsByProximity = (items, listingEntitiesDetailsInput) => {
1
+ export const getDistinctItemsByProximity = (items, listingEntitiesDetails) => {
2
2
  const clusters = {};
3
3
 
4
- if (!listingEntitiesDetailsInput) return [];
5
-
6
- const listingEntitiesDetails = Array.isArray(listingEntitiesDetailsInput)
7
- ? listingEntitiesDetailsInput.reduce((acc, entity) => {
8
- if (entity?.entityKey) acc[entity.entityKey.toLowerCase()] = entity;
9
- return acc;
10
- }, {})
11
- : Object.keys(listingEntitiesDetailsInput).reduce((acc, key) => {
12
- acc[key.toLowerCase()] = listingEntitiesDetailsInput[key];
13
- return acc;
14
- }, {});
4
+ if (!listingEntitiesDetails) return [];
15
5
 
16
6
  const closeItemPairs = findCloseItems(listingEntitiesDetails);
17
7
  if (closeItemPairs.length > 0) {
18
- const adjusted = adjustItemPositions(listingEntitiesDetails, closeItemPairs);
19
- Object.assign(listingEntitiesDetails, adjusted);
8
+ listingEntitiesDetails = adjustItemPositions(
9
+ listingEntitiesDetails,
10
+ closeItemPairs
11
+ );
20
12
  }
21
13
 
22
14
  items?.forEach(item => {
23
- const entityKey = item?.fields?.entityKey;
24
- if (!entityKey || entityKey === '-1') return;
25
- const entityDetails = listingEntitiesDetails[entityKey.toLowerCase()];
26
- if (!entityDetails) {
27
- console.error(`Details not found for entityKey: ${entityKey}`);
28
- return;
29
- }
15
+ if(item.entityId !== -1){
30
16
 
31
- item.mapDetails = entityDetails;
17
+ const entityDetails = listingEntitiesDetails[item.entityId];
32
18
 
33
- const normalizedEntityKey = entityKey.toLowerCase();
34
- if (!clusters[normalizedEntityKey]) {
35
- clusters[normalizedEntityKey] = {
36
- ...entityDetails,
37
- items: { [item.id]: item }
38
- };
39
- } else {
40
- clusters[normalizedEntityKey].items[item.id] = item;
41
- }
19
+ if (!entityDetails) {
20
+ console.error(`Details not found for entityId: ${item.entityId}`);
21
+ return;
22
+ }
23
+
24
+ item.mapDetails = entityDetails;
25
+
26
+ if (!clusters[item.entityId]) {
27
+ clusters[item.entityId] = {
28
+ ...item.mapDetails,
29
+ items: { [item.id]: item }
30
+ };
31
+ } else {
32
+ clusters[item.entityId].items[item.id] = item;
33
+ }}
42
34
  });
43
35
 
44
36
  return Object.values(clusters);
45
37
  };
46
38
 
47
- export const findCloseItems = entitiesByKey => {
39
+ export const findCloseItems = itemsObj => {
48
40
  const closeItems = [];
49
- const items = Object.values(entitiesByKey); // Convert object to array
41
+ const items = Object.values(itemsObj); // Convert object to array for iteration
50
42
  const proximityThreshold = 0.0001;
51
43
 
52
44
  for (let i = 0; i < items.length; i++) {
53
45
  for (let j = i + 1; j < items.length; j++) {
54
46
  const distanceLat = Math.abs(items[i].latitude - items[j].latitude);
55
47
  const distanceLng = Math.abs(items[i].longitude - items[j].longitude);
56
- if (distanceLat < proximityThreshold && distanceLng < proximityThreshold) {
48
+ if (
49
+ distanceLat < proximityThreshold &&
50
+ distanceLng < proximityThreshold
51
+ ) {
57
52
  closeItems.push({ item1: items[i], item2: items[j] });
58
53
  }
59
54
  }
@@ -62,18 +57,14 @@ export const findCloseItems = entitiesByKey => {
62
57
  return closeItems;
63
58
  };
64
59
 
65
- export const adjustItemPositions = (entitiesByKey, closeItemPairs) => {
60
+ export const adjustItemPositions = (itemsObj, closeItemPairs) => {
66
61
  const adjustmentValue = 0.0001;
67
- const adjustedItems = { ...entitiesByKey };
62
+ const adjustedItems = { ...itemsObj }; // Create a shallow copy of the object
68
63
 
69
64
  closeItemPairs.forEach(pair => {
70
- const key2 = pair.item2.entityKey;
71
- if (adjustedItems[key2]) {
72
- adjustedItems[key2] = {
73
- ...adjustedItems[key2],
74
- latitude: adjustedItems[key2].latitude + adjustmentValue,
75
- longitude: adjustedItems[key2].longitude + adjustmentValue
76
- };
65
+ if (adjustedItems[pair.item1.id] && adjustedItems[pair.item2.id]) {
66
+ adjustedItems[pair.item2.id].latitude += adjustmentValue;
67
+ adjustedItems[pair.item2.id].longitude += adjustmentValue;
77
68
  }
78
69
  });
79
70
 
@@ -83,15 +74,13 @@ export const adjustItemPositions = (entitiesByKey, closeItemPairs) => {
83
74
  export const clusterOptions = (clusterGridSize, fillColor) => {
84
75
  return {
85
76
  gridSize: clusterGridSize,
86
- maxZoom: 15,
87
- styles: [
88
- {
89
- url: createSvgDataUri(fillColor),
90
- textColor: 'white',
91
- height: 40,
92
- width: 40
93
- }
94
- ]
77
+ maxZoom:15,
78
+ styles:[{
79
+ url: createSvgDataUri(fillColor),
80
+ textColor:'white',
81
+ height: 40,
82
+ width: 40
83
+ }]
95
84
  };
96
85
  };
97
86
 
@@ -1,30 +0,0 @@
1
- @config "../../tailwind.config.js";
2
-
3
- /* Only include components and utilities - no base styles */
4
- @tailwind components;
5
- @tailwind utilities;
6
-
7
- @layer components {
8
- .track * {
9
- @apply hc-pointer-events-none;
10
- }
11
-
12
- .stretched-link::after {
13
- @apply hc-content-[''] hc-absolute hc-inset-0 hc-z-[1] hc-pointer-events-auto hc-bg-transparent;
14
- }
15
- }
16
-
17
- /* Component-specific utilities */
18
- .fit-content {
19
- height: fit-content;
20
- }
21
-
22
- /* CSS Variables for theming - these should be set by the consuming app */
23
- :root {
24
- --ui-text: #000000;
25
- --ui-accent: #959595;
26
- --primary: #959595;
27
- --primary-dark: #959595;
28
- --secondary: #959595;
29
- --secondary-dark: #959595;
30
- }