https://github.com/vulcanjs/vulcan-places
Google Maps Places integration for Vulcan
https://github.com/vulcanjs/vulcan-places
Last synced: about 1 year ago
JSON representation
Google Maps Places integration for Vulcan
- Host: GitHub
- URL: https://github.com/vulcanjs/vulcan-places
- Owner: VulcanJS
- Created: 2017-05-08T05:26:23.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2018-06-16T03:13:22.000Z (about 8 years ago)
- Last Synced: 2025-04-19T10:28:35.939Z (about 1 year ago)
- Language: JavaScript
- Size: 7.81 KB
- Stars: 6
- Watchers: 3
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Vulcan Places
### Install
```
meteor add vulcan:places
```
### Usage
This package enables two distinct features, which can be used separately or together:
1. A `PlaceControl` autocomplete form component that lets users fill in a place via the Google Maps Places API.
2. A `Places` collection that can optionally be used to store places as individual documents.
Both require setting your Google Maps API key in your `settings.json` file's `public` section:
```
"googlemaps": {
"apiKey": "123foo"
}
```
And install npm packages :
```
npm install --save @google/maps react-places-autocomplete
```
### Place Form Control
Uses [https://github.com/kenny-hibino/react-places-autocomplete](https://github.com/kenny-hibino/react-places-autocomplete).
To use:
1. Import `PlaceControl` from 'meteor/vulcan:places'
2. Create a `placeName` custom field on one of your collections
3. Set this field's `control` property to `PlaceControl`.
4. Also create a `placeId` field on the same collection.
5. Add `placeName` and `placeId` to the appropriate fragments.
### Places Collection
Uses [https://github.com/googlemaps/google-maps-services-js](https://github.com/googlemaps/google-maps-services-js).
The `Places` collection makes it easy to check for a `placeId` field on a newly inserted or edited document, and if present insert a new place document.
There are two distinct ways to use this collection:
1. Associate a place with one or more documents from another collection, such as adding a location to individual photos.
2. Build a Yelp-like directory of places by using the `Places` collection as a base and adding your own custom fields to it.
#### checkAndAddPlace
The package exports a `checkAndAddPlace` function that takes a `placeId`, checks the `Places` collection for any existing document with that id, and if none is found queries the Google Places API for the place details before inserting it in the database:
```js
import { addCallback } from 'meteor/vulcan:core';
import { checkAndAddPlace } from 'meteor/vulcan:places';
function postsNewCheckForNewPlace (document, user) {
if (document.placeId) checkAndAddPlace(document.placeId);
}
addCallback('posts.new.async', postsNewCheckForNewPlace);
function postsEditCheckForNewPlace (document) {
if (document.placeId) checkAndAddPlace(document.placeId);
}
addCallback('posts.edit.async', postsEditCheckForNewPlace);
```
#### Resolvers
The package also creates resolvers for the `Places` collection.