@abcagency/hc-ui-components 1.7.8 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import React, { createContext, useContext, useState, useEffect } from 'react';
1
+ import React, { createContext, useContext, useState, useRef, useEffect } from 'react';
2
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';
@@ -85,6 +85,7 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
85
85
  const [mobileTab, setMobileTab] = useState("listTab");
86
86
  const [favorites, setFavorites] = useState([]);
87
87
  const [filterByFavorites, setFilterByFavorites] = useState(false);
88
+ const entitiesInitialized = useRef(false);
88
89
  const setNewFilteredListings = (filteredListings) => {
89
90
  setFilteredListings(filteredListings);
90
91
  };
@@ -138,18 +139,34 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
138
139
  }
139
140
  fetchEntities();
140
141
  }, [commuteLocation, allListings, siteConfig.companyId, getListingEntitiesCallback, noEntities]);
141
- // Convert passed-in entities array to listingEntities object
142
+ // Set listingEntities from passed-in entities (only once on initial load)
143
+ // Entities should be an object: { "rochester, mn": {...}, "albuquerque, nm": {...} }
144
+ // Note: Commute location changes will fetch updated entities with travel times via separate useEffect
142
145
  useEffect(() => {
143
- if (entities && entities.length > 0) {
146
+ if (!entities || entitiesInitialized.current)
147
+ return;
148
+ entitiesInitialized.current = true;
149
+ // Handle both object (production format) and array (for backwards compatibility)
150
+ if (Array.isArray(entities)) {
151
+ // Convert array to object
144
152
  const entitiesObj = {};
145
153
  entities.forEach((entity) => {
146
154
  if (entity.entityKey) {
147
155
  entitiesObj[entity.entityKey.toLowerCase()] = entity;
148
156
  }
149
157
  });
150
- console.log('Set listingEntities from passed entities:', entitiesObj);
158
+ console.log('Set listingEntities from entities array:', entitiesObj);
151
159
  setListingEntities(entitiesObj);
152
160
  }
161
+ else if (typeof entities === 'object') {
162
+ // Normalize keys to lowercase for production format
163
+ const normalizedEntities = {};
164
+ Object.keys(entities).forEach(key => {
165
+ normalizedEntities[key.toLowerCase()] = entities[key];
166
+ });
167
+ console.log('Set listingEntities from entities object:', normalizedEntities);
168
+ setListingEntities(normalizedEntities);
169
+ }
153
170
  }, [entities]);
154
171
  // Set listings from passed-in data
155
172
  useEffect(() => {
@@ -1 +1 @@
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 { 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 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 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 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\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, don't load from localStorage\n\t\tif (urlData?.lsIgnore) {\n\t\t\treturn urlData?.query || null;\n\t\t}\n\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\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(localStorageKey + '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\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\t\t\t\t\n\t\t\t\tconst fetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);\n\t\t\t\tsetListingEntities(fetchedEntities);\n\t\t\t\t// Update travelTime on listings\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.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 && 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, getListingEntitiesCallback, noEntities]);\n\n\t// Convert passed-in entities array to listingEntities object\n\tuseEffect(() => {\n\t\tif (entities && entities.length > 0) {\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 passed entities:', entitiesObj);\n\t\t\tsetListingEntities(entitiesObj);\n\t\t}\n\t}, [entities]);\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\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}\n\n\t\t\tsetAllListings(processedListings);\n\t\t\tconsole.log('Set allListings to', processedListings.length, 'items');\n\t\t\t\n\t\t\t// Map items will be set when entities are processed\n\t\t\t// For now, just set empty object - will be populated when entities arrive\n\t\t\tsetMapItems({});\n\t\t} catch (error) {\n\t\t\tconsole.error('Error processing listings:', error);\n\t\t}\n\t\t\n\t\tsetLoading(false);\n\t}, [listings, defaultFilters]);\n\n\tuseEffect(() => {\n\t\tconst processListings = async () => {\n\t\t\t// Don't process if allListings hasn't been loaded yet\n\t\t\tif (allListings.length === 0) {\n\t\t\t\tconsole.log('processListings: Skipping - allListings is empty');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet filteredListings: Listing[];\n\t\t\tlet tempSelectedFilters = selectedFilters;\n\t\t\tlet tempQuery = query;\n\n\t\t\tconsole.log('processListings: Running with query:', tempQuery, 'and', allListings.length, 'listings');\n\n\t\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);\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// 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, listingEntities, filterByFavorites, favorites, allListings]);\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\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\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, useRef, 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 { 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 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 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 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\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, don't load from localStorage\n\t\tif (urlData?.lsIgnore) {\n\t\t\treturn urlData?.query || null;\n\t\t}\n\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\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(localStorageKey + '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\tconst entitiesInitialized = useRef<boolean>(false);\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\t\t\t\t\n\t\t\t\tconst fetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);\n\t\t\t\tsetListingEntities(fetchedEntities);\n\t\t\t\t// Update travelTime on listings\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.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 && 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, getListingEntitiesCallback, 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\t\t\n\t\tentitiesInitialized.current = true;\n\t\t\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}, [entities]);\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\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}\n\n\t\t\tsetAllListings(processedListings);\n\t\t\tconsole.log('Set allListings to', processedListings.length, 'items');\n\t\t\t\n\t\t\t// Map items will be set when entities are processed\n\t\t\t// For now, just set empty object - will be populated when entities arrive\n\t\t\tsetMapItems({});\n\t\t} catch (error) {\n\t\t\tconsole.error('Error processing listings:', error);\n\t\t}\n\t\t\n\t\tsetLoading(false);\n\t}, [listings, defaultFilters]);\n\n\tuseEffect(() => {\n\t\tconst processListings = async () => {\n\t\t\t// Don't process if allListings hasn't been loaded yet\n\t\t\tif (allListings.length === 0) {\n\t\t\t\tconsole.log('processListings: Skipping - allListings is empty');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet filteredListings: Listing[];\n\t\t\tlet tempSelectedFilters = selectedFilters;\n\t\t\tlet tempQuery = query;\n\n\t\t\tconsole.log('processListings: Running with query:', tempQuery, 'and', allListings.length, 'listings');\n\n\t\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);\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// 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, listingEntities, filterByFavorites, favorites, allListings]);\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\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\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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"}
@@ -2,7 +2,10 @@ import { objectSpread2 as _objectSpread2, defineProperty as _defineProperty } fr
2
2
 
3
3
  var getDistinctItemsByProximity = function getDistinctItemsByProximity(items, listingEntitiesDetailsInput) {
4
4
  var clusters = {};
5
- if (!listingEntitiesDetailsInput) return [];
5
+ if (!listingEntitiesDetailsInput) {
6
+ console.log('getDistinctItemsByProximity: No listingEntitiesDetailsInput');
7
+ return [];
8
+ }
6
9
  var listingEntitiesDetails = Array.isArray(listingEntitiesDetailsInput) ? listingEntitiesDetailsInput.reduce(function (acc, entity) {
7
10
  if (entity !== null && entity !== void 0 && entity.entityKey) acc[entity.entityKey.toLowerCase()] = entity;
8
11
  return acc;
@@ -10,6 +13,8 @@ var getDistinctItemsByProximity = function getDistinctItemsByProximity(items, li
10
13
  acc[key.toLowerCase()] = listingEntitiesDetailsInput[key];
11
14
  return acc;
12
15
  }, {});
16
+ console.log('getDistinctItemsByProximity: Processing', items === null || items === void 0 ? void 0 : items.length, 'items with', Object.keys(listingEntitiesDetails).length, 'entities');
17
+ console.log('Entity keys:', Object.keys(listingEntitiesDetails));
13
18
  var closeItemPairs = findCloseItems(listingEntitiesDetails);
14
19
  if (closeItemPairs.length > 0) {
15
20
  var adjusted = adjustItemPositions(listingEntitiesDetails, closeItemPairs);
@@ -21,7 +26,8 @@ var getDistinctItemsByProximity = function getDistinctItemsByProximity(items, li
21
26
  if (!entityKey || entityKey === '-1') return;
22
27
  var entityDetails = listingEntitiesDetails[entityKey.toLowerCase()];
23
28
  if (!entityDetails) {
24
- console.error("Details not found for entityKey: ".concat(entityKey));
29
+ console.error("Details not found for entityKey: \"".concat(entityKey, "\" (looking for \"").concat(entityKey.toLowerCase(), "\")"));
30
+ console.error('Available entity keys:', Object.keys(listingEntitiesDetails));
25
31
  return;
26
32
  }
27
33
  item.mapDetails = entityDetails;
@@ -1 +1 @@
1
- {"version":3,"file":"mapUtil.js","sources":["../../src/util/mapUtil.js"],"sourcesContent":["export const getDistinctItemsByProximity = (items, listingEntitiesDetailsInput) => {\n\tconst clusters = {};\n\n\tif (!listingEntitiesDetailsInput) return [];\n\n\tconst listingEntitiesDetails = Array.isArray(listingEntitiesDetailsInput)\n\t\t? listingEntitiesDetailsInput.reduce((acc, entity) => {\n\t\t\tif (entity?.entityKey) acc[entity.entityKey.toLowerCase()] = entity;\n\t\t\treturn acc;\n\t\t }, {})\n\t\t: Object.keys(listingEntitiesDetailsInput).reduce((acc, key) => {\n\t\t\tacc[key.toLowerCase()] = listingEntitiesDetailsInput[key];\n\t\t\treturn acc;\n\t\t }, {});\n\n\tconst closeItemPairs = findCloseItems(listingEntitiesDetails);\n\tif (closeItemPairs.length > 0) {\n\t\tconst adjusted = adjustItemPositions(listingEntitiesDetails, closeItemPairs);\n\t\tObject.assign(listingEntitiesDetails, adjusted);\n\t}\n\n\titems?.forEach(item => {\n\t\tconst entityKey = item?.fields?.entityKey;\n\t\tif (!entityKey || entityKey === '-1') return;\n\t\tconst entityDetails = listingEntitiesDetails[entityKey.toLowerCase()];\n\t\tif (!entityDetails) {\n\t\t\tconsole.error(`Details not found for entityKey: ${entityKey}`);\n\t\t\treturn;\n\t\t}\n\n\t\titem.mapDetails = entityDetails;\n\n\t\tconst normalizedEntityKey = entityKey.toLowerCase();\n\t\tif (!clusters[normalizedEntityKey]) {\n\t\t\tclusters[normalizedEntityKey] = {\n\t\t\t\t...entityDetails,\n\t\t\t\titems: { [item.id]: item }\n\t\t\t};\n\t\t} else {\n\t\t\tclusters[normalizedEntityKey].items[item.id] = item;\n\t\t}\n\t});\n\n\treturn Object.values(clusters);\n};\n\nexport const findCloseItems = entitiesByKey => {\n\tconst closeItems = [];\n\tconst items = Object.values(entitiesByKey); // Convert object to array\n\tconst proximityThreshold = 0.0001;\n\n\tfor (let i = 0; i < items.length; i++) {\n\t\tfor (let j = i + 1; j < items.length; j++) {\n\t\t\tconst distanceLat = Math.abs(items[i].latitude - items[j].latitude);\n\t\t\tconst distanceLng = Math.abs(items[i].longitude - items[j].longitude);\n\t\t\tif (distanceLat < proximityThreshold && distanceLng < proximityThreshold) {\n\t\t\t\tcloseItems.push({ item1: items[i], item2: items[j] });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn closeItems;\n};\n\nexport const adjustItemPositions = (entitiesByKey, closeItemPairs) => {\n\tconst adjustmentValue = 0.0001;\n\tconst adjustedItems = { ...entitiesByKey };\n\n\tcloseItemPairs.forEach(pair => {\n\t\tconst key2 = pair.item2.entityKey;\n\t\tif (adjustedItems[key2]) {\n\t\t\tadjustedItems[key2] = {\n\t\t\t\t...adjustedItems[key2],\n\t\t\t\tlatitude: adjustedItems[key2].latitude + adjustmentValue,\n\t\t\t\tlongitude: adjustedItems[key2].longitude + adjustmentValue\n\t\t\t};\n\t\t}\n\t});\n\n\treturn adjustedItems;\n};\n\nexport const clusterOptions = (clusterGridSize, fillColor) => {\n\treturn {\n\t\tgridSize: clusterGridSize,\n\t\tmaxZoom: 15,\n\t\tstyles: [\n\t\t\t{\n\t\t\t\turl: createSvgDataUri(fillColor),\n\t\t\t\ttextColor: 'white',\n\t\t\t\theight: 40,\n\t\t\t\twidth: 40\n\t\t\t}\n\t\t]\n\t};\n};\n\nfunction createSvgDataUri(fillColor) {\n\tconst svg = `<svg width=\"50\" height=\"50\" xmlns=\"http://www.w3.org/2000/svg\">\n\t <circle cx=\"25\" cy=\"25\" r=\"20\" fill=\"${fillColor}\" />\n\t</svg>`;\n\treturn `data:image/svg+xml;base64,${btoa(svg)}`;\n}\n"],"names":["getDistinctItemsByProximity","items","listingEntitiesDetailsInput","clusters","listingEntitiesDetails","Array","isArray","reduce","acc","entity","entityKey","toLowerCase","Object","keys","key","closeItemPairs","findCloseItems","length","adjusted","adjustItemPositions","assign","forEach","item","_item$fields","fields","entityDetails","console","error","concat","mapDetails","normalizedEntityKey","_objectSpread","_defineProperty","id","values","entitiesByKey","closeItems","proximityThreshold","i","j","distanceLat","Math","abs","latitude","distanceLng","longitude","push","item1","item2","adjustmentValue","adjustedItems","pair","key2","clusterOptions","clusterGridSize","fillColor","gridSize","maxZoom","styles","url","createSvgDataUri","textColor","height","width","svg","btoa"],"mappings":"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"}
1
+ {"version":3,"file":"mapUtil.js","sources":["../../src/util/mapUtil.js"],"sourcesContent":["export const getDistinctItemsByProximity = (items, listingEntitiesDetailsInput) => {\n\tconst clusters = {};\n\n\tif (!listingEntitiesDetailsInput) {\n\t\tconsole.log('getDistinctItemsByProximity: No listingEntitiesDetailsInput');\n\t\treturn [];\n\t}\n\n\tconst listingEntitiesDetails = Array.isArray(listingEntitiesDetailsInput)\n\t\t? listingEntitiesDetailsInput.reduce((acc, entity) => {\n\t\t\tif (entity?.entityKey) acc[entity.entityKey.toLowerCase()] = entity;\n\t\t\treturn acc;\n\t\t }, {})\n\t\t: Object.keys(listingEntitiesDetailsInput).reduce((acc, key) => {\n\t\t\tacc[key.toLowerCase()] = listingEntitiesDetailsInput[key];\n\t\t\treturn acc;\n\t\t }, {});\n\n\tconsole.log('getDistinctItemsByProximity: Processing', items?.length, 'items with', Object.keys(listingEntitiesDetails).length, 'entities');\n\tconsole.log('Entity keys:', Object.keys(listingEntitiesDetails));\n\n\tconst closeItemPairs = findCloseItems(listingEntitiesDetails);\n\tif (closeItemPairs.length > 0) {\n\t\tconst adjusted = adjustItemPositions(listingEntitiesDetails, closeItemPairs);\n\t\tObject.assign(listingEntitiesDetails, adjusted);\n\t}\n\n\titems?.forEach(item => {\n\t\tconst entityKey = item?.fields?.entityKey;\n\t\tif (!entityKey || entityKey === '-1') return;\n\t\tconst entityDetails = listingEntitiesDetails[entityKey.toLowerCase()];\n\t\tif (!entityDetails) {\n\t\t\tconsole.error(`Details not found for entityKey: \"${entityKey}\" (looking for \"${entityKey.toLowerCase()}\")`);\n\t\t\tconsole.error('Available entity keys:', Object.keys(listingEntitiesDetails));\n\t\t\treturn;\n\t\t}\n\n\t\titem.mapDetails = entityDetails;\n\n\t\tconst normalizedEntityKey = entityKey.toLowerCase();\n\t\tif (!clusters[normalizedEntityKey]) {\n\t\t\tclusters[normalizedEntityKey] = {\n\t\t\t\t...entityDetails,\n\t\t\t\titems: { [item.id]: item }\n\t\t\t};\n\t\t} else {\n\t\t\tclusters[normalizedEntityKey].items[item.id] = item;\n\t\t}\n\t});\n\n\treturn Object.values(clusters);\n};\n\nexport const findCloseItems = entitiesByKey => {\n\tconst closeItems = [];\n\tconst items = Object.values(entitiesByKey); // Convert object to array\n\tconst proximityThreshold = 0.0001;\n\n\tfor (let i = 0; i < items.length; i++) {\n\t\tfor (let j = i + 1; j < items.length; j++) {\n\t\t\tconst distanceLat = Math.abs(items[i].latitude - items[j].latitude);\n\t\t\tconst distanceLng = Math.abs(items[i].longitude - items[j].longitude);\n\t\t\tif (distanceLat < proximityThreshold && distanceLng < proximityThreshold) {\n\t\t\t\tcloseItems.push({ item1: items[i], item2: items[j] });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn closeItems;\n};\n\nexport const adjustItemPositions = (entitiesByKey, closeItemPairs) => {\n\tconst adjustmentValue = 0.0001;\n\tconst adjustedItems = { ...entitiesByKey };\n\n\tcloseItemPairs.forEach(pair => {\n\t\tconst key2 = pair.item2.entityKey;\n\t\tif (adjustedItems[key2]) {\n\t\t\tadjustedItems[key2] = {\n\t\t\t\t...adjustedItems[key2],\n\t\t\t\tlatitude: adjustedItems[key2].latitude + adjustmentValue,\n\t\t\t\tlongitude: adjustedItems[key2].longitude + adjustmentValue\n\t\t\t};\n\t\t}\n\t});\n\n\treturn adjustedItems;\n};\n\nexport const clusterOptions = (clusterGridSize, fillColor) => {\n\treturn {\n\t\tgridSize: clusterGridSize,\n\t\tmaxZoom: 15,\n\t\tstyles: [\n\t\t\t{\n\t\t\t\turl: createSvgDataUri(fillColor),\n\t\t\t\ttextColor: 'white',\n\t\t\t\theight: 40,\n\t\t\t\twidth: 40\n\t\t\t}\n\t\t]\n\t};\n};\n\nfunction createSvgDataUri(fillColor) {\n\tconst svg = `<svg width=\"50\" height=\"50\" xmlns=\"http://www.w3.org/2000/svg\">\n\t <circle cx=\"25\" cy=\"25\" r=\"20\" fill=\"${fillColor}\" />\n\t</svg>`;\n\treturn `data:image/svg+xml;base64,${btoa(svg)}`;\n}\n"],"names":["getDistinctItemsByProximity","items","listingEntitiesDetailsInput","clusters","console","log","listingEntitiesDetails","Array","isArray","reduce","acc","entity","entityKey","toLowerCase","Object","keys","key","length","closeItemPairs","findCloseItems","adjusted","adjustItemPositions","assign","forEach","item","_item$fields","fields","entityDetails","error","concat","mapDetails","normalizedEntityKey","_objectSpread","_defineProperty","id","values","entitiesByKey","closeItems","proximityThreshold","i","j","distanceLat","Math","abs","latitude","distanceLng","longitude","push","item1","item2","adjustmentValue","adjustedItems","pair","key2","clusterOptions","clusterGridSize","fillColor","gridSize","maxZoom","styles","url","createSvgDataUri","textColor","height","width","svg","btoa"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abcagency/hc-ui-components",
3
- "version": "1.7.8",
3
+ "version": "1.8.1",
4
4
  "description": "UI Components for HireControl",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,4 +1,4 @@
1
- import React, { createContext, useState, useEffect, useContext, ReactNode } from 'react';
1
+ import React, { createContext, useState, useEffect, useContext, useRef, ReactNode } from 'react';
2
2
 
3
3
  import { generateFilterOptions, applyFilters, filterListingsByLocation } from '~/util/filterUtil';
4
4
  import { getStorageObject, setStorageObject } from '~/util/localStorageUtil';
@@ -242,6 +242,7 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
242
242
  const [mobileTab, setMobileTab] = useState<string>("listTab");
243
243
  const [favorites, setFavorites] = useState<number[]>([]);
244
244
  const [filterByFavorites, setFilterByFavorites] = useState<boolean>(false);
245
+ const entitiesInitialized = useRef<boolean>(false);
245
246
 
246
247
  const setNewFilteredListings = (filteredListings: Listing[]) => {
247
248
  setFilteredListings(filteredListings);
@@ -303,17 +304,33 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
303
304
  fetchEntities();
304
305
  }, [commuteLocation, allListings, siteConfig.companyId, getListingEntitiesCallback, noEntities]);
305
306
 
306
- // Convert passed-in entities array to listingEntities object
307
+ // Set listingEntities from passed-in entities (only once on initial load)
308
+ // Entities should be an object: { "rochester, mn": {...}, "albuquerque, nm": {...} }
309
+ // Note: Commute location changes will fetch updated entities with travel times via separate useEffect
307
310
  useEffect(() => {
308
- if (entities && entities.length > 0) {
311
+ if (!entities || entitiesInitialized.current) return;
312
+
313
+ entitiesInitialized.current = true;
314
+
315
+ // Handle both object (production format) and array (for backwards compatibility)
316
+ if (Array.isArray(entities)) {
317
+ // Convert array to object
309
318
  const entitiesObj: Record<string, any> = {};
310
319
  entities.forEach((entity: any) => {
311
320
  if (entity.entityKey) {
312
321
  entitiesObj[entity.entityKey.toLowerCase()] = entity;
313
322
  }
314
323
  });
315
- console.log('Set listingEntities from passed entities:', entitiesObj);
324
+ console.log('Set listingEntities from entities array:', entitiesObj);
316
325
  setListingEntities(entitiesObj);
326
+ } else if (typeof entities === 'object') {
327
+ // Normalize keys to lowercase for production format
328
+ const normalizedEntities: Record<string, any> = {};
329
+ Object.keys(entities).forEach(key => {
330
+ normalizedEntities[key.toLowerCase()] = entities[key];
331
+ });
332
+ console.log('Set listingEntities from entities object:', normalizedEntities);
333
+ setListingEntities(normalizedEntities);
317
334
  }
318
335
  }, [entities]);
319
336
 
@@ -1,7 +1,10 @@
1
1
  export const getDistinctItemsByProximity = (items, listingEntitiesDetailsInput) => {
2
2
  const clusters = {};
3
3
 
4
- if (!listingEntitiesDetailsInput) return [];
4
+ if (!listingEntitiesDetailsInput) {
5
+ console.log('getDistinctItemsByProximity: No listingEntitiesDetailsInput');
6
+ return [];
7
+ }
5
8
 
6
9
  const listingEntitiesDetails = Array.isArray(listingEntitiesDetailsInput)
7
10
  ? listingEntitiesDetailsInput.reduce((acc, entity) => {
@@ -13,6 +16,9 @@ export const getDistinctItemsByProximity = (items, listingEntitiesDetailsInput)
13
16
  return acc;
14
17
  }, {});
15
18
 
19
+ console.log('getDistinctItemsByProximity: Processing', items?.length, 'items with', Object.keys(listingEntitiesDetails).length, 'entities');
20
+ console.log('Entity keys:', Object.keys(listingEntitiesDetails));
21
+
16
22
  const closeItemPairs = findCloseItems(listingEntitiesDetails);
17
23
  if (closeItemPairs.length > 0) {
18
24
  const adjusted = adjustItemPositions(listingEntitiesDetails, closeItemPairs);
@@ -24,7 +30,8 @@ export const getDistinctItemsByProximity = (items, listingEntitiesDetailsInput)
24
30
  if (!entityKey || entityKey === '-1') return;
25
31
  const entityDetails = listingEntitiesDetails[entityKey.toLowerCase()];
26
32
  if (!entityDetails) {
27
- console.error(`Details not found for entityKey: ${entityKey}`);
33
+ console.error(`Details not found for entityKey: "${entityKey}" (looking for "${entityKey.toLowerCase()}")`);
34
+ console.error('Available entity keys:', Object.keys(listingEntitiesDetails));
28
35
  return;
29
36
  }
30
37