UNPKG

@sector-labs/react-geocoder-autocomplete

Version:

React component for the Geoapify Geocoder Autocomplete field

166 lines (161 loc) 6.05 kB
import React, { useRef, useEffect } from 'react'; import { GeocoderAutocomplete } from '@sector-labs/geocoder-autocomplete'; var GeoapifyApiKey = React.createContext(""); var GeoapifyContext = function GeoapifyContext(props) { return React.createElement(GeoapifyApiKey.Provider, { value: props.apiKey }, props.children); }; var GeoapifyGeocoderAutocomplete = function GeoapifyGeocoderAutocomplete(_ref) { var placeholderValue = _ref.placeholder, typeValue = _ref.type, langValue = _ref.lang, limitValue = _ref.limit, valueValue = _ref.value, filterByCountryCodeValue = _ref.filterByCountryCode, filterByCircleValue = _ref.filterByCircle, filterByRectValue = _ref.filterByRect, biasByCountryCodeValue = _ref.biasByCountryCode, biasByCircleValue = _ref.biasByCircle, biasByRectValue = _ref.biasByRect, biasByProximityValue = _ref.biasByProximity, positionValue = _ref.position, countryCodesValue = _ref.countryCodes, skipIconsValue = _ref.skipIcons, skipDetailsValue = _ref.skipDetails, placeSelectCallback = _ref.placeSelect, suggestionsChangeCallback = _ref.suggestionsChange, onFocusCallback = _ref.onFocus, onBlurCallback = _ref.onBlur; var apiKey = React.useContext(GeoapifyApiKey); var geocoderContainer; var initialized = false; var geocoderAutocomplete = useRef(); var placeSelectCallbackRef = useRef(); var suggestionsChangeCallbackRef = useRef(); var onFocusCallbackRef = useRef(); var onBlurCallbackRef = useRef(); placeSelectCallbackRef.current = placeSelectCallback; suggestionsChangeCallbackRef.current = suggestionsChangeCallback; onFocusCallbackRef.current = onFocusCallback; onBlurCallbackRef.current = onBlurCallback; var onSelect = React.useCallback(function (value) { if (placeSelectCallbackRef.current) { placeSelectCallbackRef.current(value); } }, []); var onSuggestions = React.useCallback(function (value) { if (suggestionsChangeCallbackRef.current) { suggestionsChangeCallbackRef.current(value); } }, []); var onFocus = React.useCallback(function (value) { if (onFocusCallbackRef.current) { onFocusCallbackRef.current(value); } }, []); var onBlur = React.useCallback(function (value) { if (onBlurCallbackRef.current) { onBlurCallbackRef.current(value); } }, []); useEffect(function () { if (initialized) { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.off('select', onSelect); geocoderAutocomplete.current.off('suggestions', onSuggestions); geocoderAutocomplete.current.off('focus', onFocus); geocoderAutocomplete.current.off('blur', onBlur); } return; } initialized = true; geocoderAutocomplete.current = new GeocoderAutocomplete(geocoderContainer, apiKey, { placeholder: placeholderValue || '', skipDetails: skipDetailsValue, skipIcons: skipIconsValue }); geocoderAutocomplete.current.on('select', onSelect); geocoderAutocomplete.current.on('suggestions', onSuggestions); geocoderAutocomplete.current.on('focus', onFocus); geocoderAutocomplete.current.on('blur', onBlur); }, []); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.setType(typeValue); } }, [typeValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.setLang(langValue); } }, [langValue]); useEffect(function () { if (geocoderAutocomplete.current) { console.warn("WARNING! Obsolete function called. The 'position' input has been deprecated, please use the new 'biasByLocation' input instead!"); geocoderAutocomplete.current.addBiasByProximity(positionValue); } }, [positionValue]); useEffect(function () { if (geocoderAutocomplete.current) { console.warn("WARNING! Obsolete function called. The 'countryCodes' input has been deprecated, please use the new 'filterByCountryCode' input instead!"); geocoderAutocomplete.current.addFilterByCountry(countryCodesValue); } }, [countryCodesValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.setLimit(limitValue); } }, [limitValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.setValue(valueValue || ''); } }, [valueValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.addFilterByCountry(filterByCountryCodeValue); } }, [filterByCountryCodeValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.addFilterByCircle(filterByCircleValue); } }, [filterByCircleValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.addFilterByRect(filterByRectValue); } }, [filterByRectValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.addBiasByCountry(biasByCountryCodeValue); } }, [biasByCountryCodeValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.addBiasByCircle(biasByCircleValue); } }, [biasByCircleValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.addBiasByRect(biasByRectValue); } }, [biasByRectValue]); useEffect(function () { if (geocoderAutocomplete.current) { geocoderAutocomplete.current.addBiasByProximity(biasByProximityValue); } }, [biasByProximityValue]); return React.createElement("div", { className: 'geocoder-container', style: { position: 'relative' }, ref: function ref(el) { return geocoderContainer = el; } }); }; export { GeoapifyApiKey, GeoapifyContext, GeoapifyGeocoderAutocomplete }; //# sourceMappingURL=index.modern.js.map