@abcagency/hc-ui-components 1.5.4 → 1.5.6

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.
@@ -22,7 +22,12 @@ const getQuery = (localStorageKey = '') => {
22
22
  };
23
23
  const MapListProvider = ({ children, siteConfig, resetFilters, navigateToDetails, navigateToEasyApply, Link, linkFormat, easyApplyUrl, easyApplyText, isIframe, trackEvent, listings = [], entities = [], setFiltersUrl, hiddenFilters, handleUrlUpdate, defaultFilters, containerStyle, ExpandListComponent, getListingEntitiesCallback, localStorageKey, hideMap = false, hideFilters = false, noEntities = false }) => {
24
24
  const firstLoadFilters = () => {
25
- let urlFilters = filtersFromURL(window.location)?.filters;
25
+ let urlData = filtersFromURL(window.location);
26
+ let urlFilters = urlData?.filters;
27
+ // If ls-ignore=true is in URL, don't load from localStorage
28
+ if (urlData?.lsIgnore) {
29
+ return urlFilters || {};
30
+ }
26
31
  return (setFiltersUrl === true && urlFilters && Object.keys(urlFilters).length > 0) ? urlFilters : getStorageObject(localStorageKey + 'selectedFilters', {}) || {};
27
32
  };
28
33
  const firstLoadQuery = () => {
@@ -30,6 +35,10 @@ const MapListProvider = ({ children, siteConfig, resetFilters, navigateToDetails
30
35
  return null;
31
36
  // Check URL first
32
37
  const urlData = filtersFromURL(window.location);
38
+ // If ls-ignore=true is in URL, don't load from localStorage
39
+ if (urlData?.lsIgnore) {
40
+ return urlData?.query || null;
41
+ }
33
42
  if (setFiltersUrl === true && urlData?.query) {
34
43
  return urlData.query;
35
44
  }
@@ -59,8 +68,7 @@ const MapListProvider = ({ children, siteConfig, resetFilters, navigateToDetails
59
68
  if (!sortSetting)
60
69
  return;
61
70
  localStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));
62
- setNewFilteredListings(filteredListings);
63
- }, [sortSetting, localStorageKey, filteredListings]);
71
+ }, [sortSetting, localStorageKey]);
64
72
  useEffect(() => {
65
73
  const loadedFavorites = JSON.parse(localStorage.getItem(localStorageKey + 'favorites') || '[]');
66
74
  setFavorites(loadedFavorites);
@@ -146,7 +154,9 @@ const MapListProvider = ({ children, siteConfig, resetFilters, navigateToDetails
146
154
  if (filterByFavorites) {
147
155
  filteredListings = filteredListings.filter((x) => favorites.includes(x.id));
148
156
  }
157
+ // Batch state updates together
149
158
  setNewFilteredListings(filteredListings);
159
+ setMapItems(mapItems);
150
160
  if (firstLoad && tempSelectedFilters) ;
151
161
  else if (Object.keys(tempSelectedFilters).length === 0 && !firstLoad) {
152
162
  localStorage.removeItem(localStorageKey + 'selectedFilters');
@@ -158,7 +168,6 @@ const MapListProvider = ({ children, siteConfig, resetFilters, navigateToDetails
158
168
  updateURLWithFilters(tempSelectedFilters, window.location, tempQuery, handleUrlUpdate);
159
169
  }
160
170
  tempQuery != null ? localStorage.setItem(localStorageKey + 'query', tempQuery) : localStorage.removeItem(localStorageKey + 'query');
161
- setMapItems(mapItems);
162
171
  if (tempSelectedFilters) {
163
172
  const keys = Object.keys(tempSelectedFilters);
164
173
  const lastKey = keys[keys.length - 1];
@@ -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 { 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 noEntities?: boolean;\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?: (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}\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\thideMap = false,\n\thideFilters = false,\n\tnoEntities = false\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\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\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\tlocalStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));\n\t\tsetNewFilteredListings(filteredListings);\n\t}, [sortSetting, localStorageKey, filteredListings]);\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\n\tuseEffect(() => {\n\t\tif (!commuteLocation || noEntities) return;\n\n\t\tasync function fetchEntities() {\n\t\t\ttry {\n\t\t\t\tlet fetchedEntities;\n\t\t\t\tif (getListingEntitiesCallback) {\n\t\t\t\t\tfetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);\n\t\t\t\t} else {\n\t\t\t\t\tfetchedEntities = await getListingEntities(`${commuteLocation.lat}, ${commuteLocation.lng}`);\n\t\t\t\t}\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\tuseEffect(() => {\n\t\tconst handleFetchListings = async () => {\n\t\tif (!(getStorageObject(localStorageKey + 'listings', []) || []).length) {\n\t\t\tsetLoading(true);\n\t\t}\n\n\t\ttry {\n\t\t\tconst {\n\t\t\t\tlistingsResult,\n\t\t\t\tentitiesByKey,\n\t\t\t\tdistinctItems\n\t\t\t} = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback, noEntities);\n\t\t\tif (defaultFilters) {\n\t\t\t\tconst filteredListings = listingsResult.filter(listing => {\n\t\t\t\tif (!listing.fields) return false;\n\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 = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;\n\t\t\t\t\treturn filterValues.includes(listingValue);\n\t\t\t\t});\n\t\t\t});\n\t\t\tsetAllListings(filteredListings);\n\t\t} else {\n\t\t\tsetAllListings(listingsResult);\n\t\t}\n\t\t\tsetListingEntities(entitiesByKey);\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 = async () => {\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 } = 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\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\tnoEntities\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 noEntities?: boolean;\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?: (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}\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\thideMap = false,\n\thideFilters = false,\n\tnoEntities = false\n}) => {\n\tconst firstLoadFilters = () =>{\n\t\tlet urlData = filtersFromURL(window.location);\n\t\tlet urlFilters = urlData?.filters;\n\t\t\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\t\t\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\t// Check URL first\n\t\tconst urlData = filtersFromURL(window.location);\n\t\t\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\t\t\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\tlocalStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));\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\n\tuseEffect(() => {\n\t\tif (!commuteLocation || noEntities) return;\n\n\t\tasync function fetchEntities() {\n\t\t\ttry {\n\t\t\t\tlet fetchedEntities;\n\t\t\t\tif (getListingEntitiesCallback) {\n\t\t\t\t\tfetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);\n\t\t\t\t} else {\n\t\t\t\t\tfetchedEntities = await getListingEntities(`${commuteLocation.lat}, ${commuteLocation.lng}`);\n\t\t\t\t}\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\tuseEffect(() => {\n\t\tconst handleFetchListings = async () => {\n\t\tif (!(getStorageObject(localStorageKey + 'listings', []) || []).length) {\n\t\t\tsetLoading(true);\n\t\t}\n\n\t\ttry {\n\t\t\tconst {\n\t\t\t\tlistingsResult,\n\t\t\t\tentitiesByKey,\n\t\t\t\tdistinctItems\n\t\t\t} = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback, noEntities);\n\t\t\tif (defaultFilters) {\n\t\t\t\tconst filteredListings = listingsResult.filter(listing => {\n\t\t\t\tif (!listing.fields) return false;\n\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 = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;\n\t\t\t\t\treturn filterValues.includes(listingValue);\n\t\t\t\t});\n\t\t\t});\n\t\t\tsetAllListings(filteredListings);\n\t\t} else {\n\t\t\tsetAllListings(listingsResult);\n\t\t}\n\t\t\tsetListingEntities(entitiesByKey);\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 = async () => {\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 } = 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\t\t\t\n\t\t\t// Batch state updates together\n\t\t\tsetNewFilteredListings(filteredListings);\n\t\t\tsetMapItems(mapItems);\n\t\t\t\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\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\tnoEntities\n\t\t}}>\n\t\t\t{children}\n\t\t</MapListContext.Provider>\n\t);\n};\n"],"names":[],"mappings":"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"}
@@ -3,5 +3,6 @@ export function isAlgoliaAvailable(): boolean;
3
3
  export function searchAlgolia(query: string): Promise<{
4
4
  referenceNumbers: number[];
5
5
  ids: string[];
6
+ orderMap: Map<any, any>;
6
7
  }>;
7
8
  export function filterListingsByAlgoliaSearch(listings: any, query: any): Promise<any>;
@@ -3,6 +3,7 @@ export function parseQueryParams(search: any): {};
3
3
  export function filtersFromURL(location: any): {
4
4
  filters: {};
5
5
  query: null;
6
+ lsIgnore: boolean;
6
7
  } | undefined;
7
8
  export function hasFiltersInURL(location: any): boolean | undefined;
8
9
  export function hasQueryInUrl(location: any): boolean | undefined;
@@ -33,13 +33,13 @@ var isAlgoliaAvailable = function isAlgoliaAvailable() {
33
33
  };
34
34
 
35
35
  /**
36
- * Search using Algolia and return matching listing IDs
36
+ * Search using Algolia and return matching listing IDs with their order
37
37
  * @param {string} query - Search query
38
- * @returns {Promise<{referenceNumbers: number[], ids: string[]}>} Object with arrays of referenceNumbers and ids
38
+ * @returns {Promise<{referenceNumbers: number[], ids: string[], orderMap: Map}>} Object with arrays of IDs and a map for ordering
39
39
  */
40
40
  var searchAlgolia = /*#__PURE__*/function () {
41
41
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(query) {
42
- var _results$, _yield$algoliaClient$, results, hits, referenceNumbers, ids;
42
+ var _results$, _yield$algoliaClient$, results, hits, referenceNumbers, ids, orderMap;
43
43
  return _regeneratorRuntime().wrap(function _callee$(_context) {
44
44
  while (1) switch (_context.prev = _context.next) {
45
45
  case 0:
@@ -61,47 +61,52 @@ var searchAlgolia = /*#__PURE__*/function () {
61
61
  case 5:
62
62
  _yield$algoliaClient$ = _context.sent;
63
63
  results = _yield$algoliaClient$.results;
64
- // Extract IDs from the results
64
+ // Extract IDs from the results and maintain order
65
65
  hits = ((_results$ = results[0]) === null || _results$ === void 0 ? void 0 : _results$.hits) || [];
66
66
  console.log('Algolia search returned', hits.length, 'hits');
67
67
  referenceNumbers = [];
68
68
  ids = [];
69
- hits.forEach(function (hit) {
69
+ orderMap = new Map(); // Map to store the Algolia result order
70
+ hits.forEach(function (hit, index) {
70
71
  if (hit.referenceNumber) {
71
- referenceNumbers.push(parseInt(hit.referenceNumber));
72
+ var refNum = parseInt(hit.referenceNumber);
73
+ referenceNumbers.push(refNum);
74
+ orderMap.set("ref-".concat(refNum), index);
72
75
  }
73
76
  if (hit.id) {
74
77
  ids.push(hit.id);
78
+ orderMap.set("id-".concat(hit.id), index);
75
79
  }
76
80
  });
77
81
  console.log('Extracted', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids from Algolia');
78
82
  return _context.abrupt("return", {
79
83
  referenceNumbers: referenceNumbers,
80
- ids: ids
84
+ ids: ids,
85
+ orderMap: orderMap
81
86
  });
82
- case 16:
83
- _context.prev = 16;
87
+ case 17:
88
+ _context.prev = 17;
84
89
  _context.t0 = _context["catch"](2);
85
90
  console.error('Algolia search failed:', _context.t0);
86
91
  throw _context.t0;
87
- case 20:
92
+ case 21:
88
93
  case "end":
89
94
  return _context.stop();
90
95
  }
91
- }, _callee, null, [[2, 16]]);
96
+ }, _callee, null, [[2, 17]]);
92
97
  }));
93
98
  return function searchAlgolia(_x) {
94
99
  return _ref.apply(this, arguments);
95
100
  };
96
101
  }(); /**
97
- * Filter listings by Algolia search results
102
+ * Filter listings by Algolia search results and sort by Algolia's result order
98
103
  * @param {Array} listings - All listings to filter
99
104
  * @param {string} query - Search query
100
- * @returns {Promise<Array>} Filtered listings
105
+ * @returns {Promise<Array>} Filtered and sorted listings
101
106
  */
102
107
  var filterListingsByAlgoliaSearch = /*#__PURE__*/function () {
103
108
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(listings, query) {
104
- var _yield$searchAlgolia, referenceNumbers, ids, filtered;
109
+ var _yield$searchAlgolia, referenceNumbers, ids, orderMap, filtered;
105
110
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
106
111
  while (1) switch (_context2.prev = _context2.next) {
107
112
  case 0:
@@ -118,6 +123,7 @@ var filterListingsByAlgoliaSearch = /*#__PURE__*/function () {
118
123
  _yield$searchAlgolia = _context2.sent;
119
124
  referenceNumbers = _yield$searchAlgolia.referenceNumbers;
120
125
  ids = _yield$searchAlgolia.ids;
126
+ orderMap = _yield$searchAlgolia.orderMap;
121
127
  console.log('Filtering', listings.length, 'listings against', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids');
122
128
  console.log('Sample listing referenceNumbers:', listings.slice(0, 5).map(function (l) {
123
129
  return l.referenceNumber;
@@ -131,19 +137,26 @@ var filterListingsByAlgoliaSearch = /*#__PURE__*/function () {
131
137
  // Filter listings by matching referenceNumber OR id
132
138
  filtered = listings.filter(function (listing) {
133
139
  return referenceNumbers.includes(listing.referenceNumber) || ids.includes(listing.id);
140
+ }); // Sort filtered listings by Algolia result order
141
+ filtered.sort(function (a, b) {
142
+ var _ref3, _orderMap$get, _ref4, _orderMap$get2;
143
+ // Get the Algolia order index for each listing
144
+ var orderA = (_ref3 = (_orderMap$get = orderMap.get("ref-".concat(a.referenceNumber))) !== null && _orderMap$get !== void 0 ? _orderMap$get : orderMap.get("id-".concat(a.id))) !== null && _ref3 !== void 0 ? _ref3 : Infinity;
145
+ var orderB = (_ref4 = (_orderMap$get2 = orderMap.get("ref-".concat(b.referenceNumber))) !== null && _orderMap$get2 !== void 0 ? _orderMap$get2 : orderMap.get("id-".concat(b.id))) !== null && _ref4 !== void 0 ? _ref4 : Infinity;
146
+ return orderA - orderB;
134
147
  });
135
- console.log('Filtered result:', filtered.length, 'listings matched');
148
+ console.log('Filtered result:', filtered.length, 'listings matched and sorted by Algolia order');
136
149
  return _context2.abrupt("return", filtered);
137
- case 18:
138
- _context2.prev = 18;
150
+ case 20:
151
+ _context2.prev = 20;
139
152
  _context2.t0 = _context2["catch"](2);
140
153
  console.error('Failed to filter by Algolia search, returning all listings:', _context2.t0);
141
154
  return _context2.abrupt("return", listings);
142
- case 22:
155
+ case 24:
143
156
  case "end":
144
157
  return _context2.stop();
145
158
  }
146
- }, _callee2, null, [[2, 18]]);
159
+ }, _callee2, null, [[2, 20]]);
147
160
  }));
148
161
  return function filterListingsByAlgoliaSearch(_x2, _x3) {
149
162
  return _ref2.apply(this, arguments);
@@ -1 +1 @@
1
- {"version":3,"file":"algoliaSearchUtil.js","sources":["../../src/util/algoliaSearchUtil.js"],"sourcesContent":["import { liteClient as algoliasearch } from 'algoliasearch/lite';\n\nlet algoliaClient = null;\nlet algoliaIndexName = null;\n\n/**\n * Initialize Algolia search client\n * @param {string} appId - Algolia Application ID\n * @param {string} apiKey - Algolia Search API Key\n * @param {string} indexName - Algolia Index Name\n */\nexport const initializeAlgoliaSearch = (appId, apiKey, indexName) => {\n\tif (!appId || !apiKey || !indexName) {\n\t\tconsole.warn('Algolia search not initialized: missing configuration');\n\t\treturn false;\n\t}\n\n\ttry {\n\t\talgoliaClient = algoliasearch(appId, apiKey);\n\t\talgoliaIndexName = indexName;\n\t\treturn true;\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize Algolia:', error);\n\t\treturn false;\n\t}\n};\n\n/**\n * Check if Algolia is initialized and available\n */\nexport const isAlgoliaAvailable = () => {\n\treturn algoliaClient !== null && algoliaIndexName !== null;\n};\n\n/**\n * Search using Algolia and return matching listing IDs\n * @param {string} query - Search query\n * @returns {Promise<{referenceNumbers: number[], ids: string[]}>} Object with arrays of referenceNumbers and ids\n */\nexport const searchAlgolia = async (query) => {\n\tif (!isAlgoliaAvailable()) {\n\t\tthrow new Error('Algolia search is not initialized');\n\t}\n\n\ttry {\n\t\tconst { results } = await algoliaClient.search({\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\tindexName: algoliaIndexName,\n\t\t\t\t\tquery: query,\n\t\t\t\t\thitsPerPage: 1000 // Adjust based on your needs\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\n\t\t// Extract IDs from the results\n\t\tconst hits = results[0]?.hits || [];\n\t\tconsole.log('Algolia search returned', hits.length, 'hits');\n\t\t\n\t\tconst referenceNumbers = [];\n\t\tconst ids = [];\n\t\t\n\t\thits.forEach(hit => {\n\t\t\tif (hit.referenceNumber) {\n\t\t\t\treferenceNumbers.push(parseInt(hit.referenceNumber));\n\t\t\t}\n\t\t\tif (hit.id) {\n\t\t\t\tids.push(hit.id);\n\t\t\t}\n\t\t});\n\n\t\tconsole.log('Extracted', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids from Algolia');\n\t\treturn { referenceNumbers, ids };\n\t} catch (error) {\n\t\tconsole.error('Algolia search failed:', error);\n\t\tthrow error;\n\t}\n};/**\n * Filter listings by Algolia search results\n * @param {Array} listings - All listings to filter\n * @param {string} query - Search query\n * @returns {Promise<Array>} Filtered listings\n */\nexport const filterListingsByAlgoliaSearch = async (listings, query) => {\n\tif (!query || !isAlgoliaAvailable()) {\n\t\treturn listings;\n\t}\n\n\ttry {\n\t\tconst { referenceNumbers, ids } = await searchAlgolia(query);\n\t\t\n\t\tconsole.log('Filtering', listings.length, 'listings against', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids');\n\t\tconsole.log('Sample listing referenceNumbers:', listings.slice(0, 5).map(l => l.referenceNumber));\n\t\tconsole.log('Sample listing ids:', listings.slice(0, 5).map(l => l.id));\n\t\tconsole.log('Sample Algolia referenceNumbers:', referenceNumbers.slice(0, 5));\n\t\tconsole.log('Sample Algolia ids:', ids.slice(0, 5));\n\t\t\n\t\t// Filter listings by matching referenceNumber OR id\n\t\tconst filtered = listings.filter(listing => \n\t\t\treferenceNumbers.includes(listing.referenceNumber) || ids.includes(listing.id)\n\t\t);\n\t\t\n\t\tconsole.log('Filtered result:', filtered.length, 'listings matched');\n\t\treturn filtered;\n\t} catch (error) {\n\t\tconsole.error('Failed to filter by Algolia search, returning all listings:', error);\n\t\treturn listings;\n\t}\n};\n"],"names":["algoliaClient","algoliaIndexName","initializeAlgoliaSearch","appId","apiKey","indexName","console","warn","algoliasearch","error","isAlgoliaAvailable","searchAlgolia","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","query","_results$","_yield$algoliaClient$","results","hits","referenceNumbers","ids","wrap","_callee$","_context","prev","next","Error","search","requests","hitsPerPage","sent","log","length","forEach","hit","referenceNumber","push","parseInt","id","abrupt","t0","stop","_x","apply","arguments","filterListingsByAlgoliaSearch","_ref2","_callee2","listings","_yield$searchAlgolia","filtered","_callee2$","_context2","slice","map","l","filter","listing","includes","_x2","_x3"],"mappings":"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"}
1
+ {"version":3,"file":"algoliaSearchUtil.js","sources":["../../src/util/algoliaSearchUtil.js"],"sourcesContent":["import { liteClient as algoliasearch } from 'algoliasearch/lite';\n\nlet algoliaClient = null;\nlet algoliaIndexName = null;\n\n/**\n * Initialize Algolia search client\n * @param {string} appId - Algolia Application ID\n * @param {string} apiKey - Algolia Search API Key\n * @param {string} indexName - Algolia Index Name\n */\nexport const initializeAlgoliaSearch = (appId, apiKey, indexName) => {\n\tif (!appId || !apiKey || !indexName) {\n\t\tconsole.warn('Algolia search not initialized: missing configuration');\n\t\treturn false;\n\t}\n\n\ttry {\n\t\talgoliaClient = algoliasearch(appId, apiKey);\n\t\talgoliaIndexName = indexName;\n\t\treturn true;\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize Algolia:', error);\n\t\treturn false;\n\t}\n};\n\n/**\n * Check if Algolia is initialized and available\n */\nexport const isAlgoliaAvailable = () => {\n\treturn algoliaClient !== null && algoliaIndexName !== null;\n};\n\n/**\n * Search using Algolia and return matching listing IDs with their order\n * @param {string} query - Search query\n * @returns {Promise<{referenceNumbers: number[], ids: string[], orderMap: Map}>} Object with arrays of IDs and a map for ordering\n */\nexport const searchAlgolia = async (query) => {\n\tif (!isAlgoliaAvailable()) {\n\t\tthrow new Error('Algolia search is not initialized');\n\t}\n\n\ttry {\n\t\tconst { results } = await algoliaClient.search({\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\tindexName: algoliaIndexName,\n\t\t\t\t\tquery: query,\n\t\t\t\t\thitsPerPage: 1000 // Adjust based on your needs\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\n\t\t// Extract IDs from the results and maintain order\n\t\tconst hits = results[0]?.hits || [];\n\t\tconsole.log('Algolia search returned', hits.length, 'hits');\n\t\t\n\t\tconst referenceNumbers = [];\n\t\tconst ids = [];\n\t\tconst orderMap = new Map(); // Map to store the Algolia result order\n\t\t\n\t\thits.forEach((hit, index) => {\n\t\t\tif (hit.referenceNumber) {\n\t\t\t\tconst refNum = parseInt(hit.referenceNumber);\n\t\t\t\treferenceNumbers.push(refNum);\n\t\t\t\torderMap.set(`ref-${refNum}`, index);\n\t\t\t}\n\t\t\tif (hit.id) {\n\t\t\t\tids.push(hit.id);\n\t\t\t\torderMap.set(`id-${hit.id}`, index);\n\t\t\t}\n\t\t});\n\n\t\tconsole.log('Extracted', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids from Algolia');\n\t\treturn { referenceNumbers, ids, orderMap };\n\t} catch (error) {\n\t\tconsole.error('Algolia search failed:', error);\n\t\tthrow error;\n\t}\n};/**\n * Filter listings by Algolia search results and sort by Algolia's result order\n * @param {Array} listings - All listings to filter\n * @param {string} query - Search query\n * @returns {Promise<Array>} Filtered and sorted listings\n */\nexport const filterListingsByAlgoliaSearch = async (listings, query) => {\n\tif (!query || !isAlgoliaAvailable()) {\n\t\treturn listings;\n\t}\n\n\ttry {\n\t\tconst { referenceNumbers, ids, orderMap } = await searchAlgolia(query);\n\t\t\n\t\tconsole.log('Filtering', listings.length, 'listings against', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids');\n\t\tconsole.log('Sample listing referenceNumbers:', listings.slice(0, 5).map(l => l.referenceNumber));\n\t\tconsole.log('Sample listing ids:', listings.slice(0, 5).map(l => l.id));\n\t\tconsole.log('Sample Algolia referenceNumbers:', referenceNumbers.slice(0, 5));\n\t\tconsole.log('Sample Algolia ids:', ids.slice(0, 5));\n\t\t\n\t\t// Filter listings by matching referenceNumber OR id\n\t\tconst filtered = listings.filter(listing => \n\t\t\treferenceNumbers.includes(listing.referenceNumber) || ids.includes(listing.id)\n\t\t);\n\t\t\n\t\t// Sort filtered listings by Algolia result order\n\t\tfiltered.sort((a, b) => {\n\t\t\t// Get the Algolia order index for each listing\n\t\t\tconst orderA = orderMap.get(`ref-${a.referenceNumber}`) ?? orderMap.get(`id-${a.id}`) ?? Infinity;\n\t\t\tconst orderB = orderMap.get(`ref-${b.referenceNumber}`) ?? orderMap.get(`id-${b.id}`) ?? Infinity;\n\t\t\treturn orderA - orderB;\n\t\t});\n\t\t\n\t\tconsole.log('Filtered result:', filtered.length, 'listings matched and sorted by Algolia order');\n\t\treturn filtered;\n\t} catch (error) {\n\t\tconsole.error('Failed to filter by Algolia search, returning all listings:', error);\n\t\treturn listings;\n\t}\n};\n"],"names":["algoliaClient","algoliaIndexName","initializeAlgoliaSearch","appId","apiKey","indexName","console","warn","algoliasearch","error","isAlgoliaAvailable","searchAlgolia","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","query","_results$","_yield$algoliaClient$","results","hits","referenceNumbers","ids","orderMap","wrap","_callee$","_context","prev","next","Error","search","requests","hitsPerPage","sent","log","length","Map","forEach","hit","index","referenceNumber","refNum","parseInt","push","set","concat","id","abrupt","t0","stop","_x","apply","arguments","filterListingsByAlgoliaSearch","_ref2","_callee2","listings","_yield$searchAlgolia","filtered","_callee2$","_context2","slice","map","l","filter","listing","includes","sort","a","b","_ref3","_orderMap$get","_ref4","_orderMap$get2","orderA","get","Infinity","orderB","_x2","_x3"],"mappings":"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"}
@@ -53,6 +53,7 @@ var filtersFromURL = function filtersFromURL(location) {
53
53
  if (!location || !location.search) return;
54
54
  var filters = {};
55
55
  var queryParam = null;
56
+ var lsIgnore = false;
56
57
  var queryParams = parseQueryParams(location.search);
57
58
  if (!queryParams) return;
58
59
  Object.keys(queryParams).forEach(function (key) {
@@ -67,11 +68,14 @@ var filtersFromURL = function filtersFromURL(location) {
67
68
  filters[category][filter] = queryParams[key] === 'true';
68
69
  } else if (key === 'query') {
69
70
  queryParam = queryParams[key];
71
+ } else if (key === 'ls-ignore') {
72
+ lsIgnore = queryParams[key] === 'true';
70
73
  }
71
74
  });
72
75
  return {
73
76
  filters: filters,
74
- query: queryParam
77
+ query: queryParam,
78
+ lsIgnore: lsIgnore
75
79
  };
76
80
  };
77
81
 
@@ -1 +1 @@
1
- {"version":3,"file":"urlFilterUtil.js","sources":["../../src/util/urlFilterUtil.js"],"sourcesContent":["export const updateURLWithFilters = (filters, location, query, handleUrlUpdate) => {\n\tconst searchParams = new URLSearchParams(location.search);\n\n\tconst filteredSearchParams = new URLSearchParams();\n\tfor (const [key, value] of searchParams.entries()) {\n\t\tif (!key.includes('.') && key !== 'query') {\n\t\t\tfilteredSearchParams.set(key, value);\n\t\t}\n\t}\n\n\tif (query) {\n\t\tfilteredSearchParams.set('query', query);\n\t}\n\n\tfor (const category in filters) {\n\t\tfor (const filter in filters[category]) {\n\t\t\tconst key = `${category}.${filter}`;\n\t\t\tif (filters[category][filter]) {\n\t\t\t\tfilteredSearchParams.set(key, 'true');\n\t\t\t}\n\t\t}\n\t}\n\n\thandleUrlUpdate(filteredSearchParams.toString());\n};\n\nfunction notifyParentOfUrlChange() {\n\tsetTimeout(() => {\n\t\tvar message = {\n\t\t\ttype: 'URL_CHANGE',\n\t\t\turl: window.location.href\n\t\t};\n\t\twindow.parent.postMessage(message, \"*\");\n\t}, 500);\n}\n\nexport const parseQueryParams = search => {\n\tconst queryParams = {};\n\tif (!search) return queryParams;\n\tlet queryString = search.split('?')[1];\n\tif (!queryString) {\n\t\treturn queryParams;\n\t}\n\tqueryString = queryString.replaceAll('+', ' ');\n\tqueryString.split('&').forEach(param => {\n\t\tconst [key, value] = param.split('=');\n\t\tqueryParams[decodeURIComponent(key)] = decodeURIComponent(value);\n\t});\n\treturn queryParams;\n};\n\nexport const filtersFromURL = location => {\n\tif (!location || !location.search) return;\n\tconst filters = {};\n\tlet queryParam = null;\n\tconst queryParams = parseQueryParams(location.search);\n\tif (!queryParams) return;\n\tObject.keys(queryParams).forEach(key => {\n\t\tif (key && key.includes('.')) {\n\t\t\tconst [category, filter] = key.split('.');\n\t\t\tif (!filters[category]) {\n\t\t\t\tfilters[category] = {};\n\t\t\t}\n\t\t\tfilters[category][filter] = queryParams[key] === 'true';\n\t\t} else if (key === 'query') {\n\t\t\tqueryParam = queryParams[key];\n\t\t}\n\t});\n\n\treturn { filters, query: queryParam };\n};\n\nexport const hasFiltersInURL = location => {\n\tif (!location || !location.search) return;\n\tconst queryParams = parseQueryParams(location.search);\n\tif (!queryParams) return;\n\treturn Object.keys(queryParams).some(key => key.includes('.'));\n};\n\nexport const hasQueryInUrl = location => {\n\tif (!location || !location.search) return;\n\tconst queryParams = parseQueryParams(location.search);\n\tif (!queryParams) return;\n\treturn Object.keys(queryParams).includes('query');\n};\n"],"names":["updateURLWithFilters","filters","location","query","handleUrlUpdate","searchParams","URLSearchParams","search","filteredSearchParams","_iterator","_createForOfIteratorHelper","entries","_step","s","n","done","_step$value","_slicedToArray","value","key","includes","set","err","e","f","category","filter","concat","toString","parseQueryParams","queryParams","queryString","split","replaceAll","forEach","param","_param$split","_param$split2","decodeURIComponent","filtersFromURL","queryParam","Object","keys","_key$split","_key$split2"],"mappings":";;AAAaA,IAAAA,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,OAAO,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,eAAe,EAAK;EAClF,IAAMC,YAAY,GAAG,IAAIC,eAAe,CAACJ,QAAQ,CAACK,MAAM,CAAC,CAAA;AAEzD,EAAA,IAAMC,oBAAoB,GAAG,IAAIF,eAAe,EAAE,CAAA;EAAC,IAAAG,SAAA,GAAAC,0BAAA,CACxBL,YAAY,CAACM,OAAO,EAAE,CAAA;IAAAC,KAAA,CAAA;AAAA,EAAA,IAAA;IAAjD,KAAAH,SAAA,CAAAI,CAAA,EAAAD,EAAAA,CAAAA,CAAAA,KAAA,GAAAH,SAAA,CAAAK,CAAA,EAAAC,EAAAA,IAAA,GAAmD;AAAA,MAAA,IAAAC,WAAA,GAAAC,cAAA,CAAAL,KAAA,CAAAM,KAAA,EAAA,CAAA,CAAA;AAAvCC,QAAAA,IAAG,GAAAH,WAAA,CAAA,CAAA,CAAA;AAAEE,QAAAA,KAAK,GAAAF,WAAA,CAAA,CAAA,CAAA,CAAA;MACrB,IAAI,CAACG,IAAG,CAACC,QAAQ,CAAC,GAAG,CAAC,IAAID,IAAG,KAAK,OAAO,EAAE;AAC1CX,QAAAA,oBAAoB,CAACa,GAAG,CAACF,IAAG,EAAED,KAAK,CAAC,CAAA;AACrC,OAAA;AACD,KAAA;AAAC,GAAA,CAAA,OAAAI,GAAA,EAAA;IAAAb,SAAA,CAAAc,CAAA,CAAAD,GAAA,CAAA,CAAA;AAAA,GAAA,SAAA;AAAAb,IAAAA,SAAA,CAAAe,CAAA,EAAA,CAAA;AAAA,GAAA;AAED,EAAA,IAAIrB,KAAK,EAAE;AACVK,IAAAA,oBAAoB,CAACa,GAAG,CAAC,OAAO,EAAElB,KAAK,CAAC,CAAA;AACzC,GAAA;AAEA,EAAA,KAAK,IAAMsB,QAAQ,IAAIxB,OAAO,EAAE;AAC/B,IAAA,KAAK,IAAMyB,MAAM,IAAIzB,OAAO,CAACwB,QAAQ,CAAC,EAAE;MACvC,IAAMN,GAAG,MAAAQ,MAAA,CAAMF,QAAQ,EAAAE,GAAAA,CAAAA,CAAAA,MAAA,CAAID,MAAM,CAAE,CAAA;AACnC,MAAA,IAAIzB,OAAO,CAACwB,QAAQ,CAAC,CAACC,MAAM,CAAC,EAAE;AAC9BlB,QAAAA,oBAAoB,CAACa,GAAG,CAACF,GAAG,EAAE,MAAM,CAAC,CAAA;AACtC,OAAA;AACD,KAAA;AACD,GAAA;AAEAf,EAAAA,eAAe,CAACI,oBAAoB,CAACoB,QAAQ,EAAE,CAAC,CAAA;AACjD,EAAC;IAYYC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAGtB,MAAM,EAAI;EACzC,IAAMuB,WAAW,GAAG,EAAE,CAAA;AACtB,EAAA,IAAI,CAACvB,MAAM,EAAE,OAAOuB,WAAW,CAAA;EAC/B,IAAIC,WAAW,GAAGxB,MAAM,CAACyB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;EACtC,IAAI,CAACD,WAAW,EAAE;AACjB,IAAA,OAAOD,WAAW,CAAA;AACnB,GAAA;EACAC,WAAW,GAAGA,WAAW,CAACE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;EAC9CF,WAAW,CAACC,KAAK,CAAC,GAAG,CAAC,CAACE,OAAO,CAAC,UAAAC,KAAK,EAAI;AACvC,IAAA,IAAAC,YAAA,GAAqBD,KAAK,CAACH,KAAK,CAAC,GAAG,CAAC;MAAAK,aAAA,GAAApB,cAAA,CAAAmB,YAAA,EAAA,CAAA,CAAA;AAA9BjB,MAAAA,GAAG,GAAAkB,aAAA,CAAA,CAAA,CAAA;AAAEnB,MAAAA,KAAK,GAAAmB,aAAA,CAAA,CAAA,CAAA,CAAA;IACjBP,WAAW,CAACQ,kBAAkB,CAACnB,GAAG,CAAC,CAAC,GAAGmB,kBAAkB,CAACpB,KAAK,CAAC,CAAA;AACjE,GAAC,CAAC,CAAA;AACF,EAAA,OAAOY,WAAW,CAAA;AACnB,EAAC;IAEYS,cAAc,GAAG,SAAjBA,cAAcA,CAAGrC,QAAQ,EAAI;AACzC,EAAA,IAAI,CAACA,QAAQ,IAAI,CAACA,QAAQ,CAACK,MAAM,EAAE,OAAA;EACnC,IAAMN,OAAO,GAAG,EAAE,CAAA;EAClB,IAAIuC,UAAU,GAAG,IAAI,CAAA;AACrB,EAAA,IAAMV,WAAW,GAAGD,gBAAgB,CAAC3B,QAAQ,CAACK,MAAM,CAAC,CAAA;EACrD,IAAI,CAACuB,WAAW,EAAE,OAAA;EAClBW,MAAM,CAACC,IAAI,CAACZ,WAAW,CAAC,CAACI,OAAO,CAAC,UAAAf,GAAG,EAAI;IACvC,IAAIA,GAAG,IAAIA,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7B,MAAA,IAAAuB,UAAA,GAA2BxB,GAAG,CAACa,KAAK,CAAC,GAAG,CAAC;QAAAY,WAAA,GAAA3B,cAAA,CAAA0B,UAAA,EAAA,CAAA,CAAA;AAAlClB,QAAAA,QAAQ,GAAAmB,WAAA,CAAA,CAAA,CAAA;AAAElB,QAAAA,MAAM,GAAAkB,WAAA,CAAA,CAAA,CAAA,CAAA;AACvB,MAAA,IAAI,CAAC3C,OAAO,CAACwB,QAAQ,CAAC,EAAE;AACvBxB,QAAAA,OAAO,CAACwB,QAAQ,CAAC,GAAG,EAAE,CAAA;AACvB,OAAA;AACAxB,MAAAA,OAAO,CAACwB,QAAQ,CAAC,CAACC,MAAM,CAAC,GAAGI,WAAW,CAACX,GAAG,CAAC,KAAK,MAAM,CAAA;AACxD,KAAC,MAAM,IAAIA,GAAG,KAAK,OAAO,EAAE;AAC3BqB,MAAAA,UAAU,GAAGV,WAAW,CAACX,GAAG,CAAC,CAAA;AAC9B,KAAA;AACD,GAAC,CAAC,CAAA;EAEF,OAAO;AAAElB,IAAAA,OAAO,EAAPA,OAAO;AAAEE,IAAAA,KAAK,EAAEqC,UAAAA;GAAY,CAAA;AACtC;;;;"}
1
+ {"version":3,"file":"urlFilterUtil.js","sources":["../../src/util/urlFilterUtil.js"],"sourcesContent":["export const updateURLWithFilters = (filters, location, query, handleUrlUpdate) => {\n\tconst searchParams = new URLSearchParams(location.search);\n\n\tconst filteredSearchParams = new URLSearchParams();\n\tfor (const [key, value] of searchParams.entries()) {\n\t\tif (!key.includes('.') && key !== 'query') {\n\t\t\tfilteredSearchParams.set(key, value);\n\t\t}\n\t}\n\n\tif (query) {\n\t\tfilteredSearchParams.set('query', query);\n\t}\n\n\tfor (const category in filters) {\n\t\tfor (const filter in filters[category]) {\n\t\t\tconst key = `${category}.${filter}`;\n\t\t\tif (filters[category][filter]) {\n\t\t\t\tfilteredSearchParams.set(key, 'true');\n\t\t\t}\n\t\t}\n\t}\n\n\thandleUrlUpdate(filteredSearchParams.toString());\n};\n\nfunction notifyParentOfUrlChange() {\n\tsetTimeout(() => {\n\t\tvar message = {\n\t\t\ttype: 'URL_CHANGE',\n\t\t\turl: window.location.href\n\t\t};\n\t\twindow.parent.postMessage(message, \"*\");\n\t}, 500);\n}\n\nexport const parseQueryParams = search => {\n\tconst queryParams = {};\n\tif (!search) return queryParams;\n\tlet queryString = search.split('?')[1];\n\tif (!queryString) {\n\t\treturn queryParams;\n\t}\n\tqueryString = queryString.replaceAll('+', ' ');\n\tqueryString.split('&').forEach(param => {\n\t\tconst [key, value] = param.split('=');\n\t\tqueryParams[decodeURIComponent(key)] = decodeURIComponent(value);\n\t});\n\treturn queryParams;\n};\n\nexport const filtersFromURL = location => {\n\tif (!location || !location.search) return;\n\tconst filters = {};\n\tlet queryParam = null;\n\tlet lsIgnore = false;\n\tconst queryParams = parseQueryParams(location.search);\n\tif (!queryParams) return;\n\tObject.keys(queryParams).forEach(key => {\n\t\tif (key && key.includes('.')) {\n\t\t\tconst [category, filter] = key.split('.');\n\t\t\tif (!filters[category]) {\n\t\t\t\tfilters[category] = {};\n\t\t\t}\n\t\t\tfilters[category][filter] = queryParams[key] === 'true';\n\t\t} else if (key === 'query') {\n\t\t\tqueryParam = queryParams[key];\n\t\t} else if (key === 'ls-ignore') {\n\t\t\tlsIgnore = queryParams[key] === 'true';\n\t\t}\n\t});\n\n\treturn { filters, query: queryParam, lsIgnore };\n};\n\nexport const hasFiltersInURL = location => {\n\tif (!location || !location.search) return;\n\tconst queryParams = parseQueryParams(location.search);\n\tif (!queryParams) return;\n\treturn Object.keys(queryParams).some(key => key.includes('.'));\n};\n\nexport const hasQueryInUrl = location => {\n\tif (!location || !location.search) return;\n\tconst queryParams = parseQueryParams(location.search);\n\tif (!queryParams) return;\n\treturn Object.keys(queryParams).includes('query');\n};\n"],"names":["updateURLWithFilters","filters","location","query","handleUrlUpdate","searchParams","URLSearchParams","search","filteredSearchParams","_iterator","_createForOfIteratorHelper","entries","_step","s","n","done","_step$value","_slicedToArray","value","key","includes","set","err","e","f","category","filter","concat","toString","parseQueryParams","queryParams","queryString","split","replaceAll","forEach","param","_param$split","_param$split2","decodeURIComponent","filtersFromURL","queryParam","lsIgnore","Object","keys","_key$split","_key$split2"],"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.5.4",
3
+ "version": "1.5.6",
4
4
  "description": "UI Components for HireControl",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -128,7 +128,14 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
128
128
  noEntities = false
129
129
  }) => {
130
130
  const firstLoadFilters = () =>{
131
- let urlFilters = filtersFromURL(window.location)?.filters;
131
+ let urlData = filtersFromURL(window.location);
132
+ let urlFilters = urlData?.filters;
133
+
134
+ // If ls-ignore=true is in URL, don't load from localStorage
135
+ if (urlData?.lsIgnore) {
136
+ return urlFilters || {};
137
+ }
138
+
132
139
  return (setFiltersUrl === true && urlFilters && Object.keys(urlFilters).length > 0) ? urlFilters : getStorageObject(localStorageKey + 'selectedFilters', {}) || {}
133
140
  }
134
141
 
@@ -136,6 +143,12 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
136
143
  if (resetFilters) return null;
137
144
  // Check URL first
138
145
  const urlData = filtersFromURL(window.location);
146
+
147
+ // If ls-ignore=true is in URL, don't load from localStorage
148
+ if (urlData?.lsIgnore) {
149
+ return urlData?.query || null;
150
+ }
151
+
139
152
  if (setFiltersUrl === true && urlData?.query) {
140
153
  return urlData.query;
141
154
  }
@@ -167,8 +180,7 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
167
180
  useEffect(() => {
168
181
  if (!sortSetting) return;
169
182
  localStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));
170
- setNewFilteredListings(filteredListings);
171
- }, [sortSetting, localStorageKey, filteredListings]);
183
+ }, [sortSetting, localStorageKey]);
172
184
 
173
185
  useEffect(() => {
174
186
  const loadedFavorites = JSON.parse(localStorage.getItem(localStorageKey + 'favorites') || '[]');
@@ -273,7 +285,11 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
273
285
  if (filterByFavorites) {
274
286
  filteredListings = filteredListings.filter((x: Listing) => favorites.includes(x.id));
275
287
  }
288
+
289
+ // Batch state updates together
276
290
  setNewFilteredListings(filteredListings);
291
+ setMapItems(mapItems);
292
+
277
293
  if (firstLoad && tempSelectedFilters) {
278
294
  // Update URL with filters if needed
279
295
  } else if (Object.keys(tempSelectedFilters).length === 0 && !firstLoad) {
@@ -286,7 +302,6 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
286
302
  updateURLWithFilters(tempSelectedFilters, window.location, tempQuery, handleUrlUpdate);
287
303
  }
288
304
  tempQuery != null ? localStorage.setItem(localStorageKey + 'query', tempQuery) : localStorage.removeItem(localStorageKey + 'query');
289
- setMapItems(mapItems);
290
305
 
291
306
  if (tempSelectedFilters) {
292
307
  const keys = Object.keys(tempSelectedFilters);
@@ -33,9 +33,9 @@ export const isAlgoliaAvailable = () => {
33
33
  };
34
34
 
35
35
  /**
36
- * Search using Algolia and return matching listing IDs
36
+ * Search using Algolia and return matching listing IDs with their order
37
37
  * @param {string} query - Search query
38
- * @returns {Promise<{referenceNumbers: number[], ids: string[]}>} Object with arrays of referenceNumbers and ids
38
+ * @returns {Promise<{referenceNumbers: number[], ids: string[], orderMap: Map}>} Object with arrays of IDs and a map for ordering
39
39
  */
40
40
  export const searchAlgolia = async (query) => {
41
41
  if (!isAlgoliaAvailable()) {
@@ -53,33 +53,37 @@ export const searchAlgolia = async (query) => {
53
53
  ]
54
54
  });
55
55
 
56
- // Extract IDs from the results
56
+ // Extract IDs from the results and maintain order
57
57
  const hits = results[0]?.hits || [];
58
58
  console.log('Algolia search returned', hits.length, 'hits');
59
59
 
60
60
  const referenceNumbers = [];
61
61
  const ids = [];
62
+ const orderMap = new Map(); // Map to store the Algolia result order
62
63
 
63
- hits.forEach(hit => {
64
+ hits.forEach((hit, index) => {
64
65
  if (hit.referenceNumber) {
65
- referenceNumbers.push(parseInt(hit.referenceNumber));
66
+ const refNum = parseInt(hit.referenceNumber);
67
+ referenceNumbers.push(refNum);
68
+ orderMap.set(`ref-${refNum}`, index);
66
69
  }
67
70
  if (hit.id) {
68
71
  ids.push(hit.id);
72
+ orderMap.set(`id-${hit.id}`, index);
69
73
  }
70
74
  });
71
75
 
72
76
  console.log('Extracted', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids from Algolia');
73
- return { referenceNumbers, ids };
77
+ return { referenceNumbers, ids, orderMap };
74
78
  } catch (error) {
75
79
  console.error('Algolia search failed:', error);
76
80
  throw error;
77
81
  }
78
82
  };/**
79
- * Filter listings by Algolia search results
83
+ * Filter listings by Algolia search results and sort by Algolia's result order
80
84
  * @param {Array} listings - All listings to filter
81
85
  * @param {string} query - Search query
82
- * @returns {Promise<Array>} Filtered listings
86
+ * @returns {Promise<Array>} Filtered and sorted listings
83
87
  */
84
88
  export const filterListingsByAlgoliaSearch = async (listings, query) => {
85
89
  if (!query || !isAlgoliaAvailable()) {
@@ -87,7 +91,7 @@ export const filterListingsByAlgoliaSearch = async (listings, query) => {
87
91
  }
88
92
 
89
93
  try {
90
- const { referenceNumbers, ids } = await searchAlgolia(query);
94
+ const { referenceNumbers, ids, orderMap } = await searchAlgolia(query);
91
95
 
92
96
  console.log('Filtering', listings.length, 'listings against', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids');
93
97
  console.log('Sample listing referenceNumbers:', listings.slice(0, 5).map(l => l.referenceNumber));
@@ -100,7 +104,15 @@ export const filterListingsByAlgoliaSearch = async (listings, query) => {
100
104
  referenceNumbers.includes(listing.referenceNumber) || ids.includes(listing.id)
101
105
  );
102
106
 
103
- console.log('Filtered result:', filtered.length, 'listings matched');
107
+ // Sort filtered listings by Algolia result order
108
+ filtered.sort((a, b) => {
109
+ // Get the Algolia order index for each listing
110
+ const orderA = orderMap.get(`ref-${a.referenceNumber}`) ?? orderMap.get(`id-${a.id}`) ?? Infinity;
111
+ const orderB = orderMap.get(`ref-${b.referenceNumber}`) ?? orderMap.get(`id-${b.id}`) ?? Infinity;
112
+ return orderA - orderB;
113
+ });
114
+
115
+ console.log('Filtered result:', filtered.length, 'listings matched and sorted by Algolia order');
104
116
  return filtered;
105
117
  } catch (error) {
106
118
  console.error('Failed to filter by Algolia search, returning all listings:', error);
@@ -53,6 +53,7 @@ export const filtersFromURL = location => {
53
53
  if (!location || !location.search) return;
54
54
  const filters = {};
55
55
  let queryParam = null;
56
+ let lsIgnore = false;
56
57
  const queryParams = parseQueryParams(location.search);
57
58
  if (!queryParams) return;
58
59
  Object.keys(queryParams).forEach(key => {
@@ -64,10 +65,12 @@ export const filtersFromURL = location => {
64
65
  filters[category][filter] = queryParams[key] === 'true';
65
66
  } else if (key === 'query') {
66
67
  queryParam = queryParams[key];
68
+ } else if (key === 'ls-ignore') {
69
+ lsIgnore = queryParams[key] === 'true';
67
70
  }
68
71
  });
69
72
 
70
- return { filters, query: queryParam };
73
+ return { filters, query: queryParam, lsIgnore };
71
74
  };
72
75
 
73
76
  export const hasFiltersInURL = location => {