react-native-google-places-autocomplete 2.5.4 → 2.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,7 @@ import React, {
9
9
  useImperativeHandle,
10
10
  useRef,
11
11
  useState,
12
+ useCallback,
12
13
  } from 'react';
13
14
  import {
14
15
  ActivityIndicator,
@@ -84,36 +85,46 @@ export const GooglePlacesAutocomplete = forwardRef((props, ref) => {
84
85
  }
85
86
  };
86
87
 
87
- const buildRowsFromResults = (results, text) => {
88
- let res = [];
89
- const shouldDisplayPredefinedPlaces = text
90
- ? results.length === 0 && text.length === 0
91
- : results.length === 0;
92
- if (
93
- shouldDisplayPredefinedPlaces ||
94
- props.predefinedPlacesAlwaysVisible === true
95
- ) {
96
- res = [
97
- ...props.predefinedPlaces.filter((place) => place?.description.length),
98
- ];
99
-
100
- if (props.currentLocation === true && hasNavigator()) {
101
- res.unshift({
102
- description: props.currentLocationLabel,
103
- isCurrentLocation: true,
104
- });
88
+ const buildRowsFromResults = useCallback(
89
+ (results, text) => {
90
+ let res = [];
91
+ const shouldDisplayPredefinedPlaces = text
92
+ ? results.length === 0 && text.length === 0
93
+ : results.length === 0;
94
+ if (
95
+ shouldDisplayPredefinedPlaces ||
96
+ props.predefinedPlacesAlwaysVisible === true
97
+ ) {
98
+ res = [
99
+ ...props.predefinedPlaces.filter(
100
+ (place) => place?.description.length,
101
+ ),
102
+ ];
103
+
104
+ if (props.currentLocation === true && hasNavigator()) {
105
+ res.unshift({
106
+ description: props.currentLocationLabel,
107
+ isCurrentLocation: true,
108
+ });
109
+ }
105
110
  }
106
- }
107
111
 
108
- res = res.map((place) => ({
109
- ...place,
110
- isPredefinedPlace: true,
111
- }));
112
+ res = res.map((place) => ({
113
+ ...place,
114
+ isPredefinedPlace: true,
115
+ }));
112
116
 
113
- return [...res, ...results];
114
- };
117
+ return [...res, ...results];
118
+ },
119
+ [
120
+ props.currentLocation,
121
+ props.currentLocationLabel,
122
+ props.predefinedPlaces,
123
+ props.predefinedPlacesAlwaysVisible,
124
+ ],
125
+ );
115
126
 
116
- const getRequestUrl = (requestUrl) => {
127
+ const getRequestUrl = useCallback((requestUrl) => {
117
128
  if (requestUrl) {
118
129
  if (requestUrl.useOnPlatform === 'all') {
119
130
  return requestUrl.url;
@@ -127,7 +138,7 @@ export const GooglePlacesAutocomplete = forwardRef((props, ref) => {
127
138
  } else {
128
139
  return 'https://maps.googleapis.com/maps/api';
129
140
  }
130
- };
141
+ }, []);
131
142
 
132
143
  const getRequestHeaders = (requestUrl) => {
133
144
  return requestUrl?.headers || {};
@@ -144,11 +155,15 @@ export const GooglePlacesAutocomplete = forwardRef((props, ref) => {
144
155
  const [listViewDisplayed, setListViewDisplayed] = useState(
145
156
  props.listViewDisplayed === 'auto' ? false : props.listViewDisplayed,
146
157
  );
147
- const [url] = useState(getRequestUrl(props.requestUrl));
158
+ const [url, setUrl] = useState(getRequestUrl(props.requestUrl));
148
159
  const [listLoaderDisplayed, setListLoaderDisplayed] = useState(false);
149
160
 
150
161
  const inputRef = useRef();
151
162
 
163
+ useEffect(() => {
164
+ setUrl(getRequestUrl(props.requestUrl));
165
+ }, [getRequestUrl, props.requestUrl]);
166
+
152
167
  useEffect(() => {
153
168
  // This will load the search results after the query object ref gets changed
154
169
  _handleChangeText(stateText);
@@ -157,10 +172,11 @@ export const GooglePlacesAutocomplete = forwardRef((props, ref) => {
157
172
  };
158
173
  // eslint-disable-next-line react-hooks/exhaustive-deps
159
174
  }, [props.query]);
175
+
160
176
  useEffect(() => {
161
177
  // Update dataSource if props.predefinedPlaces changed
162
178
  setDataSource(buildRowsFromResults([]));
163
- }, [props.predefinedPlaces]);
179
+ }, [buildRowsFromResults, props.predefinedPlaces]);
164
180
 
165
181
  useImperativeHandle(ref, () => ({
166
182
  setAddressText: (address) => {
@@ -178,7 +194,10 @@ export const GooglePlacesAutocomplete = forwardRef((props, ref) => {
178
194
  url === 'https://maps.googleapis.com/maps/api';
179
195
 
180
196
  const _abortRequests = () => {
181
- _requests.map((i) => i.abort());
197
+ _requests.map((i) => {
198
+ i.onreadystatechange = null;
199
+ i.abort();
200
+ });
182
201
  _requests = [];
183
202
  };
184
203
 
@@ -558,6 +577,7 @@ export const GooglePlacesAutocomplete = forwardRef((props, ref) => {
558
577
  // eslint-disable-next-line react-hooks/exhaustive-deps
559
578
  const debounceData = useMemo(() => debounce(_request, props.debounce), [
560
579
  props.query,
580
+ url,
561
581
  ]);
562
582
 
563
583
  const _onChangeText = (text) => {
@@ -885,8 +905,8 @@ GooglePlacesAutocomplete.propTypes = {
885
905
  inbetweenCompo: PropTypes.object,
886
906
  isRowScrollable: PropTypes.bool,
887
907
  keyboardShouldPersistTaps: PropTypes.oneOf(['never', 'always', 'handled']),
888
- listEmptyComponent: PropTypes.func,
889
- listLoaderComponent: PropTypes.func,
908
+ listEmptyComponent: PropTypes.element,
909
+ listLoaderComponent: PropTypes.element,
890
910
  listHoverColor: PropTypes.string,
891
911
  listUnderlayColor: PropTypes.string,
892
912
  // Must write it this way: https://stackoverflow.com/a/54290946/7180620
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "react-native-google-places-autocomplete",
3
- "version": "2.5.4",
3
+ "version": "2.5.6",
4
4
  "description": "Customizable Google Places autocomplete component for iOS and Android React-Native apps",
5
5
  "main": "GooglePlacesAutocomplete.js",
6
6
  "types": "GooglePlacesAutocomplete.d.ts",
7
7
  "scripts": {
8
8
  "lint": "eslint . && prettier --write .",
9
- "release": "npx release-it"
9
+ "release": "npx release-it",
10
+ "prettier": "prettier --write ."
10
11
  },
11
12
  "author": "Farid from Safi",
12
13
  "license": "MIT",