@abcagency/hc-ui-components 1.9.35 → 1.9.36

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 (501) hide show
  1. package/dist/_virtual/jsx-runtime.js +4 -0
  2. package/dist/_virtual/jsx-runtime.js.map +1 -0
  3. package/dist/_virtual/react-jsx-runtime.production.min.js +4 -0
  4. package/dist/_virtual/react-jsx-runtime.production.min.js.map +1 -0
  5. package/dist/apis/hcApi.js +91 -0
  6. package/dist/apis/hcApi.js.map +1 -0
  7. package/dist/clientToken.js +10 -0
  8. package/dist/clientToken.js.map +1 -0
  9. package/dist/components/HireControlMap.js +175 -203
  10. package/dist/components/HireControlMap.js.map +1 -1
  11. package/dist/components/containers/accordions/filter-container.js +9 -22
  12. package/dist/components/containers/accordions/filter-container.js.map +1 -1
  13. package/dist/components/containers/accordions/filter-item-container.js +11 -16
  14. package/dist/components/containers/accordions/filter-item-container.js.map +1 -1
  15. package/dist/components/containers/accordions/map-accordion-item-container.js +12 -37
  16. package/dist/components/containers/accordions/map-accordion-item-container.js.map +1 -1
  17. package/dist/components/containers/filter/commute-container.js +7 -18
  18. package/dist/components/containers/filter/commute-container.js.map +1 -1
  19. package/dist/components/containers/filter/filter-container.js +16 -12
  20. package/dist/components/containers/filter/filter-container.js.map +1 -1
  21. package/dist/components/containers/filter/filter-item-container.js +28 -44
  22. package/dist/components/containers/filter/filter-item-container.js.map +1 -1
  23. package/dist/components/containers/filter/location-container.js +7 -15
  24. package/dist/components/containers/filter/location-container.js.map +1 -1
  25. package/dist/components/containers/filter/points-of-interest-container.js +8 -21
  26. package/dist/components/containers/filter/points-of-interest-container.js.map +1 -1
  27. package/dist/components/containers/filter/points-of-interest-radio-item-container.js +3 -6
  28. package/dist/components/containers/filter/points-of-interest-radio-item-container.js.map +1 -1
  29. package/dist/components/containers/filter/search-container.js +4 -11
  30. package/dist/components/containers/filter/search-container.js.map +1 -1
  31. package/dist/components/containers/jobListing/listing-details-container.js +5 -10
  32. package/dist/components/containers/jobListing/listing-details-container.js.map +1 -1
  33. package/dist/components/containers/list/item-list-container.js +15 -22
  34. package/dist/components/containers/list/item-list-container.js.map +1 -1
  35. package/dist/components/containers/list/list-item/list-item-container.js +5 -16
  36. package/dist/components/containers/list/list-item/list-item-container.js.map +1 -1
  37. package/dist/components/containers/maps/info-window-content-container.js +3 -6
  38. package/dist/components/containers/maps/info-window-content-container.js.map +1 -1
  39. package/dist/components/containers/maps/map-container.js +28 -106
  40. package/dist/components/containers/maps/map-container.js.map +1 -1
  41. package/dist/components/containers/maps/map-list-container.js +7 -35
  42. package/dist/components/containers/maps/map-list-container.js.map +1 -1
  43. package/dist/components/containers/maps/map-marker-container.js +8 -11
  44. package/dist/components/containers/maps/map-marker-container.js.map +1 -1
  45. package/dist/components/modules/accordions/MapAccordionItem.js +5 -5
  46. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -1
  47. package/dist/components/modules/accordions/default.js +15 -15
  48. package/dist/components/modules/accordions/default.js.map +1 -1
  49. package/dist/components/modules/accordions/filterItem.js +7 -12
  50. package/dist/components/modules/accordions/filterItem.js.map +1 -1
  51. package/dist/components/modules/accordions/filters.js +7 -17
  52. package/dist/components/modules/accordions/filters.js.map +1 -1
  53. package/dist/components/modules/buttons/button-group-apply.js +19 -20
  54. package/dist/components/modules/buttons/button-group-apply.js.map +1 -1
  55. package/dist/components/modules/buttons/default.js +9 -9
  56. package/dist/components/modules/buttons/default.js.map +1 -1
  57. package/dist/components/modules/buttons/items-pill.js +2 -2
  58. package/dist/components/modules/buttons/items-pill.js.map +1 -1
  59. package/dist/components/modules/buttons/pill-wrapper.js +3 -4
  60. package/dist/components/modules/buttons/pill-wrapper.js.map +1 -1
  61. package/dist/components/modules/buttons/show-all-button.js +3 -3
  62. package/dist/components/modules/buttons/show-all-button.js.map +1 -1
  63. package/dist/components/modules/cards/default.js +11 -11
  64. package/dist/components/modules/cards/default.js.map +1 -1
  65. package/dist/components/modules/cards/filter.js +5 -5
  66. package/dist/components/modules/cards/filter.js.map +1 -1
  67. package/dist/components/modules/dialogs/apply-dialog.js +19 -19
  68. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -1
  69. package/dist/components/modules/filter/commute.js +20 -21
  70. package/dist/components/modules/filter/commute.js.map +1 -1
  71. package/dist/components/modules/filter/index.js +30 -122
  72. package/dist/components/modules/filter/index.js.map +1 -1
  73. package/dist/components/modules/filter/item.js +9 -15
  74. package/dist/components/modules/filter/item.js.map +1 -1
  75. package/dist/components/modules/filter/location.js +6 -6
  76. package/dist/components/modules/filter/location.js.map +1 -1
  77. package/dist/components/modules/filter/radio-item.js +6 -6
  78. package/dist/components/modules/filter/radio-item.js.map +1 -1
  79. package/dist/components/modules/filter/search.js +11 -16
  80. package/dist/components/modules/filter/search.js.map +1 -1
  81. package/dist/components/modules/filter/sort.js +28 -28
  82. package/dist/components/modules/filter/sort.js.map +1 -1
  83. package/dist/components/modules/grid.js +4 -4
  84. package/dist/components/modules/grid.js.map +1 -1
  85. package/dist/components/modules/icon.js +4 -4
  86. package/dist/components/modules/icon.js.map +1 -1
  87. package/dist/components/modules/jobListing/listing-details.js +5 -8
  88. package/dist/components/modules/jobListing/listing-details.js.map +1 -1
  89. package/dist/components/modules/list/field-mapper-desktop.js +14 -38
  90. package/dist/components/modules/list/field-mapper-desktop.js.map +1 -1
  91. package/dist/components/modules/list/field-mapper-mobile.js +63 -94
  92. package/dist/components/modules/list/field-mapper-mobile.js.map +1 -1
  93. package/dist/components/modules/list/header-item.js +7 -7
  94. package/dist/components/modules/list/header-item.js.map +1 -1
  95. package/dist/components/modules/list/header.js +5 -5
  96. package/dist/components/modules/list/header.js.map +1 -1
  97. package/dist/components/modules/list/item-expand-card/index.js +3 -3
  98. package/dist/components/modules/list/item-expand-card/index.js.map +1 -1
  99. package/dist/components/modules/list/item-list.js +18 -15
  100. package/dist/components/modules/list/item-list.js.map +1 -1
  101. package/dist/components/modules/list/list-item/list-item.js +18 -95
  102. package/dist/components/modules/list/list-item/list-item.js.map +1 -1
  103. package/dist/components/modules/maps/info-window-card.js +2 -2
  104. package/dist/components/modules/maps/info-window-card.js.map +1 -1
  105. package/dist/components/modules/maps/info-window-content.js +5 -5
  106. package/dist/components/modules/maps/info-window-content.js.map +1 -1
  107. package/dist/components/modules/maps/map-list.js +5 -5
  108. package/dist/components/modules/maps/map-list.js.map +1 -1
  109. package/dist/components/modules/maps/map-marker.js +3 -3
  110. package/dist/components/modules/maps/map-marker.js.map +1 -1
  111. package/dist/components/modules/maps/map.js +5 -17
  112. package/dist/components/modules/maps/map.js.map +1 -1
  113. package/dist/components/modules/maps/place-marker.js +5 -5
  114. package/dist/components/modules/maps/place-marker.js.map +1 -1
  115. package/dist/components/modules/maps/tabs.js +25 -25
  116. package/dist/components/modules/maps/tabs.js.map +1 -1
  117. package/dist/contexts/componentContext.js +58 -6
  118. package/dist/contexts/componentContext.js.map +1 -1
  119. package/dist/contexts/mapContext.js +20 -49
  120. package/dist/contexts/mapContext.js.map +1 -1
  121. package/dist/contexts/mapListContext.js +70 -271
  122. package/dist/contexts/mapListContext.js.map +1 -1
  123. package/dist/contexts/placesContext.js +5 -7
  124. package/dist/contexts/placesContext.js.map +1 -1
  125. package/dist/contexts/themeContext.js +5 -10
  126. package/dist/contexts/themeContext.js.map +1 -1
  127. package/dist/contexts/trackEventContext.js +2 -2
  128. package/dist/contexts/trackEventContext.js.map +1 -1
  129. package/dist/hc_react_map_npm/packages/hc-ui-components/node_modules/tslib/tslib.es6.js +45 -0
  130. package/dist/hc_react_map_npm/packages/hc-ui-components/node_modules/tslib/tslib.es6.js.map +1 -0
  131. package/dist/hooks/useList.js +1 -3
  132. package/dist/hooks/useList.js.map +1 -1
  133. package/dist/index.js +1 -2
  134. package/dist/index.js.map +1 -1
  135. package/dist/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js +1 -0
  136. package/dist/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js.map +1 -1
  137. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js +802 -0
  138. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -0
  139. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +679 -0
  140. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -0
  141. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js +343 -0
  142. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js.map +1 -0
  143. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +140 -0
  144. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -0
  145. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +137 -0
  146. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -0
  147. package/dist/node_modules/@headlessui/react/dist/components/combobox/combobox.js +33 -0
  148. package/dist/node_modules/@headlessui/react/dist/components/combobox/combobox.js.map +1 -0
  149. package/dist/node_modules/@headlessui/react/dist/components/keyboard.js +4 -0
  150. package/dist/node_modules/@headlessui/react/dist/components/keyboard.js.map +1 -0
  151. package/dist/node_modules/@headlessui/react/dist/components/transitions/transition.js +19 -0
  152. package/dist/node_modules/@headlessui/react/dist/components/transitions/transition.js.map +1 -0
  153. package/dist/node_modules/@headlessui/react/dist/components/transitions/utils/transition.js +8 -0
  154. package/dist/node_modules/@headlessui/react/dist/components/transitions/utils/transition.js.map +1 -0
  155. package/dist/node_modules/@headlessui/react/dist/hooks/use-computed.js +8 -0
  156. package/dist/node_modules/@headlessui/react/dist/hooks/use-computed.js.map +1 -0
  157. package/dist/node_modules/@headlessui/react/dist/hooks/use-controllable.js +7 -0
  158. package/dist/node_modules/@headlessui/react/dist/hooks/use-controllable.js.map +1 -0
  159. package/dist/node_modules/@headlessui/react/dist/hooks/use-disposables.js +7 -0
  160. package/dist/node_modules/@headlessui/react/dist/hooks/use-disposables.js.map +1 -0
  161. package/dist/node_modules/@headlessui/react/dist/hooks/use-document-event.js +7 -0
  162. package/dist/node_modules/@headlessui/react/dist/hooks/use-document-event.js.map +1 -0
  163. package/dist/node_modules/@headlessui/react/dist/hooks/use-event.js +7 -0
  164. package/dist/node_modules/@headlessui/react/dist/hooks/use-event.js.map +1 -0
  165. package/dist/node_modules/@headlessui/react/dist/hooks/use-flags.js +7 -0
  166. package/dist/node_modules/@headlessui/react/dist/hooks/use-flags.js.map +1 -0
  167. package/dist/node_modules/@headlessui/react/dist/hooks/use-id.js +9 -0
  168. package/dist/node_modules/@headlessui/react/dist/hooks/use-id.js.map +1 -0
  169. package/dist/node_modules/@headlessui/react/dist/hooks/use-is-mounted.js +7 -0
  170. package/dist/node_modules/@headlessui/react/dist/hooks/use-is-mounted.js.map +1 -0
  171. package/dist/node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js +7 -0
  172. package/dist/node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js.map +1 -0
  173. package/dist/node_modules/@headlessui/react/dist/hooks/use-latest-value.js +7 -0
  174. package/dist/node_modules/@headlessui/react/dist/hooks/use-latest-value.js.map +1 -0
  175. package/dist/node_modules/@headlessui/react/dist/hooks/use-outside-click.js +10 -0
  176. package/dist/node_modules/@headlessui/react/dist/hooks/use-outside-click.js.map +1 -0
  177. package/dist/node_modules/@headlessui/react/dist/hooks/use-owner.js +7 -0
  178. package/dist/node_modules/@headlessui/react/dist/hooks/use-owner.js.map +1 -0
  179. package/dist/node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js +7 -0
  180. package/dist/node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js.map +1 -0
  181. package/dist/node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js +7 -0
  182. package/dist/node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js.map +1 -0
  183. package/dist/node_modules/@headlessui/react/dist/hooks/use-sync-refs.js +7 -0
  184. package/dist/node_modules/@headlessui/react/dist/hooks/use-sync-refs.js.map +1 -0
  185. package/dist/node_modules/@headlessui/react/dist/hooks/use-tracked-pointer.js +6 -0
  186. package/dist/node_modules/@headlessui/react/dist/hooks/use-tracked-pointer.js.map +1 -0
  187. package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js +11 -0
  188. package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js.map +1 -0
  189. package/dist/node_modules/@headlessui/react/dist/hooks/use-tree-walker.js +8 -0
  190. package/dist/node_modules/@headlessui/react/dist/hooks/use-tree-walker.js.map +1 -0
  191. package/dist/node_modules/@headlessui/react/dist/hooks/use-watch.js +7 -0
  192. package/dist/node_modules/@headlessui/react/dist/hooks/use-watch.js.map +1 -0
  193. package/dist/node_modules/@headlessui/react/dist/hooks/use-window-event.js +7 -0
  194. package/dist/node_modules/@headlessui/react/dist/hooks/use-window-event.js.map +1 -0
  195. package/dist/node_modules/@headlessui/react/dist/internal/hidden.js +6 -0
  196. package/dist/node_modules/@headlessui/react/dist/internal/hidden.js.map +1 -0
  197. package/dist/node_modules/@headlessui/react/dist/internal/open-closed.js +6 -0
  198. package/dist/node_modules/@headlessui/react/dist/internal/open-closed.js.map +1 -0
  199. package/dist/node_modules/@headlessui/react/dist/utils/active-element-history.js +6 -0
  200. package/dist/node_modules/@headlessui/react/dist/utils/active-element-history.js.map +1 -0
  201. package/dist/node_modules/@headlessui/react/dist/utils/bugs.js +4 -0
  202. package/dist/node_modules/@headlessui/react/dist/utils/bugs.js.map +1 -0
  203. package/dist/node_modules/@headlessui/react/dist/utils/calculate-active-index.js +4 -0
  204. package/dist/node_modules/@headlessui/react/dist/utils/calculate-active-index.js.map +1 -0
  205. package/dist/node_modules/@headlessui/react/dist/utils/class-names.js +4 -0
  206. package/dist/node_modules/@headlessui/react/dist/utils/class-names.js.map +1 -0
  207. package/dist/node_modules/@headlessui/react/dist/utils/disposables.js +6 -0
  208. package/dist/node_modules/@headlessui/react/dist/utils/disposables.js.map +1 -0
  209. package/dist/node_modules/@headlessui/react/dist/utils/document-ready.js +4 -0
  210. package/dist/node_modules/@headlessui/react/dist/utils/document-ready.js.map +1 -0
  211. package/dist/node_modules/@headlessui/react/dist/utils/env.js +4 -0
  212. package/dist/node_modules/@headlessui/react/dist/utils/env.js.map +1 -0
  213. package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js +7 -0
  214. package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js.map +1 -0
  215. package/dist/node_modules/@headlessui/react/dist/utils/form.js +4 -0
  216. package/dist/node_modules/@headlessui/react/dist/utils/form.js.map +1 -0
  217. package/dist/node_modules/@headlessui/react/dist/utils/match.js +4 -0
  218. package/dist/node_modules/@headlessui/react/dist/utils/match.js.map +1 -0
  219. package/dist/node_modules/@headlessui/react/dist/utils/micro-task.js +4 -0
  220. package/dist/node_modules/@headlessui/react/dist/utils/micro-task.js.map +1 -0
  221. package/dist/node_modules/@headlessui/react/dist/utils/once.js +4 -0
  222. package/dist/node_modules/@headlessui/react/dist/utils/once.js.map +1 -0
  223. package/dist/node_modules/@headlessui/react/dist/utils/owner.js +6 -0
  224. package/dist/node_modules/@headlessui/react/dist/utils/owner.js.map +1 -0
  225. package/dist/node_modules/@headlessui/react/dist/utils/platform.js +4 -0
  226. package/dist/node_modules/@headlessui/react/dist/utils/platform.js.map +1 -0
  227. package/dist/node_modules/@headlessui/react/dist/utils/render.js +11 -0
  228. package/dist/node_modules/@headlessui/react/dist/utils/render.js.map +1 -0
  229. package/dist/node_modules/@iconify/react/dist/iconify.js +1928 -0
  230. package/dist/node_modules/@iconify/react/dist/iconify.js.map +1 -0
  231. package/dist/node_modules/@radix-ui/number/dist/index.js +7 -0
  232. package/dist/node_modules/@radix-ui/number/dist/index.js.map +1 -0
  233. package/dist/node_modules/@radix-ui/primitive/dist/index.js +12 -0
  234. package/dist/node_modules/@radix-ui/primitive/dist/index.js.map +1 -0
  235. package/dist/node_modules/@radix-ui/react-accordion/dist/index.js +304 -0
  236. package/dist/node_modules/@radix-ui/react-accordion/dist/index.js.map +1 -0
  237. package/dist/node_modules/@radix-ui/react-arrow/dist/index.js +26 -0
  238. package/dist/node_modules/@radix-ui/react-arrow/dist/index.js.map +1 -0
  239. package/dist/node_modules/@radix-ui/react-collapsible/dist/index.js +145 -0
  240. package/dist/node_modules/@radix-ui/react-collapsible/dist/index.js.map +1 -0
  241. package/dist/node_modules/@radix-ui/react-collection/dist/index.js +69 -0
  242. package/dist/node_modules/@radix-ui/react-collection/dist/index.js.map +1 -0
  243. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js +19 -0
  244. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +1 -0
  245. package/dist/node_modules/@radix-ui/react-context/dist/index.js +80 -0
  246. package/dist/node_modules/@radix-ui/react-context/dist/index.js.map +1 -0
  247. package/dist/node_modules/@radix-ui/react-dialog/dist/index.js +320 -0
  248. package/dist/node_modules/@radix-ui/react-dialog/dist/index.js.map +1 -0
  249. package/dist/node_modules/@radix-ui/react-direction/dist/index.js +12 -0
  250. package/dist/node_modules/@radix-ui/react-direction/dist/index.js.map +1 -0
  251. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +212 -0
  252. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +1 -0
  253. package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.js +27 -0
  254. package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.js.map +1 -0
  255. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.js +208 -0
  256. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +1 -0
  257. package/dist/node_modules/@radix-ui/react-id/dist/index.js +16 -0
  258. package/dist/node_modules/@radix-ui/react-id/dist/index.js.map +1 -0
  259. package/dist/node_modules/@radix-ui/react-popper/dist/index.js +279 -0
  260. package/dist/node_modules/@radix-ui/react-popper/dist/index.js.map +1 -0
  261. package/dist/node_modules/@radix-ui/react-portal/dist/index.js +18 -0
  262. package/dist/node_modules/@radix-ui/react-portal/dist/index.js.map +1 -0
  263. package/dist/node_modules/@radix-ui/react-presence/dist/index.js +120 -0
  264. package/dist/node_modules/@radix-ui/react-presence/dist/index.js.map +1 -0
  265. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js +42 -0
  266. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -0
  267. package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js +221 -0
  268. package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js.map +1 -0
  269. package/dist/node_modules/@radix-ui/react-select/dist/index.js +1109 -0
  270. package/dist/node_modules/@radix-ui/react-select/dist/index.js.map +1 -0
  271. package/dist/node_modules/@radix-ui/react-slot/dist/index.js +82 -0
  272. package/dist/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  273. package/dist/node_modules/@radix-ui/react-tabs/dist/index.js +187 -0
  274. package/dist/node_modules/@radix-ui/react-tabs/dist/index.js.map +1 -0
  275. package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.js +13 -0
  276. package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.js.map +1 -0
  277. package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +47 -0
  278. package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +1 -0
  279. package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js +19 -0
  280. package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js.map +1 -0
  281. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +8 -0
  282. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.js.map +1 -0
  283. package/dist/node_modules/@radix-ui/react-use-previous/dist/index.js +16 -0
  284. package/dist/node_modules/@radix-ui/react-use-previous/dist/index.js.map +1 -0
  285. package/dist/node_modules/@radix-ui/react-use-size/dist/index.js +41 -0
  286. package/dist/node_modules/@radix-ui/react-use-size/dist/index.js.map +1 -0
  287. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js +35 -0
  288. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js.map +1 -0
  289. package/dist/node_modules/@react-google-maps/api/dist/esm.js +8515 -0
  290. package/dist/node_modules/@react-google-maps/api/dist/esm.js.map +1 -0
  291. package/dist/node_modules/@remix-run/router/dist/router.js +271 -0
  292. package/dist/node_modules/@remix-run/router/dist/router.js.map +1 -0
  293. package/dist/node_modules/@tanstack/react-virtual/dist/esm/index.js +43 -0
  294. package/dist/node_modules/@tanstack/react-virtual/dist/esm/index.js.map +1 -0
  295. package/dist/node_modules/@tanstack/virtual-core/dist/esm/index.js +669 -0
  296. package/dist/node_modules/@tanstack/virtual-core/dist/esm/index.js.map +1 -0
  297. package/dist/node_modules/@tanstack/virtual-core/dist/esm/utils.js +61 -0
  298. package/dist/node_modules/@tanstack/virtual-core/dist/esm/utils.js.map +1 -0
  299. package/dist/node_modules/aria-hidden/dist/es2015/index.js +137 -0
  300. package/dist/node_modules/aria-hidden/dist/es2015/index.js.map +1 -0
  301. package/dist/node_modules/fuse.js/dist/fuse.js +1779 -0
  302. package/dist/node_modules/fuse.js/dist/fuse.js.map +1 -0
  303. package/dist/node_modules/get-nonce/dist/es2015/index.js +9 -0
  304. package/dist/node_modules/get-nonce/dist/es2015/index.js.map +1 -0
  305. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js +17 -0
  306. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +1 -0
  307. package/dist/node_modules/react/jsx-runtime.js +12 -0
  308. package/dist/node_modules/react/jsx-runtime.js.map +1 -0
  309. package/dist/node_modules/react-loader-spinner/dist/index.js +134 -83
  310. package/dist/node_modules/react-loader-spinner/dist/index.js.map +1 -1
  311. package/dist/node_modules/react-remove-scroll/dist/es2015/Combination.js +10 -0
  312. package/dist/node_modules/react-remove-scroll/dist/es2015/Combination.js.map +1 -0
  313. package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +161 -0
  314. package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.js.map +1 -0
  315. package/dist/node_modules/react-remove-scroll/dist/es2015/UI.js +39 -0
  316. package/dist/node_modules/react-remove-scroll/dist/es2015/UI.js.map +1 -0
  317. package/dist/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js +22 -0
  318. package/dist/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js.map +1 -0
  319. package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +107 -0
  320. package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.js.map +1 -0
  321. package/dist/node_modules/react-remove-scroll/dist/es2015/medium.js +6 -0
  322. package/dist/node_modules/react-remove-scroll/dist/es2015/medium.js.map +1 -0
  323. package/dist/node_modules/react-remove-scroll/dist/es2015/sidecar.js +8 -0
  324. package/dist/node_modules/react-remove-scroll/dist/es2015/sidecar.js.map +1 -0
  325. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/component.js +57 -0
  326. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/component.js.map +1 -0
  327. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/constants.js +11 -0
  328. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/constants.js.map +1 -0
  329. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/utils.js +32 -0
  330. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/utils.js.map +1 -0
  331. package/dist/node_modules/react-router/dist/index.js +280 -0
  332. package/dist/node_modules/react-router/dist/index.js.map +1 -0
  333. package/dist/node_modules/react-router-dom/dist/index.js +201 -0
  334. package/dist/node_modules/react-router-dom/dist/index.js.map +1 -0
  335. package/dist/node_modules/react-style-singleton/dist/es2015/component.js +20 -0
  336. package/dist/node_modules/react-style-singleton/dist/es2015/component.js.map +1 -0
  337. package/dist/node_modules/react-style-singleton/dist/es2015/hook.js +26 -0
  338. package/dist/node_modules/react-style-singleton/dist/es2015/hook.js.map +1 -0
  339. package/dist/node_modules/react-style-singleton/dist/es2015/singleton.js +52 -0
  340. package/dist/node_modules/react-style-singleton/dist/es2015/singleton.js.map +1 -0
  341. package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js +716 -4
  342. package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js.map +1 -1
  343. package/dist/node_modules/styled-components/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js +5 -7
  344. package/dist/node_modules/styled-components/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js.map +1 -1
  345. package/dist/node_modules/styled-components/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +1 -1
  346. package/dist/node_modules/stylis/src/Enum.js +2 -2
  347. package/dist/node_modules/stylis/src/Enum.js.map +1 -1
  348. package/dist/node_modules/stylis/src/Middleware.js +59 -49
  349. package/dist/node_modules/stylis/src/Middleware.js.map +1 -1
  350. package/dist/node_modules/stylis/src/Parser.js +135 -137
  351. package/dist/node_modules/stylis/src/Parser.js.map +1 -1
  352. package/dist/node_modules/stylis/src/Prefixer.js +187 -135
  353. package/dist/node_modules/stylis/src/Prefixer.js.map +1 -1
  354. package/dist/node_modules/stylis/src/Serializer.js +21 -18
  355. package/dist/node_modules/stylis/src/Serializer.js.map +1 -1
  356. package/dist/node_modules/stylis/src/Tokenizer.js +121 -117
  357. package/dist/node_modules/stylis/src/Tokenizer.js.map +1 -1
  358. package/dist/node_modules/stylis/src/Utility.js +26 -24
  359. package/dist/node_modules/stylis/src/Utility.js.map +1 -1
  360. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +2530 -0
  361. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  362. package/dist/node_modules/tinycolor2/esm/tinycolor.js.map +1 -1
  363. package/dist/node_modules/tslib/tslib.es6.js +13 -1
  364. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  365. package/dist/node_modules/use-callback-ref/dist/es2015/assignRef.js +25 -0
  366. package/dist/node_modules/use-callback-ref/dist/es2015/assignRef.js.map +1 -0
  367. package/dist/node_modules/use-callback-ref/dist/es2015/useMergeRef.js +49 -0
  368. package/dist/node_modules/use-callback-ref/dist/es2015/useMergeRef.js.map +1 -0
  369. package/dist/node_modules/use-callback-ref/dist/es2015/useRef.js +43 -0
  370. package/dist/node_modules/use-callback-ref/dist/es2015/useRef.js.map +1 -0
  371. package/dist/node_modules/use-places-autocomplete/dist/index.esm.js +243 -0
  372. package/dist/node_modules/use-places-autocomplete/dist/index.esm.js.map +1 -0
  373. package/dist/node_modules/use-sidecar/dist/es2015/exports.js +22 -0
  374. package/dist/node_modules/use-sidecar/dist/es2015/exports.js.map +1 -0
  375. package/dist/node_modules/use-sidecar/dist/es2015/medium.js +78 -0
  376. package/dist/node_modules/use-sidecar/dist/es2015/medium.js.map +1 -0
  377. package/dist/services/configService.js +15 -0
  378. package/dist/services/configService.js.map +1 -0
  379. package/dist/services/listingAggregatorService.js +37 -0
  380. package/dist/services/listingAggregatorService.js.map +1 -0
  381. package/dist/services/listingEntityService.js +15 -0
  382. package/dist/services/listingEntityService.js.map +1 -0
  383. package/dist/services/listingService.js +30 -0
  384. package/dist/services/listingService.js.map +1 -0
  385. package/dist/styles/index.css +3 -1
  386. package/dist/types/components/containers/accordions/filter-container.d.ts +11 -0
  387. package/dist/types/components/containers/accordions/map-accordion-item-container.d.ts +1 -2
  388. package/dist/types/components/containers/filter/commute-container.d.ts +5 -0
  389. package/dist/types/components/containers/filter/filter-container.d.ts +7 -0
  390. package/dist/types/components/containers/filter/location-container.d.ts +10 -0
  391. package/dist/types/components/containers/filter/points-of-interest-container.d.ts +10 -0
  392. package/dist/types/components/containers/filter/points-of-interest-radio-item-container.d.ts +8 -0
  393. package/dist/types/components/containers/filter/search-container.d.ts +8 -0
  394. package/dist/types/components/containers/list/list-item/list-item-container.d.ts +1 -3
  395. package/dist/types/components/containers/maps/info-window-content-container.d.ts +5 -0
  396. package/dist/types/components/containers/maps/map-container.d.ts +7 -0
  397. package/dist/types/components/containers/maps/map-list-container.d.ts +15 -0
  398. package/dist/types/components/containers/maps/map-marker-container.d.ts +13 -0
  399. package/dist/types/components/modules/buttons/button-group-apply.d.ts +1 -2
  400. package/dist/types/components/modules/jobListing/listing-details.d.ts +1 -2
  401. package/dist/types/components/modules/list/field-mapper-desktop.d.ts +1 -2
  402. package/dist/types/components/modules/list/field-mapper-mobile.d.ts +1 -2
  403. package/dist/types/components/modules/list/list-item/list-item.d.ts +1 -1
  404. package/dist/types/constants/placeTypes.d.ts +8 -0
  405. package/dist/types/contexts/mapContext.d.ts +0 -1
  406. package/dist/types/contexts/mapListContext.d.ts +2 -54
  407. package/dist/types/contexts/placesContext.d.ts +10 -0
  408. package/dist/types/hooks/useList.d.ts +3 -3
  409. package/dist/types/services/configService.d.ts +6 -0
  410. package/dist/types/services/listingAggregatorService.d.ts +9 -0
  411. package/dist/types/services/listingEntityService.d.ts +6 -0
  412. package/dist/types/services/listingService.d.ts +9 -0
  413. package/dist/types/services/recruiterService.d.ts +6 -0
  414. package/dist/types/types/GetListingParams.d.ts +1 -1
  415. package/dist/types/types/ListingEntity.d.ts +1 -2
  416. package/dist/types/types/ListingFields.d.ts +2 -4
  417. package/dist/types/types/Listings.d.ts +1 -0
  418. package/dist/types/types/config/Colors.d.ts +0 -1
  419. package/dist/types/types/config/MapConfig.d.ts +0 -4
  420. package/dist/types/types/config/PointsOfInterestConfig.d.ts +0 -1
  421. package/dist/types/util/filterUtil.d.ts +8 -12
  422. package/dist/types/util/mapIconUtil.d.ts +24 -0
  423. package/dist/types/util/mapUtil.d.ts +3 -3
  424. package/dist/types/util/urlFilterUtil.d.ts +0 -1
  425. package/dist/util/filterUtil.js +122 -413
  426. package/dist/util/filterUtil.js.map +1 -1
  427. package/dist/util/loading.js +3 -3
  428. package/dist/util/loading.js.map +1 -1
  429. package/dist/util/mapUtil.js +25 -43
  430. package/dist/util/mapUtil.js.map +1 -1
  431. package/dist/util/urlFilterUtil.js +1 -5
  432. package/dist/util/urlFilterUtil.js.map +1 -1
  433. package/package.json +17 -66
  434. package/src/apis/hcApi.ts +2 -9
  435. package/src/components/HireControlMap.js +95 -160
  436. package/src/components/containers/accordions/filter-container.js +4 -14
  437. package/src/components/containers/accordions/filter-item-container.js +5 -7
  438. package/src/components/containers/accordions/map-accordion-item-container.js +7 -28
  439. package/src/components/containers/filter/commute-container.js +4 -15
  440. package/src/components/containers/filter/filter-container.js +13 -8
  441. package/src/components/containers/filter/filter-item-container.js +25 -39
  442. package/src/components/containers/filter/location-container.js +4 -9
  443. package/src/components/containers/filter/points-of-interest-container.js +3 -14
  444. package/src/components/containers/filter/points-of-interest-radio-item-container.js +1 -4
  445. package/src/components/containers/filter/search-container.js +2 -8
  446. package/src/components/containers/jobListing/listing-details-container.js +2 -6
  447. package/src/components/containers/list/item-list-container.tsx +13 -22
  448. package/src/components/containers/list/list-item/list-item-container.js +2 -11
  449. package/src/components/containers/maps/info-window-content-container.js +2 -5
  450. package/src/components/containers/maps/map-container.js +14 -92
  451. package/src/components/containers/maps/map-list-container.js +5 -33
  452. package/src/components/containers/maps/map-marker-container.js +2 -4
  453. package/src/components/modules/accordions/filterItem.js +3 -16
  454. package/src/components/modules/accordions/filters.js +4 -19
  455. package/src/components/modules/buttons/button-group-apply.js +9 -14
  456. package/src/components/modules/buttons/pill-wrapper.js +1 -2
  457. package/src/components/modules/dialogs/apply-dialog.js +2 -2
  458. package/src/components/modules/filter/commute.js +5 -7
  459. package/src/components/modules/filter/index.js +50 -137
  460. package/src/components/modules/filter/item.js +3 -16
  461. package/src/components/modules/filter/search.js +1 -7
  462. package/src/components/modules/jobListing/listing-details.js +3 -5
  463. package/src/components/modules/list/field-mapper-desktop.jsx +13 -32
  464. package/src/components/modules/list/field-mapper-mobile.jsx +80 -92
  465. package/src/components/modules/list/header-item.js +1 -1
  466. package/src/components/modules/list/item-list.tsx +5 -2
  467. package/src/components/modules/list/list-item/list-item.jsx +11 -85
  468. package/src/components/modules/maps/map-list.js +1 -1
  469. package/src/components/modules/maps/map.js +18 -30
  470. package/src/components/modules/maps/tabs.js +5 -5
  471. package/src/contexts/mapContext.tsx +18 -45
  472. package/src/contexts/mapListContext.tsx +86 -373
  473. package/src/contexts/placesContext.js +3 -3
  474. package/src/contexts/themeContext.js +3 -8
  475. package/src/hooks/useList.js +1 -3
  476. package/src/index.js +0 -9
  477. package/src/services/configService.ts +16 -0
  478. package/src/services/listingAggregatorService.ts +58 -0
  479. package/src/services/listingEntityService.ts +16 -0
  480. package/src/services/listingService.ts +40 -0
  481. package/src/services/recruiterService.ts +18 -0
  482. package/src/styles/bundle.css +1 -3
  483. package/src/styles/index.css +2 -4
  484. package/src/types/GetListingParams.ts +1 -1
  485. package/src/types/ListingEntity.ts +1 -2
  486. package/src/types/ListingFields.ts +2 -4
  487. package/src/types/Listings.ts +1 -0
  488. package/src/types/config/Colors.ts +0 -1
  489. package/src/types/config/MapConfig.ts +0 -2
  490. package/src/types/config/PointsOfInterestConfig.ts +0 -1
  491. package/src/util/fieldMapper.js +2 -6
  492. package/src/util/filterUtil.js +55 -261
  493. package/src/util/mapUtil.js +41 -59
  494. package/src/util/urlFilterUtil.js +1 -4
  495. package/README.md +0 -323
  496. package/src/components/modules/maps/map.js.bak +0 -67
  497. package/src/components/modules/maps/map.js.bak2 +0 -67
  498. package/src/contexts/componentContext.tsx +0 -226
  499. package/src/styles/components.css +0 -30
  500. package/src/util/algoliaSearchUtil.js +0 -151
  501. package/src/util/twMerge.js +0 -6
@@ -1,7 +1,9 @@
1
- import React, { createContext, useContext, useState, useEffect, useRef } from 'react';
2
- import { getFieldValue, applyFilters, generateFilterOptions, filterListingsByLocation } from '../util/filterUtil.js';
1
+ import React__default, { createContext, useContext, useState, useEffect } from 'react';
2
+ import { applyFilters, generateFilterOptions, filterListingsByLocation } from '../util/filterUtil.js';
3
3
  import { getStorageObject, setStorageObject } from '../util/localStorageUtil.js';
4
4
  import { filtersFromURL, updateURLWithFilters } from '../util/urlFilterUtil.js';
5
+ import { getListingEntities } from '../services/listingEntityService.js';
6
+ import fetchListings from '../services/listingAggregatorService.js';
5
7
 
6
8
  const MapListContext = createContext(undefined);
7
9
  const useMapList = () => {
@@ -18,116 +20,48 @@ const getQuery = (localStorageKey = '') => {
18
20
  }
19
21
  return query;
20
22
  };
21
- const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters, navigateToDetails, navigateToEasyApply, Link, linkFormat, easyApplyUrl, easyApplyText, isIframe, trackEvent, listings = [], entities = [], setFiltersUrl, hiddenFilters, handleUrlUpdate, defaultFilters, containerStyle, ExpandListComponent, mobileDetailsCallback = null, getListingEntitiesCallback, localStorageKey, hideMap = false, hideFilters = false, noEntities = false, filterConfig = {
22
- hideZeroResults: false,
23
- dynamicCounts: true,
24
- showFavorites: true,
25
- collapsedByDefault: false,
26
- sortAlphabetically: false,
27
- classNames: {
28
- filterContainer: '',
29
- filterContent: '',
30
- filterAccordion: '',
31
- filterAccordionHeader: '',
32
- filterAccordionContent: '',
33
- filterItem: '',
34
- filterItemLabel: '',
35
- filterItemCheckbox: '',
36
- filterItemCount: '',
37
- searchInput: '',
38
- resetButton: '',
39
- showJobsButton: '',
40
- filterFooter: ''
41
- }
42
- } }) => {
23
+ const MapListProvider = ({ children, siteConfig, resetFilters, navigateToDetails, navigateToEasyApply, Link, linkFormat, easyApplyUrl, easyApplyText, isIframe, trackEvent, listings = [], entities = [], setFiltersUrl, hiddenFilters, handleUrlUpdate, defaultFilters, containerStyle, ExpandListComponent, getListingEntitiesCallback, localStorageKey }) => {
43
24
  const firstLoadFilters = () => {
44
- if (typeof window === 'undefined') {
45
- return getStorageObject(localStorageKey + 'selectedFilters', {}) || {};
46
- }
47
- let urlData = filtersFromURL(window.location);
48
- let urlFilters = urlData?.filters;
49
- // If ls-ignore=true is in URL, don't load from localStorage
50
- if (urlData?.lsIgnore) {
51
- return urlFilters || {};
52
- }
25
+ let urlFilters = filtersFromURL(window.location)?.filters;
53
26
  return (setFiltersUrl === true && urlFilters && Object.keys(urlFilters).length > 0) ? urlFilters : getStorageObject(localStorageKey + 'selectedFilters', {}) || {};
54
27
  };
55
28
  const firstLoadQuery = () => {
56
29
  if (resetFilters)
57
30
  return null;
58
- if (typeof window === 'undefined')
59
- return getQuery(localStorageKey);
60
31
  // Check URL first
61
32
  const urlData = filtersFromURL(window.location);
62
- // If ls-ignore=true is in URL, ONLY use URL query (don't fall back to localStorage)
63
- if (urlData?.lsIgnore) {
64
- return urlData?.query || null;
65
- }
66
- // If setFiltersUrl is enabled and there's a query in URL, use it
67
33
  if (setFiltersUrl === true && urlData?.query) {
68
34
  return urlData.query;
69
35
  }
70
- // Only fall back to localStorage if there's NO query param in URL
71
- // This prevents localStorage from overriding empty query params
72
- if (setFiltersUrl === true && typeof urlData?.query !== 'undefined') {
73
- return null; // URL has query param but it's empty/null
74
- }
75
- // Fall back to localStorage only if URL has no query param at all
36
+ // Fall back to localStorage
76
37
  return getQuery(localStorageKey);
77
38
  };
78
39
  const [allListings, setAllListings] = useState([]);
79
40
  const [filteredListings, setFilteredListings] = useState([]);
80
41
  const [loading, setLoading] = useState(false);
81
- const [mapItems, setMapItems] = useState([]);
82
- const [query, setQuery] = useState(null);
83
- const [sortSetting, setSortSetting] = useState({ field: 'position', type: 'asc' });
42
+ const [mapItems, setMapItems] = useState(getStorageObject(localStorageKey + 'mapItems', []) || []);
43
+ const [query, setQuery] = useState(() => firstLoadQuery());
44
+ const [sortSetting, setSortSetting] = useState(getStorageObject(localStorageKey + 'sortSetting', { field: 'position', type: 'asc' }) || { field: 'position', type: 'asc' });
84
45
  const [listingEntities, setListingEntities] = useState({});
85
46
  const [firstLoad, setFirstLoad] = useState(true);
86
- const [commuteLocation, setCommuteLocation] = useState(null);
87
- const [selectedFilters, setSelectedFilters] = useState({});
88
- const [hasMounted, setHasMounted] = useState(false);
89
- // Load from localStorage/URL after mount to avoid hydration mismatch
90
- useEffect(() => {
91
- if (typeof window !== 'undefined') {
92
- const storedMapItems = getStorageObject(localStorageKey + 'mapItems', []) || [];
93
- const storedSortSetting = getStorageObject(localStorageKey + 'sortSetting', { field: 'position', type: 'asc' }) || { field: 'position', type: 'asc' };
94
- const storedCommuteLocation = getStorageObject(localStorageKey + 'commuteLocation');
95
- setMapItems(storedMapItems);
96
- setSortSetting(storedSortSetting);
97
- if (storedCommuteLocation)
98
- setCommuteLocation(storedCommuteLocation);
99
- // Load filters and query
100
- if (!resetFilters) {
101
- setSelectedFilters(firstLoadFilters());
102
- setQuery(firstLoadQuery());
103
- }
104
- setHasMounted(true);
105
- }
106
- }, [localStorageKey]);
47
+ const [commuteLocation, setCommuteLocation] = useState(getStorageObject('commuteLocation'));
48
+ const [selectedFilters, setSelectedFilters] = useState(() => resetFilters ? {} : firstLoadFilters());
107
49
  const [filterOptions, setFilterOptions] = useState();
108
50
  const [recruiters, setRecruiters] = useState({});
109
51
  const [filterDialogIsOpen, setFilterDialogIsOpen] = useState(false);
110
52
  const [mobileTab, setMobileTab] = useState("listTab");
111
53
  const [favorites, setFavorites] = useState([]);
112
54
  const [filterByFavorites, setFilterByFavorites] = useState(false);
113
- const entitiesInitialized = useRef(false);
114
- const [mapBounds, setMapBounds] = useState(null);
115
- const [baseFilteredListings, setBaseFilteredListings] = useState([]); // Store listings before bounds filtering
116
- const isApplyingBoundsFilter = useRef(false);
117
- const boundsDebounceTimer = useRef(null);
118
55
  const setNewFilteredListings = (filteredListings) => {
119
56
  setFilteredListings(filteredListings);
120
57
  };
121
58
  useEffect(() => {
122
59
  if (!sortSetting)
123
60
  return;
124
- if (typeof window !== 'undefined') {
125
- localStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));
126
- }
61
+ localStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));
62
+ setNewFilteredListings(filteredListings);
127
63
  }, [sortSetting, localStorageKey]);
128
64
  useEffect(() => {
129
- if (typeof window === 'undefined')
130
- return;
131
65
  const loadedFavorites = JSON.parse(localStorage.getItem(localStorageKey + 'favorites') || '[]');
132
66
  setFavorites(loadedFavorites);
133
67
  }, [localStorageKey]);
@@ -135,128 +69,81 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
135
69
  setStorageObject(localStorageKey + "commuteLocation", commuteLocation);
136
70
  }, [commuteLocation, localStorageKey]);
137
71
  useEffect(() => {
138
- if (!commuteLocation || noEntities)
72
+ if (!commuteLocation)
139
73
  return;
140
74
  async function fetchEntities() {
75
+ const distinctEntityIds = [
76
+ ...new Set(allListings.map(listing => listing.entityId ?? -1))
77
+ ];
141
78
  try {
142
- // Only fetch if callback is provided
143
- if (!getListingEntitiesCallback) {
144
- return;
145
- }
146
- const fetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);
147
- console.log('Fetched entities with travel times:', fetchedEntities);
79
+ console.log(getListingEntitiesCallback);
80
+ console.log("fetching entities");
81
+ const fetchedEntities = getListingEntitiesCallback !== null && getListingEntitiesCallback !== undefined ? await getListingEntitiesCallback(distinctEntityIds, `${commuteLocation.lat}, ${commuteLocation.lng}`) : await getListingEntities(distinctEntityIds, `${commuteLocation.lat}, ${commuteLocation.lng}`);
148
82
  setListingEntities(fetchedEntities);
149
- // Update travelTime on ALL listings (both allListings and filteredListings)
150
- const updatedAllListings = allListings.map(listing => {
83
+ const newFilteredListings = [...filteredListings] ?? [];
84
+ for (let i = 0; i < allListings.length; i++) {
85
+ const listing = newFilteredListings[i];
151
86
  if (listing &&
152
87
  listing.fields &&
153
- listing.fields.entityKey &&
154
- listing.fields.entityKey !== '') {
155
- const entityKey = listing.fields.entityKey;
156
- // Try exact match first, then lowercase match for case-insensitive lookup
157
- const travelTime = (fetchedEntities[entityKey] || fetchedEntities[entityKey.toLowerCase()])?.travelTime;
158
- if (travelTime !== undefined) {
159
- return {
160
- ...listing,
161
- fields: {
162
- ...listing.fields,
163
- travelTime
164
- }
165
- };
88
+ listing.entityId !== undefined &&
89
+ listing.entityId !== -1) {
90
+ const entityId = listing.entityId;
91
+ const travelTime = fetchedEntities[entityId]?.travelTime;
92
+ if (travelTime !== undefined && listing.fields) {
93
+ listing.fields.travelTime = travelTime;
166
94
  }
167
95
  }
168
- return listing;
169
- });
170
- console.log('Updated listings with travel times:', updatedAllListings.slice(0, 2));
171
- setAllListings(updatedAllListings);
96
+ }
172
97
  }
173
98
  catch (error) {
174
99
  console.error("Failed to fetch listing entities:", error);
175
100
  }
176
101
  }
177
102
  fetchEntities();
178
- }, [commuteLocation, noEntities]);
179
- // Set listingEntities from passed-in entities (only once on initial load)
180
- // Entities should be an object: { "rochester, mn": {...}, "albuquerque, nm": {...} }
181
- // Note: Commute location changes will fetch updated entities with travel times via separate useEffect
103
+ }, [commuteLocation, allListings, siteConfig.companyId]);
182
104
  useEffect(() => {
183
- if (!entities || entitiesInitialized.current)
184
- return;
185
- entitiesInitialized.current = true;
186
- // Handle both object (production format) and array (for backwards compatibility)
187
- if (Array.isArray(entities)) {
188
- // Convert array to object
189
- const entitiesObj = {};
190
- entities.forEach((entity) => {
191
- if (entity.entityKey) {
192
- entitiesObj[entity.entityKey.toLowerCase()] = entity;
193
- }
194
- });
195
- console.log('Set listingEntities from entities array:', entitiesObj);
196
- setListingEntities(entitiesObj);
197
- }
198
- else if (typeof entities === 'object') {
199
- // Normalize keys to lowercase for production format
200
- const normalizedEntities = {};
201
- Object.keys(entities).forEach(key => {
202
- normalizedEntities[key.toLowerCase()] = entities[key];
203
- });
204
- console.log('Set listingEntities from entities object:', normalizedEntities);
205
- setListingEntities(normalizedEntities);
206
- }
207
- // eslint-disable-next-line react-hooks/exhaustive-deps
208
- }, []); // Empty deps - only run once on mount, entities are static data
209
- // Set listings from passed-in data
210
- useEffect(() => {
211
- if (!listings || listings.length === 0) {
212
- setLoading(false);
213
- return;
214
- }
215
- setLoading(true);
216
- try {
217
- // Apply default filters if provided
218
- let processedListings = listings;
219
- if (defaultFilters) {
220
- processedListings = listings.filter(listing => {
221
- return Object.keys(defaultFilters).every(filterKey => {
222
- const filterValues = defaultFilters[filterKey];
223
- const listingValue = getFieldValue(listing, filterKey);
224
- return filterValues.includes(listingValue);
105
+ const handleFetchListings = async () => {
106
+ if (!getStorageObject(localStorageKey + 'listings') ?? [].length) {
107
+ setLoading(true);
108
+ }
109
+ try {
110
+ const { listingsResult, fetchedEntities, distinctItems } = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback);
111
+ if (defaultFilters) {
112
+ const filteredListings = listingsResult.filter(listing => {
113
+ if (!listing.fields)
114
+ return false;
115
+ return Object.keys(defaultFilters).every(filterKey => {
116
+ const filterValues = defaultFilters[filterKey];
117
+ const listingValue = listing.fields ? listing.fields[filterKey] : null;
118
+ return filterValues.includes(listingValue);
119
+ });
225
120
  });
226
- });
121
+ setAllListings(filteredListings);
122
+ }
123
+ else {
124
+ setAllListings(listingsResult);
125
+ }
126
+ setListingEntities(fetchedEntities);
127
+ setMapItems(distinctItems);
227
128
  }
228
- setAllListings(processedListings);
229
- console.log('Set allListings to', processedListings.length, 'items');
230
- // Map items will be set when entities are processed
231
- // For now, just set empty object - will be populated when entities arrive
232
- setMapItems({});
233
- }
234
- catch (error) {
235
- console.error('Error processing listings:', error);
236
- }
237
- setLoading(false);
238
- }, [listings]);
239
- useEffect(() => {
240
- const processListings = async () => {
241
- // Don't process if allListings hasn't been loaded yet
242
- if (allListings.length === 0) {
243
- console.log('processListings: Skipping - allListings is empty');
244
- return;
129
+ catch (error) {
130
+ console.log(error);
245
131
  }
132
+ setLoading(false);
133
+ };
134
+ handleFetchListings();
135
+ }, [query, siteConfig, commuteLocation]);
136
+ useEffect(() => {
137
+ const processListings = () => {
246
138
  let filteredListings;
247
139
  let tempSelectedFilters = selectedFilters;
248
140
  let tempQuery = query;
249
- console.log('processListings: Running with query:', tempQuery, 'and', allListings.length, 'listings');
250
- const { mapItems, filteredListings: tempFilteredListings } = await applyFilters(allListings, tempSelectedFilters, tempQuery, listingEntities, favorites, siteConfig, firstLoad);
141
+ const { mapItems, filteredListings: tempFilteredListings } = applyFilters(allListings, tempSelectedFilters, tempQuery, listingEntities, favorites, siteConfig);
251
142
  filteredListings = tempFilteredListings;
252
143
  if (filterByFavorites) {
253
144
  filteredListings = filteredListings.filter((x) => favorites.includes(x.id));
254
145
  }
255
- // Store the base filtered listings (before bounds filtering)
256
- setBaseFilteredListings(filteredListings);
257
- // Batch state updates together
258
146
  setNewFilteredListings(filteredListings);
259
- setMapItems(mapItems);
260
147
  if (firstLoad && tempSelectedFilters) ;
261
148
  else if (Object.keys(tempSelectedFilters).length === 0 && !firstLoad) {
262
149
  localStorage.removeItem(localStorageKey + 'selectedFilters');
@@ -264,39 +151,15 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
264
151
  else if (!firstLoad) {
265
152
  setStorageObject(localStorageKey + 'selectedFilters', tempSelectedFilters);
266
153
  }
267
- if (setFiltersUrl === true && typeof window !== 'undefined') {
154
+ if (setFiltersUrl === true) {
268
155
  updateURLWithFilters(tempSelectedFilters, window.location, tempQuery, handleUrlUpdate);
269
156
  }
270
- if (typeof window !== 'undefined') {
271
- tempQuery != null ? localStorage.setItem(localStorageKey + 'query', tempQuery) : localStorage.removeItem(localStorageKey + 'query');
272
- }
157
+ tempQuery != null ? localStorage.setItem(localStorageKey + 'query', tempQuery) : localStorage.removeItem(localStorageKey + 'query');
158
+ setMapItems(mapItems);
273
159
  if (tempSelectedFilters) {
274
160
  const keys = Object.keys(tempSelectedFilters);
275
161
  const lastKey = keys[keys.length - 1];
276
- // Ensure all filterConfig properties have values
277
- const normalizedFilterConfig = {
278
- hideZeroResults: filterConfig?.hideZeroResults ?? false,
279
- dynamicCounts: filterConfig?.dynamicCounts ?? true,
280
- showFavorites: filterConfig?.showFavorites ?? true,
281
- collapsedByDefault: filterConfig?.collapsedByDefault ?? false,
282
- sortAlphabetically: filterConfig?.sortAlphabetically ?? false,
283
- classNames: {
284
- filterContainer: filterConfig?.classNames?.filterContainer ?? '',
285
- filterContent: filterConfig?.classNames?.filterContent ?? '',
286
- filterAccordion: filterConfig?.classNames?.filterAccordion ?? '',
287
- filterAccordionHeader: filterConfig?.classNames?.filterAccordionHeader ?? '',
288
- filterAccordionContent: filterConfig?.classNames?.filterAccordionContent ?? '',
289
- filterItem: filterConfig?.classNames?.filterItem ?? '',
290
- filterItemLabel: filterConfig?.classNames?.filterItemLabel ?? '',
291
- filterItemCheckbox: filterConfig?.classNames?.filterItemCheckbox ?? '',
292
- filterItemCount: filterConfig?.classNames?.filterItemCount ?? '',
293
- searchInput: filterConfig?.classNames?.searchInput ?? '',
294
- resetButton: filterConfig?.classNames?.resetButton ?? '',
295
- showJobsButton: filterConfig?.classNames?.showJobsButton ?? '',
296
- filterFooter: filterConfig?.classNames?.filterFooter ?? ''
297
- }
298
- };
299
- const options = generateFilterOptions(filteredListings, allListings, siteConfig, filterOptions, lastKey, favorites, tempSelectedFilters, normalizedFilterConfig);
162
+ const options = generateFilterOptions(filteredListings, allListings, siteConfig, filterOptions, lastKey, favorites, tempSelectedFilters);
300
163
  if (options) {
301
164
  setFilterOptions(options);
302
165
  if (firstLoad)
@@ -305,65 +168,7 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
305
168
  }
306
169
  };
307
170
  processListings();
308
- }, [selectedFilters, query, filterByFavorites, favorites, allListings]);
309
- // Separate effect for map bounds filtering with debouncing to avoid infinite loops
310
- useEffect(() => {
311
- // Clear any existing timer
312
- if (boundsDebounceTimer.current) {
313
- clearTimeout(boundsDebounceTimer.current);
314
- }
315
- // Don't filter if feature is disabled or no bounds available
316
- if (!siteConfig.filterByMapBounds || !mapBounds || baseFilteredListings.length === 0) {
317
- return;
318
- }
319
- // Prevent re-entrant calls
320
- if (isApplyingBoundsFilter.current) {
321
- return;
322
- }
323
- // Debounce the bounds filtering by 300ms
324
- boundsDebounceTimer.current = setTimeout(() => {
325
- isApplyingBoundsFilter.current = true;
326
- console.log('Applying map bounds filter to', baseFilteredListings.length, 'listings');
327
- const boundsFilteredListings = baseFilteredListings.filter((listing) => {
328
- const lat = listing.mapDetails?.latitude;
329
- const lng = listing.mapDetails?.longitude;
330
- if (!lat || !lng)
331
- return false;
332
- return mapBounds.contains({ lat, lng });
333
- });
334
- console.log('After bounds filter:', boundsFilteredListings.length, 'listings remain');
335
- // Use a flag to prevent this from triggering processListings
336
- setFilteredListings(boundsFilteredListings);
337
- // Reset the flag after a short delay
338
- setTimeout(() => {
339
- isApplyingBoundsFilter.current = false;
340
- }, 100);
341
- }, 300);
342
- return () => {
343
- if (boundsDebounceTimer.current) {
344
- clearTimeout(boundsDebounceTimer.current);
345
- }
346
- };
347
- }, [mapBounds, siteConfig.filterByMapBounds]);
348
- // When baseFilteredListings changes, apply bounds filter if enabled
349
- useEffect(() => {
350
- if (!siteConfig.filterByMapBounds || !mapBounds || baseFilteredListings.length === 0) {
351
- // If bounds filtering is disabled, just set the base listings
352
- if (!siteConfig.filterByMapBounds && baseFilteredListings.length > 0) {
353
- setFilteredListings(baseFilteredListings);
354
- }
355
- return;
356
- }
357
- // If bounds filtering is enabled, trigger it
358
- const boundsFilteredListings = baseFilteredListings.filter((listing) => {
359
- const lat = listing.mapDetails?.latitude;
360
- const lng = listing.mapDetails?.longitude;
361
- if (!lat || !lng)
362
- return false;
363
- return mapBounds.contains({ lat, lng });
364
- });
365
- setFilteredListings(boundsFilteredListings);
366
- }, [baseFilteredListings]);
171
+ }, [selectedFilters, query, listingEntities, filterByFavorites, favorites]);
367
172
  const handleFilterListingsByLocation = (selectedLocation) => {
368
173
  const { filteredListings } = filterListingsByLocation(allListings, selectedLocation, listingEntities);
369
174
  setNewFilteredListings(filteredListings);
@@ -374,8 +179,6 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
374
179
  setSelectedFilters(newFilters);
375
180
  };
376
181
  const handleSettingFavorites = (newFavorites) => {
377
- if (typeof window === 'undefined')
378
- return;
379
182
  if (newFavorites == null) {
380
183
  localStorage.removeItem(localStorageKey + 'favorites');
381
184
  }
@@ -384,7 +187,7 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
384
187
  localStorage.setItem(localStorageKey + 'favorites', JSON.stringify(newFavorites));
385
188
  }
386
189
  };
387
- return (React.createElement(MapListContext.Provider, { value: {
190
+ return (React__default.createElement(MapListContext.Provider, { value: {
388
191
  loading,
389
192
  allListings,
390
193
  filteredListings,
@@ -403,7 +206,6 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
403
206
  setMobileTab,
404
207
  mobileTab,
405
208
  siteConfig,
406
- googleMapsApiKey,
407
209
  favorites,
408
210
  handleSettingFavorites,
409
211
  resetEntityFilter,
@@ -411,7 +213,6 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
411
213
  filterByFavorites,
412
214
  commuteLocation,
413
215
  setCommuteLocation,
414
- setMapBounds,
415
216
  navigateToDetails,
416
217
  navigateToEasyApply,
417
218
  Link,
@@ -425,9 +226,7 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
425
226
  defaultFilters,
426
227
  hiddenFilters,
427
228
  containerStyle,
428
- ExpandListComponent,
429
- mobileDetailsCallback, noEntities,
430
- filterConfig
229
+ ExpandListComponent
431
230
  } }, children));
432
231
  };
433
232
 
@@ -1 +1 @@
1
- {"version":3,"file":"mapListContext.js","sources":["../../src/contexts/mapListContext.tsx"],"sourcesContent":["import React, { createContext, useState, useEffect, useContext, useRef, ReactNode, JSX } from 'react';\n\nimport { generateFilterOptions, applyFilters, filterListingsByLocation, getFieldValue } from '~/util/filterUtil';\nimport { getStorageObject, setStorageObject } from '~/util/localStorageUtil';\nimport { updateURLWithFilters, filtersFromURL } from '~/util/urlFilterUtil';\nimport { useMap } from '~/contexts/mapContext';\n\nimport { Listing } from '~/types/Listings';\nimport { ListingEntity } from '~/types/ListingEntity';\nimport { Recruiter } from '~/types/Recruiter';\nimport { MapConfig, MapConfig as SiteConfig } from '~/types/config/MapConfig';\nimport { get } from 'http';\n\ninterface MapListContextProps {\n loading: boolean;\n allListings: Listing[];\n filteredListings: Listing[];\n mapItems: any;\n query: string | null;\n setNewFilteredListings: (filteredListings: Listing[]) => void;\n setQuery: (query: string | null) => void;\n listingEntities: Record<number, ListingEntity> | null;\n selectedFilters: Record<string, any>;\n setSelectedFilters: (filters: Record<string, any>) => void;\n filterOptions: any;\n recruiters: Record<number, Recruiter>;\n handleFilterListingsByLocation: (selectedLocation: any) => void;\n filterDialogIsOpen: boolean;\n setFilterDialogIsOpen: (isOpen: boolean) => void;\n setMobileTab: (tab: string) => void;\n mobileTab: string;\n siteConfig: SiteConfig;\n googleMapsApiKey?: string;\n favorites: number[];\n resetEntityFilter: () => void;\n handleSettingFavorites: (favorites: number[] | null) => void;\n setFilterByFavorites: (filter: boolean) => void;\n filterByFavorites: boolean;\n commuteLocation: any | null;\n setCommuteLocation: (location: any | null) => void;\n setMapBounds: (bounds: google.maps.LatLngBounds | null) => void;\n navigateToDetails: (id: number) => void;\n navigateToEasyApply: (id: number) => void;\n Link: React.ComponentType<any>;\n linkFormat: string;\n easyApplyUrl: string;\n easyApplyText: string;\n\tisIframe: boolean;\n sortSetting: { field: string; type: string };\n setSortSetting: (setting: { field: string; type: string }) => void;\n trackEvent: (event: string) => void;\n defaultFilters?: Record<string, any>;\n hiddenFilters?: string[];\n containerStyle?: any;\n ExpandListComponent?: React.ComponentType<{ listing: any }> | ((listing: any) => JSX.Element) | null;\n mobileDetailsCallback?: ((item: any) => void) | null;\n noEntities?: boolean;\n filterConfig?: {\n hideZeroResults?: boolean;\n dynamicCounts?: boolean;\n showFavorites?: boolean;\n collapsedByDefault?: boolean;\n sortAlphabetically?: boolean;\n classNames?: {\n filterContainer?: string;\n filterContent?: string;\n filterAccordion?: string;\n filterAccordionHeader?: string;\n filterAccordionContent?: string;\n filterItem?: string;\n filterItemLabel?: string;\n filterItemCheckbox?: string;\n filterItemCount?: string;\n searchInput?: string;\n resetButton?: string;\n showJobsButton?: string;\n filterFooter?: string;\n };\n };\n}\n\nconst MapListContext = createContext<MapListContextProps | undefined>(undefined);\n\nexport const useMapList = () => {\n\tconst context = useContext(MapListContext);\n\tif (!context) {\n\t\tthrow new Error('useMapList must be used within a MapListProvider');\n\t}\n\treturn context;\n};\n\nconst getQuery = (localStorageKey: string = ''): string | null => {\n\tlet query: string | null = null;\n\tif (typeof window !== 'undefined') {\n\t\tquery = localStorage.getItem(localStorageKey + 'query');\n\t}\n\treturn query;\n};\n\ninterface MapListProviderProps {\n children: ReactNode;\n siteConfig: MapConfig;\n googleMapsApiKey?: string;\n resetFilters: boolean;\n navigateToDetails: (id: number) => void;\n navigateToEasyApply: (id: number) => void;\n Link: React.ComponentType<any>;\n linkFormat: string;\n easyApplyUrl: string;\n easyApplyText: string;\n\tisIframe: boolean;\n trackEvent: (event: string) => void;\n listings?: Listing[];\n\tentities?: ListingEntity[];\n setFiltersUrl?:boolean;\n hiddenFilters?: string[];\n handleUrlUpdate: (searchParams: string) => void;\n defaultFilters?: Record<string, any>;\n containerStyle?: any;\n\tlocalStorageKey: string;\n\tgetListingEntitiesCallback?: (origin?: string) => Promise<any>;\n ExpandListComponent?: React.ComponentType<{ listing: Listing }> | ((listing: Listing) => JSX.Element) | null;\n mobileDetailsCallback?: ((item: any) => void) | null;\n hideMap?: boolean;\n hideFilters?: boolean;\n noEntities?: boolean;\n filterConfig?: {\n hideZeroResults?: boolean;\n dynamicCounts?: boolean;\n showFavorites?: boolean;\n collapsedByDefault?: boolean;\n sortAlphabetically?: boolean;\n classNames?: {\n filterContainer?: string;\n filterContent?: string;\n filterAccordion?: string;\n filterAccordionHeader?: string;\n filterAccordionContent?: string;\n filterItem?: string;\n filterItemLabel?: string;\n filterItemCheckbox?: string;\n filterItemCount?: string;\n searchInput?: string;\n resetButton?: string;\n showJobsButton?: string;\n filterFooter?: string;\n };\n };\n}\n\nexport const MapListProvider: React.FC<MapListProviderProps> = ({\n\tchildren,\n\tsiteConfig,\n\tgoogleMapsApiKey,\n\tresetFilters,\n\tnavigateToDetails,\n\tnavigateToEasyApply,\n\tLink,\n\tlinkFormat,\n\teasyApplyUrl,\n\teasyApplyText,\n\tisIframe,\n\ttrackEvent,\n\tlistings = [],\n\tentities = [],\n\tsetFiltersUrl,\n\thiddenFilters,\n\thandleUrlUpdate,\n\tdefaultFilters,\n\tcontainerStyle,\n\tExpandListComponent,\n\tmobileDetailsCallback = null,\n\tgetListingEntitiesCallback,\n\tlocalStorageKey,\n\thideMap = false,\n\thideFilters = false,\n\tnoEntities = false,\n\tfilterConfig = {\n\t\thideZeroResults: false,\n\t\tdynamicCounts: true,\n\t\tshowFavorites: true,\n\t\tcollapsedByDefault: false,\n\t\tsortAlphabetically: false,\n\t\tclassNames: {\n\t\t\tfilterContainer: '',\n\t\t\tfilterContent: '',\n\t\t\tfilterAccordion: '',\n\t\t\tfilterAccordionHeader: '',\n\t\t\tfilterAccordionContent: '',\n\t\t\tfilterItem: '',\n\t\t\tfilterItemLabel: '',\n\t\t\tfilterItemCheckbox: '',\n\t\t\tfilterItemCount: '',\n\t\t\tsearchInput: '',\n\t\t\tresetButton: '',\n\t\t\tshowJobsButton: '',\n\t\t\tfilterFooter: ''\n\t\t}\n\t}\n}) => {\n\tconst firstLoadFilters = () =>{\n\t\tif (typeof window === 'undefined') {\n\t\t\treturn getStorageObject(localStorageKey + 'selectedFilters', {}) || {};\n\t\t}\n\t\tlet urlData = filtersFromURL(window.location);\n\t\tlet urlFilters = urlData?.filters;\n\n\t\t// If ls-ignore=true is in URL, don't load from localStorage\n\t\tif (urlData?.lsIgnore) {\n\t\t\treturn urlFilters || {};\n\t\t}\n\n\t\treturn (setFiltersUrl === true && urlFilters && Object.keys(urlFilters).length > 0) ? urlFilters : getStorageObject(localStorageKey + 'selectedFilters', {}) || {}\n\t}\n\n\tconst firstLoadQuery = (): string | null => {\n\t\tif (resetFilters) return null;\n\t\tif (typeof window === 'undefined') return getQuery(localStorageKey);\n\t\t// Check URL first\n\t\tconst urlData = filtersFromURL(window.location);\n\n\t\t// If ls-ignore=true is in URL, ONLY use URL query (don't fall back to localStorage)\n\t\tif (urlData?.lsIgnore) {\n\t\t\treturn urlData?.query || null;\n\t\t}\n\n\t\t// If setFiltersUrl is enabled and there's a query in URL, use it\n\t\tif (setFiltersUrl === true && urlData?.query) {\n\t\t\treturn urlData.query;\n\t\t}\n\n\t\t// Only fall back to localStorage if there's NO query param in URL\n\t\t// This prevents localStorage from overriding empty query params\n\t\tif (setFiltersUrl === true && typeof urlData?.query !== 'undefined') {\n\t\t\treturn null; // URL has query param but it's empty/null\n\t\t}\n\n\t\t// Fall back to localStorage only if URL has no query param at all\n\t\treturn getQuery(localStorageKey);\n\t}\n\n\tconst [allListings, setAllListings] = useState<Listing[]>([]);\n\tconst [filteredListings, setFilteredListings] = useState<Listing[]>([]);\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [mapItems, setMapItems] = useState<any>([]);\n\tconst [query, setQuery] = useState<string | null>(null);\n\tconst [sortSetting, setSortSetting] = useState<{ field: string; type: string }>({ field: 'position', type: 'asc' });\n\tconst [listingEntities, setListingEntities] = useState<Record<number, ListingEntity> | null>({});\n\tconst [firstLoad, setFirstLoad] = useState<boolean>(true);\n\tconst [commuteLocation, setCommuteLocation] = useState<any | null>(null);\n\tconst [selectedFilters, setSelectedFilters] = useState<Record<string, any>>({});\n\tconst [hasMounted, setHasMounted] = useState(false);\n\n\t// Load from localStorage/URL after mount to avoid hydration mismatch\n\tuseEffect(() => {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tconst storedMapItems = getStorageObject(localStorageKey + 'mapItems', []) || [];\n\t\t\tconst storedSortSetting = getStorageObject(localStorageKey + 'sortSetting', { field: 'position', type: 'asc' }) || { field: 'position', type: 'asc' };\n\t\t\tconst storedCommuteLocation = getStorageObject(localStorageKey + 'commuteLocation');\n\n\t\t\tsetMapItems(storedMapItems);\n\t\t\tsetSortSetting(storedSortSetting);\n\t\t\tif (storedCommuteLocation) setCommuteLocation(storedCommuteLocation);\n\n\t\t\t// Load filters and query\n\t\t\tif (!resetFilters) {\n\t\t\t\tsetSelectedFilters(firstLoadFilters());\n\t\t\t\tsetQuery(firstLoadQuery());\n\t\t\t}\n\n\t\t\tsetHasMounted(true);\n\t\t}\n\t}, [localStorageKey]);\n\tconst [filterOptions, setFilterOptions] = useState<any>();\n\tconst [recruiters, setRecruiters] = useState<Record<number, Recruiter>>({});\n\tconst [filterDialogIsOpen, setFilterDialogIsOpen] = useState<boolean>(false);\n\tconst [mobileTab, setMobileTab] = useState<string>(\"listTab\");\n\tconst [favorites, setFavorites] = useState<number[]>([]);\n\tconst [filterByFavorites, setFilterByFavorites] = useState<boolean>(false);\n\tconst entitiesInitialized = useRef<boolean>(false);\n\tconst [mapBounds, setMapBounds] = useState<google.maps.LatLngBounds | null>(null);\n\tconst [baseFilteredListings, setBaseFilteredListings] = useState<Listing[]>([]); // Store listings before bounds filtering\n\tconst isApplyingBoundsFilter = useRef<boolean>(false);\n\tconst boundsDebounceTimer = useRef<NodeJS.Timeout | null>(null);\n\n\tconst setNewFilteredListings = (filteredListings: Listing[]) => {\n\t\tsetFilteredListings(filteredListings);\n\t};\n\n\tuseEffect(() => {\n\t\tif (!sortSetting) return;\n\t\tif (typeof window !== 'undefined') {\n\t\t\tlocalStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));\n\t\t}\n\t}, [sortSetting, localStorageKey]);\n\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\tconst loadedFavorites = JSON.parse(localStorage.getItem(localStorageKey + 'favorites') || '[]');\n\t\tsetFavorites(loadedFavorites);\n\t}, [localStorageKey]);\n\n\tuseEffect(() => {\n\t\tsetStorageObject(localStorageKey + \"commuteLocation\", commuteLocation);\n\t}, [commuteLocation, localStorageKey]);\n\n\n\tuseEffect(() => {\n\t\tif (!commuteLocation || noEntities) return;\n\n\t\tasync function fetchEntities() {\n\t\t\ttry {\n\t\t\t\t// Only fetch if callback is provided\n\t\t\t\tif (!getListingEntitiesCallback) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst fetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);\n\t\t\t\tconsole.log('Fetched entities with travel times:', fetchedEntities);\n\t\t\t\tsetListingEntities(fetchedEntities);\n\n\t\t\t\t// Update travelTime on ALL listings (both allListings and filteredListings)\n\t\t\t\tconst updatedAllListings = allListings.map(listing => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tlisting &&\n\t\t\t\t\t\tlisting.fields &&\n\t\t\t\t\t\tlisting.fields.entityKey &&\n\t\t\t\t\t\tlisting.fields.entityKey !== ''\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst entityKey = listing.fields.entityKey;\n\t\t\t\t\t\t// Try exact match first, then lowercase match for case-insensitive lookup\n\t\t\t\t\t\tconst travelTime = (fetchedEntities[entityKey] || fetchedEntities[entityKey.toLowerCase()])?.travelTime;\n\t\t\t\t\t\tif (travelTime !== undefined) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...listing,\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t...listing.fields,\n\t\t\t\t\t\t\t\t\ttravelTime\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn listing;\n\t\t\t\t});\n\n\t\t\t\tconsole.log('Updated listings with travel times:', updatedAllListings.slice(0, 2));\n\t\t\t\tsetAllListings(updatedAllListings);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to fetch listing entities:\", error);\n\t\t\t}\n\t\t}\n\n\t\tfetchEntities();\n\t}, [commuteLocation, noEntities]);\n\n\t// Set listingEntities from passed-in entities (only once on initial load)\n\t// Entities should be an object: { \"rochester, mn\": {...}, \"albuquerque, nm\": {...} }\n\t// Note: Commute location changes will fetch updated entities with travel times via separate useEffect\n\tuseEffect(() => {\n\t\tif (!entities || entitiesInitialized.current) return;\n\n\t\tentitiesInitialized.current = true;\n\n\t\t// Handle both object (production format) and array (for backwards compatibility)\n\t\tif (Array.isArray(entities)) {\n\t\t\t// Convert array to object\n\t\t\tconst entitiesObj: Record<string, any> = {};\n\t\t\tentities.forEach((entity: any) => {\n\t\t\t\tif (entity.entityKey) {\n\t\t\t\t\tentitiesObj[entity.entityKey.toLowerCase()] = entity;\n\t\t\t\t}\n\t\t\t});\n\t\t\tconsole.log('Set listingEntities from entities array:', entitiesObj);\n\t\t\tsetListingEntities(entitiesObj);\n\t\t} else if (typeof entities === 'object') {\n\t\t\t// Normalize keys to lowercase for production format\n\t\t\tconst normalizedEntities: Record<string, any> = {};\n\t\t\tObject.keys(entities).forEach(key => {\n\t\t\t\tnormalizedEntities[key.toLowerCase()] = entities[key];\n\t\t\t});\n\t\t\tconsole.log('Set listingEntities from entities object:', normalizedEntities);\n\t\t\tsetListingEntities(normalizedEntities);\n\t\t}\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []); // Empty deps - only run once on mount, entities are static data\n\n\t// Set listings from passed-in data\n\tuseEffect(() => {\n\t\tif (!listings || listings.length === 0) {\n\t\t\tsetLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\tsetLoading(true);\n\n\t\ttry {\n\t\t\t// Apply default filters if provided\n\t\t\tlet processedListings = listings;\n\t\t\tif (defaultFilters) {\n\t\t\t\tprocessedListings = listings.filter(listing => {\n\t\t\t\treturn Object.keys(defaultFilters).every(filterKey => {\n\t\t\t\t\tconst filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];\n\t\t\t\t\tconst listingValue = getFieldValue(listing, filterKey);\n\t\t\t\t\treturn filterValues.includes(listingValue);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tsetAllListings(processedListings);\n\t\tconsole.log('Set allListings to', processedListings.length, 'items');\n\t\t\n\t\t// Map items will be set when entities are processed\n\t\t// For now, just set empty object - will be populated when entities arrive\n\t\tsetMapItems({});\n\t} catch (error) {\n\t\tconsole.error('Error processing listings:', error);\n\t}\n\t\n\tsetLoading(false);\n}, [listings]);\n\nuseEffect(() => {\n\tconst processListings = async () => {\n\t\t// Don't process if allListings hasn't been loaded yet\n\t\tif (allListings.length === 0) {\n\t\t\tconsole.log('processListings: Skipping - allListings is empty');\n\t\t\treturn;\n\t\t}\n\n\t\tlet filteredListings: Listing[];\n\t\tlet tempSelectedFilters = selectedFilters;\n\t\tlet tempQuery = query;\n\n\t\tconsole.log('processListings: Running with query:', tempQuery, 'and', allListings.length, 'listings');\n\n\t\tconst { mapItems, filteredListings: tempFilteredListings } = await applyFilters(\n\t\t\t\tallListings,\n\t\t\t\ttempSelectedFilters,\n\t\t\t\ttempQuery,\n\t\t\t\tlistingEntities,\n\t\t\t\tfavorites,\n\t\t\t\tsiteConfig,\n\t\t\t\tfirstLoad\n\t\t\t);\n\t\t\tfilteredListings = tempFilteredListings;\n\n\t\t\tif (filterByFavorites) {\n\t\t\t\tfilteredListings = filteredListings.filter((x: Listing) => favorites.includes(x.id));\n\t\t\t}\n\n\t\t\t// Store the base filtered listings (before bounds filtering)\n\t\t\tsetBaseFilteredListings(filteredListings);\n\n\t\t\t// Batch state updates together\n\t\t\tsetNewFilteredListings(filteredListings);\n\t\t\tsetMapItems(mapItems);\n\n\t\t\tif (firstLoad && tempSelectedFilters) {\n\t\t\t\t// Update URL with filters if needed\n\t\t\t} else if (Object.keys(tempSelectedFilters).length === 0 && !firstLoad) {\n\t\t\t\tlocalStorage.removeItem(localStorageKey + 'selectedFilters');\n\t\t\t} else if (!firstLoad) {\n\t\t\t\tsetStorageObject(localStorageKey + 'selectedFilters', tempSelectedFilters);\n\t\t\t}\n\t\t\tif(setFiltersUrl === true && typeof window !== 'undefined')\n\t\t\t{\n\t\t\t\tupdateURLWithFilters(tempSelectedFilters, window.location, tempQuery, handleUrlUpdate);\n\t\t\t}\n\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\ttempQuery != null ? localStorage.setItem(localStorageKey + 'query', tempQuery) : localStorage.removeItem(localStorageKey + 'query');\n\t\t\t}\n\n\t\t\tif (tempSelectedFilters) {\n\t\t\t\tconst keys = Object.keys(tempSelectedFilters);\n\t\t\t\tconst lastKey = keys[keys.length - 1];\n\n\t\t\t\t// Ensure all filterConfig properties have values\n\t\t\t\tconst normalizedFilterConfig = {\n\t\t\t\t\thideZeroResults: filterConfig?.hideZeroResults ?? false,\n\t\t\t\t\tdynamicCounts: filterConfig?.dynamicCounts ?? true,\n\t\t\t\t\tshowFavorites: filterConfig?.showFavorites ?? true,\n\t\t\t\t\tcollapsedByDefault: filterConfig?.collapsedByDefault ?? false,\n\t\t\t\t\tsortAlphabetically: filterConfig?.sortAlphabetically ?? false,\n\t\t\t\t\tclassNames: {\n\t\t\t\t\t\tfilterContainer: filterConfig?.classNames?.filterContainer ?? '',\n\t\t\t\t\t\tfilterContent: filterConfig?.classNames?.filterContent ?? '',\n\t\t\t\t\t\tfilterAccordion: filterConfig?.classNames?.filterAccordion ?? '',\n\t\t\t\t\t\tfilterAccordionHeader: filterConfig?.classNames?.filterAccordionHeader ?? '',\n\t\t\t\t\t\tfilterAccordionContent: filterConfig?.classNames?.filterAccordionContent ?? '',\n\t\t\t\t\t\tfilterItem: filterConfig?.classNames?.filterItem ?? '',\n\t\t\t\t\t\tfilterItemLabel: filterConfig?.classNames?.filterItemLabel ?? '',\n\t\t\t\t\t\tfilterItemCheckbox: filterConfig?.classNames?.filterItemCheckbox ?? '',\n\t\t\t\t\t\tfilterItemCount: filterConfig?.classNames?.filterItemCount ?? '',\n\t\t\t\t\t\tsearchInput: filterConfig?.classNames?.searchInput ?? '',\n\t\t\t\t\t\tresetButton: filterConfig?.classNames?.resetButton ?? '',\n\t\t\t\t\t\tshowJobsButton: filterConfig?.classNames?.showJobsButton ?? '',\n\t\t\t\t\t\tfilterFooter: filterConfig?.classNames?.filterFooter ?? ''\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst options = generateFilterOptions(\n\t\t\t\t\tfilteredListings,\n\t\t\t\t\tallListings,\n\t\t\t\t\tsiteConfig,\n\t\t\t\t\tfilterOptions,\n\t\t\t\t\tlastKey,\n\t\t\t\t\tfavorites,\n\t\t\t\t\ttempSelectedFilters,\n\t\t\t\t\tnormalizedFilterConfig\n\t\t\t\t);\n\t\t\t\tif (options) {\n\t\t\t\t\tsetFilterOptions(options);\n\t\t\t\t\tif (firstLoad) setFirstLoad(false);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tprocessListings();\n\t}, [selectedFilters, query, filterByFavorites, favorites, allListings]);\n\n\t// Separate effect for map bounds filtering with debouncing to avoid infinite loops\n\tuseEffect(() => {\n\t\t// Clear any existing timer\n\t\tif (boundsDebounceTimer.current) {\n\t\t\tclearTimeout(boundsDebounceTimer.current);\n\t\t}\n\n\t\t// Don't filter if feature is disabled or no bounds available\n\t\tif (!siteConfig.filterByMapBounds || !mapBounds || baseFilteredListings.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Prevent re-entrant calls\n\t\tif (isApplyingBoundsFilter.current) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Debounce the bounds filtering by 300ms\n\t\tboundsDebounceTimer.current = setTimeout(() => {\n\t\t\tisApplyingBoundsFilter.current = true;\n\t\t\t\n\t\t\tconsole.log('Applying map bounds filter to', baseFilteredListings.length, 'listings');\n\t\t\t\n\t\t\tconst boundsFilteredListings = baseFilteredListings.filter((listing: Listing) => {\n\t\t\t\tconst lat = listing.mapDetails?.latitude;\n\t\t\t\tconst lng = listing.mapDetails?.longitude;\n\t\t\t\tif (!lat || !lng) return false;\n\t\t\t\treturn mapBounds.contains({ lat, lng });\n\t\t\t});\n\n\t\t\tconsole.log('After bounds filter:', boundsFilteredListings.length, 'listings remain');\n\t\t\t\n\t\t\t// Use a flag to prevent this from triggering processListings\n\t\t\tsetFilteredListings(boundsFilteredListings);\n\t\t\t\n\t\t\t// Reset the flag after a short delay\n\t\t\tsetTimeout(() => {\n\t\t\t\tisApplyingBoundsFilter.current = false;\n\t\t\t}, 100);\n\t\t}, 300);\n\n\t\treturn () => {\n\t\t\tif (boundsDebounceTimer.current) {\n\t\t\t\tclearTimeout(boundsDebounceTimer.current);\n\t\t\t}\n\t\t};\n\t}, [mapBounds, siteConfig.filterByMapBounds]);\n\n\t// When baseFilteredListings changes, apply bounds filter if enabled\n\tuseEffect(() => {\n\t\tif (!siteConfig.filterByMapBounds || !mapBounds || baseFilteredListings.length === 0) {\n\t\t\t// If bounds filtering is disabled, just set the base listings\n\t\t\tif (!siteConfig.filterByMapBounds && baseFilteredListings.length > 0) {\n\t\t\t\tsetFilteredListings(baseFilteredListings);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If bounds filtering is enabled, trigger it\n\t\tconst boundsFilteredListings = baseFilteredListings.filter((listing: Listing) => {\n\t\t\tconst lat = listing.mapDetails?.latitude;\n\t\t\tconst lng = listing.mapDetails?.longitude;\n\t\t\tif (!lat || !lng) return false;\n\t\t\treturn mapBounds.contains({ lat, lng });\n\t\t});\n\n\t\tsetFilteredListings(boundsFilteredListings);\n\t}, [baseFilteredListings]);\n\n\tconst handleFilterListingsByLocation = (selectedLocation: any) => {\n\t\tconst { filteredListings } = filterListingsByLocation(\n\t\t\tallListings,\n\t\t\tselectedLocation,\n\t\t\tlistingEntities\n\t\t);\n\t\tsetNewFilteredListings(filteredListings);\n\t};\n\n\tconst resetEntityFilter = () => {\n\t\tlet newFilters = {...selectedFilters};\n\t\tdelete newFilters.entityId;\n\t\tsetSelectedFilters(newFilters);\n\t}\n\n\tconst handleSettingFavorites = (newFavorites: number[] | null) => {\n\t\tif (typeof window === 'undefined') return;\n\t\tif (newFavorites == null) {\n\t\t\tlocalStorage.removeItem(localStorageKey + 'favorites');\n\t\t} else {\n\t\t\tsetFavorites(newFavorites);\n\t\t\tlocalStorage.setItem(localStorageKey + 'favorites', JSON.stringify(newFavorites));\n\t\t}\n\t};\n\n\treturn (\n\t\t<MapListContext.Provider value={{\n\t\t\tloading,\n\t\t\tallListings,\n\t\t\tfilteredListings,\n\t\t\tmapItems,\n\t\t\tquery,\n\t\t\tsetNewFilteredListings,\n\t\t\tsetQuery,\n\t\t\tlistingEntities,\n\t\t\tselectedFilters,\n\t\t\tsetSelectedFilters,\n\t\t\tfilterOptions,\n\t\t\trecruiters,\n\t\t\thandleFilterListingsByLocation,\n\t\t\tfilterDialogIsOpen,\n\t\t\tsetFilterDialogIsOpen,\n\t\t\tsetMobileTab,\n\t\t\tmobileTab,\n\t\t\tsiteConfig,\n\t\t\tgoogleMapsApiKey,\n\t\t\tfavorites,\n\t\t\thandleSettingFavorites,\n\t\t\tresetEntityFilter,\n\t\t\tsetFilterByFavorites,\n\t\t\tfilterByFavorites,\n\t\t\tcommuteLocation,\n\t\t\tsetCommuteLocation,\n\t\t\tsetMapBounds,\n\t\t\tnavigateToDetails,\n\t\t\tnavigateToEasyApply,\n\t\t\tLink,\n\t\t\tlinkFormat,\n\t\t\teasyApplyUrl,\n\t\t\teasyApplyText,\n\t\t\tisIframe,\n\t\t\tsortSetting,\n\t\t\tsetSortSetting,\n\t\t\ttrackEvent,\n\t\t\tdefaultFilters,\n\t\t\thiddenFilters,\n\t\t\tcontainerStyle,\n\t\t\tExpandListComponent,\n\t\t\tmobileDetailsCallback,\t\t\tnoEntities,\n\t\t\tfilterConfig\n\t\t}}>\n\t\t\t{children}\n\t\t</MapListContext.Provider>\n\t);\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mapListContext.js","sources":["../../src/contexts/mapListContext.tsx"],"sourcesContent":["import React, { createContext, useState, useEffect, useContext, ReactNode } from 'react';\n\nimport { generateFilterOptions, applyFilters, filterListingsByLocation } from '~/util/filterUtil';\nimport { getStorageObject, setStorageObject } from '~/util/localStorageUtil';\nimport { updateURLWithFilters, filtersFromURL } from '~/util/urlFilterUtil';\n\nimport { getListingEntities } from \"~/services/listingEntityService\";\nimport fetchListings from '~/services/listingAggregatorService';\n\nimport { Listing } from '~/types/Listings';\nimport { ListingEntity } from '~/types/ListingEntity';\nimport { Recruiter } from '~/types/Recruiter';\nimport { MapConfig, MapConfig as SiteConfig } from '~/types/config/MapConfig';\nimport { get } from 'http';\n\ninterface MapListContextProps {\n loading: boolean;\n allListings: Listing[];\n filteredListings: Listing[];\n mapItems: any;\n query: string | null;\n setNewFilteredListings: (filteredListings: Listing[]) => void;\n setQuery: (query: string | null) => void;\n listingEntities: Record<number, ListingEntity> | null;\n selectedFilters: Record<string, any>;\n setSelectedFilters: (filters: Record<string, any>) => void;\n filterOptions: any;\n recruiters: Record<number, Recruiter>;\n handleFilterListingsByLocation: (selectedLocation: any) => void;\n filterDialogIsOpen: boolean;\n setFilterDialogIsOpen: (isOpen: boolean) => void;\n setMobileTab: (tab: string) => void;\n mobileTab: string;\n siteConfig: SiteConfig;\n favorites: number[];\n resetEntityFilter: () => void;\n handleSettingFavorites: (favorites: number[] | null) => void;\n setFilterByFavorites: (filter: boolean) => void;\n filterByFavorites: boolean;\n commuteLocation: any | null;\n setCommuteLocation: (location: any | null) => void;\n navigateToDetails: (id: number) => void;\n navigateToEasyApply: (id: number) => void;\n Link: React.ComponentType<any>;\n linkFormat: string;\n easyApplyUrl: string;\n easyApplyText: string;\n\tisIframe: boolean;\n sortSetting: { field: string; type: string };\n setSortSetting: (setting: { field: string; type: string }) => void;\n trackEvent: (event: string) => void;\n defaultFilters?: Record<string, any>;\n hiddenFilters?: string[];\n containerStyle?: any;\n ExpandListComponent?: React.ComponentType<{ listing: any }> | ((listing: any) => JSX.Element) | null;\n}\n\nconst MapListContext = createContext<MapListContextProps | undefined>(undefined);\n\nexport const useMapList = () => {\n\tconst context = useContext(MapListContext);\n\tif (!context) {\n\t\tthrow new Error('useMapList must be used within a MapListProvider');\n\t}\n\treturn context;\n};\n\nconst getQuery = (localStorageKey: string = ''): string | null => {\n\tlet query: string | null = null;\n\tif (typeof window !== 'undefined') {\n\t\tquery = localStorage.getItem(localStorageKey + 'query');\n\t}\n\treturn query;\n};\n\ninterface MapListProviderProps {\n children: ReactNode;\n siteConfig: MapConfig;\n resetFilters: boolean;\n navigateToDetails: (id: number) => void;\n navigateToEasyApply: (id: number) => void;\n Link: React.ComponentType<any>;\n linkFormat: string;\n easyApplyUrl: string;\n easyApplyText: string;\n\tisIframe: boolean;\n trackEvent: (event: string) => void;\n listings?: Listing[];\n\tentities?: ListingEntity[];\n setFiltersUrl?:boolean;\n hiddenFilters?: string[];\n handleUrlUpdate: (searchParams: string) => void;\n defaultFilters?: Record<string, any>;\n containerStyle?: any;\n\tlocalStorageKey: string;\n\tgetListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>;\n ExpandListComponent?: React.ComponentType<{ listing: Listing }> | ((listing: Listing) => JSX.Element) | null;\n}\n\nexport const MapListProvider: React.FC<MapListProviderProps> = ({\n\tchildren,\n\tsiteConfig,\n\tresetFilters,\n\tnavigateToDetails,\n\tnavigateToEasyApply,\n\tLink,\n\tlinkFormat,\n\teasyApplyUrl,\n\teasyApplyText,\n\tisIframe,\n\ttrackEvent,\n\tlistings = [],\n\tentities = [],\n\tsetFiltersUrl,\n\thiddenFilters,\n\thandleUrlUpdate,\n\tdefaultFilters,\n\tcontainerStyle,\n\tExpandListComponent,\n\tgetListingEntitiesCallback,\n\tlocalStorageKey\n}) => {\n\tconst firstLoadFilters = () =>{\n\t\tlet urlFilters = filtersFromURL(window.location)?.filters;\n\t\treturn (setFiltersUrl === true && urlFilters && Object.keys(urlFilters).length > 0) ? urlFilters : getStorageObject(localStorageKey + 'selectedFilters', {}) || {}\n\t}\n\t\n\tconst firstLoadQuery = (): string | null => {\n\t\tif (resetFilters) return null;\n\t\t// Check URL first\n\t\tconst urlData = filtersFromURL(window.location);\n\t\tif (setFiltersUrl === true && urlData?.query) {\n\t\t\treturn urlData.query;\n\t\t}\n\t\t// Fall back to localStorage\n\t\treturn getQuery(localStorageKey);\n\t}\n\t\n\tconst [allListings, setAllListings] = useState<Listing[]>([]);\n\tconst [filteredListings, setFilteredListings] = useState<Listing[]>([]);\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [mapItems, setMapItems] = useState<any>(getStorageObject(localStorageKey + 'mapItems', []) || []);\n\tconst [query, setQuery] = useState<string | null>(() => firstLoadQuery());\n\tconst [sortSetting, setSortSetting] = useState<{ field: string; type: string }>(getStorageObject(localStorageKey + 'sortSetting', { field: 'position', type: 'asc' }) || { field: 'position', type: 'asc' });\n\tconst [listingEntities, setListingEntities] = useState<Record<number, ListingEntity> | null>({});\n\tconst [firstLoad, setFirstLoad] = useState<boolean>(true);\n\tconst [commuteLocation, setCommuteLocation] = useState<any | null>(getStorageObject('commuteLocation'));\n\tconst [selectedFilters, setSelectedFilters] = useState<Record<string, any>>(() => resetFilters ? {} : firstLoadFilters());\n\tconst [filterOptions, setFilterOptions] = useState<any>();\n\tconst [recruiters, setRecruiters] = useState<Record<number, Recruiter>>({});\n\tconst [filterDialogIsOpen, setFilterDialogIsOpen] = useState<boolean>(false);\n\tconst [mobileTab, setMobileTab] = useState<string>(\"listTab\");\n\tconst [favorites, setFavorites] = useState<number[]>([]);\n\tconst [filterByFavorites, setFilterByFavorites] = useState<boolean>(false);\n\n\tconst setNewFilteredListings = (filteredListings: Listing[]) => {\n\t\tsetFilteredListings(filteredListings);\n\t};\n\n\tuseEffect(() => {\n\t\tif (!sortSetting) return;\n\t\tlocalStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));\n\t\tsetNewFilteredListings(filteredListings);\n\t}, [sortSetting, localStorageKey]);\n\n\tuseEffect(() => {\n\t\tconst loadedFavorites = JSON.parse(localStorage.getItem(localStorageKey + 'favorites') || '[]');\n\t\tsetFavorites(loadedFavorites);\n\t}, [localStorageKey]);\n\n\tuseEffect(() => {\n\t\tsetStorageObject(localStorageKey + \"commuteLocation\", commuteLocation);\n\t}, [commuteLocation, localStorageKey]);\n\n\tuseEffect(() => {\n\t\tif (!commuteLocation) return;\n\n\t\tasync function fetchEntities() {\n\t\t\tconst distinctEntityIds = [\n\t\t\t\t...new Set(allListings.map(listing => listing.entityId ?? -1))\n\t\t\t];\n\t\t\ttry {\n\t\t\t\tconsole.log(getListingEntitiesCallback);\n\t\t\t\tconsole.log(\"fetching entities\")\n\t\t\t\tconst fetchedEntities = getListingEntitiesCallback !== null && getListingEntitiesCallback !== undefined ? await getListingEntitiesCallback(distinctEntityIds,\n\t\t\t\t\t`${commuteLocation.lat}, ${commuteLocation.lng}`) : await getListingEntities(\n\t\t\t\t\tdistinctEntityIds,\n\t\t\t\t\t`${commuteLocation.lat}, ${commuteLocation.lng}`\n\t\t\t\t);\n\t\t\t\tsetListingEntities(fetchedEntities);\n\t\t\t\tconst newFilteredListings: Listing[] = [...filteredListings] ?? [];\n\t\t\t\tfor (let i = 0; i < allListings.length; i++) {\n\t\t\t\t\tconst listing = newFilteredListings[i];\n\t\t\t\t\tif (\n\t\t\t\t\t\tlisting &&\n\t\t\t\t\t\tlisting.fields &&\n\t\t\t\t\t\tlisting.entityId !== undefined &&\n\t\t\t\t\t\tlisting.entityId !== -1\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst entityId = listing.entityId;\n\t\t\t\t\t\tconst travelTime = fetchedEntities[entityId]?.travelTime;\n\n\t\t\t\t\t\tif (travelTime !== undefined && listing.fields) {\n\t\t\t\t\t\t\tlisting.fields.travelTime = travelTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to fetch listing entities:\", error);\n\t\t\t}\n\t\t}\n\n\t\tfetchEntities();\n\t}, [commuteLocation, allListings, siteConfig.companyId]);\n\n\tuseEffect(() => {\n\t\tconst handleFetchListings = async () => {\n\t\t\tif (!getStorageObject(localStorageKey + 'listings') ?? [].length) {\n\t\t\t\tsetLoading(true);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst {\n\t\t\t\t\tlistingsResult,\n\t\t\t\t\tfetchedEntities,\n\t\t\t\t\tdistinctItems\n\t\t\t\t} = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback);\n\t\t\t\tif (defaultFilters) {\n\t\t\t\t\tconst filteredListings = listingsResult.filter(listing => {\n\t\t\t\t\tif (!listing.fields) return false;\n\n\t\t\t\t\treturn Object.keys(defaultFilters).every(filterKey => {\n\t\t\t\t\t\tconst filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];\n\t\t\t\t\t\tconst listingValue = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;\n\t\t\t\t\t\treturn filterValues.includes(listingValue);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tsetAllListings(filteredListings);\n\t\t\t} else {\n\t\t\t\tsetAllListings(listingsResult);\n\t\t\t}\n\t\t\t\tsetListingEntities(fetchedEntities);\n\t\t\t\tsetMapItems(distinctItems);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(error);\n\t\t\t}\n\t\t\tsetLoading(false);\n\t\t};\n\t\thandleFetchListings();\n\t}, [query, siteConfig, commuteLocation]);\n\n\tuseEffect(() => {\n\t\tconst processListings = () => {\n\t\t\tlet filteredListings: Listing[];\n\t\t\tlet tempSelectedFilters = selectedFilters;\n\t\t\tlet tempQuery = query;\n\n\t\t\tconst { mapItems, filteredListings: tempFilteredListings } = applyFilters(\n\t\t\t\tallListings,\n\t\t\t\ttempSelectedFilters,\n\t\t\t\ttempQuery,\n\t\t\t\tlistingEntities,\n\t\t\t\tfavorites,\n\t\t\t\tsiteConfig\n\t\t\t);\n\t\t\tfilteredListings = tempFilteredListings;\n\n\t\t\tif (filterByFavorites) {\n\t\t\t\tfilteredListings = filteredListings.filter((x: Listing) => favorites.includes(x.id));\n\t\t\t}\n\t\t\tsetNewFilteredListings(filteredListings);\n\t\t\tif (firstLoad && tempSelectedFilters) {\n\t\t\t\t// Update URL with filters if needed\n\t\t\t} else if (Object.keys(tempSelectedFilters).length === 0 && !firstLoad) {\n\t\t\t\tlocalStorage.removeItem(localStorageKey + 'selectedFilters');\n\t\t\t} else if (!firstLoad) {\n\t\t\t\tsetStorageObject(localStorageKey + 'selectedFilters', tempSelectedFilters);\n\t\t\t}\n\t\t\tif(setFiltersUrl === true)\n\t\t\t{\n\t\t\t\tupdateURLWithFilters(tempSelectedFilters, window.location, tempQuery, handleUrlUpdate);\n\t\t\t}\n\t\t\ttempQuery != null ? localStorage.setItem(localStorageKey + 'query', tempQuery) : localStorage.removeItem(localStorageKey + 'query');\n\t\t\tsetMapItems(mapItems);\n\n\t\t\tif (tempSelectedFilters) {\n\t\t\t\tconst keys = Object.keys(tempSelectedFilters);\n\t\t\t\tconst lastKey = keys[keys.length - 1];\n\t\t\t\tconst options = generateFilterOptions(\n\t\t\t\t\tfilteredListings,\n\t\t\t\t\tallListings,\n\t\t\t\t\tsiteConfig,\n\t\t\t\t\tfilterOptions,\n\t\t\t\t\tlastKey,\n\t\t\t\t\tfavorites,\n\t\t\t\t\ttempSelectedFilters\n\t\t\t\t);\n\t\t\t\tif (options) {\n\t\t\t\t\tsetFilterOptions(options);\n\t\t\t\t\tif (firstLoad) setFirstLoad(false);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tprocessListings();\n\t}, [selectedFilters, query, listingEntities, filterByFavorites, favorites]);\n\n\tconst handleFilterListingsByLocation = (selectedLocation: any) => {\n\t\tconst { filteredListings } = filterListingsByLocation(\n\t\t\tallListings,\n\t\t\tselectedLocation,\n\t\t\tlistingEntities\n\t\t);\n\t\tsetNewFilteredListings(filteredListings);\n\t};\n\n\tconst resetEntityFilter = () => {\n\t\tlet newFilters = {...selectedFilters};\n\t\tdelete newFilters.entityId;\n\t\tsetSelectedFilters(newFilters);\n\t}\n\n\tconst handleSettingFavorites = (newFavorites: number[] | null) => {\n\t\tif (newFavorites == null) {\n\t\t\tlocalStorage.removeItem(localStorageKey + 'favorites');\n\t\t} else {\n\t\t\tsetFavorites(newFavorites);\n\t\t\tlocalStorage.setItem(localStorageKey + 'favorites', JSON.stringify(newFavorites));\n\t\t}\n\t};\n\n\treturn (\n\t\t<MapListContext.Provider value={{\n\t\t\tloading,\n\t\t\tallListings,\n\t\t\tfilteredListings,\n\t\t\tmapItems,\n\t\t\tquery,\n\t\t\tsetNewFilteredListings,\n\t\t\tsetQuery,\n\t\t\tlistingEntities,\n\t\t\tselectedFilters,\n\t\t\tsetSelectedFilters,\n\t\t\tfilterOptions,\n\t\t\trecruiters,\n\t\t\thandleFilterListingsByLocation,\n\t\t\tfilterDialogIsOpen,\n\t\t\tsetFilterDialogIsOpen,\n\t\t\tsetMobileTab,\n\t\t\tmobileTab,\n\t\t\tsiteConfig,\n\t\t\tfavorites,\n\t\t\thandleSettingFavorites,\n\t\t\tresetEntityFilter,\n\t\t\tsetFilterByFavorites,\n\t\t\tfilterByFavorites,\n\t\t\tcommuteLocation,\n\t\t\tsetCommuteLocation,\n\t\t\tnavigateToDetails,\n\t\t\tnavigateToEasyApply,\n\t\t\tLink,\n\t\t\tlinkFormat,\n\t\t\teasyApplyUrl,\n\t\t\teasyApplyText,\n\t\t\tisIframe,\n\t\t\tsortSetting,\n\t\t\tsetSortSetting,\n\t\t\ttrackEvent,\n\t\t\tdefaultFilters,\n\t\t\thiddenFilters,\n\t\t\tcontainerStyle,\n\t\t\tExpandListComponent\n\t\t}}>\n\t\t\t{children}\n\t\t</MapListContext.Provider>\n\t);\n};\n"],"names":["React"],"mappings":"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"}