@sector-labs/react-geocoder-autocomplete
Version:
React component for the Geoapify Geocoder Autocomplete field
166 lines (161 loc) • 6.05 kB
JavaScript
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