@abcagency/hc-ui-components 1.4.7 → 1.4.9

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.
@@ -12,7 +12,7 @@ import { ThemeProvider } from '../contexts/themeContext.js';
12
12
  import { getMapConfig } from '../services/configService.js';
13
13
  import { setClientAuthKey } from '../clientToken.js';
14
14
 
15
- var _excluded = ["children", "siteConfig", "trackEvent"];
15
+ var _excluded = ["children", "siteConfig", "trackEvent", "googleMapsApiKey"];
16
16
 
17
17
  // Libraries for Google Maps
18
18
  var LIBRARIES = ['places'];
@@ -84,6 +84,7 @@ var ContextProviders = function ContextProviders(_ref2) {
84
84
  var children = _ref2.children,
85
85
  siteConfig = _ref2.siteConfig,
86
86
  trackEvent = _ref2.trackEvent,
87
+ googleMapsApiKey = _ref2.googleMapsApiKey,
87
88
  mapListProps = _objectWithoutProperties(_ref2, _excluded);
88
89
  return /*#__PURE__*/React__default.createElement(TrackEventProvider, {
89
90
  trackEvent: trackEvent
@@ -102,6 +103,7 @@ var ContextProviders = function ContextProviders(_ref2) {
102
103
  }, /*#__PURE__*/React__default.createElement(PlacesProvider, {
103
104
  placeMappings: (_siteConfig$pointsOfI = siteConfig.pointsOfInterestConfig.placeMappings) !== null && _siteConfig$pointsOfI !== void 0 ? _siteConfig$pointsOfI : {},
104
105
  additionalMapMarkers: mapListProps.additionalMapMarkers,
106
+ googleMapsApiKey: googleMapsApiKey,
105
107
  markerColors: {
106
108
  fillColor: siteConfig.colors.primary,
107
109
  strokeColor: siteConfig.colors.primaryDark,
@@ -120,6 +122,7 @@ var ContextProviders = function ContextProviders(_ref2) {
120
122
  var HireControlMap = function HireControlMap(_ref3) {
121
123
  var _siteConfig$pointsOfI2;
122
124
  var clientToken = _ref3.clientToken,
125
+ googleMapsApiKey = _ref3.googleMapsApiKey,
123
126
  _ref3$containerStyle = _ref3.containerStyle,
124
127
  containerStyle = _ref3$containerStyle === void 0 ? {
125
128
  height: '100vh'
@@ -149,6 +152,8 @@ var HireControlMap = function HireControlMap(_ref3) {
149
152
  listings = _ref3$listings === void 0 ? [] : _ref3$listings,
150
153
  _ref3$entities = _ref3.entities,
151
154
  entities = _ref3$entities === void 0 ? [] : _ref3$entities,
155
+ _ref3$getListingEntit = _ref3.getListingEntitiesCallback,
156
+ getListingEntitiesCallback = _ref3$getListingEntit === void 0 ? null : _ref3$getListingEntit,
152
157
  _ref3$defaultFilters = _ref3.defaultFilters,
153
158
  defaultFilters = _ref3$defaultFilters === void 0 ? null : _ref3$defaultFilters,
154
159
  _ref3$hiddenFilters = _ref3.hiddenFilters,
@@ -171,11 +176,32 @@ var HireControlMap = function HireControlMap(_ref3) {
171
176
  error = _useSiteConfig.error;
172
177
 
173
178
  // Load Google Maps
174
- useLoadScript({
175
- googleMapsApiKey: "AIzaSyAXPlfaoMCrmjNV1u-vFYdLBi7GkGeh4S4",
179
+ var _useLoadScript = useLoadScript({
180
+ googleMapsApiKey: googleMapsApiKey,
176
181
  version: 'quarterly',
177
182
  libraries: LIBRARIES
178
- });
183
+ }),
184
+ isMapsLoaded = _useLoadScript.isLoaded,
185
+ loadError = _useLoadScript.loadError;
186
+
187
+ // Show loading state or error if Google Maps hasn't loaded yet
188
+ if (!googleMapsApiKey) {
189
+ console.error('Google Maps API key is required');
190
+ return /*#__PURE__*/React__default.createElement("div", {
191
+ className: "hc-p-4"
192
+ }, "Google Maps API key is required");
193
+ }
194
+ if (loadError) {
195
+ console.error('Google Maps failed to load:', loadError);
196
+ return /*#__PURE__*/React__default.createElement("div", {
197
+ className: "hc-p-4"
198
+ }, "Error loading Google Maps");
199
+ }
200
+ if (!isMapsLoaded) {
201
+ return /*#__PURE__*/React__default.createElement("div", {
202
+ className: "hc-p-4"
203
+ }, "Loading Maps...");
204
+ }
179
205
  if (error || !siteConfig) {
180
206
  return /*#__PURE__*/React__default.createElement("div", {
181
207
  className: "hc-p-4"
@@ -193,6 +219,8 @@ var HireControlMap = function HireControlMap(_ref3) {
193
219
  easyApplyText: easyApplyText,
194
220
  listings: listings,
195
221
  entities: entities,
222
+ siteConfig: siteConfig,
223
+ getListingEntitiesCallback: getListingEntitiesCallback,
196
224
  setFiltersUrl: setFiltersUrl,
197
225
  hiddenFilters: hiddenFilters,
198
226
  handleUrlUpdate: handleUrlUpdate,
@@ -220,7 +248,8 @@ var HireControlMap = function HireControlMap(_ref3) {
220
248
  //Desktop view of filter used below
221
249
  return /*#__PURE__*/React__default.createElement(ContextProviders, _extends({
222
250
  siteConfig: siteConfig,
223
- trackEvent: trackEvent
251
+ trackEvent: trackEvent,
252
+ googleMapsApiKey: googleMapsApiKey || process.env.GOOGLE_MAPS_API_KEY
224
253
  }, mapListProps), /*#__PURE__*/React__default.createElement(Grid, {
225
254
  as: "section",
226
255
  id: "job-search-interface",
@@ -1 +1 @@
1
- {"version":3,"file":"HireControlMap.js","sources":["../../src/components/HireControlMap.js"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useLoadScript } from '@react-google-maps/api';\n\nimport Grid from '~/components/modules/grid';\nimport Filter from '~/components/containers/filter/filter-container';\nimport MapList from '~/components/containers/maps/map-list-container';\n\n// Context imports\nimport { MapProvider } from '~/contexts/mapContext';\nimport { PlacesProvider } from '~/contexts/placesContext';\nimport { MapListProvider } from '~/contexts/mapListContext';\nimport { TrackEventProvider } from '~/contexts/trackEventContext';\nimport { ThemeProvider } from '~/contexts/themeContext';\n\nimport { getMapConfig } from '~/services/configService';\nimport { setClientAuthKey } from '~/clientToken.js';\n\nimport '../styles/index.css';\n\n// Libraries for Google Maps\nconst LIBRARIES = ['places'];\n\n// Custom hook to fetch site configuration\nfunction useSiteConfig(clientToken, siteConfiguration = null) {\n\tconst [siteConfig, setSiteConfig] = useState(siteConfiguration);\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [error, setError] = useState(null);\n\n\tuseEffect(() => {\n\t\tconst fetchSiteConfig = async () => {\n\t\t\ttry {\n\t\t\t\tsetClientAuthKey(clientToken);\n\t\t\t\tconst configData = await getMapConfig(clientToken);\n\t\t\t\tsetSiteConfig(configData);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('Failed to fetch site configuration:', err);\n\t\t\t\tsetError(err);\n\t\t\t} finally {\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t};\n\t\tif(!siteConfig){\n\t\t\tfetchSiteConfig();\n\t\t}\n\t}, [clientToken]);\n\n\treturn { siteConfig, isLoading, error };\n}\n\n// Component to handle all context providers\nconst ContextProviders = ({ children, siteConfig, trackEvent, ...mapListProps }) => { return(\n\t<TrackEventProvider trackEvent={trackEvent}>\n\t\t<ThemeProvider\n\t\t\tuiText={siteConfig.colors.uiText}\n\t\t\tuiAccent={siteConfig.colors.uiAccent}\n\t\t\tprimary={siteConfig.colors.primary}\n\t\t\tprimaryDark={siteConfig.colors.primaryDark}\n\t\t\tsecondary={siteConfig.colors.secondary}\n\t\t\tsecondaryDark={siteConfig.colors.secondaryDark}\n\t\t>\n\t\t\t<MapListProvider siteConfig={siteConfig} {...mapListProps}>\n\t\t\t\t<MapProvider resetFilters={mapListProps.resetFilters} defaultZoomOverride={mapListProps.defaultZoomOverride}>\n\t\t\t\t\t<PlacesProvider\n\t\t\t\t\t\tplaceMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}\n\t\t\t\t\t\tadditionalMapMarkers={mapListProps.additionalMapMarkers}\n\t\t\t\t\t\tmarkerColors={{\n\t\t\t\t\t\t\tfillColor: siteConfig.colors.primary,\n\t\t\t\t\t\t\tstrokeColor: siteConfig.colors.primaryDark,\n\t\t\t\t\t\t\tselectedFillColor: siteConfig.colors.secondary,\n\t\t\t\t\t\t\tselectedStrokeColor: siteConfig.colors.secondaryDark,\n\t\t\t\t\t\t\tplaceMarkers: {\n\t\t\t\t\t\t\t\tcolors: siteConfig.pointsOfInterestConfig.placeMarkerColors,\n\t\t\t\t\t\t\t\tsize: siteConfig.pointsOfInterestConfig.placeMarkerSize\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</PlacesProvider>\n\t\t\t\t</MapProvider>\n\t\t\t</MapListProvider>\n\t\t</ThemeProvider>\n\t</TrackEventProvider>\n);};\n\n// Main component\n//\nexport const HireControlMap = ({\n\tclientToken,\n\tcontainerStyle = { height: '100vh' },\n\tnavigateToDetails = null,\n\tnavigateToEasyApply = null,\n\thandleUrlUpdate = null,\n\tLink = null,\n\tlinkFormat = '/jobs/[slug]',\n\teasyApplyUrl = null,\n\teasyApplyText = 'Easy Apply',\n\tisIframe = false,\n\ttrackEvent = (eventType, eventObj) => {\n\t\tconsole.log(eventType);\n\t\tconsole.log(eventObj);\n\t},\n\tlistings = [],\n\tentities = [],\n\tdefaultFilters = null,\n\thiddenFilters = null,\n\tsetFiltersUrl = null,\n\tExpandListComponent = null,\n\tadditionalMapMarkers = [],\n\tdefaultZoomOverride = null,\n\tsiteConfiguration = null,\n\tlocalStorageKey = 'defaultKey.'\n}) => {\n\t// Load site configuration\n\tconst { siteConfig, error } = useSiteConfig(clientToken, siteConfiguration);\n\n\t// Load Google Maps\n\tconst { isLoaded: isMapsLoaded } = useLoadScript({\n\t\tgoogleMapsApiKey: process.env.GOOGLE_MAPS_API_KEY,\n\t\tversion: 'quarterly',\n\t\tlibraries: LIBRARIES\n\t});\n\n\tif (error || !siteConfig) {\n\t\treturn <div className=\"hc-p-4\"></div>;\n\t}\n\n\t// Prepare props for MapListProvider\n\tconst mapListProps = {\n\t\tresetFilters: false,\n\t\tnavigateToDetails,\n\t\tnavigateToEasyApply,\n\t\tLink,\n\t\tlinkFormat,\n\t\teasyApplyUrl,\n\t\teasyApplyText,\n\t\tlistings,\n\t\tentities,\n\t\tsetFiltersUrl,\n\t\thiddenFilters,\n\t\thandleUrlUpdate,\n\t\tdefaultFilters,\n\t\tdefaultZoomOverride, // will usually fit bounds\n\t\tcontainerStyle,\n\t\tExpandListComponent: ExpandListComponent ?? null,\n\t\tadditionalMapMarkers,\n\t\tisIframe,\n\t\tlocalStorageKey\n\t};\n\n\t// Prepare marker configuration\n\tconst markerConfigs = {\n\t\tfillColor: siteConfig.colors.primary,\n\t\tstrokeColor: siteConfig.colors.primaryDark,\n\t\tselectedFillColor: siteConfig.colors.secondary,\n\t\tselectedStrokeColor: siteConfig.colors.secondaryDark,\n\t\tplaceMarkers: {\n\t\t\tcolors: siteConfig.pointsOfInterestConfig.placeMarkerColors,\n\t\t\tsize: siteConfig.pointsOfInterestConfig.placeMarkerSize\n\t\t}\n\t};\n\t//Desktop view of filter used below\n\treturn (\n\t\t<ContextProviders\n\t\t\tsiteConfig={siteConfig}\n\t\t\ttrackEvent={trackEvent}\n\t\t\t{...mapListProps}\n\t\t>\n\t\t\t<Grid\n\t\t\t\tas='section'\n\t\t\t\tid='job-search-interface'\n\t\t\t\tcolumns='md:hc-grid-cols-[1fr_2.5fr] lg:hc-grid-cols-[1fr_3.5fr]'\n\t\t\t\tgap='hc-gap-0'\n\t\t\t\tautoRows={false}\n\t\t\t\tclassName={'hc-bundle hc-items-stretch hc-divide-x hc-divide-uiAccent/20'}\n\t\t\t>\n\t\t\t\t<Grid.Item className='hc-bg-gray-100'>\n\t\t\t\t\t<Filter isDesktop={true} showMap={siteConfig.showMap} className='hc-hidden md:hc-block' />\n\t\t\t\t</Grid.Item>\n\t\t\t\t<MapList\n\t\t\t\t\tcontainerStyle={containerStyle}\n\t\t\t\t\tmapPosition={siteConfig.mapPosition}\n\t\t\t\t\tshowMap={siteConfig.showMap}\n\t\t\t\t\tfieldsShown={siteConfig.fieldsShown}\n\t\t\t\t\tspecialFeatures={siteConfig.specialFeatures}\n\t\t\t\t\tfieldNames={siteConfig.fieldNames}\n\t\t\t\t\tplaceMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}\n\t\t\t\t\tmarkerConfigs={markerConfigs}\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</ContextProviders>\n\t);\n};\n\nexport default HireControlMap;\n"],"names":["LIBRARIES","useSiteConfig","clientToken","siteConfiguration","arguments","length","undefined","_useState","useState","_useState2","_slicedToArray","siteConfig","setSiteConfig","_useState3","_useState4","isLoading","setIsLoading","_useState5","_useState6","error","setError","useEffect","fetchSiteConfig","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","configData","wrap","_callee$","_context","prev","next","setClientAuthKey","getMapConfig","sent","t0","console","finish","stop","apply","ContextProviders","_ref2","_siteConfig$pointsOfI","children","trackEvent","mapListProps","_objectWithoutProperties","_excluded","React","createElement","TrackEventProvider","ThemeProvider","uiText","colors","uiAccent","primary","primaryDark","secondary","secondaryDark","MapListProvider","_extends","MapProvider","resetFilters","defaultZoomOverride","PlacesProvider","placeMappings","pointsOfInterestConfig","additionalMapMarkers","markerColors","fillColor","strokeColor","selectedFillColor","selectedStrokeColor","placeMarkers","placeMarkerColors","size","placeMarkerSize","HireControlMap","_ref3","_siteConfig$pointsOfI2","_ref3$containerStyle","containerStyle","height","_ref3$navigateToDetai","navigateToDetails","_ref3$navigateToEasyA","navigateToEasyApply","_ref3$handleUrlUpdate","handleUrlUpdate","_ref3$Link","Link","_ref3$linkFormat","linkFormat","_ref3$easyApplyUrl","easyApplyUrl","_ref3$easyApplyText","easyApplyText","_ref3$isIframe","isIframe","_ref3$trackEvent","eventType","eventObj","log","_ref3$listings","listings","_ref3$entities","entities","_ref3$defaultFilters","defaultFilters","_ref3$hiddenFilters","hiddenFilters","_ref3$setFiltersUrl","setFiltersUrl","_ref3$ExpandListCompo","ExpandListComponent","_ref3$additionalMapMa","_ref3$defaultZoomOver","_ref3$siteConfigurati","_ref3$localStorageKey","localStorageKey","_useSiteConfig","useLoadScript","googleMapsApiKey","version","libraries","className","markerConfigs","Grid","as","id","columns","gap","autoRows","Item","Filter","isDesktop","showMap","MapList","mapPosition","fieldsShown","specialFeatures","fieldNames"],"mappings":"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"}
1
+ {"version":3,"file":"HireControlMap.js","sources":["../../src/components/HireControlMap.js"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useLoadScript } from '@react-google-maps/api';\n\nimport Grid from '~/components/modules/grid';\nimport Filter from '~/components/containers/filter/filter-container';\nimport MapList from '~/components/containers/maps/map-list-container';\n\n// Context imports\nimport { MapProvider } from '~/contexts/mapContext';\nimport { PlacesProvider } from '~/contexts/placesContext';\nimport { MapListProvider } from '~/contexts/mapListContext';\nimport { TrackEventProvider } from '~/contexts/trackEventContext';\nimport { ThemeProvider } from '~/contexts/themeContext';\n\nimport { getMapConfig } from '~/services/configService';\nimport { setClientAuthKey } from '~/clientToken.js';\n\nimport '../styles/index.css';\n\n// Libraries for Google Maps\nconst LIBRARIES = ['places'];\n\n// Custom hook to fetch site configuration\nfunction useSiteConfig(clientToken, siteConfiguration = null) {\n\tconst [siteConfig, setSiteConfig] = useState(siteConfiguration);\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [error, setError] = useState(null);\n\n\tuseEffect(() => {\n\t\tconst fetchSiteConfig = async () => {\n\t\t\ttry {\n\t\t\t\tsetClientAuthKey(clientToken);\n\t\t\t\tconst configData = await getMapConfig(clientToken);\n\t\t\t\tsetSiteConfig(configData);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('Failed to fetch site configuration:', err);\n\t\t\t\tsetError(err);\n\t\t\t} finally {\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t};\n\t\tif(!siteConfig){\n\t\t\tfetchSiteConfig();\n\t\t}\n\t}, [clientToken]);\n\n\treturn { siteConfig, isLoading, error };\n}\n\n// Component to handle all context providers\nconst ContextProviders = ({ children, siteConfig, trackEvent, googleMapsApiKey, ...mapListProps }) => { return(\n\t<TrackEventProvider trackEvent={trackEvent}>\n\t\t<ThemeProvider\n\t\t\tuiText={siteConfig.colors.uiText}\n\t\t\tuiAccent={siteConfig.colors.uiAccent}\n\t\t\tprimary={siteConfig.colors.primary}\n\t\t\tprimaryDark={siteConfig.colors.primaryDark}\n\t\t\tsecondary={siteConfig.colors.secondary}\n\t\t\tsecondaryDark={siteConfig.colors.secondaryDark}\n\t\t>\n\t\t\t<MapListProvider siteConfig={siteConfig} {...mapListProps}>\n\t\t\t\t<MapProvider resetFilters={mapListProps.resetFilters} defaultZoomOverride={mapListProps.defaultZoomOverride}>\n\t\t\t\t\t<PlacesProvider\n\t\t\t\t\t\tplaceMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}\n\t\t\t\t\t\tadditionalMapMarkers={mapListProps.additionalMapMarkers}\n\t\t\t\t\t\tgoogleMapsApiKey={googleMapsApiKey}\n\t\t\t\t\t\tmarkerColors={{\n\t\t\t\t\t\t\tfillColor: siteConfig.colors.primary,\n\t\t\t\t\t\t\tstrokeColor: siteConfig.colors.primaryDark,\n\t\t\t\t\t\t\tselectedFillColor: siteConfig.colors.secondary,\n\t\t\t\t\t\t\tselectedStrokeColor: siteConfig.colors.secondaryDark,\n\t\t\t\t\t\t\tplaceMarkers: {\n\t\t\t\t\t\t\t\tcolors: siteConfig.pointsOfInterestConfig.placeMarkerColors,\n\t\t\t\t\t\t\t\tsize: siteConfig.pointsOfInterestConfig.placeMarkerSize\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</PlacesProvider>\n\t\t\t\t</MapProvider>\n\t\t\t</MapListProvider>\n\t\t</ThemeProvider>\n\t</TrackEventProvider>\n);};\n\n// Main component\n//\nexport const HireControlMap = ({\n\tclientToken,\n\tgoogleMapsApiKey, // Required: Google Maps API key from Next.js\n\tcontainerStyle = { height: '100vh' },\n\tnavigateToDetails = null,\n\tnavigateToEasyApply = null,\n\thandleUrlUpdate = null,\n\tLink = null,\n\tlinkFormat = '/jobs/[slug]',\n\teasyApplyUrl = null,\n\teasyApplyText = 'Easy Apply',\n\tisIframe = false,\n\ttrackEvent = (eventType, eventObj) => {\n\t\tconsole.log(eventType);\n\t\tconsole.log(eventObj);\n\t},\n\t//providing listings entities and a getListingEntities function should negate the need for map code to fetch data\n\tlistings = [],\n\tentities = [],\n\tgetListingEntitiesCallback = null,\n\tdefaultFilters = null,\n\thiddenFilters = null,\n\tsetFiltersUrl = null,\n\tExpandListComponent = null,\n\tadditionalMapMarkers = [],\n\tdefaultZoomOverride = null,\n\t//Default site configuration file passed here stops need to fetch from api\n\tsiteConfiguration = null,\n\tlocalStorageKey = 'defaultKey.'\n}) => {\n\t// Load site configuration\n\tconst { siteConfig, error } = useSiteConfig(clientToken, siteConfiguration);\n\n\t// Load Google Maps\n\tconst { isLoaded: isMapsLoaded, loadError } = useLoadScript({\n\t\tgoogleMapsApiKey: googleMapsApiKey,\n\t\tversion: 'quarterly',\n\t\tlibraries: LIBRARIES\n\t});\n\n\t// Show loading state or error if Google Maps hasn't loaded yet\n\tif (!googleMapsApiKey) {\n\t\tconsole.error('Google Maps API key is required');\n\t\treturn <div className=\"hc-p-4\">Google Maps API key is required</div>;\n\t}\n\n\tif (loadError) {\n\t\tconsole.error('Google Maps failed to load:', loadError);\n\t\treturn <div className=\"hc-p-4\">Error loading Google Maps</div>;\n\t}\n\n\tif (!isMapsLoaded) {\n\t\treturn <div className=\"hc-p-4\">Loading Maps...</div>;\n\t}\n\n\tif (error || !siteConfig) {\n\t\treturn <div className=\"hc-p-4\"></div>;\n\t}\n\n\t// Prepare props for MapListProvider\n\tconst mapListProps = {\n\t\tresetFilters: false,\n\t\tnavigateToDetails,\n\t\tnavigateToEasyApply,\n\t\tLink,\n\t\tlinkFormat,\n\t\teasyApplyUrl,\n\t\teasyApplyText,\n\t\tlistings,\n\t\tentities,\n\t\tsiteConfig,\n\t\tgetListingEntitiesCallback,\n\t\tsetFiltersUrl,\n\t\thiddenFilters,\n\t\thandleUrlUpdate,\n\t\tdefaultFilters,\n\t\tdefaultZoomOverride, // will usually fit bounds\n\t\tcontainerStyle,\n\t\tExpandListComponent: ExpandListComponent ?? null,\n\t\tadditionalMapMarkers,\n\t\tisIframe,\n\t\tlocalStorageKey\n\t};\n\n\t// Prepare marker configuration\n\tconst markerConfigs = {\n\t\tfillColor: siteConfig.colors.primary,\n\t\tstrokeColor: siteConfig.colors.primaryDark,\n\t\tselectedFillColor: siteConfig.colors.secondary,\n\t\tselectedStrokeColor: siteConfig.colors.secondaryDark,\n\t\tplaceMarkers: {\n\t\t\tcolors: siteConfig.pointsOfInterestConfig.placeMarkerColors,\n\t\t\tsize: siteConfig.pointsOfInterestConfig.placeMarkerSize\n\t\t}\n\t};\n\t//Desktop view of filter used below\n\treturn (\n\t\t<ContextProviders\n\t\t\tsiteConfig={siteConfig}\n\t\t\ttrackEvent={trackEvent}\n\t\t\tgoogleMapsApiKey={googleMapsApiKey || process.env.GOOGLE_MAPS_API_KEY}\n\t\t\t{...mapListProps}\n\t\t>\n\t\t\t<Grid\n\t\t\t\tas='section'\n\t\t\t\tid='job-search-interface'\n\t\t\t\tcolumns='md:hc-grid-cols-[1fr_2.5fr] lg:hc-grid-cols-[1fr_3.5fr]'\n\t\t\t\tgap='hc-gap-0'\n\t\t\t\tautoRows={false}\n\t\t\t\tclassName={'hc-bundle hc-items-stretch hc-divide-x hc-divide-uiAccent/20'}\n\t\t\t>\n\t\t\t\t<Grid.Item className='hc-bg-gray-100'>\n\t\t\t\t\t<Filter isDesktop={true} showMap={siteConfig.showMap} className='hc-hidden md:hc-block' />\n\t\t\t\t</Grid.Item>\n\t\t\t\t<MapList\n\t\t\t\t\tcontainerStyle={containerStyle}\n\t\t\t\t\tmapPosition={siteConfig.mapPosition}\n\t\t\t\t\tshowMap={siteConfig.showMap}\n\t\t\t\t\tfieldsShown={siteConfig.fieldsShown}\n\t\t\t\t\tspecialFeatures={siteConfig.specialFeatures}\n\t\t\t\t\tfieldNames={siteConfig.fieldNames}\n\t\t\t\t\tplaceMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}\n\t\t\t\t\tmarkerConfigs={markerConfigs}\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</ContextProviders>\n\t);\n};\n\nexport default HireControlMap;\n"],"names":["LIBRARIES","useSiteConfig","clientToken","siteConfiguration","arguments","length","undefined","_useState","useState","_useState2","_slicedToArray","siteConfig","setSiteConfig","_useState3","_useState4","isLoading","setIsLoading","_useState5","_useState6","error","setError","useEffect","fetchSiteConfig","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","configData","wrap","_callee$","_context","prev","next","setClientAuthKey","getMapConfig","sent","t0","console","finish","stop","apply","ContextProviders","_ref2","_siteConfig$pointsOfI","children","trackEvent","googleMapsApiKey","mapListProps","_objectWithoutProperties","_excluded","React","createElement","TrackEventProvider","ThemeProvider","uiText","colors","uiAccent","primary","primaryDark","secondary","secondaryDark","MapListProvider","_extends","MapProvider","resetFilters","defaultZoomOverride","PlacesProvider","placeMappings","pointsOfInterestConfig","additionalMapMarkers","markerColors","fillColor","strokeColor","selectedFillColor","selectedStrokeColor","placeMarkers","placeMarkerColors","size","placeMarkerSize","HireControlMap","_ref3","_siteConfig$pointsOfI2","_ref3$containerStyle","containerStyle","height","_ref3$navigateToDetai","navigateToDetails","_ref3$navigateToEasyA","navigateToEasyApply","_ref3$handleUrlUpdate","handleUrlUpdate","_ref3$Link","Link","_ref3$linkFormat","linkFormat","_ref3$easyApplyUrl","easyApplyUrl","_ref3$easyApplyText","easyApplyText","_ref3$isIframe","isIframe","_ref3$trackEvent","eventType","eventObj","log","_ref3$listings","listings","_ref3$entities","entities","_ref3$getListingEntit","getListingEntitiesCallback","_ref3$defaultFilters","defaultFilters","_ref3$hiddenFilters","hiddenFilters","_ref3$setFiltersUrl","setFiltersUrl","_ref3$ExpandListCompo","ExpandListComponent","_ref3$additionalMapMa","_ref3$defaultZoomOver","_ref3$siteConfigurati","_ref3$localStorageKey","localStorageKey","_useSiteConfig","_useLoadScript","useLoadScript","version","libraries","isMapsLoaded","isLoaded","loadError","className","markerConfigs","process","env","GOOGLE_MAPS_API_KEY","Grid","as","id","columns","gap","autoRows","Item","Filter","isDesktop","showMap","MapList","mapPosition","fieldsShown","specialFeatures","fieldNames"],"mappings":"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"}
@@ -65,6 +65,8 @@ const MapListProvider = ({ children, siteConfig, resetFilters, navigateToDetails
65
65
  ...new Set(allListings.map(listing => listing.entityId ?? -1))
66
66
  ];
67
67
  try {
68
+ console.log(getListingEntitiesCallback);
69
+ console.log("fetching entities");
68
70
  const fetchedEntities = getListingEntitiesCallback !== null && getListingEntitiesCallback !== undefined ? await getListingEntitiesCallback(distinctEntityIds, `${commuteLocation.lat}, ${commuteLocation.lng}`) : await getListingEntities(distinctEntityIds, `${commuteLocation.lat}, ${commuteLocation.lng}`);
69
71
  setListingEntities(fetchedEntities);
70
72
  const newFilteredListings = [...filteredListings] ?? [];
@@ -94,7 +96,7 @@ const MapListProvider = ({ children, siteConfig, resetFilters, navigateToDetails
94
96
  setLoading(true);
95
97
  }
96
98
  try {
97
- const { listingsResult, fetchedEntities, distinctItems } = await fetchListings(commuteLocation, entities, listings);
99
+ const { listingsResult, fetchedEntities, distinctItems } = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback);
98
100
  if (defaultFilters) {
99
101
  const filteredListings = listingsResult.filter(listing => {
100
102
  if (!listing.fields)
@@ -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';\n\ninterface MapListContextProps {\n loading: boolean;\n allListings: Listing[];\n filteredListings: Listing[];\n mapItems: any;\n query: string | null;\n setNewFilteredListings: (filteredListings: Listing[]) => void;\n setQuery: (query: string | null) => void;\n listingEntities: Record<number, ListingEntity> | null;\n selectedFilters: Record<string, any>;\n setSelectedFilters: (filters: Record<string, any>) => void;\n filterOptions: any;\n recruiters: Record<number, Recruiter>;\n handleFilterListingsByLocation: (selectedLocation: any) => void;\n filterDialogIsOpen: boolean;\n setFilterDialogIsOpen: (isOpen: boolean) => void;\n setMobileTab: (tab: string) => void;\n mobileTab: string;\n siteConfig: SiteConfig;\n favorites: number[];\n resetEntityFilter: () => void;\n handleSettingFavorites: (favorites: number[] | null) => void;\n setFilterByFavorites: (filter: boolean) => void;\n filterByFavorites: boolean;\n commuteLocation: any | null;\n setCommuteLocation: (location: any | null) => void;\n navigateToDetails: (id: number) => void;\n navigateToEasyApply: (id: number) => void;\n Link: React.ComponentType<any>;\n linkFormat: string;\n easyApplyUrl: string;\n easyApplyText: string;\n\tisIframe: boolean;\n sortSetting: { field: string; type: string };\n setSortSetting: (setting: { field: string; type: string }) => void;\n trackEvent: (event: string) => void;\n defaultFilters?: Record<string, any>;\n hiddenFilters?: string[];\n containerStyle?: any;\n ExpandListComponent?: React.ComponentType<{ listing: any }> | ((listing: any) => JSX.Element) | null;\n}\n\nconst MapListContext = createContext<MapListContextProps | undefined>(undefined);\n\nexport const useMapList = () => {\n\tconst context = useContext(MapListContext);\n\tif (!context) {\n\t\tthrow new Error('useMapList must be used within a MapListProvider');\n\t}\n\treturn context;\n};\n\nconst getQuery = (): string | null => {\n\tlet query: string | null = null;\n\tif (typeof window !== 'undefined') {\n\t\tquery = localStorage.getItem('query');\n\t}\n\treturn query;\n};\n\ninterface MapListProviderProps {\n children: ReactNode;\n siteConfig: MapConfig;\n resetFilters: boolean;\n navigateToDetails: (id: number) => void;\n navigateToEasyApply: (id: number) => void;\n Link: React.ComponentType<any>;\n linkFormat: string;\n easyApplyUrl: string;\n easyApplyText: string;\n\tisIframe: boolean;\n trackEvent: (event: string) => void;\n listings?: Listing[];\n\tentities?: ListingEntity[];\n setFiltersUrl?:boolean;\n hiddenFilters?: string[];\n handleUrlUpdate: (searchParams: string) => void;\n defaultFilters?: Record<string, any>;\n containerStyle?: any;\n\tlocalStorageKey: string;\n\tgetListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<Record<number, ListingEntity>>;\n ExpandListComponent?: React.ComponentType<{ listing: Listing }> | ((listing: Listing) => JSX.Element) | null;\n}\n\nexport const MapListProvider: React.FC<MapListProviderProps> = ({\n\tchildren,\n\tsiteConfig,\n\tresetFilters,\n\tnavigateToDetails,\n\tnavigateToEasyApply,\n\tLink,\n\tlinkFormat,\n\teasyApplyUrl,\n\teasyApplyText,\n\tisIframe,\n\ttrackEvent,\n\tlistings = [],\n\tentities = [],\n\tsetFiltersUrl,\n\thiddenFilters,\n\thandleUrlUpdate,\n\tdefaultFilters,\n\tcontainerStyle,\n\tExpandListComponent,\n\tgetListingEntitiesCallback,\n\tlocalStorageKey\n}) => {\n\tconst firstLoadFilters = () =>{\n\t\tlet urlFilters = filtersFromURL(window.location)?.filters;\n\t\treturn (setFiltersUrl === true && urlFilters && Object.keys(urlFilters).length > 0) ? urlFilters : getStorageObject(localStorageKey + 'selectedFilters', {}) || {}\n\t}\n\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('mapItems', []) || []);\n\tconst [query, setQuery] = useState<string | null>(() => resetFilters ? null : getQuery());\n\tconst [sortSetting, setSortSetting] = useState<{ field: string; type: string }>(getStorageObject('sortSetting', { field: 'position', type: 'asc' }) || { field: 'position', type: 'asc' });\n\tconst [listingEntities, setListingEntities] = useState<Record<number, ListingEntity> | null>({});\n\tconst [firstLoad, setFirstLoad] = useState<boolean>(true);\n\tconst [commuteLocation, setCommuteLocation] = useState<any | null>(getStorageObject('commuteLocation'));\n\tconst [selectedFilters, setSelectedFilters] = useState<Record<string, any>>(() => resetFilters ? {} : firstLoadFilters());\n\tconst [filterOptions, setFilterOptions] = useState<any>();\n\tconst [recruiters, setRecruiters] = useState<Record<number, Recruiter>>({});\n\tconst [filterDialogIsOpen, setFilterDialogIsOpen] = useState<boolean>(false);\n\tconst [mobileTab, setMobileTab] = useState<string>(\"listTab\");\n\tconst [favorites, setFavorites] = useState<number[]>([]);\n\tconst [filterByFavorites, setFilterByFavorites] = useState<boolean>(false);\n\n\tconst setNewFilteredListings = (filteredListings: Listing[]) => {\n\t\tsetFilteredListings(filteredListings);\n\t};\n\n\tuseEffect(() => {\n\t\tif (!sortSetting) return;\n\t\tlocalStorage.setItem('sortSetting', JSON.stringify(sortSetting));\n\t\tsetNewFilteredListings(filteredListings);\n\t}, [sortSetting]);\n\n\tuseEffect(() => {\n\t\tconst loadedFavorites = JSON.parse(localStorage.getItem('favorites') || '[]');\n\t\tsetFavorites(loadedFavorites);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetStorageObject(\"commuteLocation\", commuteLocation);\n\t}, [commuteLocation]);\n\n\tuseEffect(() => {\n\t\tif (!commuteLocation) return;\n\n\t\tasync function fetchEntities() {\n\t\t\tconst distinctEntityIds = [\n\t\t\t\t...new Set(allListings.map(listing => listing.entityId ?? -1))\n\t\t\t];\n\t\t\ttry {\n\t\t\t\tconst fetchedEntities = getListingEntitiesCallback !== null && getListingEntitiesCallback !== undefined ? await getListingEntitiesCallback(distinctEntityIds,\n\t\t\t\t\t`${commuteLocation.lat}, ${commuteLocation.lng}`) : await getListingEntities(\n\t\t\t\t\tdistinctEntityIds,\n\t\t\t\t\t`${commuteLocation.lat}, ${commuteLocation.lng}`\n\t\t\t\t);\n\t\t\t\tsetListingEntities(fetchedEntities);\n\t\t\t\tconst newFilteredListings: Listing[] = [...filteredListings] ?? [];\n\t\t\t\tfor (let i = 0; i < allListings.length; i++) {\n\t\t\t\t\tconst listing = newFilteredListings[i];\n\t\t\t\t\tif (\n\t\t\t\t\t\tlisting &&\n\t\t\t\t\t\tlisting.fields &&\n\t\t\t\t\t\tlisting.entityId !== undefined &&\n\t\t\t\t\t\tlisting.entityId !== -1\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst entityId = listing.entityId;\n\t\t\t\t\t\tconst travelTime = fetchedEntities[entityId]?.travelTime;\n\n\t\t\t\t\t\tif (travelTime !== undefined && listing.fields) {\n\t\t\t\t\t\t\tlisting.fields.travelTime = travelTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to fetch listing entities:\", error);\n\t\t\t}\n\t\t}\n\n\t\tfetchEntities();\n\t}, [commuteLocation, allListings, siteConfig.companyId]);\n\n\tuseEffect(() => {\n\t\tconst handleFetchListings = async () => {\n\t\t\tif (!getStorageObject('listings') ?? [].length) {\n\t\t\t\tsetLoading(true);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst {\n\t\t\t\t\tlistingsResult,\n\t\t\t\t\tfetchedEntities,\n\t\t\t\t\tdistinctItems\n\t\t\t\t} = await fetchListings(commuteLocation, entities, listings);\n\t\t\t\tif (defaultFilters) {\n\t\t\t\t\tconst filteredListings = listingsResult.filter(listing => {\n\t\t\t\t\tif (!listing.fields) return false;\n\n\t\t\t\t\treturn Object.keys(defaultFilters).every(filterKey => {\n\t\t\t\t\t\tconst filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];\n\t\t\t\t\t\tconst listingValue = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;\n\t\t\t\t\t\treturn filterValues.includes(listingValue);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tsetAllListings(filteredListings);\n\t\t\t} else {\n\t\t\t\tsetAllListings(listingsResult);\n\t\t\t}\n\t\t\t\tsetListingEntities(fetchedEntities);\n\t\t\t\tsetMapItems(distinctItems);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(error);\n\t\t\t}\n\t\t\tsetLoading(false);\n\t\t};\n\t\thandleFetchListings();\n\t}, [query, siteConfig, commuteLocation]);\n\n\tuseEffect(() => {\n\t\tconst processListings = () => {\n\t\t\tlet filteredListings: Listing[];\n\t\t\tlet tempSelectedFilters = selectedFilters;\n\t\t\tlet tempQuery = query;\n\n\t\t\tconst { mapItems, filteredListings: tempFilteredListings } = applyFilters(\n\t\t\t\tallListings,\n\t\t\t\ttempSelectedFilters,\n\t\t\t\ttempQuery,\n\t\t\t\tlistingEntities,\n\t\t\t\tfavorites,\n\t\t\t\tsiteConfig\n\t\t\t);\n\t\t\tfilteredListings = tempFilteredListings;\n\n\t\t\tif (filterByFavorites) {\n\t\t\t\tfilteredListings = filteredListings.filter((x: Listing) => favorites.includes(x.id));\n\t\t\t}\n\t\t\tsetNewFilteredListings(filteredListings);\n\t\t\tif (firstLoad && tempSelectedFilters) {\n\t\t\t\t// Update URL with filters if needed\n\t\t\t} else if (Object.keys(tempSelectedFilters).length === 0 && !firstLoad) {\n\t\t\t\tlocalStorage.removeItem('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('query', tempQuery) : localStorage.removeItem('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('favorites');\n\t\t} else {\n\t\t\tsetFavorites(newFavorites);\n\t\t\tlocalStorage.setItem('favorites', JSON.stringify(newFavorites));\n\t\t}\n\t};\n\n\treturn (\n\t\t<MapListContext.Provider value={{\n\t\t\tloading,\n\t\t\tallListings,\n\t\t\tfilteredListings,\n\t\t\tmapItems,\n\t\t\tquery,\n\t\t\tsetNewFilteredListings,\n\t\t\tsetQuery,\n\t\t\tlistingEntities,\n\t\t\tselectedFilters,\n\t\t\tsetSelectedFilters,\n\t\t\tfilterOptions,\n\t\t\trecruiters,\n\t\t\thandleFilterListingsByLocation,\n\t\t\tfilterDialogIsOpen,\n\t\t\tsetFilterDialogIsOpen,\n\t\t\tsetMobileTab,\n\t\t\tmobileTab,\n\t\t\tsiteConfig,\n\t\t\tfavorites,\n\t\t\thandleSettingFavorites,\n\t\t\tresetEntityFilter,\n\t\t\tsetFilterByFavorites,\n\t\t\tfilterByFavorites,\n\t\t\tcommuteLocation,\n\t\t\tsetCommuteLocation,\n\t\t\tnavigateToDetails,\n\t\t\tnavigateToEasyApply,\n\t\t\tLink,\n\t\t\tlinkFormat,\n\t\t\teasyApplyUrl,\n\t\t\teasyApplyText,\n\t\t\tisIframe,\n\t\t\tsortSetting,\n\t\t\tsetSortSetting,\n\t\t\ttrackEvent,\n\t\t\tdefaultFilters,\n\t\t\thiddenFilters,\n\t\t\tcontainerStyle,\n\t\t\tExpandListComponent\n\t\t}}>\n\t\t\t{children}\n\t\t</MapListContext.Provider>\n\t);\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"mapListContext.js","sources":["../../src/contexts/mapListContext.tsx"],"sourcesContent":["import React, { createContext, useState, useEffect, useContext, ReactNode } from 'react';\n\nimport { generateFilterOptions, applyFilters, filterListingsByLocation } from '~/util/filterUtil';\nimport { getStorageObject, setStorageObject } from '~/util/localStorageUtil';\nimport { updateURLWithFilters, filtersFromURL } from '~/util/urlFilterUtil';\n\nimport { getListingEntities } from \"~/services/listingEntityService\";\nimport fetchListings from '~/services/listingAggregatorService';\n\nimport { Listing } from '~/types/Listings';\nimport { ListingEntity } from '~/types/ListingEntity';\nimport { Recruiter } from '~/types/Recruiter';\nimport { MapConfig, MapConfig as SiteConfig } from '~/types/config/MapConfig';\nimport { get } from 'http';\n\ninterface MapListContextProps {\n loading: boolean;\n allListings: Listing[];\n filteredListings: Listing[];\n mapItems: any;\n query: string | null;\n setNewFilteredListings: (filteredListings: Listing[]) => void;\n setQuery: (query: string | null) => void;\n listingEntities: Record<number, ListingEntity> | null;\n selectedFilters: Record<string, any>;\n setSelectedFilters: (filters: Record<string, any>) => void;\n filterOptions: any;\n recruiters: Record<number, Recruiter>;\n handleFilterListingsByLocation: (selectedLocation: any) => void;\n filterDialogIsOpen: boolean;\n setFilterDialogIsOpen: (isOpen: boolean) => void;\n setMobileTab: (tab: string) => void;\n mobileTab: string;\n siteConfig: SiteConfig;\n favorites: number[];\n resetEntityFilter: () => void;\n handleSettingFavorites: (favorites: number[] | null) => void;\n setFilterByFavorites: (filter: boolean) => void;\n filterByFavorites: boolean;\n commuteLocation: any | null;\n setCommuteLocation: (location: any | null) => void;\n navigateToDetails: (id: number) => void;\n navigateToEasyApply: (id: number) => void;\n Link: React.ComponentType<any>;\n linkFormat: string;\n easyApplyUrl: string;\n easyApplyText: string;\n\tisIframe: boolean;\n sortSetting: { field: string; type: string };\n setSortSetting: (setting: { field: string; type: string }) => void;\n trackEvent: (event: string) => void;\n defaultFilters?: Record<string, any>;\n hiddenFilters?: string[];\n containerStyle?: any;\n ExpandListComponent?: React.ComponentType<{ listing: any }> | ((listing: any) => JSX.Element) | null;\n}\n\nconst MapListContext = createContext<MapListContextProps | undefined>(undefined);\n\nexport const useMapList = () => {\n\tconst context = useContext(MapListContext);\n\tif (!context) {\n\t\tthrow new Error('useMapList must be used within a MapListProvider');\n\t}\n\treturn context;\n};\n\nconst getQuery = (): string | null => {\n\tlet query: string | null = null;\n\tif (typeof window !== 'undefined') {\n\t\tquery = localStorage.getItem('query');\n\t}\n\treturn query;\n};\n\ninterface MapListProviderProps {\n children: ReactNode;\n siteConfig: MapConfig;\n resetFilters: boolean;\n navigateToDetails: (id: number) => void;\n navigateToEasyApply: (id: number) => void;\n Link: React.ComponentType<any>;\n linkFormat: string;\n easyApplyUrl: string;\n easyApplyText: string;\n\tisIframe: boolean;\n trackEvent: (event: string) => void;\n listings?: Listing[];\n\tentities?: ListingEntity[];\n setFiltersUrl?:boolean;\n hiddenFilters?: string[];\n handleUrlUpdate: (searchParams: string) => void;\n defaultFilters?: Record<string, any>;\n containerStyle?: any;\n\tlocalStorageKey: string;\n\tgetListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>;\n ExpandListComponent?: React.ComponentType<{ listing: Listing }> | ((listing: Listing) => JSX.Element) | null;\n}\n\nexport const MapListProvider: React.FC<MapListProviderProps> = ({\n\tchildren,\n\tsiteConfig,\n\tresetFilters,\n\tnavigateToDetails,\n\tnavigateToEasyApply,\n\tLink,\n\tlinkFormat,\n\teasyApplyUrl,\n\teasyApplyText,\n\tisIframe,\n\ttrackEvent,\n\tlistings = [],\n\tentities = [],\n\tsetFiltersUrl,\n\thiddenFilters,\n\thandleUrlUpdate,\n\tdefaultFilters,\n\tcontainerStyle,\n\tExpandListComponent,\n\tgetListingEntitiesCallback,\n\tlocalStorageKey\n}) => {\n\tconst firstLoadFilters = () =>{\n\t\tlet urlFilters = filtersFromURL(window.location)?.filters;\n\t\treturn (setFiltersUrl === true && urlFilters && Object.keys(urlFilters).length > 0) ? urlFilters : getStorageObject(localStorageKey + 'selectedFilters', {}) || {}\n\t}\n\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('mapItems', []) || []);\n\tconst [query, setQuery] = useState<string | null>(() => resetFilters ? null : getQuery());\n\tconst [sortSetting, setSortSetting] = useState<{ field: string; type: string }>(getStorageObject('sortSetting', { field: 'position', type: 'asc' }) || { field: 'position', type: 'asc' });\n\tconst [listingEntities, setListingEntities] = useState<Record<number, ListingEntity> | null>({});\n\tconst [firstLoad, setFirstLoad] = useState<boolean>(true);\n\tconst [commuteLocation, setCommuteLocation] = useState<any | null>(getStorageObject('commuteLocation'));\n\tconst [selectedFilters, setSelectedFilters] = useState<Record<string, any>>(() => resetFilters ? {} : firstLoadFilters());\n\tconst [filterOptions, setFilterOptions] = useState<any>();\n\tconst [recruiters, setRecruiters] = useState<Record<number, Recruiter>>({});\n\tconst [filterDialogIsOpen, setFilterDialogIsOpen] = useState<boolean>(false);\n\tconst [mobileTab, setMobileTab] = useState<string>(\"listTab\");\n\tconst [favorites, setFavorites] = useState<number[]>([]);\n\tconst [filterByFavorites, setFilterByFavorites] = useState<boolean>(false);\n\n\tconst setNewFilteredListings = (filteredListings: Listing[]) => {\n\t\tsetFilteredListings(filteredListings);\n\t};\n\n\tuseEffect(() => {\n\t\tif (!sortSetting) return;\n\t\tlocalStorage.setItem('sortSetting', JSON.stringify(sortSetting));\n\t\tsetNewFilteredListings(filteredListings);\n\t}, [sortSetting]);\n\n\tuseEffect(() => {\n\t\tconst loadedFavorites = JSON.parse(localStorage.getItem('favorites') || '[]');\n\t\tsetFavorites(loadedFavorites);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetStorageObject(\"commuteLocation\", commuteLocation);\n\t}, [commuteLocation]);\n\n\tuseEffect(() => {\n\t\tif (!commuteLocation) return;\n\n\t\tasync function fetchEntities() {\n\t\t\tconst distinctEntityIds = [\n\t\t\t\t...new Set(allListings.map(listing => listing.entityId ?? -1))\n\t\t\t];\n\t\t\ttry {\n\t\t\t\tconsole.log(getListingEntitiesCallback);\n\t\t\t\tconsole.log(\"fetching entities\")\n\t\t\t\tconst fetchedEntities = getListingEntitiesCallback !== null && getListingEntitiesCallback !== undefined ? await getListingEntitiesCallback(distinctEntityIds,\n\t\t\t\t\t`${commuteLocation.lat}, ${commuteLocation.lng}`) : await getListingEntities(\n\t\t\t\t\tdistinctEntityIds,\n\t\t\t\t\t`${commuteLocation.lat}, ${commuteLocation.lng}`\n\t\t\t\t);\n\t\t\t\tsetListingEntities(fetchedEntities);\n\t\t\t\tconst newFilteredListings: Listing[] = [...filteredListings] ?? [];\n\t\t\t\tfor (let i = 0; i < allListings.length; i++) {\n\t\t\t\t\tconst listing = newFilteredListings[i];\n\t\t\t\t\tif (\n\t\t\t\t\t\tlisting &&\n\t\t\t\t\t\tlisting.fields &&\n\t\t\t\t\t\tlisting.entityId !== undefined &&\n\t\t\t\t\t\tlisting.entityId !== -1\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst entityId = listing.entityId;\n\t\t\t\t\t\tconst travelTime = fetchedEntities[entityId]?.travelTime;\n\n\t\t\t\t\t\tif (travelTime !== undefined && listing.fields) {\n\t\t\t\t\t\t\tlisting.fields.travelTime = travelTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to fetch listing entities:\", error);\n\t\t\t}\n\t\t}\n\n\t\tfetchEntities();\n\t}, [commuteLocation, allListings, siteConfig.companyId]);\n\n\tuseEffect(() => {\n\t\tconst handleFetchListings = async () => {\n\t\t\tif (!getStorageObject('listings') ?? [].length) {\n\t\t\t\tsetLoading(true);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst {\n\t\t\t\t\tlistingsResult,\n\t\t\t\t\tfetchedEntities,\n\t\t\t\t\tdistinctItems\n\t\t\t\t} = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback);\n\t\t\t\tif (defaultFilters) {\n\t\t\t\t\tconst filteredListings = listingsResult.filter(listing => {\n\t\t\t\t\tif (!listing.fields) return false;\n\n\t\t\t\t\treturn Object.keys(defaultFilters).every(filterKey => {\n\t\t\t\t\t\tconst filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];\n\t\t\t\t\t\tconst listingValue = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;\n\t\t\t\t\t\treturn filterValues.includes(listingValue);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tsetAllListings(filteredListings);\n\t\t\t} else {\n\t\t\t\tsetAllListings(listingsResult);\n\t\t\t}\n\t\t\t\tsetListingEntities(fetchedEntities);\n\t\t\t\tsetMapItems(distinctItems);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(error);\n\t\t\t}\n\t\t\tsetLoading(false);\n\t\t};\n\t\thandleFetchListings();\n\t}, [query, siteConfig, commuteLocation]);\n\n\tuseEffect(() => {\n\t\tconst processListings = () => {\n\t\t\tlet filteredListings: Listing[];\n\t\t\tlet tempSelectedFilters = selectedFilters;\n\t\t\tlet tempQuery = query;\n\n\t\t\tconst { mapItems, filteredListings: tempFilteredListings } = applyFilters(\n\t\t\t\tallListings,\n\t\t\t\ttempSelectedFilters,\n\t\t\t\ttempQuery,\n\t\t\t\tlistingEntities,\n\t\t\t\tfavorites,\n\t\t\t\tsiteConfig\n\t\t\t);\n\t\t\tfilteredListings = tempFilteredListings;\n\n\t\t\tif (filterByFavorites) {\n\t\t\t\tfilteredListings = filteredListings.filter((x: Listing) => favorites.includes(x.id));\n\t\t\t}\n\t\t\tsetNewFilteredListings(filteredListings);\n\t\t\tif (firstLoad && tempSelectedFilters) {\n\t\t\t\t// Update URL with filters if needed\n\t\t\t} else if (Object.keys(tempSelectedFilters).length === 0 && !firstLoad) {\n\t\t\t\tlocalStorage.removeItem('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('query', tempQuery) : localStorage.removeItem('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('favorites');\n\t\t} else {\n\t\t\tsetFavorites(newFavorites);\n\t\t\tlocalStorage.setItem('favorites', JSON.stringify(newFavorites));\n\t\t}\n\t};\n\n\treturn (\n\t\t<MapListContext.Provider value={{\n\t\t\tloading,\n\t\t\tallListings,\n\t\t\tfilteredListings,\n\t\t\tmapItems,\n\t\t\tquery,\n\t\t\tsetNewFilteredListings,\n\t\t\tsetQuery,\n\t\t\tlistingEntities,\n\t\t\tselectedFilters,\n\t\t\tsetSelectedFilters,\n\t\t\tfilterOptions,\n\t\t\trecruiters,\n\t\t\thandleFilterListingsByLocation,\n\t\t\tfilterDialogIsOpen,\n\t\t\tsetFilterDialogIsOpen,\n\t\t\tsetMobileTab,\n\t\t\tmobileTab,\n\t\t\tsiteConfig,\n\t\t\tfavorites,\n\t\t\thandleSettingFavorites,\n\t\t\tresetEntityFilter,\n\t\t\tsetFilterByFavorites,\n\t\t\tfilterByFavorites,\n\t\t\tcommuteLocation,\n\t\t\tsetCommuteLocation,\n\t\t\tnavigateToDetails,\n\t\t\tnavigateToEasyApply,\n\t\t\tLink,\n\t\t\tlinkFormat,\n\t\t\teasyApplyUrl,\n\t\t\teasyApplyText,\n\t\t\tisIframe,\n\t\t\tsortSetting,\n\t\t\tsetSortSetting,\n\t\t\ttrackEvent,\n\t\t\tdefaultFilters,\n\t\t\thiddenFilters,\n\t\t\tcontainerStyle,\n\t\t\tExpandListComponent\n\t\t}}>\n\t\t\t{children}\n\t\t</MapListContext.Provider>\n\t);\n};\n"],"names":["React"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { slicedToArray as _slicedToArray, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime, createForOfIteratorHelper as _createForOfIteratorHelper } from '../_virtual/_rollupPluginBabelHelpers.js';
2
- import React__default, { useState, useEffect, createContext, useContext } from 'react';
2
+ import React__default, { useState, useCallback, useEffect, createContext, useContext } from 'react';
3
3
  import { markerIconProps } from '../util/mapIconUtil.js';
4
4
  import { useMap } from './mapContext.js';
5
5
  import { searchNearbyPlaces } from '../services/googlePlacesNearbyService.js';
@@ -12,7 +12,8 @@ var PlacesProvider = function PlacesProvider(_ref) {
12
12
  var children = _ref.children,
13
13
  placeMappings = _ref.placeMappings,
14
14
  markerColors = _ref.markerColors,
15
- additionalMapMarkers = _ref.additionalMapMarkers;
15
+ additionalMapMarkers = _ref.additionalMapMarkers,
16
+ googleMapsApiKey = _ref.googleMapsApiKey;
16
17
  var _useMap = useMap(),
17
18
  selectedPlaces = _useMap.selectedPlaces,
18
19
  zoom = _useMap.zoom,
@@ -40,7 +41,7 @@ var PlacesProvider = function PlacesProvider(_ref) {
40
41
  _useState10 = _slicedToArray(_useState9, 2),
41
42
  selectedPlaceMarker = _useState10[0],
42
43
  setSelectedPlaceMarker = _useState10[1];
43
- var getRadiusForZoom = function getRadiusForZoom() {
44
+ var getRadiusForZoom = useCallback(function () {
44
45
  if (currentZoom >= 18) return 1000;
45
46
  if (currentZoom <= 10) return 0;
46
47
  var tempZoom = Math.pow(19 - currentZoom, 4.85);
@@ -49,7 +50,7 @@ var PlacesProvider = function PlacesProvider(_ref) {
49
50
  var maxRadius = 800000;
50
51
  if (radius < minRadius) radius = minRadius;else if (radius > maxRadius) radius = maxRadius;
51
52
  return radius;
52
- };
53
+ }, [currentZoom]);
53
54
  useEffect(function () {
54
55
  if (!selectedPlaces || !selectedPlaces.length > 0 || !center || currentZoom < 12) {
55
56
  setPoiMarkers({
@@ -76,7 +77,7 @@ var PlacesProvider = function PlacesProvider(_ref) {
76
77
  };
77
78
  _context.prev = 5;
78
79
  _context.next = 8;
79
- return searchNearbyPlaces(poiTypes, location, radius);
80
+ return searchNearbyPlaces(poiTypes, location, radius, googleMapsApiKey || process.env.GOOGLE_MAPS_API_KEY);
80
81
  case 8:
81
82
  response = _context.sent;
82
83
  newMarkers = response.places.map(function (place) {
@@ -133,7 +134,7 @@ var PlacesProvider = function PlacesProvider(_ref) {
133
134
  };
134
135
  }();
135
136
  fetchPlaces();
136
- }, [selectedPlaces, currentZoom, currentCenter]);
137
+ }, [selectedPlaces, currentZoom, currentCenter, placeMappings, markerColors.placeMarkers, googleMapsApiKey, getRadiusForZoom, center]);
137
138
  return /*#__PURE__*/React__default.createElement(PlacesContext.Provider, {
138
139
  value: {
139
140
  poiMarkers: poiMarkers,
@@ -1 +1 @@
1
- {"version":3,"file":"placesContext.js","sources":["../../src/contexts/placesContext.js"],"sourcesContent":["import React, { createContext, useContext, useEffect, useState } from 'react';\n\nimport { markerIconProps } from '~/util/mapIconUtil';\n\nimport { useMap } from '~/contexts/mapContext';\n\nimport { searchNearbyPlaces } from '~/services/googlePlacesNearbyService';\n\nconst PlacesContext = createContext();\n\nexport const usePlaces = () => useContext(PlacesContext);\n\nexport const PlacesProvider = ({ children, placeMappings, markerColors, additionalMapMarkers }) => {\n\tconst { selectedPlaces, zoom, center } = useMap();\n\tconst [poiMarkers, setPoiMarkers] = useState({ markers: [], icon: null });\n\tconst [currentCenter, setCurrentCenter] = useState(center);\n\tconst [currentZoom, setCurrentZoom] = useState(zoom);\n\tconst [placesWindow, setPlacesWindow] = useState(false);\n\tconst [selectedPlaceMarker, setSelectedPlaceMarker] = useState(null);\n\n\tconst getRadiusForZoom = () => {\n\t\tif (currentZoom >= 18) return 1000;\n\t\tif (currentZoom <= 10) return 0;\n\n\t\tlet tempZoom = Math.pow(19 - currentZoom, 4.85);\n\t\tlet radius = tempZoom;\n\t\tlet minRadius = 1500;\n\t\tlet maxRadius = 800000;\n\n\t\tif (radius < minRadius) radius = minRadius;\n\t\telse if (radius > maxRadius) radius = maxRadius;\n\n\t\treturn radius;\n\t};\n\n\tuseEffect(() => {\n\t\tif (!selectedPlaces || (!selectedPlaces.length > 0) || !center || currentZoom < 12) {\n\t\t\tsetPoiMarkers({ markers: [], icon: null });\n\t\t\treturn;\n\t\t}\n\t\tconst fetchPlaces = async () => {\n\t\t\tlet poiTypes = [];\n\t\t\tconst selectedPOICategories = selectedPlaces;\n\t\t\tselectedPOICategories.forEach(pointOfInterest => {\n\t\t\t\tpoiTypes = poiTypes.concat(placeMappings[pointOfInterest]);\n\t\t\t});\n\n\t\t\tconst radius = getRadiusForZoom();\n\t\t\tconst location = { latitude: currentCenter.lat, longitude: currentCenter.lng };\n\n\t\t\ttry {\n\t\t\t\tconst response = await searchNearbyPlaces(poiTypes, location, radius);\n\t\t\t\tconst newMarkers = response.places.map(place => {\n\t\t\t\t\tconst getParentCategory = types => {\n\t\t\t\t\t\tconst selectedTypes = selectedPOICategories.reduce((acc, category) => {\n\t\t\t\t\t\t\treturn acc.concat(placeMappings[category]);\n\t\t\t\t\t\t}, []);\n\n\t\t\t\t\t\tfor (const type of types) {\n\t\t\t\t\t\t\tif (!selectedTypes.includes(type)) continue;\n\t\t\t\t\t\t\tfor (const category in placeMappings) {\n\t\t\t\t\t\t\t\tif (placeMappings[category].includes(type)) {\n\t\t\t\t\t\t\t\t\treturn category;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tconst icon = markerIconProps(markerColors.placeMarkers, getParentCategory(place.types));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tposition: { lat: place.location.latitude, lng: place.location.longitude },\n\t\t\t\t\t\ttitle: place.displayName.text,\n\t\t\t\t\t\ticon: icon\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tsetPoiMarkers({ markers: newMarkers, icon: null });\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Failed to fetch places:', error);\n\t\t\t}\n\t\t};\n\n\t\tfetchPlaces();\n\t}, [selectedPlaces, currentZoom, currentCenter]);\n\n\treturn (\n\t\t<PlacesContext.Provider value={{\n\t\t\tpoiMarkers,\n\t\t\tsetCurrentCenter,\n\t\t\tcurrentCenter,\n\t\t\tsetCurrentZoom,\n\t\t\tcurrentZoom,\n\t\t\tplacesWindow,\n\t\t\tsetPlacesWindow,\n\t\t\tselectedPlaceMarker,\n\t\t\tsetSelectedPlaceMarker,\n\t\t\tadditionalMapMarkers\n\t\t}}>\n\t\t\t{children}\n\t\t</PlacesContext.Provider>\n\t);\n};\n"],"names":["PlacesContext","createContext","usePlaces","useContext","PlacesProvider","_ref","children","placeMappings","markerColors","additionalMapMarkers","_useMap","useMap","selectedPlaces","zoom","center","_useState","useState","markers","icon","_useState2","_slicedToArray","poiMarkers","setPoiMarkers","_useState3","_useState4","currentCenter","setCurrentCenter","_useState5","_useState6","currentZoom","setCurrentZoom","_useState7","_useState8","placesWindow","setPlacesWindow","_useState9","_useState10","selectedPlaceMarker","setSelectedPlaceMarker","getRadiusForZoom","tempZoom","Math","pow","radius","minRadius","maxRadius","useEffect","length","fetchPlaces","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","poiTypes","selectedPOICategories","location","response","newMarkers","wrap","_callee$","_context","prev","next","forEach","pointOfInterest","concat","latitude","lat","longitude","lng","searchNearbyPlaces","sent","places","map","place","getParentCategory","types","selectedTypes","reduce","acc","category","_iterator","_createForOfIteratorHelper","_step","s","n","done","type","value","includes","err","e","f","markerIconProps","placeMarkers","position","title","displayName","text","t0","console","error","stop","apply","arguments","React","createElement","Provider"],"mappings":"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"}
1
+ {"version":3,"file":"placesContext.js","sources":["../../src/contexts/placesContext.js"],"sourcesContent":["import React, { createContext, useContext, useEffect, useState, useCallback } from 'react';\n\nimport { markerIconProps } from '~/util/mapIconUtil';\n\nimport { useMap } from '~/contexts/mapContext';\n\nimport { searchNearbyPlaces } from '~/services/googlePlacesNearbyService';\n\nconst PlacesContext = createContext();\n\nexport const usePlaces = () => useContext(PlacesContext);\n\nexport const PlacesProvider = ({ children, placeMappings, markerColors, additionalMapMarkers, googleMapsApiKey }) => {\n\tconst { selectedPlaces, zoom, center } = useMap();\n\tconst [poiMarkers, setPoiMarkers] = useState({ markers: [], icon: null });\n\tconst [currentCenter, setCurrentCenter] = useState(center);\n\tconst [currentZoom, setCurrentZoom] = useState(zoom);\n\tconst [placesWindow, setPlacesWindow] = useState(false);\n\tconst [selectedPlaceMarker, setSelectedPlaceMarker] = useState(null);\n\n\tconst getRadiusForZoom = useCallback(() => {\n\t\tif (currentZoom >= 18) return 1000;\n\t\tif (currentZoom <= 10) return 0;\n\n\t\tlet tempZoom = Math.pow(19 - currentZoom, 4.85);\n\t\tlet radius = tempZoom;\n\t\tlet minRadius = 1500;\n\t\tlet maxRadius = 800000;\n\n\t\tif (radius < minRadius) radius = minRadius;\n\t\telse if (radius > maxRadius) radius = maxRadius;\n\n\t\treturn radius;\n\t}, [currentZoom]);\n\n\tuseEffect(() => {\n\t\tif (!selectedPlaces || (!selectedPlaces.length > 0) || !center || currentZoom < 12) {\n\t\t\tsetPoiMarkers({ markers: [], icon: null });\n\t\t\treturn;\n\t\t}\n\t\tconst fetchPlaces = async () => {\n\t\t\tlet poiTypes = [];\n\t\t\tconst selectedPOICategories = selectedPlaces;\n\t\t\tselectedPOICategories.forEach(pointOfInterest => {\n\t\t\t\tpoiTypes = poiTypes.concat(placeMappings[pointOfInterest]);\n\t\t\t});\n\n\t\t\tconst radius = getRadiusForZoom();\n\t\t\tconst location = { latitude: currentCenter.lat, longitude: currentCenter.lng };\n\n\t\t\ttry {\n\t\t\t\tconst response = await searchNearbyPlaces(poiTypes, location, radius, googleMapsApiKey || process.env.GOOGLE_MAPS_API_KEY);\n\t\t\t\tconst newMarkers = response.places.map(place => {\n\t\t\t\t\tconst getParentCategory = types => {\n\t\t\t\t\t\tconst selectedTypes = selectedPOICategories.reduce((acc, category) => {\n\t\t\t\t\t\t\treturn acc.concat(placeMappings[category]);\n\t\t\t\t\t\t}, []);\n\n\t\t\t\t\t\tfor (const type of types) {\n\t\t\t\t\t\t\tif (!selectedTypes.includes(type)) continue;\n\t\t\t\t\t\t\tfor (const category in placeMappings) {\n\t\t\t\t\t\t\t\tif (placeMappings[category].includes(type)) {\n\t\t\t\t\t\t\t\t\treturn category;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tconst icon = markerIconProps(markerColors.placeMarkers, getParentCategory(place.types));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tposition: { lat: place.location.latitude, lng: place.location.longitude },\n\t\t\t\t\t\ttitle: place.displayName.text,\n\t\t\t\t\t\ticon: icon\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tsetPoiMarkers({ markers: newMarkers, icon: null });\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Failed to fetch places:', error);\n\t\t\t}\n\t\t};\n\n\t\tfetchPlaces();\n\t}, [selectedPlaces, currentZoom, currentCenter, placeMappings, markerColors.placeMarkers, googleMapsApiKey, getRadiusForZoom, center]);\n\n\treturn (\n\t\t<PlacesContext.Provider value={{\n\t\t\tpoiMarkers,\n\t\t\tsetCurrentCenter,\n\t\t\tcurrentCenter,\n\t\t\tsetCurrentZoom,\n\t\t\tcurrentZoom,\n\t\t\tplacesWindow,\n\t\t\tsetPlacesWindow,\n\t\t\tselectedPlaceMarker,\n\t\t\tsetSelectedPlaceMarker,\n\t\t\tadditionalMapMarkers\n\t\t}}>\n\t\t\t{children}\n\t\t</PlacesContext.Provider>\n\t);\n};\n"],"names":["PlacesContext","createContext","usePlaces","useContext","PlacesProvider","_ref","children","placeMappings","markerColors","additionalMapMarkers","googleMapsApiKey","_useMap","useMap","selectedPlaces","zoom","center","_useState","useState","markers","icon","_useState2","_slicedToArray","poiMarkers","setPoiMarkers","_useState3","_useState4","currentCenter","setCurrentCenter","_useState5","_useState6","currentZoom","setCurrentZoom","_useState7","_useState8","placesWindow","setPlacesWindow","_useState9","_useState10","selectedPlaceMarker","setSelectedPlaceMarker","getRadiusForZoom","useCallback","tempZoom","Math","pow","radius","minRadius","maxRadius","useEffect","length","fetchPlaces","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","poiTypes","selectedPOICategories","location","response","newMarkers","wrap","_callee$","_context","prev","next","forEach","pointOfInterest","concat","latitude","lat","longitude","lng","searchNearbyPlaces","process","env","GOOGLE_MAPS_API_KEY","sent","places","map","place","getParentCategory","types","selectedTypes","reduce","acc","category","_iterator","_createForOfIteratorHelper","_step","s","n","done","type","value","includes","err","e","f","markerIconProps","placeMarkers","position","title","displayName","text","t0","console","error","stop","apply","arguments","React","createElement","Provider"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- const searchNearbyPlaces = async (typesArray, location, radius) => {
1
+ const searchNearbyPlaces = async (typesArray, location, radius, apiKey) => {
2
2
  const url = 'https://places.googleapis.com/v1/places:searchNearby';
3
3
  const headers = {
4
4
  'Content-Type': 'application/json',
5
- 'X-Goog-Api-Key': "AIzaSyAXPlfaoMCrmjNV1u-vFYdLBi7GkGeh4S4",
5
+ 'X-Goog-Api-Key': apiKey || process.env.GOOGLE_MAPS_API_KEY,
6
6
  'X-Goog-FieldMask': 'places.location,places.displayName,places.types'
7
7
  };
8
8
  const data = {
@@ -1 +1 @@
1
- {"version":3,"file":"googlePlacesNearbyService.js","sources":["../../src/services/googlePlacesNearbyService.ts"],"sourcesContent":["export interface Location {\n\tlatitude: number;\n\tlongitude: number;\n}\n\nexport const searchNearbyPlaces = async (\n\ttypesArray: string[],\n\tlocation: Location,\n\tradius: number\n): Promise<any> => {\n\tconst url = 'https://places.googleapis.com/v1/places:searchNearby';\n\tconst headers = {\n\t\t'Content-Type': 'application/json',\n\t\t'X-Goog-Api-Key': process.env.GOOGLE_MAPS_API_KEY as string,\n\t\t'X-Goog-FieldMask': 'places.location,places.displayName,places.types'\n\t};\n\tconst data = {\n\t\tincludedTypes: typesArray,\n\t\tmaxResultCount: 20,\n\t\tlocationRestriction: {\n\t\t\tcircle: {\n\t\t\t\tcenter: location,\n\t\t\t\tradius: radius\n\t\t\t}\n\t\t}\n\t};\n\n\ttry {\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: headers,\n\t\t\tbody: JSON.stringify(data)\n\t\t});\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error! status: ${response.status}`);\n\t\t}\n\t\treturn await response.json();\n\t} catch (error) {\n\t\tconsole.error('Error making the Nearby Search request:', error);\n\t\tthrow error;\n\t}\n};\n"],"names":[],"mappings":"AAKO,MAAM,kBAAkB,GAAG,OACjC,UAAoB,EACpB,QAAkB,EAClB,MAAc,KACG;IACjB,MAAM,GAAG,GAAG,sDAAsD,CAAC;AACnE,IAAA,MAAM,OAAO,GAAG;AACf,QAAA,cAAc,EAAE,kBAAkB;AAClC,QAAA,gBAAgB,EAAE,yCAAyC;AAC3D,QAAA,kBAAkB,EAAE,iDAAiD;KACrE,CAAC;AACF,IAAA,MAAM,IAAI,GAAG;AACZ,QAAA,aAAa,EAAE,UAAU;AACzB,QAAA,cAAc,EAAE,EAAE;AAClB,QAAA,mBAAmB,EAAE;AACpB,YAAA,MAAM,EAAE;AACP,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,MAAM,EAAE,MAAM;AACd,aAAA;AACD,SAAA;KACD,CAAC;IAEF,IAAI;AACH,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AACjC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,QAAQ,CAAC,MAAM,CAAE,CAAA,CAAC,CAAC;AAC1D,SAAA;AACD,QAAA,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC7B,KAAA;AAAC,IAAA,OAAO,KAAK,EAAE;AACf,QAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;AAChE,QAAA,MAAM,KAAK,CAAC;AACZ,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"googlePlacesNearbyService.js","sources":["../../src/services/googlePlacesNearbyService.ts"],"sourcesContent":["export interface Location {\n\tlatitude: number;\n\tlongitude: number;\n}\n\nexport const searchNearbyPlaces = async (\n\ttypesArray: string[],\n\tlocation: Location,\n\tradius: number,\n\tapiKey?: string\n): Promise<any> => {\n\tconst url = 'https://places.googleapis.com/v1/places:searchNearby';\n\tconst headers = {\n\t\t'Content-Type': 'application/json',\n\t\t'X-Goog-Api-Key': apiKey || (process.env.GOOGLE_MAPS_API_KEY as string),\n\t\t'X-Goog-FieldMask': 'places.location,places.displayName,places.types'\n\t};\n\tconst data = {\n\t\tincludedTypes: typesArray,\n\t\tmaxResultCount: 20,\n\t\tlocationRestriction: {\n\t\t\tcircle: {\n\t\t\t\tcenter: location,\n\t\t\t\tradius: radius\n\t\t\t}\n\t\t}\n\t};\n\n\ttry {\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: headers,\n\t\t\tbody: JSON.stringify(data)\n\t\t});\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error! status: ${response.status}`);\n\t\t}\n\t\treturn await response.json();\n\t} catch (error) {\n\t\tconsole.error('Error making the Nearby Search request:', error);\n\t\tthrow error;\n\t}\n};\n"],"names":[],"mappings":"AAKO,MAAM,kBAAkB,GAAG,OACjC,UAAoB,EACpB,QAAkB,EAClB,MAAc,EACd,MAAe,KACE;IACjB,MAAM,GAAG,GAAG,sDAAsD,CAAC;AACnE,IAAA,MAAM,OAAO,GAAG;AACf,QAAA,cAAc,EAAE,kBAAkB;AAClC,QAAA,gBAAgB,EAAE,MAAM,IAAK,OAAO,CAAC,GAAG,CAAC,mBAA8B;AACvE,QAAA,kBAAkB,EAAE,iDAAiD;KACrE,CAAC;AACF,IAAA,MAAM,IAAI,GAAG;AACZ,QAAA,aAAa,EAAE,UAAU;AACzB,QAAA,cAAc,EAAE,EAAE;AAClB,QAAA,mBAAmB,EAAE;AACpB,YAAA,MAAM,EAAE;AACP,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,MAAM,EAAE,MAAM;AACd,aAAA;AACD,SAAA;KACD,CAAC;IAEF,IAAI;AACH,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AACjC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,QAAQ,CAAC,MAAM,CAAE,CAAA,CAAC,CAAC;AAC1D,SAAA;AACD,QAAA,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC7B,KAAA;AAAC,IAAA,OAAO,KAAK,EAAE;AACf,QAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;AAChE,QAAA,MAAM,KAAK,CAAC;AACZ,KAAA;AACF;;;;"}
@@ -2,15 +2,15 @@ import { getListings } from './listingService.js';
2
2
  import { getListingEntities } from './listingEntityService.js';
3
3
  import { getDistinctItemsByProximity } from '../util/mapUtil.js';
4
4
 
5
- const fetchListings = async (commuteLocation = null, entities, listings) => {
5
+ const fetchListings = async (commuteLocation = null, entities, listings, getListingEntitiesCallback) => {
6
6
  try {
7
7
  const listingsResult = listings && listings.length > 0 ? listings : await getListings();
8
8
  const distinctEntityIds = [
9
9
  ...new Set(listingsResult.map(listing => listing.entityId))
10
10
  ];
11
11
  const fetchedEntities = !commuteLocation
12
- ? entities && entities.length > 0 ? entities : await getListingEntities(distinctEntityIds)
13
- : await getListingEntities(distinctEntityIds, `${commuteLocation.lat}, ${commuteLocation.lng}`);
12
+ ? entities && entities.length > 0 ? entities : !getListingEntitiesCallback ? await getListingEntities(distinctEntityIds) : await getListingEntitiesCallback(distinctEntityIds)
13
+ : !getListingEntitiesCallback ? await getListingEntities(distinctEntityIds, `${commuteLocation.lat}, ${commuteLocation.lng}`) : await getListingEntitiesCallback(distinctEntityIds, `${commuteLocation.lat}, ${commuteLocation.lng}`);
14
14
  for (let i = 0; i < listingsResult.length; i++) {
15
15
  const listing = listingsResult[i];
16
16
  if (listing.entityId && listing.entityId !== -1 && listing.fields) {
@@ -1 +1 @@
1
- {"version":3,"file":"listingAggregatorService.js","sources":["../../src/services/listingAggregatorService.ts"],"sourcesContent":["import { getListings } from '~/services/listingService';\nimport { getListingEntities } from '~/services/listingEntityService';\nimport { getDistinctItemsByProximity } from '~/util/mapUtil';\nimport { Listing } from '~/types/Listings';\nimport { ListingEntity } from '~/types/ListingEntity';\n\ninterface FetchListingsResult {\n listingsResult: Listing[];\n fetchedEntities: Record<number, ListingEntity>;\n distinctItems: any; // Update this type based on the return type of getDistinctItemsByProximity\n}\n\nconst fetchListings = async (\n\tcommuteLocation: any | null = null,\n\tentities: ListingEntity[] | null,\n\tlistings: Listing[] | null\n): Promise<FetchListingsResult> => {\n\ttry {\n\t\tconst listingsResult = listings && listings.length > 0 ? listings : await getListings();\n\t\tconst distinctEntityIds: number[] = [\n\t\t\t...new Set(listingsResult.map(listing => listing.entityId))\n\t\t] as number[];\n\n\t\tconst fetchedEntities = !commuteLocation\n\t\t\t? entities && entities.length > 0 ? entities : await getListingEntities(distinctEntityIds)\n\t\t\t: await getListingEntities(\n\t\t\t\tdistinctEntityIds,\n\t\t\t\t`${commuteLocation.lat}, ${commuteLocation.lng}`\n\t\t\t);\n\t\tfor (let i = 0; i < listingsResult.length; i++) {\n\t\t\tconst listing = listingsResult[i];\n\t\t\tif (listing.entityId && listing.entityId !== -1 && listing.fields) {\n\t\t\t\tconst entity = fetchedEntities[listing.entityId];\n\t\t\t\tif (entity) {\n\t\t\t\t\tlisting.fields.travelTime = entity.travelTime;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst distinctItems = getDistinctItemsByProximity(\n\t\t\tlistingsResult,\n\t\t\tfetchedEntities\n\t\t);\n\n\t\treturn {\n\t\t\tlistingsResult,\n\t\t\tfetchedEntities,\n\t\t\tdistinctItems\n\t\t};\n\t} catch (error) {\n\t\tconsole.error(\"Error fetching listings:\", error);\n\t\tthrow error;\n\t}\n};\n\nexport default fetchListings;\n"],"names":[],"mappings":";;;;AAYM,MAAA,aAAa,GAAG,OACrB,eAAA,GAA8B,IAAI,EAClC,QAAgC,EAChC,QAA0B,KACO;IACjC,IAAI;AACH,QAAA,MAAM,cAAc,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;AACxF,QAAA,MAAM,iBAAiB,GAAa;AACnC,YAAA,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC/C,CAAC;QAEd,MAAM,eAAe,GAAG,CAAC,eAAe;AACvC,cAAE,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,MAAM,kBAAkB,CAAC,iBAAiB,CAAC;AAC1F,cAAE,MAAM,kBAAkB,CACzB,iBAAiB,EACjB,CAAG,EAAA,eAAe,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,CAAA,CAAE,CAChD,CAAC;AACH,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAA,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAClC,YAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClE,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjD,gBAAA,IAAI,MAAM,EAAE;oBACX,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC9C,iBAAA;AACD,aAAA;AACD,SAAA;QAED,MAAM,aAAa,GAAG,2BAA2B,CAChD,cAAc,EACd,eAAe,CACf,CAAC;QAEF,OAAO;YACN,cAAc;YACd,eAAe;YACf,aAAa;SACb,CAAC;AACF,KAAA;AAAC,IAAA,OAAO,KAAK,EAAE;AACf,QAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,KAAK,CAAC;AACZ,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"listingAggregatorService.js","sources":["../../src/services/listingAggregatorService.ts"],"sourcesContent":["import { getListings } from '~/services/listingService';\nimport { getListingEntities } from '~/services/listingEntityService';\nimport { getDistinctItemsByProximity } from '~/util/mapUtil';\nimport { Listing } from '~/types/Listings';\nimport { ListingEntity } from '~/types/ListingEntity';\n\ninterface FetchListingsResult {\n listingsResult: Listing[];\n fetchedEntities: Record<number, ListingEntity>;\n distinctItems: any; // Update this type based on the return type of getDistinctItemsByProximity\n}\n\nconst fetchListings = async (\n\tcommuteLocation: any | null = null,\n\tentities: ListingEntity[] | null,\n\tlistings: Listing[] | null,\n\tgetListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>,\n): Promise<FetchListingsResult> => {\n\ttry {\n\t\tconst listingsResult = listings && listings.length > 0 ? listings : await getListings();\n\t\tconst distinctEntityIds: number[] = [\n\t\t\t...new Set(listingsResult.map(listing => listing.entityId))\n\t\t] as number[];\n\n\t\tconst fetchedEntities = !commuteLocation\n\t\t\t? entities && entities.length > 0 ? entities : !getListingEntitiesCallback ? await getListingEntities(distinctEntityIds) : await getListingEntitiesCallback(distinctEntityIds)\n\t\t\t: !getListingEntitiesCallback ? await getListingEntities(\n\t\t\t\tdistinctEntityIds,\n\t\t\t\t`${commuteLocation.lat}, ${commuteLocation.lng}`\n\t\t\t) : await getListingEntitiesCallback(\tdistinctEntityIds,\n\t\t\t\t`${commuteLocation.lat}, ${commuteLocation.lng}`);\n\t\tfor (let i = 0; i < listingsResult.length; i++) {\n\t\t\tconst listing = listingsResult[i];\n\t\t\tif (listing.entityId && listing.entityId !== -1 && listing.fields) {\n\t\t\t\tconst entity = fetchedEntities[listing.entityId];\n\t\t\t\tif (entity) {\n\t\t\t\t\tlisting.fields.travelTime = entity.travelTime;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst distinctItems = getDistinctItemsByProximity(\n\t\t\tlistingsResult,\n\t\t\tfetchedEntities\n\t\t);\n\n\t\treturn {\n\t\t\tlistingsResult,\n\t\t\tfetchedEntities,\n\t\t\tdistinctItems\n\t\t};\n\t} catch (error) {\n\t\tconsole.error(\"Error fetching listings:\", error);\n\t\tthrow error;\n\t}\n};\n\nexport default fetchListings;\n"],"names":[],"mappings":";;;;AAYA,MAAM,aAAa,GAAG,OACrB,eAA8B,GAAA,IAAI,EAClC,QAAgC,EAChC,QAA0B,EAC1B,0BAA+F,KAC9D;IACjC,IAAI;AACH,QAAA,MAAM,cAAc,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;AACxF,QAAA,MAAM,iBAAiB,GAAa;AACnC,YAAA,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC/C,CAAC;QAEd,MAAM,eAAe,GAAG,CAAC,eAAe;AACvC,cAAE,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,0BAA0B,GAAG,MAAM,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,MAAM,0BAA0B,CAAC,iBAAiB,CAAC;AAC9K,cAAE,CAAC,0BAA0B,GAAG,MAAM,kBAAkB,CACvD,iBAAiB,EACjB,CAAG,EAAA,eAAe,CAAC,GAAG,CAAA,EAAA,EAAK,eAAe,CAAC,GAAG,CAAE,CAAA,CAChD,GAAG,MAAM,0BAA0B,CAAE,iBAAiB,EACtD,CAAA,EAAG,eAAe,CAAC,GAAG,CAAK,EAAA,EAAA,eAAe,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC;AACpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAA,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAClC,YAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClE,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjD,gBAAA,IAAI,MAAM,EAAE;oBACX,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC9C,iBAAA;AACD,aAAA;AACD,SAAA;QAED,MAAM,aAAa,GAAG,2BAA2B,CAChD,cAAc,EACd,eAAe,CACf,CAAC;QAEF,OAAO;YACN,cAAc;YACd,eAAe;YACf,aAAa;SACb,CAAC;AACF,KAAA;AAAC,IAAA,OAAO,KAAK,EAAE;AACf,QAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,KAAK,CAAC;AACZ,KAAA;AACF;;;;"}
@@ -73,7 +73,7 @@ interface MapListProviderProps {
73
73
  defaultFilters?: Record<string, any>;
74
74
  containerStyle?: any;
75
75
  localStorageKey: string;
76
- getListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<Record<number, ListingEntity>>;
76
+ getListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>;
77
77
  ExpandListComponent?: React.ComponentType<{
78
78
  listing: Listing;
79
79
  }> | ((listing: Listing) => JSX.Element) | null;
@@ -2,4 +2,4 @@ export interface Location {
2
2
  latitude: number;
3
3
  longitude: number;
4
4
  }
5
- export declare const searchNearbyPlaces: (typesArray: string[], location: Location, radius: number) => Promise<any>;
5
+ export declare const searchNearbyPlaces: (typesArray: string[], location: Location, radius: number, apiKey?: string) => Promise<any>;
@@ -5,5 +5,5 @@ interface FetchListingsResult {
5
5
  fetchedEntities: Record<number, ListingEntity>;
6
6
  distinctItems: any;
7
7
  }
8
- declare const fetchListings: (commuteLocation: any | null, entities: ListingEntity[] | null, listings: Listing[] | null) => Promise<FetchListingsResult>;
8
+ declare const fetchListings: (commuteLocation: any | null, entities: ListingEntity[] | null, listings: Listing[] | null, getListingEntitiesCallback?: ((entityIds: number[], origin?: string) => Promise<ListingEntity[]>) | undefined) => Promise<FetchListingsResult>;
9
9
  export default fetchListings;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abcagency/hc-ui-components",
3
- "version": "1.4.7",
3
+ "version": "1.4.9",
4
4
  "description": "UI Components for HireControl",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -9,7 +9,12 @@
9
9
  ],
10
10
  "scripts": {
11
11
  "build": "cross-env NODE_ENV=production rollup -c",
12
- "test": "echo \"Error: no test specified\" && exit 1"
12
+ "test": "echo \"Error: no test specified\" && exit 1",
13
+ "prepublishOnly": "npm run build",
14
+ "release:patch": "npm version patch && npm run build && npm publish",
15
+ "release:minor": "npm version minor && npm run build && npm publish",
16
+ "release:major": "npm version major && npm run build && npm publish",
17
+ "version": "npm run build && git add dist/"
13
18
  },
14
19
  "keywords": [
15
20
  "hirecontrol",
@@ -48,7 +48,7 @@ function useSiteConfig(clientToken, siteConfiguration = null) {
48
48
  }
49
49
 
50
50
  // Component to handle all context providers
51
- const ContextProviders = ({ children, siteConfig, trackEvent, ...mapListProps }) => { return(
51
+ const ContextProviders = ({ children, siteConfig, trackEvent, googleMapsApiKey, ...mapListProps }) => { return(
52
52
  <TrackEventProvider trackEvent={trackEvent}>
53
53
  <ThemeProvider
54
54
  uiText={siteConfig.colors.uiText}
@@ -63,6 +63,7 @@ const ContextProviders = ({ children, siteConfig, trackEvent, ...mapListProps })
63
63
  <PlacesProvider
64
64
  placeMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}
65
65
  additionalMapMarkers={mapListProps.additionalMapMarkers}
66
+ googleMapsApiKey={googleMapsApiKey}
66
67
  markerColors={{
67
68
  fillColor: siteConfig.colors.primary,
68
69
  strokeColor: siteConfig.colors.primaryDark,
@@ -87,6 +88,7 @@ const ContextProviders = ({ children, siteConfig, trackEvent, ...mapListProps })
87
88
  //
88
89
  export const HireControlMap = ({
89
90
  clientToken,
91
+ googleMapsApiKey, // Required: Google Maps API key from Next.js
90
92
  containerStyle = { height: '100vh' },
91
93
  navigateToDetails = null,
92
94
  navigateToEasyApply = null,
@@ -100,14 +102,17 @@ export const HireControlMap = ({
100
102
  console.log(eventType);
101
103
  console.log(eventObj);
102
104
  },
105
+ //providing listings entities and a getListingEntities function should negate the need for map code to fetch data
103
106
  listings = [],
104
107
  entities = [],
108
+ getListingEntitiesCallback = null,
105
109
  defaultFilters = null,
106
110
  hiddenFilters = null,
107
111
  setFiltersUrl = null,
108
112
  ExpandListComponent = null,
109
113
  additionalMapMarkers = [],
110
114
  defaultZoomOverride = null,
115
+ //Default site configuration file passed here stops need to fetch from api
111
116
  siteConfiguration = null,
112
117
  localStorageKey = 'defaultKey.'
113
118
  }) => {
@@ -115,12 +120,27 @@ export const HireControlMap = ({
115
120
  const { siteConfig, error } = useSiteConfig(clientToken, siteConfiguration);
116
121
 
117
122
  // Load Google Maps
118
- const { isLoaded: isMapsLoaded } = useLoadScript({
119
- googleMapsApiKey: process.env.GOOGLE_MAPS_API_KEY,
123
+ const { isLoaded: isMapsLoaded, loadError } = useLoadScript({
124
+ googleMapsApiKey: googleMapsApiKey,
120
125
  version: 'quarterly',
121
126
  libraries: LIBRARIES
122
127
  });
123
128
 
129
+ // Show loading state or error if Google Maps hasn't loaded yet
130
+ if (!googleMapsApiKey) {
131
+ console.error('Google Maps API key is required');
132
+ return <div className="hc-p-4">Google Maps API key is required</div>;
133
+ }
134
+
135
+ if (loadError) {
136
+ console.error('Google Maps failed to load:', loadError);
137
+ return <div className="hc-p-4">Error loading Google Maps</div>;
138
+ }
139
+
140
+ if (!isMapsLoaded) {
141
+ return <div className="hc-p-4">Loading Maps...</div>;
142
+ }
143
+
124
144
  if (error || !siteConfig) {
125
145
  return <div className="hc-p-4"></div>;
126
146
  }
@@ -136,6 +156,8 @@ export const HireControlMap = ({
136
156
  easyApplyText,
137
157
  listings,
138
158
  entities,
159
+ siteConfig,
160
+ getListingEntitiesCallback,
139
161
  setFiltersUrl,
140
162
  hiddenFilters,
141
163
  handleUrlUpdate,
@@ -164,6 +186,7 @@ export const HireControlMap = ({
164
186
  <ContextProviders
165
187
  siteConfig={siteConfig}
166
188
  trackEvent={trackEvent}
189
+ googleMapsApiKey={googleMapsApiKey || process.env.GOOGLE_MAPS_API_KEY}
167
190
  {...mapListProps}
168
191
  >
169
192
  <Grid
@@ -11,6 +11,7 @@ import { Listing } from '~/types/Listings';
11
11
  import { ListingEntity } from '~/types/ListingEntity';
12
12
  import { Recruiter } from '~/types/Recruiter';
13
13
  import { MapConfig, MapConfig as SiteConfig } from '~/types/config/MapConfig';
14
+ import { get } from 'http';
14
15
 
15
16
  interface MapListContextProps {
16
17
  loading: boolean;
@@ -92,7 +93,7 @@ interface MapListProviderProps {
92
93
  defaultFilters?: Record<string, any>;
93
94
  containerStyle?: any;
94
95
  localStorageKey: string;
95
- getListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<Record<number, ListingEntity>>;
96
+ getListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>;
96
97
  ExpandListComponent?: React.ComponentType<{ listing: Listing }> | ((listing: Listing) => JSX.Element) | null;
97
98
  }
98
99
 
@@ -167,6 +168,8 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
167
168
  ...new Set(allListings.map(listing => listing.entityId ?? -1))
168
169
  ];
169
170
  try {
171
+ console.log(getListingEntitiesCallback);
172
+ console.log("fetching entities")
170
173
  const fetchedEntities = getListingEntitiesCallback !== null && getListingEntitiesCallback !== undefined ? await getListingEntitiesCallback(distinctEntityIds,
171
174
  `${commuteLocation.lat}, ${commuteLocation.lng}`) : await getListingEntities(
172
175
  distinctEntityIds,
@@ -209,7 +212,7 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
209
212
  listingsResult,
210
213
  fetchedEntities,
211
214
  distinctItems
212
- } = await fetchListings(commuteLocation, entities, listings);
215
+ } = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback);
213
216
  if (defaultFilters) {
214
217
  const filteredListings = listingsResult.filter(listing => {
215
218
  if (!listing.fields) return false;
@@ -1,4 +1,4 @@
1
- import React, { createContext, useContext, useEffect, useState } from 'react';
1
+ import React, { createContext, useContext, useEffect, useState, useCallback } from 'react';
2
2
 
3
3
  import { markerIconProps } from '~/util/mapIconUtil';
4
4
 
@@ -10,7 +10,7 @@ const PlacesContext = createContext();
10
10
 
11
11
  export const usePlaces = () => useContext(PlacesContext);
12
12
 
13
- export const PlacesProvider = ({ children, placeMappings, markerColors, additionalMapMarkers }) => {
13
+ export const PlacesProvider = ({ children, placeMappings, markerColors, additionalMapMarkers, googleMapsApiKey }) => {
14
14
  const { selectedPlaces, zoom, center } = useMap();
15
15
  const [poiMarkers, setPoiMarkers] = useState({ markers: [], icon: null });
16
16
  const [currentCenter, setCurrentCenter] = useState(center);
@@ -18,7 +18,7 @@ export const PlacesProvider = ({ children, placeMappings, markerColors, addition
18
18
  const [placesWindow, setPlacesWindow] = useState(false);
19
19
  const [selectedPlaceMarker, setSelectedPlaceMarker] = useState(null);
20
20
 
21
- const getRadiusForZoom = () => {
21
+ const getRadiusForZoom = useCallback(() => {
22
22
  if (currentZoom >= 18) return 1000;
23
23
  if (currentZoom <= 10) return 0;
24
24
 
@@ -31,7 +31,7 @@ export const PlacesProvider = ({ children, placeMappings, markerColors, addition
31
31
  else if (radius > maxRadius) radius = maxRadius;
32
32
 
33
33
  return radius;
34
- };
34
+ }, [currentZoom]);
35
35
 
36
36
  useEffect(() => {
37
37
  if (!selectedPlaces || (!selectedPlaces.length > 0) || !center || currentZoom < 12) {
@@ -49,7 +49,7 @@ export const PlacesProvider = ({ children, placeMappings, markerColors, addition
49
49
  const location = { latitude: currentCenter.lat, longitude: currentCenter.lng };
50
50
 
51
51
  try {
52
- const response = await searchNearbyPlaces(poiTypes, location, radius);
52
+ const response = await searchNearbyPlaces(poiTypes, location, radius, googleMapsApiKey || process.env.GOOGLE_MAPS_API_KEY);
53
53
  const newMarkers = response.places.map(place => {
54
54
  const getParentCategory = types => {
55
55
  const selectedTypes = selectedPOICategories.reduce((acc, category) => {
@@ -82,7 +82,7 @@ export const PlacesProvider = ({ children, placeMappings, markerColors, addition
82
82
  };
83
83
 
84
84
  fetchPlaces();
85
- }, [selectedPlaces, currentZoom, currentCenter]);
85
+ }, [selectedPlaces, currentZoom, currentCenter, placeMappings, markerColors.placeMarkers, googleMapsApiKey, getRadiusForZoom, center]);
86
86
 
87
87
  return (
88
88
  <PlacesContext.Provider value={{
@@ -6,12 +6,13 @@ export interface Location {
6
6
  export const searchNearbyPlaces = async (
7
7
  typesArray: string[],
8
8
  location: Location,
9
- radius: number
9
+ radius: number,
10
+ apiKey?: string
10
11
  ): Promise<any> => {
11
12
  const url = 'https://places.googleapis.com/v1/places:searchNearby';
12
13
  const headers = {
13
14
  'Content-Type': 'application/json',
14
- 'X-Goog-Api-Key': process.env.GOOGLE_MAPS_API_KEY as string,
15
+ 'X-Goog-Api-Key': apiKey || (process.env.GOOGLE_MAPS_API_KEY as string),
15
16
  'X-Goog-FieldMask': 'places.location,places.displayName,places.types'
16
17
  };
17
18
  const data = {
@@ -13,7 +13,8 @@ interface FetchListingsResult {
13
13
  const fetchListings = async (
14
14
  commuteLocation: any | null = null,
15
15
  entities: ListingEntity[] | null,
16
- listings: Listing[] | null
16
+ listings: Listing[] | null,
17
+ getListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>,
17
18
  ): Promise<FetchListingsResult> => {
18
19
  try {
19
20
  const listingsResult = listings && listings.length > 0 ? listings : await getListings();
@@ -22,11 +23,12 @@ const fetchListings = async (
22
23
  ] as number[];
23
24
 
24
25
  const fetchedEntities = !commuteLocation
25
- ? entities && entities.length > 0 ? entities : await getListingEntities(distinctEntityIds)
26
- : await getListingEntities(
26
+ ? entities && entities.length > 0 ? entities : !getListingEntitiesCallback ? await getListingEntities(distinctEntityIds) : await getListingEntitiesCallback(distinctEntityIds)
27
+ : !getListingEntitiesCallback ? await getListingEntities(
27
28
  distinctEntityIds,
28
29
  `${commuteLocation.lat}, ${commuteLocation.lng}`
29
- );
30
+ ) : await getListingEntitiesCallback( distinctEntityIds,
31
+ `${commuteLocation.lat}, ${commuteLocation.lng}`);
30
32
  for (let i = 0; i < listingsResult.length; i++) {
31
33
  const listing = listingsResult[i];
32
34
  if (listing.entityId && listing.entityId !== -1 && listing.fields) {