wellyshen / use-places-autocomplete

😎 📍 React hook for Google Maps Places Autocomplete.
https://use-places-autocomplete.netlify.app
MIT License
1.25k stars 64 forks source link

`getAddressComponent` utility function #1069

Open 99darshan opened 2 years ago

99darshan commented 2 years ago

Feature Request

Describe the Feature

I was thinking if we could add a getAddressComponent(result: GeocodeResult) utility function? 🤔

This would be similar to getZipCode utility function. getAddressComponent can be applicable to extract other address components like state, county, country, street number, route, city, etc. from the GeoCodeResult object.

Describe the Solution You'd Like

I was thinking of something like below, I have a WIP Commit HERE

export enum AddressComponent {
  STREET_NUMBER = "street_number",
  ROUTE = "route",
  NEIGHBORHOOD = "neighborhood",
  LOCALITY = "locality",
  ADMINISTRATIVE_AREA_LEVEL_1 = "administrative_area_level_1",
  ADMINISTRATIVE_AREA_LEVEL_2 = "administrative_area_level_2",
  POSTAL_CODE = "postal_code",
  COUNTRY = "country",
}

export const getAddressComponent = (
  result: GeocodeResult,
  addressComponent: AddressComponent,
  useShortName: false
): string | undefined => {
  const foundAddressComponent = result.address_components.find(({ types }) =>
    types.includes(addressComponent)
  );

  if (!foundAddressComponent) return undefined;

  return useShortName
    ? foundAddressComponent.short_name
    : foundAddressComponent.long_name;
};
hardik-javascript commented 2 years ago

This is also what i need because in need to use country short name which is 2 digit alpha code of country

davedotdev commented 1 year ago

Any movement on this? Seems dead?

triethuynh2301 commented 1 year ago

This would be a great addition to the library. I am not sure if this will be implemented anytime soon, but there is a way to get more details about the address of the location. In the getGeoCode utility function. The result should return more details of the location search

  // Get latitude and longitude via utility functions
  getGeocode({ address: suggestion.description }).then((results) => {
    // Contains details of the description (address, zip code, country, etc...)
    console.log(results)

    const { lat, lng } = getLatLng(results[0])
    onChangeLocation(lat, lng)
  })

Hope this helps anyone needing to find the actual address of the search.