Skip to content

Commit 4a2705d

Browse files
authored
expose autocomplete service instance from usePlacesAutocompleteService (#110)
1 parent 7918929 commit 4a2705d

9 files changed

+51
-44
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ The hook has only one config argument.
158158

159159
The hook returns an object with properties:
160160

161+
- `placesAutocompleteService`: Instance of [AutocompleteService](https://developers.google.com/maps/documentation/javascript/reference/places-autocomplete-service#AutocompleteService)
161162
- `placePredictions`: an array of [AutocompletePrediction](https://developers.google.com/maps/documentation/javascript/reference/places-autocomplete-service#AutocompleteResponse)
162163
- `isPlacePredictionsLoading`: sets to true when a `getPlacePredictions` request is being sent and not yet resolved.
163164
- `getPlacePredictions: (opt: `[Options](https://developers.google.com/maps/documentation/javascript/reference/places-autocomplete-service#AutocompletionRequest)`): void`: a function which you call whenever you want to request places predictions. Takes one [argument](https://developers.google.com/maps/documentation/javascript/reference/places-autocomplete-service#AutocompleteResponse).

lib/ReactGoogleAutocomplete.js

+24-24
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
55
Object.defineProperty(exports, "__esModule", {
66
value: true
77
});
8-
exports["default"] = void 0;
8+
exports.default = void 0;
99

1010
var _react = _interopRequireWildcard(require("react"));
1111

1212
var _propTypes = _interopRequireDefault(require("prop-types"));
1313

1414
var _usePlacesWidget2 = _interopRequireDefault(require("./usePlacesWidget"));
1515

16-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
16+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1717

1818
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1919

20-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
2121

2222
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2323

@@ -34,7 +34,7 @@ function ReactGoogleAutocomplete(props) {
3434
refProp = props.refProp,
3535
rest = _objectWithoutProperties(props, ["onPlaceSelected", "apiKey", "inputAutocompleteValue", "options", "googleMapsScriptBaseUrl", "refProp"]);
3636

37-
var _usePlacesWidget = (0, _usePlacesWidget2["default"])({
37+
var _usePlacesWidget = (0, _usePlacesWidget2.default)({
3838
ref: refProp,
3939
googleMapsScriptBaseUrl: googleMapsScriptBaseUrl,
4040
onPlaceSelected: onPlaceSelected,
@@ -44,37 +44,37 @@ function ReactGoogleAutocomplete(props) {
4444
}),
4545
ref = _usePlacesWidget.ref;
4646

47-
return /*#__PURE__*/_react["default"].createElement("input", _extends({
47+
return /*#__PURE__*/_react.default.createElement("input", _extends({
4848
ref: ref
4949
}, rest));
5050
}
5151

5252
ReactGoogleAutocomplete.propTypes = {
53-
apiKey: _propTypes["default"].string,
54-
ref: _propTypes["default"].oneOfType([// Either a function
55-
_propTypes["default"].func, // Or anything shaped { current: any }
56-
_propTypes["default"].shape({
57-
current: _propTypes["default"].any
53+
apiKey: _propTypes.default.string,
54+
ref: _propTypes.default.oneOfType([// Either a function
55+
_propTypes.default.func, // Or anything shaped { current: any }
56+
_propTypes.default.shape({
57+
current: _propTypes.default.any
5858
})]),
59-
googleMapsScriptBaseUrl: _propTypes["default"].string,
60-
onPlaceSelected: _propTypes["default"].func,
61-
inputAutocompleteValue: _propTypes["default"].string,
62-
options: _propTypes["default"].shape({
63-
componentRestrictions: _propTypes["default"].object,
64-
bounds: _propTypes["default"].object,
65-
location: _propTypes["default"].object,
66-
offset: _propTypes["default"].number,
67-
origin: _propTypes["default"].object,
68-
radius: _propTypes["default"].number,
69-
sessionToken: _propTypes["default"].object,
70-
types: _propTypes["default"].arrayOf(_propTypes["default"].string)
59+
googleMapsScriptBaseUrl: _propTypes.default.string,
60+
onPlaceSelected: _propTypes.default.func,
61+
inputAutocompleteValue: _propTypes.default.string,
62+
options: _propTypes.default.shape({
63+
componentRestrictions: _propTypes.default.object,
64+
bounds: _propTypes.default.object,
65+
location: _propTypes.default.object,
66+
offset: _propTypes.default.number,
67+
origin: _propTypes.default.object,
68+
radius: _propTypes.default.number,
69+
sessionToken: _propTypes.default.object,
70+
types: _propTypes.default.arrayOf(_propTypes.default.string)
7171
})
7272
};
7373

7474
var _default = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
75-
return /*#__PURE__*/_react["default"].createElement(ReactGoogleAutocomplete, _extends({}, props, {
75+
return /*#__PURE__*/_react.default.createElement(ReactGoogleAutocomplete, _extends({}, props, {
7676
refProp: ref
7777
}));
7878
});
7979

80-
exports["default"] = _default;
80+
exports.default = _default;

lib/index.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ Object.defineProperty(exports, "__esModule", {
66
Object.defineProperty(exports, "default", {
77
enumerable: true,
88
get: function get() {
9-
return _ReactGoogleAutocomplete["default"];
9+
return _ReactGoogleAutocomplete.default;
1010
}
1111
});
1212
Object.defineProperty(exports, "usePlacesWidget", {
1313
enumerable: true,
1414
get: function get() {
15-
return _usePlacesWidget["default"];
15+
return _usePlacesWidget.default;
1616
}
1717
});
1818

1919
var _ReactGoogleAutocomplete = _interopRequireDefault(require("./ReactGoogleAutocomplete"));
2020

2121
var _usePlacesWidget = _interopRequireDefault(require("./usePlacesWidget"));
2222

23-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

lib/usePlacesAutocompleteService.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ interface usePlacesAutocompleteServiceConfig {
77
}
88

99
interface usePlacesAutocompleteServiceResponse {
10+
placesAutocompleteService: google.maps.places.AutocompleteService | null;
1011
placePredictions: google.maps.places.AutocompletePrediction[];
1112
isPlacePredictionsLoading: boolean;
1213
getPlacePredictions: (opt: google.maps.places.AutocompletionRequest) => void;

lib/usePlacesAutocompleteService.js

+9-8
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Object.defineProperty(exports, "__esModule", {
44
value: true
55
});
6-
exports["default"] = usePlacesAutocompleteService;
6+
exports.default = usePlacesAutocompleteService;
77

88
var _react = require("react");
99

@@ -13,7 +13,7 @@ var _utils = require("./utils");
1313

1414
var _constants = require("./constants");
1515

16-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
16+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1717

1818
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
1919

@@ -74,21 +74,21 @@ function usePlacesAutocompleteService(_ref) {
7474
queryPredictions = _useState12[0],
7575
setQueryPredictions = _useState12[1];
7676

77-
var googleAutocompleteService = (0, _react.useRef)(null);
77+
var placesAutocompleteService = (0, _react.useRef)(null);
7878
var autocompleteSession = (0, _react.useRef)(null);
7979
var handleLoadScript = (0, _react.useCallback)(function () {
8080
return (0, _utils.loadGoogleMapScript)(googleMapsScriptBaseUrl, googleMapsScriptUrl);
8181
}, [googleMapsScriptBaseUrl, googleMapsScriptUrl]);
82-
var debouncedPlacePredictions = (0, _react.useCallback)((0, _lodash["default"])(function (optionsArg) {
83-
if (googleAutocompleteService.current && optionsArg.input) googleAutocompleteService.current.getPlacePredictions(_objectSpread(_objectSpread(_objectSpread({}, options), optionsArg), sessionToken && autocompleteSession.current ? {
82+
var debouncedPlacePredictions = (0, _react.useCallback)((0, _lodash.default)(function (optionsArg) {
83+
if (placesAutocompleteService.current && optionsArg.input) placesAutocompleteService.current.getPlacePredictions(_objectSpread(_objectSpread(_objectSpread({}, options), optionsArg), sessionToken && autocompleteSession.current ? {
8484
sessionToken: autocompleteSession.current
8585
} : {}), function (r) {
8686
setIsPlacePredsLoading(false);
8787
setPlacePredictions(r || []);
8888
});
8989
}, debounce), [debounce]);
90-
var debouncedQueryPredictions = (0, _react.useCallback)((0, _lodash["default"])(function (optionsArg) {
91-
if (googleAutocompleteService.current && optionsArg.input) googleAutocompleteService.current.getQueryPredictions(_objectSpread(_objectSpread(_objectSpread({}, options), optionsArg), sessionToken && autocompleteSession.current ? {
90+
var debouncedQueryPredictions = (0, _react.useCallback)((0, _lodash.default)(function (optionsArg) {
91+
if (placesAutocompleteService.current && optionsArg.input) placesAutocompleteService.current.getQueryPredictions(_objectSpread(_objectSpread(_objectSpread({}, options), optionsArg), sessionToken && autocompleteSession.current ? {
9292
sessionToken: autocompleteSession.current
9393
} : {}), function (r) {
9494
setIsQueryPredsLoading(false);
@@ -102,7 +102,7 @@ function usePlacesAutocompleteService(_ref) {
102102
// eslint-disable-next-line no-undef
103103
if (!google) return console.error("Google has not been found. Make sure your provide apiKey prop."); // eslint-disable-next-line no-undef
104104

105-
googleAutocompleteService.current = new google.maps.places.AutocompleteService();
105+
placesAutocompleteService.current = new google.maps.places.AutocompleteService();
106106
if (sessionToken) autocompleteSession.current = new google.maps.places.AutocompleteSessionToken();
107107
};
108108

@@ -115,6 +115,7 @@ function usePlacesAutocompleteService(_ref) {
115115
}
116116
}, []);
117117
return {
118+
placesAutocompleteService: placesAutocompleteService.current,
118119
placePredictions: placeInputValue ? placePredictions : [],
119120
isPlacePredictionsLoading: isPlacePredsLoading,
120121
getPlacePredictions: function getPlacePredictions(opt) {

lib/usePlacesWidget.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Object.defineProperty(exports, "__esModule", {
44
value: true
55
});
6-
exports["default"] = usePlacesWidget;
6+
exports.default = usePlacesWidget;
77

88
var _react = require("react");
99

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-google-autocomplete",
3-
"version": "2.1.2",
3+
"version": "2.2.0",
44
"description": "React component for google autocomplete.",
55
"main": "index.js",
66
"types": "index.d.ts",

src/usePlacesAutocompleteService.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ interface usePlacesAutocompleteServiceConfig {
77
}
88

99
interface usePlacesAutocompleteServiceResponse {
10+
placesAutocompleteService: google.maps.places.AutocompleteService | null;
1011
placePredictions: google.maps.places.AutocompletePrediction[];
1112
isPlacePredictionsLoading: boolean;
1213
getPlacePredictions: (opt: google.maps.places.AutocompletionRequest) => void;

src/usePlacesAutocompleteService.js

+10-7
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default function usePlacesAutocompleteService({
1818
const [isQueryPredsLoading, setIsQueryPredsLoading] = useState(false);
1919
const [queryInputValue, setQueryInputValue] = useState(false);
2020
const [queryPredictions, setQueryPredictions] = useState([]);
21-
const googleAutocompleteService = useRef(null);
21+
const placesAutocompleteService = useRef(null);
2222
const autocompleteSession = useRef(null);
2323
const handleLoadScript = useCallback(
2424
() => loadGoogleMapScript(googleMapsScriptBaseUrl, googleMapsScriptUrl),
@@ -27,8 +27,8 @@ export default function usePlacesAutocompleteService({
2727

2828
const debouncedPlacePredictions = useCallback(
2929
debounceFn((optionsArg) => {
30-
if (googleAutocompleteService.current && optionsArg.input)
31-
googleAutocompleteService.current.getPlacePredictions(
30+
if (placesAutocompleteService.current && optionsArg.input)
31+
placesAutocompleteService.current.getPlacePredictions(
3232
{
3333
...options,
3434
...optionsArg,
@@ -47,8 +47,8 @@ export default function usePlacesAutocompleteService({
4747

4848
const debouncedQueryPredictions = useCallback(
4949
debounceFn((optionsArg) => {
50-
if (googleAutocompleteService.current && optionsArg.input)
51-
googleAutocompleteService.current.getQueryPredictions(
50+
if (placesAutocompleteService.current && optionsArg.input)
51+
placesAutocompleteService.current.getQueryPredictions(
5252
{
5353
...options,
5454
...optionsArg,
@@ -76,10 +76,12 @@ export default function usePlacesAutocompleteService({
7676
);
7777

7878
// eslint-disable-next-line no-undef
79-
googleAutocompleteService.current = new google.maps.places.AutocompleteService();
79+
placesAutocompleteService.current =
80+
new google.maps.places.AutocompleteService();
8081

8182
if (sessionToken)
82-
autocompleteSession.current = new google.maps.places.AutocompleteSessionToken();
83+
autocompleteSession.current =
84+
new google.maps.places.AutocompleteSessionToken();
8385
};
8486

8587
if (apiKey) {
@@ -90,6 +92,7 @@ export default function usePlacesAutocompleteService({
9092
}, []);
9193

9294
return {
95+
placesAutocompleteService: placesAutocompleteService.current,
9396
placePredictions: placeInputValue ? placePredictions : [],
9497
isPlacePredictionsLoading: isPlacePredsLoading,
9598
getPlacePredictions: (opt) => {

0 commit comments

Comments
 (0)