Pages Code Examples | Yext Hitchhikers Platform

The following contains various code examples for React Pages. You can copy and past the code into your own sites or modify them to fit your needs.

Locator Map Pin Interactivity

When a search on a React Locator is conducted, make it so that clicking a pin triggers some interaction with the corresponding result card.

Mapbox

Use the MapboxMap component from @yext/search-ui-react. Here is the repo that contains the different components referred to below.

map pin interactivity

You can extend the locator that you created in Module 4 of the Pages track to add the functionality that you are looking for.

To summarize, add some React Context called MapContext to your locator with a setHoveredLocationId function that sets a hoveredLocationId value. The custom MapPin component sets the hovered location value when the mouse enters the pin element and clears the value when the mouse leaves. If the hoveredLocationId is equal to the location ID of the card, the card’s background color changes.

One limitation to call out is that the PinComponent prop on MapboxMap does not have access to the context values even when the component is wrapped in the context provider which means you have to pass hoveredLocationId and setHoveredLocationId as additional props to the MapPin component.

<MapboxMap
  mapboxAccessToken={YEXT_PUBLIC_MAPBOX_API_KEY || ""}
  PinComponent={(props) => (
    <MapPin
      {...props}
      hoveredLocationId={hoveredLocationId}
      setHoveredLocationId={setHoveredLocationId}
    />
  )}
/>

Generic Map Provider

Use the Map component from @yext/pages-components. This starter has pin/card interactivity configured using the generic map component.

To summarize how it works, there’s a LocatorContext that stores the currently selected/hovered/etc. entities here .

In the CustomMarker for the map, when a user interacts with a pin those statuses are updated as appropriate here .

The result list component checks for selected entities and uses that to scroll cards into view / apply styling changes here .