From f161a50c0de6222ed3f6a6bb90e6d0b265f0e1bf Mon Sep 17 00:00:00 2001 From: sceka Date: Wed, 5 Jul 2023 17:40:34 +0200 Subject: [PATCH 1/2] Add locationBias and locationRestriction --- src/google-places-autocomplete.tsx | 82 ++++++++++++++++-------------- src/types.ts | 69 ++++++++++++++++--------- 2 files changed, 90 insertions(+), 61 deletions(-) diff --git a/src/google-places-autocomplete.tsx b/src/google-places-autocomplete.tsx index dfca1e7..2d78202 100644 --- a/src/google-places-autocomplete.tsx +++ b/src/google-places-autocomplete.tsx @@ -1,45 +1,53 @@ -import React, { forwardRef, useImperativeHandle } from 'react'; -import AsyncSelect from 'react-select/async'; +import React, { forwardRef, useImperativeHandle } from "react"; +import AsyncSelect from "react-select/async"; -import GooglePlacesAutocompleteProps, { GooglePlacesAutocompleteHandle } from './types'; -import usePlacesService from './hooks/use-places-service'; -import useFetchSuggestions from './hooks/use-fetch-suggestions'; +import GooglePlacesAutocompleteProps, { + GooglePlacesAutocompleteHandle, +} from "./types"; +import usePlacesService from "./hooks/use-places-service"; +import useFetchSuggestions from "./hooks/use-fetch-suggestions"; -const GooglePlacesAutocomplete: React.ForwardRefRenderFunction = ( - args: GooglePlacesAutocompleteProps, - ref, -) : React.ReactElement => { +const GooglePlacesAutocomplete: React.ForwardRefRenderFunction< + GooglePlacesAutocompleteHandle, + GooglePlacesAutocompleteProps +> = (args: GooglePlacesAutocompleteProps, ref): React.ReactElement => { + const { placesService, sessionToken, setSessionToken } = usePlacesService({ + apiKey: args.apiKey ?? "", + apiOptions: args.apiOptions ?? {}, + onLoadFailed: args.onLoadFailed ?? console.error, + }); - const { placesService, sessionToken, setSessionToken } = usePlacesService({ - apiKey: args.apiKey ?? '', - apiOptions: args.apiOptions ?? {}, - onLoadFailed: args.onLoadFailed ?? console.error, - }); - const fetchSuggestions = useFetchSuggestions({ - autocompletionRequest: args.autocompletionRequest ?? {}, - debounce: args.debounce ?? 300, - minLengthAutocomplete: args.minLengthAutocomplete ?? 0, - placesService, - sessionToken, - withSessionToken: args.withSessionToken ?? false, - }); + const fetchSuggestions = useFetchSuggestions({ + autocompletionRequest: args.autocompletionRequest ?? {}, + debounce: args.debounce ?? 300, + minLengthAutocomplete: args.minLengthAutocomplete ?? 0, + placesService, + sessionToken, + withSessionToken: args.withSessionToken ?? false, + }); - useImperativeHandle(ref, () => ({ - getSessionToken: () => { - return sessionToken; - }, - refreshSessionToken: () => { - setSessionToken(new google.maps.places.AutocompleteSessionToken()); - } - }), [sessionToken]); + useImperativeHandle( + ref, + () => ({ + getSessionToken: () => { + return sessionToken; + }, + refreshSessionToken: () => { + setSessionToken( + new google.maps.places.AutocompleteSessionToken() + ); + }, + }), + [sessionToken] + ); - return ( - value.place_id} - /> - ); + return ( + value.place_id} + /> + ); }; export default forwardRef(GooglePlacesAutocomplete); diff --git a/src/types.ts b/src/types.ts index 10626c1..6de73b7 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,38 +1,59 @@ -import { LoaderOptions } from '@googlemaps/js-api-loader'; -import { GroupBase } from 'react-select'; -import { AsyncProps } from 'react-select/async'; +import { LoaderOptions } from "@googlemaps/js-api-loader"; +import { GroupBase } from "react-select"; +import { AsyncProps } from "react-select/async"; export type GooglePlacesAutocompleteHandle = { - getSessionToken: () => google.maps.places.AutocompleteSessionToken | undefined; - refreshSessionToken: () => void; -} + getSessionToken: () => + | google.maps.places.AutocompleteSessionToken + | undefined; + refreshSessionToken: () => void; +}; export interface LatLng { - lat: number; - lng: number; + lat: number; + lng: number; +} + +export interface LatLngLiteral { + latDegrees: number; + lngDegrees: number; +} + +export interface LatLngBoundsLiteral { + east: number; + north: number; + south: number; + west: number; +} + +export interface LatLngBounds { + sw: LatLng | LatLngLiteral | LatLngBounds | LatLngBoundsLiteral; + ne: LatLng | LatLngLiteral; } export interface AutocompletionRequest { - bounds?: [LatLng, LatLng]; - componentRestrictions?: { country: string | string[] }; - location?: LatLng; - offset?: number; - radius?: number; - types?: string[]; + bounds?: [LatLng, LatLng]; + componentRestrictions?: { country: string | string[] }; + location?: LatLng; + locationBias?: LatLng | LatLngLiteral | LatLngBoundsLiteral | string; + locationRestriction?: LatLngBounds | LatLngBoundsLiteral; + offset?: number; + radius?: number; + types?: string[]; } export type Option = { - label: string; - value: any; + label: string; + value: any; }; export default interface GooglePlacesAutocompleteProps { - apiKey?: string; - apiOptions?: Partial; - autocompletionRequest?: AutocompletionRequest; - debounce?: number; - minLengthAutocomplete?: number; - onLoadFailed?: (error: Error) => void; - selectProps?: AsyncProps>; - withSessionToken?: boolean; + apiKey?: string; + apiOptions?: Partial; + autocompletionRequest?: AutocompletionRequest; + debounce?: number; + minLengthAutocomplete?: number; + onLoadFailed?: (error: Error) => void; + selectProps?: AsyncProps>; + withSessionToken?: boolean; } From 2decd4c308792bb3a00f093baf42fac37cc27539 Mon Sep 17 00:00:00 2001 From: sceka Date: Fri, 7 Jul 2023 13:52:50 +0200 Subject: [PATCH 2/2] Change repository url --- package.json | 115 +++++++++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 59 deletions(-) diff --git a/package.json b/package.json index ca3d356..7969090 100644 --- a/package.json +++ b/package.json @@ -1,62 +1,59 @@ { - "name": "react-google-places-autocomplete", - "version": "4.0.1", - "description": "Google places autocomplete input for ReactJS.", - "main": "build/index.js", - "module": "build/index.es.js", - "scripts": { - "build": "rollup -c", - "postbuild": "node ./build-utils/postBuild", - "lint": "eslint . --ext ts,tsx ." - }, - "husky": { - "hooks": { - "pre-commit": "yarn lint" + "name": "marko-react-google-places-autocomplete", + "version": "4.0.1", + "description": "Google places autocomplete input for ReactJS.", + "main": "build/index.js", + "module": "build/index.es.js", + "scripts": { + "build": "rollup -c", + "postbuild": "node ./build-utils/postBuild", + "lint": "eslint . --ext ts,tsx ." + }, + "husky": { + "hooks": { + "pre-commit": "yarn lint" + } + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sceka/react-google-places-autocomplete.git" + }, + "author": "Marko Scekic", + "license": "MIT", + "homepage": "https://github.com/sceka/react-google-places-autocomplete#readme", + "keywords": [ + "react", + "google-places", + "places", + "autocomplete" + ], + "devDependencies": { + "@rollup/plugin-commonjs": "^15.0.0", + "@rollup/plugin-node-resolve": "^9.0.0", + "@types/react": "^16.9.46", + "@types/react-dom": "^16.9.8", + "@typescript-eslint/eslint-plugin": "^3.9.1", + "@typescript-eslint/parser": "^3.9.1", + "eslint": "^7.7.0", + "eslint-plugin-react": "^7.20.6", + "husky": "^4.2.5", + "react": "^16.8.0", + "react-dom": "^16.8.0", + "rollup": "^2.26.4", + "rollup-plugin-bundle-size": "^1.0.3", + "rollup-plugin-peer-deps-external": "^2.2.3", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.27.2", + "typescript": "^3.9.7" + }, + "dependencies": { + "@googlemaps/js-api-loader": "^1.14.3", + "@types/google.maps": "^3.50.4", + "react-select": "^5.7.2", + "use-debounce": "^3.4.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Tintef/react-google-places-autocomplete.git" - }, - "author": "Nicolás Tinte", - "license": "MIT", - "bugs": { - "url": "https://github.com/Tintef/react-google-places-autocomplete/issues" - }, - "homepage": "https://github.com/Tintef/react-google-places-autocomplete#readme", - "keywords": [ - "react", - "google-places", - "places", - "autocomplete" - ], - "devDependencies": { - "@rollup/plugin-commonjs": "^15.0.0", - "@rollup/plugin-node-resolve": "^9.0.0", - "@types/react": "^16.9.46", - "@types/react-dom": "^16.9.8", - "@typescript-eslint/eslint-plugin": "^3.9.1", - "@typescript-eslint/parser": "^3.9.1", - "eslint": "^7.7.0", - "eslint-plugin-react": "^7.20.6", - "husky": "^4.2.5", - "react": "^16.8.0", - "react-dom": "^16.8.0", - "rollup": "^2.26.4", - "rollup-plugin-bundle-size": "^1.0.3", - "rollup-plugin-peer-deps-external": "^2.2.3", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.27.2", - "typescript": "^3.9.7" - }, - "dependencies": { - "@googlemaps/js-api-loader": "^1.14.3", - "@types/google.maps": "^3.50.4", - "react-select": "^5.7.2", - "use-debounce": "^3.4.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } }