@abcagency/hc-ui-components 1.4.22 → 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 (251) hide show
  1. package/dist/components/HireControlMap.js +20 -32
  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 +2 -2
  110. package/dist/contexts/mapContext.js.map +1 -1
  111. package/dist/contexts/mapListContext.js +46 -39
  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/services/listingAggregatorService.d.ts +2 -2
  212. package/dist/types/services/listingEntityService.d.ts +3 -2
  213. package/dist/types/types/GetListingParams.d.ts +1 -1
  214. package/dist/types/types/ListingEntity.d.ts +1 -2
  215. package/dist/types/types/ListingFields.d.ts +2 -4
  216. package/dist/types/types/Listings.d.ts +1 -0
  217. package/dist/types/util/mapUtil.d.ts +3 -3
  218. package/dist/util/filterUtil.js +6 -6
  219. package/dist/util/filterUtil.js.map +1 -1
  220. package/dist/util/loading.js +3 -3
  221. package/dist/util/loading.js.map +1 -1
  222. package/dist/util/mapUtil.js +25 -37
  223. package/dist/util/mapUtil.js.map +1 -1
  224. package/package.json +17 -60
  225. package/src/components/HireControlMap.js +7 -18
  226. package/src/components/containers/accordions/filter-container.js +1 -6
  227. package/src/components/containers/accordions/filter-item-container.js +2 -2
  228. package/src/components/containers/accordions/map-accordion-item-container.js +2 -6
  229. package/src/components/containers/filter/filter-container.js +2 -3
  230. package/src/components/containers/filter/filter-item-container.js +10 -10
  231. package/src/components/containers/filter/location-container.js +3 -3
  232. package/src/components/containers/list/item-list-container.tsx +3 -3
  233. package/src/components/containers/maps/info-window-content-container.js +1 -1
  234. package/src/components/containers/maps/map-container.js +1 -2
  235. package/src/components/modules/buttons/button-group-apply.js +8 -8
  236. package/src/components/modules/dialogs/apply-dialog.js +2 -2
  237. package/src/components/modules/list/field-mapper-desktop.jsx +2 -2
  238. package/src/components/modules/list/field-mapper-mobile.jsx +8 -8
  239. package/src/components/modules/list/header-item.js +1 -1
  240. package/src/components/modules/maps/map-list.js +1 -1
  241. package/src/contexts/mapListContext.tsx +70 -64
  242. package/src/services/listingAggregatorService.ts +21 -29
  243. package/src/services/listingEntityService.ts +3 -3
  244. package/src/services/listingService.ts +11 -1
  245. package/src/types/GetListingParams.ts +1 -1
  246. package/src/types/ListingEntity.ts +1 -2
  247. package/src/types/ListingFields.ts +2 -4
  248. package/src/types/Listings.ts +1 -0
  249. package/src/util/filterUtil.js +6 -6
  250. package/src/util/mapUtil.js +41 -52
  251. 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);
@@ -66,10 +65,10 @@ export const useMapList = () => {
66
65
  return context;
67
66
  };
68
67
 
69
- const getQuery = (): string | null => {
68
+ const getQuery = (localStorageKey: string = ''): string | null => {
70
69
  let query: string | null = null;
71
70
  if (typeof window !== 'undefined') {
72
- query = localStorage.getItem('query');
71
+ query = localStorage.getItem(localStorageKey + 'query');
73
72
  }
74
73
  return query;
75
74
  };
@@ -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,21 +118,30 @@ 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
- const [mapItems, setMapItems] = useState<any>(getStorageObject('mapItems', []) || []);
138
- const [query, setQuery] = useState<string | null>(() => resetFilters ? null : getQuery());
139
- const [sortSetting, setSortSetting] = useState<{ field: string; type: string }>(getStorageObject('sortSetting', { field: 'position', type: 'asc' }) || { field: 'position', type: 'asc' });
142
+ const [mapItems, setMapItems] = useState<any>(getStorageObject(localStorageKey + 'mapItems', []) || []);
143
+ const [query, setQuery] = useState<string | null>(() => firstLoadQuery());
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
147
  const [commuteLocation, setCommuteLocation] = useState<any | null>(getStorageObject('commuteLocation'));
@@ -154,45 +159,47 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
154
159
 
155
160
  useEffect(() => {
156
161
  if (!sortSetting) return;
157
- localStorage.setItem('sortSetting', JSON.stringify(sortSetting));
162
+ localStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));
158
163
  setNewFilteredListings(filteredListings);
159
- }, [sortSetting]);
164
+ }, [sortSetting, localStorageKey]);
160
165
 
161
166
  useEffect(() => {
162
- const loadedFavorites = JSON.parse(localStorage.getItem('favorites') || '[]');
167
+ const loadedFavorites = JSON.parse(localStorage.getItem(localStorageKey + 'favorites') || '[]');
163
168
  setFavorites(loadedFavorites);
164
- }, []);
169
+ }, [localStorageKey]);
165
170
 
166
171
  useEffect(() => {
167
- setStorageObject("commuteLocation", commuteLocation);
168
- }, [commuteLocation]);
169
-
172
+ setStorageObject(localStorageKey + "commuteLocation", commuteLocation);
173
+ }, [commuteLocation, localStorageKey]);
170
174
 
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('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);
@@ -265,7 +272,7 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
265
272
  if (firstLoad && tempSelectedFilters) {
266
273
  // Update URL with filters if needed
267
274
  } else if (Object.keys(tempSelectedFilters).length === 0 && !firstLoad) {
268
- localStorage.removeItem('selectedFilters');
275
+ localStorage.removeItem(localStorageKey + 'selectedFilters');
269
276
  } else if (!firstLoad) {
270
277
  setStorageObject(localStorageKey + 'selectedFilters', tempSelectedFilters);
271
278
  }
@@ -273,7 +280,7 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
273
280
  {
274
281
  updateURLWithFilters(tempSelectedFilters, window.location, tempQuery, handleUrlUpdate);
275
282
  }
276
- tempQuery != null ? localStorage.setItem('query', tempQuery) : localStorage.removeItem('query');
283
+ tempQuery != null ? localStorage.setItem(localStorageKey + 'query', tempQuery) : localStorage.removeItem(localStorageKey + 'query');
277
284
  setMapItems(mapItems);
278
285
 
279
286
  if (tempSelectedFilters) {
@@ -315,10 +322,10 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
315
322
 
316
323
  const handleSettingFavorites = (newFavorites: number[] | null) => {
317
324
  if (newFavorites == null) {
318
- localStorage.removeItem('favorites');
325
+ localStorage.removeItem(localStorageKey + 'favorites');
319
326
  } else {
320
327
  setFavorites(newFavorites);
321
- localStorage.setItem('favorites', JSON.stringify(newFavorites));
328
+ localStorage.setItem(localStorageKey + 'favorites', JSON.stringify(newFavorites));
322
329
  }
323
330
  };
324
331
 
@@ -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
- }