@sector-labs/react-geocoder-autocomplete
Version:
React component for the Geoapify Geocoder Autocomplete field
171 lines (165 loc) • 6.54 kB
JavaScript
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var React = require('react');
var React__default = _interopDefault(React);
var geocoderAutocomplete = require('@sector-labs/geocoder-autocomplete');
var GeoapifyApiKey = React__default.createContext("");
var GeoapifyContext = function GeoapifyContext(props) {
return React__default.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__default.useContext(GeoapifyApiKey);
var geocoderContainer;
var initialized = false;
var geocoderAutocomplete$1 = React.useRef();
var placeSelectCallbackRef = React.useRef();
var suggestionsChangeCallbackRef = React.useRef();
var onFocusCallbackRef = React.useRef();
var onBlurCallbackRef = React.useRef();
placeSelectCallbackRef.current = placeSelectCallback;
suggestionsChangeCallbackRef.current = suggestionsChangeCallback;
onFocusCallbackRef.current = onFocusCallback;
onBlurCallbackRef.current = onBlurCallback;
var onSelect = React__default.useCallback(function (value) {
if (placeSelectCallbackRef.current) {
placeSelectCallbackRef.current(value);
}
}, []);
var onSuggestions = React__default.useCallback(function (value) {
if (suggestionsChangeCallbackRef.current) {
suggestionsChangeCallbackRef.current(value);
}
}, []);
var onFocus = React__default.useCallback(function (value) {
if (onFocusCallbackRef.current) {
onFocusCallbackRef.current(value);
}
}, []);
var onBlur = React__default.useCallback(function (value) {
if (onBlurCallbackRef.current) {
onBlurCallbackRef.current(value);
}
}, []);
React.useEffect(function () {
if (initialized) {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.off('select', onSelect);
geocoderAutocomplete$1.current.off('suggestions', onSuggestions);
geocoderAutocomplete$1.current.off('focus', onFocus);
geocoderAutocomplete$1.current.off('blur', onBlur);
}
return;
}
initialized = true;
geocoderAutocomplete$1.current = new geocoderAutocomplete.GeocoderAutocomplete(geocoderContainer, apiKey, {
placeholder: placeholderValue || '',
skipDetails: skipDetailsValue,
skipIcons: skipIconsValue
});
geocoderAutocomplete$1.current.on('select', onSelect);
geocoderAutocomplete$1.current.on('suggestions', onSuggestions);
geocoderAutocomplete$1.current.on('focus', onFocus);
geocoderAutocomplete$1.current.on('blur', onBlur);
}, []);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.setType(typeValue);
}
}, [typeValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.setLang(langValue);
}
}, [langValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
console.warn("WARNING! Obsolete function called. The 'position' input has been deprecated, please use the new 'biasByLocation' input instead!");
geocoderAutocomplete$1.current.addBiasByProximity(positionValue);
}
}, [positionValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
console.warn("WARNING! Obsolete function called. The 'countryCodes' input has been deprecated, please use the new 'filterByCountryCode' input instead!");
geocoderAutocomplete$1.current.addFilterByCountry(countryCodesValue);
}
}, [countryCodesValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.setLimit(limitValue);
}
}, [limitValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.setValue(valueValue || '');
}
}, [valueValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.addFilterByCountry(filterByCountryCodeValue);
}
}, [filterByCountryCodeValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.addFilterByCircle(filterByCircleValue);
}
}, [filterByCircleValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.addFilterByRect(filterByRectValue);
}
}, [filterByRectValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.addBiasByCountry(biasByCountryCodeValue);
}
}, [biasByCountryCodeValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.addBiasByCircle(biasByCircleValue);
}
}, [biasByCircleValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.addBiasByRect(biasByRectValue);
}
}, [biasByRectValue]);
React.useEffect(function () {
if (geocoderAutocomplete$1.current) {
geocoderAutocomplete$1.current.addBiasByProximity(biasByProximityValue);
}
}, [biasByProximityValue]);
return React__default.createElement("div", {
className: 'geocoder-container',
style: {
position: 'relative'
},
ref: function ref(el) {
return geocoderContainer = el;
}
});
};
exports.GeoapifyApiKey = GeoapifyApiKey;
exports.GeoapifyContext = GeoapifyContext;
exports.GeoapifyGeocoderAutocomplete = GeoapifyGeocoderAutocomplete;
//# sourceMappingURL=index.js.map