A drop-in module for a website that shows a google map with list of stores in the sidebar.
- draws all stores on a map
- shows a list of stores in the side bar providing map navigation
- determines user location and sorts the stores, showing nearest first
- shows a distance to each store form a given location (walking or driving)
- allows to search for nearest store to a given location
- provides a direction link to each store
- allows to set custom markers
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/microapps/store-locator@latest/dist/store-locator.css">
<script src="https://cdn.jsdelivr.net/gh/microapps/store-locator@latest/dist/store-locator.js"></script>- Include store-locator.js and store-locator.css on your page
- Add a container where you want the map to be rendered
- Initialize the script
<div id="my-store-locator">
      <!-- map will be rendered here-->
</div>
<script src="store-locator.js"></script>
<script>
  storeLocator({
    container: 'store-locator',
    apiKey: 'GOOGLE_MAPS_API_KEY',
    center: {lat: 42.382387, lng: -71.116648},
    travelMode: 'WALKING',
    unitSystem: 'METRIC',
    storeMarkerIcon: './storeIcon.png',
    homeMarkerIcon: './homeIcon.png',
    markerIconSize: [40, 62],
    limit: 1,
    searchHint: "Not all stores sell our whole range so if you're looking for a specific product we recommend you call ahead.",
    loadStores: function(location) {
      // location: {lat, lng}
      // you can load your stores based on location dynamically
      return Promise.resolve([
        {
          name: 'PAEZ FLAGSHIP STORE EL BORN',
          address: 'Carrer de les Caputxes, 2, 08003 Barcelona, Spain',
          location: {lat: 41.3833695, lng: 2.1814855999999736},
          website: 'http://microapps.com'
        },
        {
          name: 'PAEZ STORE CC. Maremagnum',
          address: "Moll d'Espanya, 5, 08039 Barcelona, Spain",
          location: {lat: 41.3752, lng: 2.18286999999998}
        }
      ])
    }
  })
</script>| Option | Description | Default | 
|---|---|---|
| container | id of the element where the map will be rendered | |
| stores | an array of stores to render on a map [{name, address, location: {lat, lng}, website}] | |
| loadStores | a function that returns an array of stores directly or a Promise. It accepts a location {lat, lng}param and is called every time location autocomplete is triggered | |
| zoom | initial map zoom | 6 | 
| center | initial map center | {lat: 39.6433995, lng: -6.4396778} | 
| storeMarkerIcon | custom store marker icon | |
| homeMarkerIcon | custom current location marker icon | |
| markerIconSize | an array of [x, y] to scale marker icon | |
| searchHint | text rendered after a search input | |
| travelMode | the mode used to calculate distance WALKINGorDRIVING | DRIVING | 
| unitSystem | used to show distance METRICorIMPERIAL | METRIC | 
| limit | shows only first n closest results to the location | 10 | 
| homeLocationHint | text that appears in an info window of home location marker | Current location | 
| farAwayMarkerOpacity | an opacity of a marker that is too far away (determined by limit) | 0.6 | 
| fullWidthMap | changes the appearance to make the map full width and store list as an overlay on top of it | 
