react-geosuggest
Advanced tools
Comparing version 2.0.0 to 2.1.0
@@ -0,1 +1,26 @@ | ||
## 2.1.0 (2017-01-11) | ||
#### Bug Fixes | ||
* Do not use setState to save timer instance. ([3709fdb6](https://github.com/ubilabs/react-geosuggest/commit/3709fdb6f8d7d8e7133c153398be87268b445a7a)) | ||
#### Features | ||
* changed to use reacts internal shallowCompare func ([c66051d5](https://github.com/ubilabs/react-geosuggest/commit/c66051d53507d217630ca89d2a677c93ebce7d98)) | ||
* add blur() ([d16c61](https://github.com/ubilabs/react-geosuggest/commit/d16c6105557bcca8dabc160927a448d86f06ffbe)) | ||
* Added ARIA attributes to whitelist ([5cb3f9a6](https://github.com/ubilabs/react-geosuggest/commit/5cb3f9a6560e032bd1188fb7d1893bf7154446ac)) | ||
* **label:** add BEM class to geosuggest label ([fb79f34e](https://github.com/ubilabs/react-geosuggest/commit/fb79f34eceed01eeaeb94e8cfe20a4b0205e908e)) | ||
* **style**: | ||
* allow custom hidden list class and active item class ([57338753](https://github.com/ubilabs/react-geosuggest/commit/57338753de65fffd839e7d3285e690d3fd098505)) | ||
* Allow adding custom classes to the suggest list and suggest item ([ed69df6c](https://github.com/ubilabs/react-geosuggest/commit/ed69df6c090772861e17dcafddd31bb1157b2611)) | ||
## 2.0.1 | ||
#### Bug Fixes | ||
* **refactor:** changed to use reacts internal shallowCompare | ||
## 2.0.0 (2016-10-07) | ||
@@ -2,0 +27,0 @@ |
@@ -79,3 +79,4 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Geosuggest = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
// Steps 6.b-6.e: +0 != -0 | ||
return x !== 0 || 1 / x === 1 / y; | ||
// Added the nonzero y check to make Flow happy, but it is redundant | ||
return x !== 0 || y !== 0 || 1 / x === 1 / y; | ||
} else { | ||
@@ -501,4 +502,2 @@ // Step 6.a: NaN == NaN | ||
},{}],4:[function(require,module,exports){ | ||
module.exports = require('react/lib/shallowCompare'); | ||
},{"react/lib/shallowCompare":5}],5:[function(require,module,exports){ | ||
/** | ||
@@ -512,4 +511,3 @@ * Copyright 2013-present, Facebook, Inc. | ||
* | ||
* @providesModule shallowCompare | ||
*/ | ||
*/ | ||
@@ -530,3 +528,3 @@ 'use strict'; | ||
module.exports = shallowCompare; | ||
},{"fbjs/lib/shallowEqual":2}],6:[function(require,module,exports){ | ||
},{"fbjs/lib/shallowEqual":2}],5:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -651,3 +649,3 @@ | ||
_this.props.onBlur(_this.state.userInput); | ||
var timer = setTimeout(function () { | ||
_this.timer = setTimeout(function () { | ||
_this.setState({ | ||
@@ -658,4 +656,2 @@ isSuggestsHidden: true, | ||
}, 100); | ||
_this.setState({ timer: timer }); | ||
}; | ||
@@ -689,4 +685,3 @@ | ||
activeSuggest: null, | ||
suggests: [], | ||
timer: null | ||
suggests: [] | ||
}; | ||
@@ -752,3 +747,3 @@ | ||
value: function componentWillUnmount() { | ||
clearTimeout(this.state.timer); | ||
clearTimeout(this.timer); | ||
} | ||
@@ -788,2 +783,12 @@ | ||
/** | ||
* Blur the input | ||
*/ | ||
}, { | ||
key: 'blur', | ||
value: function blur() { | ||
this.refs.input.blur(); | ||
} | ||
/** | ||
* Update the value of the user input | ||
@@ -864,3 +869,3 @@ * @param {String} userInput the new value of the user input | ||
var suggestsGoogle = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; | ||
var suggestsGoogle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; | ||
var callback = arguments[1]; | ||
@@ -912,3 +917,3 @@ | ||
value: function updateActiveSuggest() { | ||
var suggests = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; | ||
var suggests = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; | ||
@@ -1042,3 +1047,7 @@ var activeSuggest = this.state.activeSuggest; | ||
suggestItemStyle: this.props.style.suggestItem, | ||
suggestsClassName: this.props.suggestsClassName, | ||
suggestItemClassName: this.props.suggestItemClassName, | ||
suggests: this.state.suggests, | ||
hiddenClassName: this.props.suggestsHiddenClassName, | ||
suggestItemActiveClassName: this.props.suggestItemActiveClassName, | ||
activeSuggest: this.state.activeSuggest, | ||
@@ -1058,3 +1067,4 @@ onSuggestNoResults: this.onSuggestNoResults, | ||
'label', | ||
{ htmlFor: attributes.id }, | ||
{ className: 'geosuggest__label', | ||
htmlFor: attributes.id }, | ||
this.props.label | ||
@@ -1092,3 +1102,3 @@ ), | ||
},{"./defaults":7,"./filter-input-attributes":8,"./input":9,"./prop-types":10,"./suggest-list":12,"classnames":1,"lodash.debounce":3}],7:[function(require,module,exports){ | ||
},{"./defaults":6,"./filter-input-attributes":7,"./input":8,"./prop-types":9,"./suggest-list":11,"classnames":1,"lodash.debounce":3}],6:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -1136,3 +1146,3 @@ | ||
},{}],8:[function(require,module,exports){ | ||
},{}],7:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -1159,3 +1169,3 @@ | ||
*/ | ||
var allowedAttributes = ['autoFocus', 'disabled', 'form', 'formAction', 'formEncType', 'formMethod', 'formNoValidate', 'formTarget', 'height', 'id', 'inputMode', 'maxLength', 'name', 'onClick', 'onContextMenu', 'onCopy', 'onCut', 'onDoubleClick', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onPaste', 'pattern', 'placeholder', 'readOnly', 'required', 'size', 'spellCheck', 'tabIndex']; | ||
var allowedAttributes = ['autoFocus', 'disabled', 'form', 'formAction', 'formEncType', 'formMethod', 'formNoValidate', 'formTarget', 'height', 'id', 'inputMode', 'maxLength', 'name', 'onClick', 'onContextMenu', 'onCopy', 'onCut', 'onDoubleClick', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onPaste', 'pattern', 'placeholder', 'readOnly', 'required', 'size', 'spellCheck', 'tabIndex', 'aria-atomic', 'aria-busy', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-dropeffect', 'aria-errormessage', 'aria-flowto', 'aria-grabbed', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-live', 'aria-owns', 'aria-relevant', 'aria-roledescription', 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-placeholder', 'aria-readonly', 'aria-required']; | ||
@@ -1168,3 +1178,3 @@ /** | ||
},{}],9:[function(require,module,exports){ | ||
},{}],8:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -1184,5 +1194,5 @@ | ||
var _reactAddonsShallowCompare = require('react-addons-shallow-compare'); | ||
var _shallowCompare = require('react/lib/shallowCompare'); | ||
var _reactAddonsShallowCompare2 = _interopRequireDefault(_reactAddonsShallowCompare); | ||
var _shallowCompare2 = _interopRequireDefault(_shallowCompare); | ||
@@ -1281,3 +1291,3 @@ var _classnames = require('classnames'); | ||
value: function shouldComponentUpdate(nextProps, nextState) { | ||
return (0, _reactAddonsShallowCompare2.default)(this, nextProps, nextState); | ||
return (0, _shallowCompare2.default)(this, nextProps, nextState); | ||
} | ||
@@ -1323,2 +1333,12 @@ | ||
/** | ||
* Blur the input | ||
*/ | ||
}, { | ||
key: 'blur', | ||
value: function blur() { | ||
this.refs.input.blur(); | ||
} | ||
/** | ||
* Render the view | ||
@@ -1368,3 +1388,3 @@ * @return {Function} The React element to render | ||
},{"./filter-input-attributes":8,"classnames":1,"react-addons-shallow-compare":4}],10:[function(require,module,exports){ | ||
},{"./filter-input-attributes":7,"classnames":1,"react/lib/shallowCompare":4}],9:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -1392,2 +1412,6 @@ | ||
inputClassName: _react2.default.PropTypes.string, | ||
suggestsClassName: _react2.default.PropTypes.string, | ||
suggestsHiddenClassName: _react2.default.PropTypes.string, | ||
suggestItemClassName: _react2.default.PropTypes.string, | ||
suggestItemActiveClassName: _react2.default.PropTypes.string, | ||
location: _react2.default.PropTypes.object, | ||
@@ -1417,3 +1441,3 @@ radius: _react2.default.PropTypes.oneOfType([_react2.default.PropTypes.string, _react2.default.PropTypes.number]), | ||
},{}],11:[function(require,module,exports){ | ||
},{}],10:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -1431,12 +1455,14 @@ | ||
var _reactAddonsShallowCompare = require('react-addons-shallow-compare'); | ||
var _shallowCompare = require('react/lib/shallowCompare'); | ||
var _reactAddonsShallowCompare2 = _interopRequireDefault(_reactAddonsShallowCompare); | ||
var _shallowCompare2 = _interopRequireDefault(_shallowCompare); | ||
var _classnames = require('classnames'); | ||
var _classnames2 = require('classnames'); | ||
var _classnames2 = _interopRequireDefault(_classnames); | ||
var _classnames3 = _interopRequireDefault(_classnames2); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
@@ -1483,3 +1509,3 @@ | ||
value: function shouldComponentUpdate(nextProps, nextState) { | ||
return (0, _reactAddonsShallowCompare2.default)(this, nextProps, nextState); | ||
return (0, _shallowCompare2.default)(this, nextProps, nextState); | ||
} | ||
@@ -1501,3 +1527,3 @@ | ||
value: function render() { | ||
var classes = (0, _classnames2.default)('geosuggest__item', this.props.className, { 'geosuggest__item--active': this.props.isActive }); | ||
var classes = (0, _classnames3.default)('geosuggest__item', this.props.className, this.props.suggestItemClassName, { 'geosuggest__item--active': this.props.isActive }, _defineProperty({}, this.props.activeClassname, this.props.activeClassname ? this.props.isActive : null)); | ||
@@ -1532,3 +1558,3 @@ return _react2.default.createElement( | ||
},{"classnames":1,"react-addons-shallow-compare":4}],12:[function(require,module,exports){ | ||
},{"classnames":1,"react/lib/shallowCompare":4}],11:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -1546,9 +1572,9 @@ | ||
var _reactAddonsShallowCompare = require('react-addons-shallow-compare'); | ||
var _shallowCompare = require('react/lib/shallowCompare'); | ||
var _reactAddonsShallowCompare2 = _interopRequireDefault(_reactAddonsShallowCompare); | ||
var _shallowCompare2 = _interopRequireDefault(_shallowCompare); | ||
var _classnames = require('classnames'); | ||
var _classnames2 = require('classnames'); | ||
var _classnames2 = _interopRequireDefault(_classnames); | ||
var _classnames3 = _interopRequireDefault(_classnames2); | ||
@@ -1561,2 +1587,4 @@ var _suggestItem = require('./suggest-item'); | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
@@ -1593,3 +1621,3 @@ | ||
value: function shouldComponentUpdate(nextProps, nextState) { | ||
return (0, _reactAddonsShallowCompare2.default)(this, nextProps, nextState); | ||
return (0, _shallowCompare2.default)(this, nextProps, nextState); | ||
} | ||
@@ -1633,3 +1661,3 @@ | ||
var classes = (0, _classnames2.default)('geosuggest__suggests', { 'geosuggest__suggests--hidden': this.isHidden() }); | ||
var classes = (0, _classnames3.default)('geosuggest__suggests', this.props.suggestsClassName, { 'geosuggest__suggests--hidden': this.isHidden() }, _defineProperty({}, this.props.hiddenClassName, this.props.hiddenClassName ? this.isHidden() : null)); | ||
@@ -1646,3 +1674,5 @@ return _react2.default.createElement( | ||
style: _this2.props.suggestItemStyle, | ||
suggestItemClassName: _this2.props.suggestItemClassName, | ||
isActive: isActive, | ||
activeClassname: _this2.props.suggestItemActiveClassName, | ||
onMouseDown: _this2.props.onSuggestMouseDown, | ||
@@ -1671,3 +1701,3 @@ onMouseOut: _this2.props.onSuggestMouseOut, | ||
},{"./suggest-item":11,"classnames":1,"react-addons-shallow-compare":4}]},{},[6])(6) | ||
},{"./suggest-item":10,"classnames":1,"react/lib/shallowCompare":4}]},{},[5])(5) | ||
}); |
@@ -1,1 +0,1 @@ | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Geosuggest=e()}}(function(){var e;return function t(e,n,o){function s(r,i){if(!n[r]){if(!e[r]){var a="function"==typeof require&&require;if(!i&&a)return a(r,!0);if(u)return u(r,!0);var l=new Error("Cannot find module '"+r+"'");throw l.code="MODULE_NOT_FOUND",l}var p=n[r]={exports:{}};e[r][0].call(p.exports,function(t){var n=e[r][1][t];return s(n?n:t)},p,p.exports,t,e,n,o)}return n[r].exports}for(var u="function"==typeof require&&require,r=0;r<o.length;r++)s(o[r]);return s}({1:[function(t,n){!function(){"use strict";function t(){for(var e=[],n=0;n<arguments.length;n++){var s=arguments[n];if(s){var u=typeof s;if("string"===u||"number"===u)e.push(s);else if(Array.isArray(s))e.push(t.apply(null,s));else if("object"===u)for(var r in s)o.call(s,r)&&s[r]&&e.push(r)}}return e.join(" ")}var o={}.hasOwnProperty;"undefined"!=typeof n&&n.exports?n.exports=t:"function"==typeof e&&"object"==typeof e.amd&&e.amd?e("classnames",[],function(){return t}):window.classNames=t}()},{}],2:[function(e,t){"use strict";function n(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function o(e,t){if(n(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var o=Object.keys(e),u=Object.keys(t);if(o.length!==u.length)return!1;for(var r=0;r<o.length;r++)if(!s.call(t,o[r])||!n(e[o[r]],t[o[r]]))return!1;return!0}var s=Object.prototype.hasOwnProperty;t.exports=o},{}],3:[function(e,t){(function(e){function n(e,t,n){function s(t){var n=h,o=y;return h=y=void 0,O=t,b=e.apply(o,n)}function u(e){return O=e,m=setTimeout(p,t),j?s(e):b}function a(e){var n=e-_,o=e-O,s=t-n;return T?w(s,v-o):s}function l(e){var n=e-_,o=e-O;return void 0===_||n>=t||0>n||T&&o>=v}function p(){var e=P();return l(e)?c(e):void(m=setTimeout(p,a(e)))}function c(e){return m=void 0,I&&h?s(e):(h=y=void 0,b)}function f(){void 0!==m&&clearTimeout(m),O=0,h=_=y=m=void 0}function g(){return void 0===m?b:c(P())}function d(){var e=P(),n=l(e);if(h=arguments,y=this,_=e,n){if(void 0===m)return u(_);if(T)return m=setTimeout(p,t),s(_)}return void 0===m&&(m=setTimeout(p,t)),b}var h,y,v,b,m,_,O=0,j=!1,T=!1,I=!0;if("function"!=typeof e)throw new TypeError(i);return t=r(t)||0,o(n)&&(j=!!n.leading,T="maxWait"in n,v=T?S(r(n.maxWait)||0,t):v,I="trailing"in n?!!n.trailing:I),d.cancel=f,d.flush=g,d}function o(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function s(e){return!!e&&"object"==typeof e}function u(e){return"symbol"==typeof e||s(e)&&m.call(e)==l}function r(e){if("number"==typeof e)return e;if(u(e))return a;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(p,"");var n=f.test(e);return n||g.test(e)?d(e.slice(2),n?2:8):c.test(e)?a:+e}var i="Expected a function",a=0/0,l="[object Symbol]",p=/^\s+|\s+$/g,c=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,g=/^0o[0-7]+$/i,d=parseInt,h="object"==typeof e&&e&&e.Object===Object&&e,y="object"==typeof self&&self&&self.Object===Object&&self,v=h||y||Function("return this")(),b=Object.prototype,m=b.toString,S=Math.max,w=Math.min,P=function(){return v.Date.now()};t.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t){t.exports=e("react/lib/shallowCompare")},{"react/lib/shallowCompare":5}],5:[function(e,t){"use strict";function n(e,t,n){return!o(e.props,t)||!o(e.state,n)}var o=e("fbjs/lib/shallowEqual");t.exports=n},{"fbjs/lib/shallowEqual":2}],6:[function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}Object.defineProperty(n,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},l=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),p=window.React,c=o(p),f=e("classnames"),g=o(f),d=e("lodash.debounce"),h=o(d),y=e("./defaults"),v=o(y),b=e("./prop-types"),m=o(b),S=e("./filter-input-attributes"),w=o(S),P=e("./input"),_=o(P),O=e("./suggest-list"),j=o(O),T=function(e){function t(e){s(this,t);var n=u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.onInputChange=function(e){n.setState({userInput:e},n.onAfterInputChange)},n.onAfterInputChange=function(){n.state.isSuggestsHidden||n.showSuggests(),n.props.onChange(n.state.userInput)},n.onInputFocus=function(){n.props.onFocus(),n.showSuggests()},n.onInputBlur=function(){n.state.ignoreBlur||n.hideSuggests()},n.onNext=function(){return n.activateSuggest("next")},n.onPrev=function(){return n.activateSuggest("prev")},n.onSelect=function(){return n.selectSuggest(n.state.activeSuggest)},n.onSuggestMouseDown=function(){return n.setState({ignoreBlur:!0})},n.onSuggestMouseOut=function(){return n.setState({ignoreBlur:!1})},n.onSuggestNoResults=function(){n.props.onSuggestNoResults(n.state.userInput)},n.hideSuggests=function(){n.props.onBlur(n.state.userInput);var e=setTimeout(function(){n.setState({isSuggestsHidden:!0,activeSuggest:null})},100);n.setState({timer:e})},n.selectSuggest=function(e){return e||(e={label:n.state.userInput}),n.setState({isSuggestsHidden:!0,userInput:e.label}),e.location?(n.setState({ignoreBlur:!1}),void n.props.onSuggestSelect(e)):void n.geocodeSuggest(e)},n.state={isSuggestsHidden:!0,isLoading:!1,userInput:e.initialValue,activeSuggest:null,suggests:[],timer:null},n.onInputChange=n.onInputChange.bind(n),n.onAfterInputChange=n.onAfterInputChange.bind(n),e.queryDelay&&(n.onAfterInputChange=h["default"](n.onAfterInputChange,e.queryDelay)),n}return r(t,e),l(t,[{key:"componentWillReceiveProps",value:function(e){this.props.initialValue!==e.initialValue&&this.setState({userInput:e.initialValue})}},{key:"componentWillMount",value:function(){if("undefined"!=typeof window){var e=this.props.googleMaps||window.google&&window.google.maps||this.googleMaps;e&&(this.googleMaps=e,this.autocompleteService=new e.places.AutocompleteService,this.geocoder=new e.Geocoder)}}},{key:"componentWillUnmount",value:function(){clearTimeout(this.state.timer)}},{key:"focus",value:function(){this.refs.input.focus()}},{key:"update",value:function(e){this.setState({userInput:e}),this.props.onChange(e)}},{key:"clear",value:function(){this.setState({userInput:""},this.hideSuggests)}},{key:"searchSuggests",value:function(){var e=this;if(!this.state.userInput)return void this.updateSuggests();var t={input:this.state.userInput};["location","radius","bounds","types"].forEach(function(n){e.props[n]&&(t[n]=e.props[n])}),this.props.country&&(t.componentRestrictions={country:this.props.country}),this.setState({isLoading:!0},function(){e.autocompleteService.getPlacePredictions(t,function(t){e.setState({isLoading:!1}),e.updateSuggests(t||[],function(){e.props.autoActivateFirstSuggest&&!e.state.activeSuggest&&e.activateSuggest("next")})})})}},{key:"updateSuggests",value:function(){var e=this,t=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],n=arguments[1],o=[],s=new RegExp(i(this.state.userInput),"gim"),u=this.props.skipSuggest,r=10,a=0,l=null;this.props.fixtures.forEach(function(e){a>=r||!u(e)&&e.label.match(s)&&(a++,e.placeId=e.label,e.isFixture=!0,o.push(e))}),t.forEach(function(t){u(t)||o.push({label:e.props.getSuggestLabel(t),placeId:t.place_id,isFixture:!1})}),l=this.updateActiveSuggest(o),this.setState({suggests:o,activeSuggest:l},n)}},{key:"updateActiveSuggest",value:function(){var e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],t=this.state.activeSuggest;if(t){var n=e.find(function(e){return t.placeId===e.placeId&&t.isFixture===e.isFixture});t=n||null}return t}},{key:"showSuggests",value:function(){this.searchSuggests(),this.setState({isSuggestsHidden:!1})}},{key:"activateSuggest",value:function(e){if(this.state.isSuggestsHidden)return void this.showSuggests();var t=this.state.suggests.length-1,n="next"===e,o=null,s=0,u=0;for(u;t>=u;u++)this.state.suggests[u]===this.state.activeSuggest&&(s=n?u+1:u-1);this.state.activeSuggest||(s=n?0:t),s>=0&&t>=s&&(o=this.state.suggests[s]),this.props.onActivateSuggest(o),this.setState({activeSuggest:o})}},{key:"geocodeSuggest",value:function(e){var t=this;this.geocoder.geocode(e.placeId&&!e.isFixture?{placeId:e.placeId}:{address:e.label},function(n,o){if(o===t.googleMaps.GeocoderStatus.OK){var s=n[0],u=s.geometry.location;e.gmaps=s,e.location={lat:u.lat(),lng:u.lng()}}t.props.onSuggestSelect(e)})}},{key:"render",value:function(){var e=w["default"](this.props),t=g["default"]("geosuggest",this.props.className,{"geosuggest--loading":this.state.isLoading}),n=this.props.label&&e.id,o=c["default"].createElement(_["default"],a({className:this.props.inputClassName,ref:"input",value:this.state.userInput,ignoreEnter:!this.state.isSuggestsHidden,ignoreTab:this.props.ignoreTab,style:this.props.style.input,onChange:this.onInputChange,onFocus:this.onInputFocus,onBlur:this.onInputBlur,onKeyPress:this.props.onKeyPress,onNext:this.onNext,onPrev:this.onPrev,onSelect:this.onSelect,onEscape:this.hideSuggests},e)),s=c["default"].createElement(j["default"],{isHidden:this.state.isSuggestsHidden,style:this.props.style.suggests,suggestItemStyle:this.props.style.suggestItem,suggests:this.state.suggests,activeSuggest:this.state.activeSuggest,onSuggestNoResults:this.onSuggestNoResults,onSuggestMouseDown:this.onSuggestMouseDown,onSuggestMouseOut:this.onSuggestMouseOut,onSuggestSelect:this.selectSuggest});return c["default"].createElement("div",{className:t},c["default"].createElement("div",{className:"geosuggest__input-wrapper"},n&&c["default"].createElement("label",{htmlFor:e.id},this.props.label),o),c["default"].createElement("div",{className:"geosuggest__suggests-wrapper"},s))}}]),t}(c["default"].Component);T.propTypes=m["default"],T.defaultProps=v["default"],n["default"]=T},{"./defaults":7,"./filter-input-attributes":8,"./input":9,"./prop-types":10,"./suggest-list":12,classnames:1,"lodash.debounce":3}],7:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]={fixtures:[],initialValue:"",placeholder:"Search places",disabled:!1,className:"",inputClassName:"",location:null,radius:null,bounds:null,country:null,types:null,queryDelay:250,googleMaps:null,onActivateSuggest:function(){},onSuggestSelect:function(){},onSuggestNoResults:function(){},onFocus:function(){},onBlur:function(){},onChange:function(){},skipSuggest:function(){},getSuggestLabel:function(e){return e.description},autoActivateFirstSuggest:!1,style:{input:{},suggests:{},suggestItem:{}},ignoreTab:!1}},{}],8:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e){var t={};return o.forEach(function(n){e[n]&&(t[n]=e[n])}),t};var o=["autoFocus","disabled","form","formAction","formEncType","formMethod","formNoValidate","formTarget","height","id","inputMode","maxLength","name","onClick","onContextMenu","onCopy","onCut","onDoubleClick","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onPaste","pattern","placeholder","readOnly","required","size","spellCheck","tabIndex"]},{}],9:[function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(n,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),l=window.React,p=o(l),c=e("react-addons-shallow-compare"),f=o(c),g=e("classnames"),d=o(g),h=e("./filter-input-attributes"),y=o(h),v=function(e){function t(){var e,n,o,r;s(this,t);for(var i=arguments.length,a=Array(i),l=0;i>l;l++)a[l]=arguments[l];return n=o=u(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(a))),o.onChange=function(){o.props.onChange(o.refs.input.value)},o.onFocus=function(){o.props.onFocus()},o.onBlur=function(){o.props.onBlur()},o.onKeyPress=function(e){o.props.onKeyPress(e)},o.onInputKeyDown=function(e){switch(e.which){case 40:e.preventDefault(),o.props.onNext();break;case 38:e.preventDefault(),o.props.onPrev();break;case 13:o.props.ignoreEnter&&e.preventDefault(),o.props.onSelect();break;case 9:o.props.ignoreTab||o.props.onSelect();break;case 27:o.props.onEscape()}},r=n,u(o,r)}return r(t,e),a(t,[{key:"shouldComponentUpdate",value:function(e,t){return f["default"](this,e,t)}},{key:"focus",value:function(){this.refs.input.focus()}},{key:"render",value:function(){var e=y["default"](this.props),t=d["default"]("geosuggest__input",this.props.className);return p["default"].createElement("input",i({className:t,ref:"input",type:"text",autoComplete:"off"},e,{value:this.props.value,style:this.props.style,onKeyDown:this.onInputKeyDown,onChange:this.onChange,onKeyPress:this.onKeyPress,onFocus:this.onFocus,onBlur:this.onBlur}))}}]),t}(p["default"].Component);v.defaultProps={className:"",value:"",ignoreTab:!1,onKeyDown:function(){},onKeyPress:function(){}},n["default"]=v},{"./filter-input-attributes":8,classnames:1,"react-addons-shallow-compare":4}],10:[function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0});var s=window.React,u=o(s);n["default"]={fixtures:u["default"].PropTypes.array,initialValue:u["default"].PropTypes.string,placeholder:u["default"].PropTypes.string,disabled:u["default"].PropTypes.bool,className:u["default"].PropTypes.string,inputClassName:u["default"].PropTypes.string,location:u["default"].PropTypes.object,radius:u["default"].PropTypes.oneOfType([u["default"].PropTypes.string,u["default"].PropTypes.number]),bounds:u["default"].PropTypes.object,country:u["default"].PropTypes.string,types:u["default"].PropTypes.array,queryDelay:u["default"].PropTypes.number,googleMaps:u["default"].PropTypes.object,onSuggestSelect:u["default"].PropTypes.func,onFocus:u["default"].PropTypes.func,onBlur:u["default"].PropTypes.func,onChange:u["default"].PropTypes.func,onKeyPress:u["default"].PropTypes.func,skipSuggest:u["default"].PropTypes.func,getSuggestLabel:u["default"].PropTypes.func,autoActivateFirstSuggest:u["default"].PropTypes.bool,style:u["default"].PropTypes.shape({input:u["default"].PropTypes.object,suggests:u["default"].PropTypes.object,suggestItem:u["default"].PropTypes.object}),ignoreTab:u["default"].PropTypes.bool,label:u["default"].PropTypes.string}},{}],11:[function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(n,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),a=window.React,l=o(a),p=e("react-addons-shallow-compare"),c=o(p),f=e("classnames"),g=o(f),d=function(e){function t(){var e,n,o,r;s(this,t);for(var i=arguments.length,a=Array(i),l=0;i>l;l++)a[l]=arguments[l];return n=o=u(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(a))),o.onClick=function(e){e.preventDefault(),o.props.onSelect(o.props.suggest)},r=n,u(o,r)}return r(t,e),i(t,[{key:"shouldComponentUpdate",value:function(e,t){return c["default"](this,e,t)}},{key:"render",value:function(){var e=g["default"]("geosuggest__item",this.props.className,{"geosuggest__item--active":this.props.isActive});return l["default"].createElement("li",{className:e,style:this.props.style,onMouseDown:this.props.onMouseDown,onMouseOut:this.props.onMouseOut,onClick:this.onClick},this.props.suggest.label)}}]),t}(l["default"].Component);n["default"]=d,d.defaultProps={isActive:!1,className:"",suggest:{}}},{classnames:1,"react-addons-shallow-compare":4}],12:[function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(n,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),a=window.React,l=o(a),p=e("react-addons-shallow-compare"),c=o(p),f=e("classnames"),g=o(f),d=e("./suggest-item"),h=o(d),y=function(e){function t(){return s(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return r(t,e),i(t,[{key:"shouldComponentUpdate",value:function(e,t){return c["default"](this,e,t)}},{key:"isHidden",value:function(){return this.props.isHidden||0===this.props.suggests.length}},{key:"componentWillReceiveProps",value:function(e){e.suggests!==this.props.suggests&&0===e.suggests.length&&this.props.onSuggestNoResults()}},{key:"render",value:function(){var e=this,t=g["default"]("geosuggest__suggests",{"geosuggest__suggests--hidden":this.isHidden()});return l["default"].createElement("ul",{className:t,style:this.props.style},this.props.suggests.map(function(t){var n=e.props.activeSuggest&&t.placeId===e.props.activeSuggest.placeId;return l["default"].createElement(h["default"],{key:t.placeId,className:t.className,suggest:t,style:e.props.suggestItemStyle,isActive:n,onMouseDown:e.props.onSuggestMouseDown,onMouseOut:e.props.onSuggestMouseOut,onSelect:e.props.onSuggestSelect})}))}}]),t}(l["default"].Component);n["default"]=y,y.defaultProps={isHidden:!0,suggests:[]}},{"./suggest-item":11,classnames:1,"react-addons-shallow-compare":4}]},{},[6])(6)}); | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Geosuggest=e()}}(function(){var e;return function t(e,s,n){function o(u,a){if(!s[u]){if(!e[u]){var i="function"==typeof require&&require;if(!a&&i)return i(u,!0);if(r)return r(u,!0);var l=new Error("Cannot find module '"+u+"'");throw l.code="MODULE_NOT_FOUND",l}var p=s[u]={exports:{}};e[u][0].call(p.exports,function(t){var s=e[u][1][t];return o(s?s:t)},p,p.exports,t,e,s,n)}return s[u].exports}for(var r="function"==typeof require&&require,u=0;u<n.length;u++)o(n[u]);return o}({1:[function(t,s){!function(){"use strict";function t(){for(var e=[],s=0;s<arguments.length;s++){var o=arguments[s];if(o){var r=typeof o;if("string"===r||"number"===r)e.push(o);else if(Array.isArray(o))e.push(t.apply(null,o));else if("object"===r)for(var u in o)n.call(o,u)&&o[u]&&e.push(u)}}return e.join(" ")}var n={}.hasOwnProperty;"undefined"!=typeof s&&s.exports?s.exports=t:"function"==typeof e&&"object"==typeof e.amd&&e.amd?e("classnames",[],function(){return t}):window.classNames=t}()},{}],2:[function(e,t){"use strict";function s(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}function n(e,t){if(s(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var u=0;u<n.length;u++)if(!o.call(t,n[u])||!s(e[n[u]],t[n[u]]))return!1;return!0}var o=Object.prototype.hasOwnProperty;t.exports=n},{}],3:[function(e,t){(function(e){function s(e,t,s){function o(t){var s=h,n=y;return h=y=void 0,O=t,b=e.apply(n,s)}function r(e){return O=e,m=setTimeout(p,t),C?o(e):b}function i(e){var s=e-_,n=e-O,o=t-s;return j?w(o,v-n):o}function l(e){var s=e-_,n=e-O;return void 0===_||s>=t||0>s||j&&n>=v}function p(){var e=P();return l(e)?c(e):void(m=setTimeout(p,i(e)))}function c(e){return m=void 0,T&&h?o(e):(h=y=void 0,b)}function f(){void 0!==m&&clearTimeout(m),O=0,h=_=y=m=void 0}function g(){return void 0===m?b:c(P())}function d(){var e=P(),s=l(e);if(h=arguments,y=this,_=e,s){if(void 0===m)return r(_);if(j)return m=setTimeout(p,t),o(_)}return void 0===m&&(m=setTimeout(p,t)),b}var h,y,v,b,m,_,O=0,C=!1,j=!1,T=!0;if("function"!=typeof e)throw new TypeError(a);return t=u(t)||0,n(s)&&(C=!!s.leading,j="maxWait"in s,v=j?S(u(s.maxWait)||0,t):v,T="trailing"in s?!!s.trailing:T),d.cancel=f,d.flush=g,d}function n(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function o(e){return!!e&&"object"==typeof e}function r(e){return"symbol"==typeof e||o(e)&&m.call(e)==l}function u(e){if("number"==typeof e)return e;if(r(e))return i;if(n(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=n(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(p,"");var s=f.test(e);return s||g.test(e)?d(e.slice(2),s?2:8):c.test(e)?i:+e}var a="Expected a function",i=0/0,l="[object Symbol]",p=/^\s+|\s+$/g,c=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,g=/^0o[0-7]+$/i,d=parseInt,h="object"==typeof e&&e&&e.Object===Object&&e,y="object"==typeof self&&self&&self.Object===Object&&self,v=h||y||Function("return this")(),b=Object.prototype,m=b.toString,S=Math.max,w=Math.min,P=function(){return v.Date.now()};t.exports=s}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t){"use strict";function s(e,t,s){return!n(e.props,t)||!n(e.state,s)}var n=e("fbjs/lib/shallowEqual");t.exports=s},{"fbjs/lib/shallowEqual":2}],5:[function(e,t,s){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}Object.defineProperty(s,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var n in s)Object.prototype.hasOwnProperty.call(s,n)&&(e[n]=s[n])}return e},l=function(){function e(e,t){for(var s=0;s<t.length;s++){var n=t[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,s,n){return s&&e(t.prototype,s),n&&e(t,n),t}}(),p=window.React,c=n(p),f=e("classnames"),g=n(f),d=e("lodash.debounce"),h=n(d),y=e("./defaults"),v=n(y),b=e("./prop-types"),m=n(b),S=e("./filter-input-attributes"),w=n(S),P=e("./input"),_=n(P),O=e("./suggest-list"),C=n(O),j=function(e){function t(e){o(this,t);var s=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return s.onInputChange=function(e){s.setState({userInput:e},s.onAfterInputChange)},s.onAfterInputChange=function(){s.state.isSuggestsHidden||s.showSuggests(),s.props.onChange(s.state.userInput)},s.onInputFocus=function(){s.props.onFocus(),s.showSuggests()},s.onInputBlur=function(){s.state.ignoreBlur||s.hideSuggests()},s.onNext=function(){return s.activateSuggest("next")},s.onPrev=function(){return s.activateSuggest("prev")},s.onSelect=function(){return s.selectSuggest(s.state.activeSuggest)},s.onSuggestMouseDown=function(){return s.setState({ignoreBlur:!0})},s.onSuggestMouseOut=function(){return s.setState({ignoreBlur:!1})},s.onSuggestNoResults=function(){s.props.onSuggestNoResults(s.state.userInput)},s.hideSuggests=function(){s.props.onBlur(s.state.userInput),s.timer=setTimeout(function(){s.setState({isSuggestsHidden:!0,activeSuggest:null})},100)},s.selectSuggest=function(e){return e||(e={label:s.state.userInput}),s.setState({isSuggestsHidden:!0,userInput:e.label}),e.location?(s.setState({ignoreBlur:!1}),void s.props.onSuggestSelect(e)):void s.geocodeSuggest(e)},s.state={isSuggestsHidden:!0,isLoading:!1,userInput:e.initialValue,activeSuggest:null,suggests:[]},s.onInputChange=s.onInputChange.bind(s),s.onAfterInputChange=s.onAfterInputChange.bind(s),e.queryDelay&&(s.onAfterInputChange=h["default"](s.onAfterInputChange,e.queryDelay)),s}return u(t,e),l(t,[{key:"componentWillReceiveProps",value:function(e){this.props.initialValue!==e.initialValue&&this.setState({userInput:e.initialValue})}},{key:"componentWillMount",value:function(){if("undefined"!=typeof window){var e=this.props.googleMaps||window.google&&window.google.maps||this.googleMaps;e&&(this.googleMaps=e,this.autocompleteService=new e.places.AutocompleteService,this.geocoder=new e.Geocoder)}}},{key:"componentWillUnmount",value:function(){clearTimeout(this.timer)}},{key:"focus",value:function(){this.refs.input.focus()}},{key:"blur",value:function(){this.refs.input.blur()}},{key:"update",value:function(e){this.setState({userInput:e}),this.props.onChange(e)}},{key:"clear",value:function(){this.setState({userInput:""},this.hideSuggests)}},{key:"searchSuggests",value:function(){var e=this;if(!this.state.userInput)return void this.updateSuggests();var t={input:this.state.userInput};["location","radius","bounds","types"].forEach(function(s){e.props[s]&&(t[s]=e.props[s])}),this.props.country&&(t.componentRestrictions={country:this.props.country}),this.setState({isLoading:!0},function(){e.autocompleteService.getPlacePredictions(t,function(t){e.setState({isLoading:!1}),e.updateSuggests(t||[],function(){e.props.autoActivateFirstSuggest&&!e.state.activeSuggest&&e.activateSuggest("next")})})})}},{key:"updateSuggests",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],s=arguments[1],n=[],o=new RegExp(a(this.state.userInput),"gim"),r=this.props.skipSuggest,u=10,i=0,l=null;this.props.fixtures.forEach(function(e){i>=u||!r(e)&&e.label.match(o)&&(i++,e.placeId=e.label,e.isFixture=!0,n.push(e))}),t.forEach(function(t){r(t)||n.push({label:e.props.getSuggestLabel(t),placeId:t.place_id,isFixture:!1})}),l=this.updateActiveSuggest(n),this.setState({suggests:n,activeSuggest:l},s)}},{key:"updateActiveSuggest",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=this.state.activeSuggest;if(t){var s=e.find(function(e){return t.placeId===e.placeId&&t.isFixture===e.isFixture});t=s||null}return t}},{key:"showSuggests",value:function(){this.searchSuggests(),this.setState({isSuggestsHidden:!1})}},{key:"activateSuggest",value:function(e){if(this.state.isSuggestsHidden)return void this.showSuggests();var t=this.state.suggests.length-1,s="next"===e,n=null,o=0,r=0;for(r;t>=r;r++)this.state.suggests[r]===this.state.activeSuggest&&(o=s?r+1:r-1);this.state.activeSuggest||(o=s?0:t),o>=0&&t>=o&&(n=this.state.suggests[o]),this.props.onActivateSuggest(n),this.setState({activeSuggest:n})}},{key:"geocodeSuggest",value:function(e){var t=this;this.geocoder.geocode(e.placeId&&!e.isFixture?{placeId:e.placeId}:{address:e.label},function(s,n){if(n===t.googleMaps.GeocoderStatus.OK){var o=s[0],r=o.geometry.location;e.gmaps=o,e.location={lat:r.lat(),lng:r.lng()}}t.props.onSuggestSelect(e)})}},{key:"render",value:function(){var e=w["default"](this.props),t=g["default"]("geosuggest",this.props.className,{"geosuggest--loading":this.state.isLoading}),s=this.props.label&&e.id,n=c["default"].createElement(_["default"],i({className:this.props.inputClassName,ref:"input",value:this.state.userInput,ignoreEnter:!this.state.isSuggestsHidden,ignoreTab:this.props.ignoreTab,style:this.props.style.input,onChange:this.onInputChange,onFocus:this.onInputFocus,onBlur:this.onInputBlur,onKeyPress:this.props.onKeyPress,onNext:this.onNext,onPrev:this.onPrev,onSelect:this.onSelect,onEscape:this.hideSuggests},e)),o=c["default"].createElement(C["default"],{isHidden:this.state.isSuggestsHidden,style:this.props.style.suggests,suggestItemStyle:this.props.style.suggestItem,suggestsClassName:this.props.suggestsClassName,suggestItemClassName:this.props.suggestItemClassName,suggests:this.state.suggests,hiddenClassName:this.props.suggestsHiddenClassName,suggestItemActiveClassName:this.props.suggestItemActiveClassName,activeSuggest:this.state.activeSuggest,onSuggestNoResults:this.onSuggestNoResults,onSuggestMouseDown:this.onSuggestMouseDown,onSuggestMouseOut:this.onSuggestMouseOut,onSuggestSelect:this.selectSuggest});return c["default"].createElement("div",{className:t},c["default"].createElement("div",{className:"geosuggest__input-wrapper"},s&&c["default"].createElement("label",{className:"geosuggest__label",htmlFor:e.id},this.props.label),n),c["default"].createElement("div",{className:"geosuggest__suggests-wrapper"},o))}}]),t}(c["default"].Component);j.propTypes=m["default"],j.defaultProps=v["default"],s["default"]=j},{"./defaults":6,"./filter-input-attributes":7,"./input":8,"./prop-types":9,"./suggest-list":11,classnames:1,"lodash.debounce":3}],6:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s["default"]={fixtures:[],initialValue:"",placeholder:"Search places",disabled:!1,className:"",inputClassName:"",location:null,radius:null,bounds:null,country:null,types:null,queryDelay:250,googleMaps:null,onActivateSuggest:function(){},onSuggestSelect:function(){},onSuggestNoResults:function(){},onFocus:function(){},onBlur:function(){},onChange:function(){},skipSuggest:function(){},getSuggestLabel:function(e){return e.description},autoActivateFirstSuggest:!1,style:{input:{},suggests:{},suggestItem:{}},ignoreTab:!1}},{}],7:[function(e,t,s){"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s["default"]=function(e){var t={};return n.forEach(function(s){e[s]&&(t[s]=e[s])}),t};var n=["autoFocus","disabled","form","formAction","formEncType","formMethod","formNoValidate","formTarget","height","id","inputMode","maxLength","name","onClick","onContextMenu","onCopy","onCut","onDoubleClick","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onPaste","pattern","placeholder","readOnly","required","size","spellCheck","tabIndex","aria-atomic","aria-busy","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-dropeffect","aria-errormessage","aria-flowto","aria-grabbed","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-live","aria-owns","aria-relevant","aria-roledescription","aria-activedescendant","aria-autocomplete","aria-multiline","aria-placeholder","aria-readonly","aria-required"]},{}],8:[function(e,t,s){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(s,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var n in s)Object.prototype.hasOwnProperty.call(s,n)&&(e[n]=s[n])}return e},i=function(){function e(e,t){for(var s=0;s<t.length;s++){var n=t[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,s,n){return s&&e(t.prototype,s),n&&e(t,n),t}}(),l=window.React,p=n(l),c=e("react/lib/shallowCompare"),f=n(c),g=e("classnames"),d=n(g),h=e("./filter-input-attributes"),y=n(h),v=function(e){function t(){var e,s,n,u;o(this,t);for(var a=arguments.length,i=Array(a),l=0;a>l;l++)i[l]=arguments[l];return s=n=r(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onChange=function(){n.props.onChange(n.refs.input.value)},n.onFocus=function(){n.props.onFocus()},n.onBlur=function(){n.props.onBlur()},n.onKeyPress=function(e){n.props.onKeyPress(e)},n.onInputKeyDown=function(e){switch(e.which){case 40:e.preventDefault(),n.props.onNext();break;case 38:e.preventDefault(),n.props.onPrev();break;case 13:n.props.ignoreEnter&&e.preventDefault(),n.props.onSelect();break;case 9:n.props.ignoreTab||n.props.onSelect();break;case 27:n.props.onEscape()}},u=s,r(n,u)}return u(t,e),i(t,[{key:"shouldComponentUpdate",value:function(e,t){return f["default"](this,e,t)}},{key:"focus",value:function(){this.refs.input.focus()}},{key:"blur",value:function(){this.refs.input.blur()}},{key:"render",value:function(){var e=y["default"](this.props),t=d["default"]("geosuggest__input",this.props.className);return p["default"].createElement("input",a({className:t,ref:"input",type:"text",autoComplete:"off"},e,{value:this.props.value,style:this.props.style,onKeyDown:this.onInputKeyDown,onChange:this.onChange,onKeyPress:this.onKeyPress,onFocus:this.onFocus,onBlur:this.onBlur}))}}]),t}(p["default"].Component);v.defaultProps={className:"",value:"",ignoreTab:!1,onKeyDown:function(){},onKeyPress:function(){}},s["default"]=v},{"./filter-input-attributes":7,classnames:1,"react/lib/shallowCompare":4}],9:[function(e,t,s){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(s,"__esModule",{value:!0});var o=window.React,r=n(o);s["default"]={fixtures:r["default"].PropTypes.array,initialValue:r["default"].PropTypes.string,placeholder:r["default"].PropTypes.string,disabled:r["default"].PropTypes.bool,className:r["default"].PropTypes.string,inputClassName:r["default"].PropTypes.string,suggestsClassName:r["default"].PropTypes.string,suggestsHiddenClassName:r["default"].PropTypes.string,suggestItemClassName:r["default"].PropTypes.string,suggestItemActiveClassName:r["default"].PropTypes.string,location:r["default"].PropTypes.object,radius:r["default"].PropTypes.oneOfType([r["default"].PropTypes.string,r["default"].PropTypes.number]),bounds:r["default"].PropTypes.object,country:r["default"].PropTypes.string,types:r["default"].PropTypes.array,queryDelay:r["default"].PropTypes.number,googleMaps:r["default"].PropTypes.object,onSuggestSelect:r["default"].PropTypes.func,onFocus:r["default"].PropTypes.func,onBlur:r["default"].PropTypes.func,onChange:r["default"].PropTypes.func,onKeyPress:r["default"].PropTypes.func,skipSuggest:r["default"].PropTypes.func,getSuggestLabel:r["default"].PropTypes.func,autoActivateFirstSuggest:r["default"].PropTypes.bool,style:r["default"].PropTypes.shape({input:r["default"].PropTypes.object,suggests:r["default"].PropTypes.object,suggestItem:r["default"].PropTypes.object}),ignoreTab:r["default"].PropTypes.bool,label:r["default"].PropTypes.string}},{}],10:[function(e,t,s){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(s,"__esModule",{value:!0});var i=function(){function e(e,t){for(var s=0;s<t.length;s++){var n=t[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,s,n){return s&&e(t.prototype,s),n&&e(t,n),t}}(),l=window.React,p=n(l),c=e("react/lib/shallowCompare"),f=n(c),g=e("classnames"),d=n(g),h=function(e){function t(){var e,s,n,o;r(this,t);for(var a=arguments.length,i=Array(a),l=0;a>l;l++)i[l]=arguments[l];return s=n=u(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(e){e.preventDefault(),n.props.onSelect(n.props.suggest)},o=s,u(n,o)}return a(t,e),i(t,[{key:"shouldComponentUpdate",value:function(e,t){return f["default"](this,e,t)}},{key:"render",value:function(){var e=d["default"]("geosuggest__item",this.props.className,this.props.suggestItemClassName,{"geosuggest__item--active":this.props.isActive},o({},this.props.activeClassname,this.props.activeClassname?this.props.isActive:null));return p["default"].createElement("li",{className:e,style:this.props.style,onMouseDown:this.props.onMouseDown,onMouseOut:this.props.onMouseOut,onClick:this.onClick},this.props.suggest.label)}}]),t}(p["default"].Component);s["default"]=h,h.defaultProps={isActive:!1,className:"",suggest:{}}},{classnames:1,"react/lib/shallowCompare":4}],11:[function(e,t,s){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(s,"__esModule",{value:!0});var i=function(){function e(e,t){for(var s=0;s<t.length;s++){var n=t[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,s,n){return s&&e(t.prototype,s),n&&e(t,n),t}}(),l=window.React,p=n(l),c=e("react/lib/shallowCompare"),f=n(c),g=e("classnames"),d=n(g),h=e("./suggest-item"),y=n(h),v=function(e){function t(){return r(this,t),u(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return a(t,e),i(t,[{key:"shouldComponentUpdate",value:function(e,t){return f["default"](this,e,t)}},{key:"isHidden",value:function(){return this.props.isHidden||0===this.props.suggests.length}},{key:"componentWillReceiveProps",value:function(e){e.suggests!==this.props.suggests&&0===e.suggests.length&&this.props.onSuggestNoResults()}},{key:"render",value:function(){var e=this,t=d["default"]("geosuggest__suggests",this.props.suggestsClassName,{"geosuggest__suggests--hidden":this.isHidden()},o({},this.props.hiddenClassName,this.props.hiddenClassName?this.isHidden():null));return p["default"].createElement("ul",{className:t,style:this.props.style},this.props.suggests.map(function(t){var s=e.props.activeSuggest&&t.placeId===e.props.activeSuggest.placeId;return p["default"].createElement(y["default"],{key:t.placeId,className:t.className,suggest:t,style:e.props.suggestItemStyle,suggestItemClassName:e.props.suggestItemClassName,isActive:s,activeClassname:e.props.suggestItemActiveClassName,onMouseDown:e.props.onSuggestMouseDown,onMouseOut:e.props.onSuggestMouseOut,onSelect:e.props.onSuggestSelect})}))}}]),t}(p["default"].Component);s["default"]=v,v.defaultProps={isHidden:!0,suggests:[]}},{"./suggest-item":10,classnames:1,"react/lib/shallowCompare":4}]},{},[5])(5)}); |
@@ -22,3 +22,3 @@ 'use strict'; | ||
*/ | ||
var allowedAttributes = ['autoFocus', 'disabled', 'form', 'formAction', 'formEncType', 'formMethod', 'formNoValidate', 'formTarget', 'height', 'id', 'inputMode', 'maxLength', 'name', 'onClick', 'onContextMenu', 'onCopy', 'onCut', 'onDoubleClick', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onPaste', 'pattern', 'placeholder', 'readOnly', 'required', 'size', 'spellCheck', 'tabIndex']; | ||
var allowedAttributes = ['autoFocus', 'disabled', 'form', 'formAction', 'formEncType', 'formMethod', 'formNoValidate', 'formTarget', 'height', 'id', 'inputMode', 'maxLength', 'name', 'onClick', 'onContextMenu', 'onCopy', 'onCut', 'onDoubleClick', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onPaste', 'pattern', 'placeholder', 'readOnly', 'required', 'size', 'spellCheck', 'tabIndex', 'aria-atomic', 'aria-busy', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-dropeffect', 'aria-errormessage', 'aria-flowto', 'aria-grabbed', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-live', 'aria-owns', 'aria-relevant', 'aria-roledescription', 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-placeholder', 'aria-readonly', 'aria-required']; | ||
@@ -25,0 +25,0 @@ /** |
@@ -120,3 +120,3 @@ 'use strict'; | ||
_this.props.onBlur(_this.state.userInput); | ||
var timer = setTimeout(function () { | ||
_this.timer = setTimeout(function () { | ||
_this.setState({ | ||
@@ -127,4 +127,2 @@ isSuggestsHidden: true, | ||
}, 100); | ||
_this.setState({ timer: timer }); | ||
}; | ||
@@ -158,4 +156,3 @@ | ||
activeSuggest: null, | ||
suggests: [], | ||
timer: null | ||
suggests: [] | ||
}; | ||
@@ -221,3 +218,3 @@ | ||
value: function componentWillUnmount() { | ||
clearTimeout(this.state.timer); | ||
clearTimeout(this.timer); | ||
} | ||
@@ -257,2 +254,12 @@ | ||
/** | ||
* Blur the input | ||
*/ | ||
}, { | ||
key: 'blur', | ||
value: function blur() { | ||
this.refs.input.blur(); | ||
} | ||
/** | ||
* Update the value of the user input | ||
@@ -333,3 +340,3 @@ * @param {String} userInput the new value of the user input | ||
var suggestsGoogle = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; | ||
var suggestsGoogle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; | ||
var callback = arguments[1]; | ||
@@ -381,3 +388,3 @@ | ||
value: function updateActiveSuggest() { | ||
var suggests = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; | ||
var suggests = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; | ||
@@ -511,3 +518,7 @@ var activeSuggest = this.state.activeSuggest; | ||
suggestItemStyle: this.props.style.suggestItem, | ||
suggestsClassName: this.props.suggestsClassName, | ||
suggestItemClassName: this.props.suggestItemClassName, | ||
suggests: this.state.suggests, | ||
hiddenClassName: this.props.suggestsHiddenClassName, | ||
suggestItemActiveClassName: this.props.suggestItemActiveClassName, | ||
activeSuggest: this.state.activeSuggest, | ||
@@ -527,3 +538,4 @@ onSuggestNoResults: this.onSuggestNoResults, | ||
'label', | ||
{ htmlFor: attributes.id }, | ||
{ className: 'geosuggest__label', | ||
htmlFor: attributes.id }, | ||
this.props.label | ||
@@ -530,0 +542,0 @@ ), |
@@ -15,5 +15,5 @@ 'use strict'; | ||
var _reactAddonsShallowCompare = require('react-addons-shallow-compare'); | ||
var _shallowCompare = require('react/lib/shallowCompare'); | ||
var _reactAddonsShallowCompare2 = _interopRequireDefault(_reactAddonsShallowCompare); | ||
var _shallowCompare2 = _interopRequireDefault(_shallowCompare); | ||
@@ -112,3 +112,3 @@ var _classnames = require('classnames'); | ||
value: function shouldComponentUpdate(nextProps, nextState) { | ||
return (0, _reactAddonsShallowCompare2.default)(this, nextProps, nextState); | ||
return (0, _shallowCompare2.default)(this, nextProps, nextState); | ||
} | ||
@@ -154,2 +154,12 @@ | ||
/** | ||
* Blur the input | ||
*/ | ||
}, { | ||
key: 'blur', | ||
value: function blur() { | ||
this.refs.input.blur(); | ||
} | ||
/** | ||
* Render the view | ||
@@ -156,0 +166,0 @@ * @return {Function} The React element to render |
@@ -23,2 +23,6 @@ 'use strict'; | ||
inputClassName: _react2.default.PropTypes.string, | ||
suggestsClassName: _react2.default.PropTypes.string, | ||
suggestsHiddenClassName: _react2.default.PropTypes.string, | ||
suggestItemClassName: _react2.default.PropTypes.string, | ||
suggestItemActiveClassName: _react2.default.PropTypes.string, | ||
location: _react2.default.PropTypes.object, | ||
@@ -25,0 +29,0 @@ radius: _react2.default.PropTypes.oneOfType([_react2.default.PropTypes.string, _react2.default.PropTypes.number]), |
@@ -13,12 +13,14 @@ 'use strict'; | ||
var _reactAddonsShallowCompare = require('react-addons-shallow-compare'); | ||
var _shallowCompare = require('react/lib/shallowCompare'); | ||
var _reactAddonsShallowCompare2 = _interopRequireDefault(_reactAddonsShallowCompare); | ||
var _shallowCompare2 = _interopRequireDefault(_shallowCompare); | ||
var _classnames = require('classnames'); | ||
var _classnames2 = require('classnames'); | ||
var _classnames2 = _interopRequireDefault(_classnames); | ||
var _classnames3 = _interopRequireDefault(_classnames2); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
@@ -65,3 +67,3 @@ | ||
value: function shouldComponentUpdate(nextProps, nextState) { | ||
return (0, _reactAddonsShallowCompare2.default)(this, nextProps, nextState); | ||
return (0, _shallowCompare2.default)(this, nextProps, nextState); | ||
} | ||
@@ -83,3 +85,3 @@ | ||
value: function render() { | ||
var classes = (0, _classnames2.default)('geosuggest__item', this.props.className, { 'geosuggest__item--active': this.props.isActive }); | ||
var classes = (0, _classnames3.default)('geosuggest__item', this.props.className, this.props.suggestItemClassName, { 'geosuggest__item--active': this.props.isActive }, _defineProperty({}, this.props.activeClassname, this.props.activeClassname ? this.props.isActive : null)); | ||
@@ -86,0 +88,0 @@ return _react2.default.createElement( |
@@ -13,9 +13,9 @@ 'use strict'; | ||
var _reactAddonsShallowCompare = require('react-addons-shallow-compare'); | ||
var _shallowCompare = require('react/lib/shallowCompare'); | ||
var _reactAddonsShallowCompare2 = _interopRequireDefault(_reactAddonsShallowCompare); | ||
var _shallowCompare2 = _interopRequireDefault(_shallowCompare); | ||
var _classnames = require('classnames'); | ||
var _classnames2 = require('classnames'); | ||
var _classnames2 = _interopRequireDefault(_classnames); | ||
var _classnames3 = _interopRequireDefault(_classnames2); | ||
@@ -28,2 +28,4 @@ var _suggestItem = require('./suggest-item'); | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
@@ -60,3 +62,3 @@ | ||
value: function shouldComponentUpdate(nextProps, nextState) { | ||
return (0, _reactAddonsShallowCompare2.default)(this, nextProps, nextState); | ||
return (0, _shallowCompare2.default)(this, nextProps, nextState); | ||
} | ||
@@ -100,3 +102,3 @@ | ||
var classes = (0, _classnames2.default)('geosuggest__suggests', { 'geosuggest__suggests--hidden': this.isHidden() }); | ||
var classes = (0, _classnames3.default)('geosuggest__suggests', this.props.suggestsClassName, { 'geosuggest__suggests--hidden': this.isHidden() }, _defineProperty({}, this.props.hiddenClassName, this.props.hiddenClassName ? this.isHidden() : null)); | ||
@@ -113,3 +115,5 @@ return _react2.default.createElement( | ||
style: _this2.props.suggestItemStyle, | ||
suggestItemClassName: _this2.props.suggestItemClassName, | ||
isActive: isActive, | ||
activeClassname: _this2.props.suggestItemActiveClassName, | ||
onMouseDown: _this2.props.onSuggestMouseDown, | ||
@@ -116,0 +120,0 @@ onMouseOut: _this2.props.onSuggestMouseOut, |
{ | ||
"name": "react-geosuggest", | ||
"version": "2.0.0", | ||
"version": "2.1.0", | ||
"description": "A React autosuggest for the Google Maps Places API.", | ||
@@ -17,4 +17,3 @@ "main": "module/Geosuggest.js", | ||
"peerDependencies": { | ||
"react": "^0.14.0 || ^15.0.0", | ||
"react-addons-shallow-compare": "^0.14.0 || ^15.0.0" | ||
"react": "^0.14.0 || ^15.0.0" | ||
}, | ||
@@ -47,3 +46,2 @@ "dependencies": { | ||
"react-addons-test-utils": "^15.1.0", | ||
"react-addons-shallow-compare": "^15.1.0", | ||
"react-dom": "^15.1.0", | ||
@@ -50,0 +48,0 @@ "sinon": "^1.17.3", |
@@ -28,3 +28,3 @@ # React Geosuggest [![Build Status](https://travis-ci.org/ubilabs/react-geosuggest.svg?branch=master)](https://travis-ci.org/ubilabs/react-geosuggest) | ||
Visit the [Google Developer Console](https://console.developers.google.com) to generate your API key. | ||
Visit the [Google Developer Console](https://console.developers.google.com) to generate your API key. The API's that you have to enable in your Google API Manager Dashboard are [Google Maps Geocoding API](https://developers.google.com/maps/documentation/geocoding/start), [Google Places API Web Service](https://developers.google.com/places/web-service/) and [Google Maps Javascript API] (https://developers.google.com/maps/documentation/javascript/). | ||
@@ -35,14 +35,6 @@ The easiest way to use geosuggest is to install it from NPM and include it in your own React build process (using [Browserify](http://browserify.org), [Webpack](http://webpack.github.io/), etc). | ||
``` | ||
```sh | ||
npm install react-geosuggest --save | ||
``` | ||
### Peer Dependencies | ||
To allow for the greatest flexiblity in react version support, this module specifies `react-addons-shallow-compare` as a peer dependency. Therefore in order to use it, you must also install a version of `react-addons-shallow-compare` that matches your `react` version, ie: | ||
``` | ||
npm install react-addons-shallow-compare@0.14.6 | ||
``` | ||
## Usage | ||
@@ -54,3 +46,3 @@ | ||
``` | ||
```js | ||
import Geosuggest from 'react-geosuggest'; | ||
@@ -63,3 +55,3 @@ | ||
``` | ||
```js | ||
var Geosuggest = require('react-geosuggest').default; | ||
@@ -244,9 +236,35 @@ | ||
#### suggestsClassName | ||
Type: `String` | ||
Default: `''` | ||
Add an additional class to suggest list. | ||
#### suggestsHiddenClassName | ||
Type: `String` | ||
Default: `null` | ||
Additional `className` to toggle as the list of suggestions changes visibility. | ||
#### suggestItemClassName | ||
Type: `String` | ||
Default: `''` | ||
Add an additional class to suggest item. | ||
#### suggestItemActiveClassName | ||
Type: `String`, | ||
Default: `null` | ||
Additional `className` to add when a suggestion item is active. | ||
#### Others | ||
All standard `input[type="text"]` attributes are allowed. See the [documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input) for more information. | ||
All [allowed attributes for `input[type="text"]`](https://github.com/ubilabs/react-geosuggest/blob/master/src/filter-input-attributes.js#L4) | ||
All [DOM clipboard events](https://facebook.github.io/react/docs/events.html#clipboard-events). | ||
All [DOM mouse events](https://facebook.github.io/react/docs/events.html#mouse-events) except for drag & drop. | ||
### Exposed component functions | ||
These functions are accessible by setting "ref" on the component (see example below) | ||
@@ -256,2 +274,5 @@ #### focus() | ||
#### blur() | ||
Call `blur` to blur (unfocus) the element. The suggest list will be closed. | ||
#### update(value) | ||
@@ -265,3 +286,3 @@ It is possible to update the value of the input contained within the GeoSuggest component by calling the `update` function with a new desired `value` of the type String. | ||
``` | ||
```jsx | ||
import React from 'react'; | ||
@@ -285,2 +306,3 @@ import ReactDOM from 'react-dom'; | ||
<Geosuggest | ||
ref={el=>this._geoSuggest=el} | ||
placeholder="Start typing!" | ||
@@ -292,2 +314,7 @@ initialValue="Hamburg" | ||
radius="20" /> | ||
{* Buttons to trigger exposed component functions *} | ||
<button onClick={()=>this._geoSuggest.focus()}>Focus</button> | ||
<button onClick={()=>this._geoSuggest.update('New Zeland')}>Update</button> | ||
<button onClick={()=>this._geoSuggest.clear()}>Clear</button> | ||
</div> | ||
@@ -316,3 +343,3 @@ ) | ||
The `geosuggest__suggests--hidden` class is added to hide the suggestion list. You should copy the style below into your CSS file. | ||
``` | ||
```css | ||
.geosuggest__suggests--hidden { | ||
@@ -327,3 +354,3 @@ max-height: 0; | ||
Similarly, you need to have the class `geosuggest__item--active` similar to this: | ||
``` | ||
```css | ||
.geosuggest__item--active { | ||
@@ -330,0 +357,0 @@ background: #267dc0; |
@@ -247,2 +247,9 @@ import React from 'react'; // eslint-disable-line no-unused-vars | ||
it('should not have the focus after calling `blur`', () => { | ||
component.focus(); | ||
expect(document.activeElement.classList.contains('geosuggest__input')).to.be.true; // eslint-disable-line no-unused-expressions, max-len | ||
component.blur(); | ||
expect(document.activeElement.classList.contains('geosuggest__input')).to.be.false; // eslint-disable-line no-unused-expressions, max-len | ||
}); | ||
it('should add external inline `style` to input component', () => { // eslint-disable-line max-len | ||
@@ -462,2 +469,67 @@ const geoSuggestInput = TestUtils.findRenderedDOMComponentWithClass(component, 'geosuggest__input'); // eslint-disable-line max-len | ||
}); | ||
describe('with suggestsHiddenClassName and suggestItemActiveClassName', () => { // eslint-disable-line max-len | ||
const props = { | ||
suggestsHiddenClassName: 'suggests-hidden-class', | ||
suggestItemActiveClassName: 'suggest-item-active', | ||
autoActivateFirstSuggest: true | ||
}; | ||
beforeEach(() => render(props)); | ||
it('should apply suggestsHiddenClassName when the list is hidden', () => { | ||
const geoSuggestInput = TestUtils.findRenderedDOMComponentWithClass(component, 'geosuggest__input'); // eslint-disable-line max-len | ||
TestUtils.Simulate.focus(geoSuggestInput); | ||
const suggests = TestUtils.scryRenderedDOMComponentsWithClass(component, 'geosuggest__suggests'); // eslint-disable-line max-len, one-var | ||
expect(suggests[0].classList.contains('suggests-hidden-class')).to.be.true; // eslint-disable-line no-unused-expressions, max-len | ||
expect(suggests[0].classList.contains('geosuggest__suggests--hidden')).to.be.true; // eslint-disable-line no-unused-expressions, max-len | ||
}); | ||
it('should apply suggestItemActiveClassName when a list item is active', done => { // eslint-disable-line max-len | ||
const geoSuggestInput = TestUtils.findRenderedDOMComponentWithClass(component, 'geosuggest__input'); // eslint-disable-line max-len | ||
geoSuggestInput.value = 'New'; | ||
TestUtils.Simulate.change(geoSuggestInput); | ||
TestUtils.Simulate.focus(geoSuggestInput); | ||
setImmediate(() => { | ||
const activeItems = TestUtils.scryRenderedDOMComponentsWithClass(component, 'suggest-item-active'); // eslint-disable-line max-len | ||
expect(activeItems.length).to.be.equal(1); | ||
expect(activeItems[0].classList.contains('geosuggest__item--active')).to.be.true; // eslint-disable-line no-unused-expressions, max-len | ||
done(); | ||
}); | ||
}); | ||
}); | ||
describe('with suggestsClassName and suggestItemClassName', () => { // eslint-disable-line max-len | ||
const props = { | ||
suggestsClassName: 'suggests-class', | ||
suggestItemClassName: 'suggest-item' | ||
}; | ||
beforeEach(() => render(props)); | ||
it('should apply suggestsClassName to the list', () => { | ||
const geoSuggestInput = TestUtils.findRenderedDOMComponentWithClass(component, 'geosuggest__input'); // eslint-disable-line max-len | ||
TestUtils.Simulate.focus(geoSuggestInput); | ||
const suggests = TestUtils.scryRenderedDOMComponentsWithClass(component, 'geosuggest__suggests'); // eslint-disable-line max-len, one-var | ||
expect(suggests[0].classList.contains('suggests-class')).to.be.true; // eslint-disable-line no-unused-expressions, max-len | ||
}); | ||
it('should apply suggestItemClassName to each list item', done => { // eslint-disable-line max-len | ||
const geoSuggestInput = TestUtils.findRenderedDOMComponentWithClass(component, 'geosuggest__input'); // eslint-disable-line max-len | ||
geoSuggestInput.value = 'New'; | ||
TestUtils.Simulate.change(geoSuggestInput); | ||
TestUtils.Simulate.focus(geoSuggestInput); | ||
setImmediate(() => { | ||
const totalItems = TestUtils.scryRenderedDOMComponentsWithClass(component, 'suggest-item'), // eslint-disable-line max-len | ||
itemsWithItemClass = TestUtils.scryRenderedDOMComponentsWithClass(component, 'geosuggest__item'); // eslint-disable-line max-len | ||
expect(totalItems.length).to.be.equal(itemsWithItemClass.length); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
268788
3
24
3832
360