@appbaseio/reactivesearch-vue 1.16.0-alpha.5 → 1.16.0-alpha.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/@appbaseio/reactivesearch-vue.umd.js +15109 -13024
  2. package/dist/@appbaseio/reactivesearch-vue.umd.js.map +1 -1
  3. package/dist/@appbaseio/reactivesearch-vue.umd.min.js +5 -5
  4. package/dist/@appbaseio/reactivesearch-vue.umd.min.js.map +1 -1
  5. package/dist/cjs/Button-10e5cf51.js +68 -0
  6. package/dist/cjs/{DownShift-b09da079.js → CancelSvg-82021d23.js} +60 -16
  7. package/dist/cjs/Card-4b915733.js +30 -0
  8. package/dist/cjs/{ComponentWrapper-5a0a8849.js → ComponentWrapper-7302fe1a.js} +40 -21
  9. package/dist/cjs/{Container-f84e72fc.js → Container-8a08d663.js} +3 -11
  10. package/dist/cjs/DataSearch-7fd1b95d.js +2181 -0
  11. package/dist/cjs/DataSearch.js +18 -2151
  12. package/dist/cjs/{DropDown-c66be1a8.js → DropDown-16a2a728.js} +80 -95
  13. package/dist/cjs/DynamicRangeSlider.js +107 -43
  14. package/dist/cjs/Flex-699639d2.js +52 -0
  15. package/dist/cjs/FormControlList-73497794.js +47 -0
  16. package/dist/cjs/Input-64087a69.js +79 -0
  17. package/dist/cjs/ListItem-933c27e4.js +46 -0
  18. package/dist/cjs/MultiDropdownList.js +102 -68
  19. package/dist/cjs/MultiList.js +80 -50
  20. package/dist/cjs/MultiRange.js +21 -16
  21. package/dist/cjs/{Pagination-91df3b77.js → Pagination-e0654529.js} +4 -3
  22. package/dist/cjs/RangeInput.js +29 -45
  23. package/dist/cjs/RangeSlider.js +32 -30
  24. package/dist/cjs/ReactiveBase.js +87 -56
  25. package/dist/cjs/ReactiveComponent.js +75 -62
  26. package/dist/cjs/ReactiveGoogleMap.js +326 -235
  27. package/dist/cjs/ReactiveList.js +189 -241
  28. package/dist/cjs/ResultCard.js +8 -6
  29. package/dist/cjs/ResultList.js +8 -6
  30. package/dist/cjs/SelectedFilters.js +27 -12
  31. package/dist/cjs/SingleDropdownList.js +88 -60
  32. package/dist/cjs/SingleList.js +53 -35
  33. package/dist/cjs/SingleRange.js +18 -13
  34. package/dist/cjs/StateProvider.js +11 -7
  35. package/dist/cjs/{Title-e9beb554.js → Title-39765ee6.js} +3 -11
  36. package/dist/cjs/ToggleButton.js +35 -16
  37. package/dist/cjs/{_rollupPluginBabelHelpers-280a574c.js → _rollupPluginBabelHelpers-4abdbfff.js} +11 -1
  38. package/dist/cjs/{index-e0583d76.js → index-d44a0a21.js} +87 -13
  39. package/dist/cjs/index.js +30 -25
  40. package/dist/cjs/initReactivesearch.js +177 -103
  41. package/dist/cjs/install-856cc730.js +1247 -0
  42. package/dist/cjs/install.js +41 -44
  43. package/dist/cjs/ssr-c333c82c.js +39 -0
  44. package/dist/cjs/{utils-d1ea9f95.js → utils-23afb20b.js} +2 -2
  45. package/dist/cjs/version.js +1 -1
  46. package/dist/cjs/{vueTypes-c21f265b.js → vueTypes-6de9d2a9.js} +9 -4
  47. package/dist/es/Button-8b211174.js +59 -0
  48. package/dist/es/{DownShift-d8f2500f.js → CancelSvg-4d9e0857.js} +56 -17
  49. package/dist/es/Card-04b3c33e.js +23 -0
  50. package/dist/es/{ComponentWrapper-d0b21b95.js → ComponentWrapper-bbb717bc.js} +40 -21
  51. package/dist/es/Container-4383c6f0.js +10 -0
  52. package/dist/es/DataSearch-a5aaa29e.js +2168 -0
  53. package/dist/es/DataSearch.js +17 -2150
  54. package/dist/es/{DropDown-5dbd69c2.js → DropDown-7639f223.js} +79 -94
  55. package/dist/es/DynamicRangeSlider.js +107 -43
  56. package/dist/es/Flex-aac91505.js +47 -0
  57. package/dist/es/FormControlList-fe389a2e.js +40 -0
  58. package/dist/es/Input-d1bb4868.js +71 -0
  59. package/dist/es/ListItem-bdb6d53d.js +39 -0
  60. package/dist/es/MultiDropdownList.js +102 -68
  61. package/dist/es/MultiList.js +80 -50
  62. package/dist/es/MultiRange.js +21 -16
  63. package/dist/es/{Pagination-800af44f.js → Pagination-3c50d4ba.js} +4 -3
  64. package/dist/es/RangeInput.js +29 -45
  65. package/dist/es/RangeSlider.js +32 -30
  66. package/dist/es/ReactiveBase.js +87 -56
  67. package/dist/es/ReactiveComponent.js +75 -62
  68. package/dist/es/ReactiveGoogleMap.js +326 -235
  69. package/dist/es/ReactiveList.js +189 -241
  70. package/dist/es/ResultCard.js +8 -6
  71. package/dist/es/ResultList.js +8 -6
  72. package/dist/es/SelectedFilters.js +27 -12
  73. package/dist/es/SingleDropdownList.js +88 -60
  74. package/dist/es/SingleList.js +53 -35
  75. package/dist/es/SingleRange.js +18 -13
  76. package/dist/es/StateProvider.js +11 -7
  77. package/dist/es/Title-579f8d6c.js +10 -0
  78. package/dist/es/ToggleButton.js +35 -16
  79. package/dist/es/{_rollupPluginBabelHelpers-c9fbe19f.js → _rollupPluginBabelHelpers-ecf6c03c.js} +11 -1
  80. package/dist/es/{index-1fe91a0a.js → index-5daa8276.js} +84 -14
  81. package/dist/es/index.js +26 -22
  82. package/dist/es/initReactivesearch.js +178 -104
  83. package/dist/es/install-d1a27419.js +1240 -0
  84. package/dist/es/install.js +39 -46
  85. package/dist/es/ssr-e3196de1.js +33 -0
  86. package/dist/es/{utils-ce3d86fd.js → utils-3a32e13f.js} +2 -2
  87. package/dist/es/version.js +1 -1
  88. package/dist/es/{vueTypes-98d938a9.js → vueTypes-9326e0be.js} +9 -4
  89. package/package.json +6 -4
  90. package/dist/cjs/Button-78d8bc26.js +0 -146
  91. package/dist/cjs/Card-b4af314f.js +0 -58
  92. package/dist/cjs/Flex-737c55be.js +0 -160
  93. package/dist/cjs/FormControlList-08dfb28e.js +0 -105
  94. package/dist/cjs/Input-643d02a7.js +0 -178
  95. package/dist/cjs/ListItem-0c58c5d2.js +0 -84
  96. package/dist/cjs/ssr-b7a729f9.js +0 -47
  97. package/dist/es/Button-6c71c66e.js +0 -137
  98. package/dist/es/Card-ecf70ba1.js +0 -51
  99. package/dist/es/Container-f5efec9e.js +0 -18
  100. package/dist/es/Flex-40a74d8a.js +0 -155
  101. package/dist/es/FormControlList-b96aebef.js +0 -98
  102. package/dist/es/Input-dfd9dd40.js +0 -170
  103. package/dist/es/ListItem-da73bc7d.js +0 -77
  104. package/dist/es/Title-22c2f3bf.js +0 -18
  105. package/dist/es/ssr-2f57791d.js +0 -41
@@ -1,25 +1,25 @@
1
1
  import { Actions, helper } from '@appbaseio/reactivecore';
2
- import { a as _extends, b as _objectWithoutPropertiesLoose, d as _inheritsLoose, _ as _taggedTemplateLiteralLoose, c as _toPropertyKey } from './_rollupPluginBabelHelpers-c9fbe19f.js';
2
+ import { a as _extends, d as _inheritsLoose, _ as _taggedTemplateLiteralLoose, b as _objectWithoutPropertiesLoose, c as _toPropertyKey } from './_rollupPluginBabelHelpers-ecf6c03c.js';
3
3
  import VueTypes from 'vue-types';
4
4
  import { componentTypes } from '@appbaseio/reactivecore/lib/utils/constants';
5
5
  import 'emotion';
6
6
  import styled, { css } from '@appbaseio/vue-emotion';
7
7
  import 'polished';
8
- import './Button-6c71c66e.js';
9
- import { t as types } from './vueTypes-98d938a9.js';
10
- import { P as Pagination } from './Pagination-800af44f.js';
8
+ import './Button-8b211174.js';
9
+ import { t as types } from './vueTypes-9326e0be.js';
10
+ import { P as Pagination } from './Pagination-3c50d4ba.js';
11
11
  import '@appbaseio/reactivecore/lib/utils/transform';
12
12
  import 'redux';
13
- import { h as hasCustomRenderer, i as isQueryIdentical, g as getComponent, a as isFunction, c as connect } from './index-1fe91a0a.js';
14
- import { C as ComponentWrapper } from './ComponentWrapper-d0b21b95.js';
13
+ import { h as hasCustomRenderer, i as isQueryIdentical, g as getComponent, a as isFunction, c as connect } from './index-5daa8276.js';
14
+ import { C as ComponentWrapper } from './ComponentWrapper-bbb717bc.js';
15
15
  import _mergeJSXProps from '@vue/babel-helper-vue-jsx-merge-props';
16
- import { C as Checkbox } from './FormControlList-b96aebef.js';
16
+ import { C as Checkbox } from './FormControlList-fe389a2e.js';
17
17
  import * as GmapMapFull from 'gmap-vue';
18
18
  import Map from 'gmap-vue/dist/components-implementation/map';
19
19
  import geohash from 'ngeohash';
20
20
  import GmapCluster from 'gmap-vue/dist/components/cluster';
21
- import Marker from 'gmap-vue/dist/components/marker';
22
21
  import InfoWindow from 'gmap-vue/dist/components-implementation/info-window';
22
+ import Marker from 'gmap-vue/dist/components/marker';
23
23
  import MapElementMixin from 'gmap-vue/dist/mixins/map-element';
24
24
 
25
25
  var setStreaming = Actions.setStreaming,
@@ -68,7 +68,7 @@ function withDistinctLat(loc, count) {
68
68
 
69
69
  var suffix = 1 / Math.pow(10, noiseFactor) * count;
70
70
 
71
- var location = _extends(_extends({}, loc), {}, {
71
+ var location = _extends({}, loc, {
72
72
  lat: parseFloat((loc.lat + suffix).toFixed(length))
73
73
  });
74
74
 
@@ -120,14 +120,13 @@ var ReactiveMap = {
120
120
  react: types.react,
121
121
  size: types.number,
122
122
  sortBy: types.sortBy,
123
- URLParams: types.bool,
124
- autoCenter: types.bool,
123
+ URLParams: VueTypes.bool,
124
+ autoCenter: VueTypes.bool,
125
125
  getMapRef: VueTypes.func.isRequired,
126
126
  center: types.location,
127
127
  defaultCenter: types.location,
128
128
  defaultPin: types.string,
129
129
  defaultZoom: VueTypes.number.def(13),
130
- markerProps: types.props,
131
130
  defaultQuery: types.func,
132
131
  innerClass: types.style,
133
132
  loader: types.title,
@@ -136,19 +135,19 @@ var ReactiveMap = {
136
135
  renderError: types.title,
137
136
  pages: VueTypes.number.def(5),
138
137
  currentPage: VueTypes.number.def(0),
139
- pagination: types.bool,
140
- showMarkers: types.bool,
141
- defaultSearchAsMove: types.bool,
142
- showSearchAsMove: types.bool,
138
+ pagination: VueTypes.bool,
139
+ showMarkers: VueTypes.bool,
140
+ defaultSearchAsMove: VueTypes.bool,
141
+ showSearchAsMove: VueTypes.bool,
143
142
  defaultRadius: types.number,
144
143
  unit: types.string,
145
- autoClosePopover: types.bool,
144
+ autoClosePopover: VueTypes.bool,
146
145
  renderMap: VueTypes.func.isRequired,
147
146
  renderPopover: VueTypes.func,
148
- onDragEnd: types.func,
149
- onZoomChanged: types.func,
150
- onIdle: types.func
147
+ calculateMarkers: VueTypes.func,
148
+ searchAsMoveLabel: VueTypes.string.def('Search as I move the map')
151
149
  },
150
+ preserveCenter: false,
152
151
  data: function data() {
153
152
  var props = this.$props;
154
153
  var currentPageState = 0;
@@ -162,8 +161,8 @@ var ReactiveMap = {
162
161
  zoom: props.defaultZoom,
163
162
  searchAsMove: props.defaultSearchAsMove,
164
163
  currentPageState: currentPageState,
165
- preserveCenter: false,
166
- mapBoxBounds: null
164
+ mapBoxBounds: null,
165
+ markersData: null
167
166
  };
168
167
  return this.__state;
169
168
  },
@@ -175,7 +174,7 @@ var ReactiveMap = {
175
174
  var _this$getAllData = this.getAllData(),
176
175
  resultsToRender = _this$getAllData.resultsToRender;
177
176
 
178
- return _extends(_extends({}, getResultStats(this)), {}, {
177
+ return _extends({}, getResultStats(this), {
179
178
  currentPage: this.currentPageState,
180
179
  displayedResults: resultsToRender.length
181
180
  });
@@ -210,16 +209,19 @@ var ReactiveMap = {
210
209
  var queryOptions = getOptionsFromQuery(this.$defaultQuery);
211
210
 
212
211
  if (queryOptions) {
213
- options = _extends(_extends({}, options), getOptionsFromQuery(this.$defaultQuery));
212
+ options = _extends({}, options, getOptionsFromQuery(this.$defaultQuery));
214
213
  } // Update calculated default query in store
215
214
 
216
215
 
217
- this.setQueryOptions(this.$props.componentId, options, !query);
216
+ this.setQueryOptions(this.$props.componentId, options, false);
218
217
  var persistMapQuery = true;
219
218
  var forceExecute = true; // Update default query to include the geo bounding box query
220
219
 
221
220
  this.setDefaultQueryForRSAPI();
222
- this.props.setMapData(this.componentId, query, persistMapQuery, forceExecute);
221
+ var meta = {
222
+ mapBoxBounds: this.mapBoxBounds
223
+ };
224
+ this.setMapData(this.componentId, query, persistMapQuery, forceExecute, meta);
223
225
  this.currentPageState = 0;
224
226
  this.from = 0;
225
227
  }
@@ -250,7 +252,45 @@ var ReactiveMap = {
250
252
  }
251
253
  },
252
254
  rawData: function rawData(newVal, oldVal) {
255
+ var _this = this;
256
+
253
257
  if (!isEqual(newVal, oldVal)) {
258
+ var promotedResults = this.promotedResults,
259
+ hits = this.hits;
260
+ var results = parseHits(hits) || [];
261
+ var parsedPromotedResults = parseHits(promotedResults) || [];
262
+ var filteredResults = results;
263
+
264
+ if (parsedPromotedResults.length) {
265
+ var ids = parsedPromotedResults.map(function (item) {
266
+ return item._id;
267
+ }).filter(Boolean);
268
+
269
+ if (ids) {
270
+ filteredResults = filteredResults.filter(function (item) {
271
+ return !ids.includes(item._id);
272
+ });
273
+ }
274
+
275
+ filteredResults = [].concat(parsedPromotedResults, filteredResults);
276
+ }
277
+
278
+ filteredResults = filteredResults.filter(function (item) {
279
+ return !!item[_this.dataField];
280
+ }).map(function (item) {
281
+ var _extends2;
282
+
283
+ return _extends({}, item, (_extends2 = {}, _extends2[_this.dataField] = getLocationObject(item[_this.dataField]), _extends2));
284
+ });
285
+ this.filteredResults = this.addNoise(filteredResults);
286
+
287
+ if (this.calculateMarkers) {
288
+ this.markersData = this.calculateMarkers({
289
+ data: this.filteredResults,
290
+ rawData: this.rawData
291
+ }) || [];
292
+ }
293
+
254
294
  this.$emit('data', this.getData());
255
295
  }
256
296
  },
@@ -288,18 +328,18 @@ var ReactiveMap = {
288
328
  return this.parseLocation(MAP_CENTER);
289
329
  },
290
330
  addNoise: function addNoise(hits) {
291
- var _this = this;
331
+ var _this2 = this;
292
332
 
293
333
  var hitMap = {};
294
334
  var updatedHits = [];
295
335
  hits.forEach(function (item) {
296
336
  var updatedItem = _extends({}, item);
297
337
 
298
- var location = _this.parseLocation(item[_this.dataField]);
338
+ var location = _this2.parseLocation(item[_this2.dataField]);
299
339
 
300
340
  var key = JSON.stringify(location);
301
341
  var count = hitMap[key] || 0;
302
- updatedItem[_this.dataField] = count ? withDistinctLat(location, count) : location;
342
+ updatedItem[_this2.dataField] = count ? withDistinctLat(location, count) : location;
303
343
  updatedHits = [].concat(updatedHits, [updatedItem]);
304
344
  hitMap[key] = count + 1;
305
345
  });
@@ -313,10 +353,10 @@ var ReactiveMap = {
313
353
  return null;
314
354
  },
315
355
  getHitsCenter: function getHitsCenter(hits) {
316
- var _this2 = this;
356
+ var _this3 = this;
317
357
 
318
358
  var data = hits.map(function (hit) {
319
- return hit[_this2.dataField];
359
+ return hit[_this3.dataField];
320
360
  });
321
361
 
322
362
  if (data.length) {
@@ -357,7 +397,7 @@ var ReactiveMap = {
357
397
  return false;
358
398
  },
359
399
  getCenter: function getCenter(hits) {
360
- var _this3 = this;
400
+ var _this4 = this;
361
401
 
362
402
  if (this.center) {
363
403
  return this.parseLocation(this.center);
@@ -365,10 +405,10 @@ var ReactiveMap = {
365
405
 
366
406
  var mapRef = this.getMapRef();
367
407
 
368
- if (mapRef && typeof mapRef.getCenter === 'function' && this.preserveCenter) {
408
+ if (mapRef && typeof mapRef.getCenter === 'function' && this.$options.preserveCenter) {
369
409
  var currentCenter = mapRef.getCenter();
370
410
  setTimeout(function () {
371
- _this3.preserveCenter = false;
411
+ _this4.$options.preserveCenter = false;
372
412
  }, 100);
373
413
  return this.parseLocation({
374
414
  lat: currentCenter.lat(),
@@ -388,27 +428,31 @@ var ReactiveMap = {
388
428
  },
389
429
  handleZoomChange: function handleZoomChange(zoom) {
390
430
  if (zoom) {
431
+ var prevZoom = this.zoom;
432
+
391
433
  if (this.searchAsMove) {
392
434
  this.zoom = zoom;
393
- this.preserveCenter = true;
435
+ this.$options.preserveCenter = true;
394
436
  this.setGeoQuery(true);
395
437
  } else {
396
438
  this.zoom = zoom;
397
439
  }
398
440
 
399
- if (this.onZoomChanged) this.onZoomChanged(zoom);
441
+ if (prevZoom !== zoom) {
442
+ this.$emit('zoom-changed', zoom);
443
+ }
400
444
  }
401
445
  },
402
446
  handleOnDragEnd: function handleOnDragEnd() {
403
447
  if (this.searchAsMove) {
404
- this.preserveCenter = true;
448
+ this.$options.preserveCenter = true;
405
449
  this.setGeoQuery(true);
406
450
  }
407
451
 
408
- if (this.onDragEnd) this.onDragEnd();
452
+ this.$emit('drag-end');
409
453
  },
410
454
  handlePreserveCenter: function handlePreserveCenter(preserveCenter) {
411
- this.preserveCenter = preserveCenter;
455
+ this.$options.preserveCenter = preserveCenter;
412
456
  },
413
457
  handleOnIdle: function handleOnIdle() {
414
458
  // only make the geo_bounding query if we have hits data
@@ -419,7 +463,7 @@ var ReactiveMap = {
419
463
  this.setGeoQuery(executeUpdate);
420
464
  }
421
465
 
422
- if (this.onIdle) this.onIdle();
466
+ this.$emit('idle');
423
467
  },
424
468
  setGeoQuery: function setGeoQuery(executeUpdate) {
425
469
  if (executeUpdate === void 0) {
@@ -448,7 +492,6 @@ var ReactiveMap = {
448
492
  defaultPin = this.defaultPin,
449
493
  renderPopover = this.renderPopover,
450
494
  autoClosePopover = this.autoClosePopover,
451
- markerProps = this.markerProps,
452
495
  renderItem = this.renderItem;
453
496
  return {
454
497
  resultsToRender: data,
@@ -461,17 +504,14 @@ var ReactiveMap = {
461
504
  renderPopover: renderPopover,
462
505
  autoClosePopover: autoClosePopover,
463
506
  renderSearchAsMove: this.renderSearchAsMove,
464
- markerProps: markerProps,
465
507
  handlePreserveCenter: this.handlePreserveCenter,
466
- preserveCenter: this.preserveCenter,
508
+ preserveCenter: this.$options.preserveCenter,
467
509
  handleOnDragEnd: this.handleOnDragEnd,
468
510
  handleOnIdle: this.handleOnIdle,
469
511
  handleZoomChange: this.handleZoomChange
470
512
  };
471
513
  },
472
514
  getAllData: function getAllData() {
473
- var _this4 = this;
474
-
475
515
  var size = this.size,
476
516
  promotedResults = this.promotedResults,
477
517
  customData = this.customData,
@@ -479,31 +519,13 @@ var ReactiveMap = {
479
519
  hits = this.hits;
480
520
  var results = parseHits(hits) || [];
481
521
  var parsedPromotedResults = parseHits(promotedResults) || [];
482
- var filteredResults = results;
483
522
  var base = currentPage * size;
523
+ var resultsToRender = this.filteredResults || [];
484
524
 
485
- if (parsedPromotedResults.length) {
486
- var ids = parsedPromotedResults.map(function (item) {
487
- return item._id;
488
- }).filter(Boolean);
489
-
490
- if (ids) {
491
- filteredResults = filteredResults.filter(function (item) {
492
- return !ids.includes(item._id);
493
- });
494
- }
495
-
496
- filteredResults = [].concat(parsedPromotedResults, filteredResults);
525
+ if (this.markersData) {
526
+ resultsToRender = this.markersData;
497
527
  }
498
528
 
499
- filteredResults = filteredResults.filter(function (item) {
500
- return !!item[_this4.dataField];
501
- }).map(function (item) {
502
- var _extends2;
503
-
504
- return _extends(_extends({}, item), {}, (_extends2 = {}, _extends2[_this4.dataField] = getLocationObject(item[_this4.dataField]), _extends2));
505
- });
506
- var resultsToRender = this.addNoise(filteredResults);
507
529
  return {
508
530
  results: results,
509
531
  resultsToRender: resultsToRender,
@@ -554,7 +576,7 @@ var ReactiveMap = {
554
576
  options.from = this.$data.from;
555
577
  this.from = value;
556
578
  this.currentPageState = page;
557
- this.loadMoreAction(this.componentId, _extends(_extends({}, options), {}, {
579
+ this.loadMoreAction(this.componentId, _extends({}, options, {
558
580
  from: value
559
581
  }), false);
560
582
 
@@ -566,29 +588,6 @@ var ReactiveMap = {
566
588
  setDefaultQueryForRSAPI: function setDefaultQueryForRSAPI() {
567
589
  if (this.defaultQuery && typeof this.defaultQuery === 'function') {
568
590
  var defaultQuery = this.defaultQuery();
569
-
570
- if (this.mapBoxBounds) {
571
- var _geo_bounding_box;
572
-
573
- var geoQuery = {
574
- geo_bounding_box: (_geo_bounding_box = {}, _geo_bounding_box[this.dataField] = this.mapBoxBounds, _geo_bounding_box)
575
- };
576
-
577
- var _defaultQuery = defaultQuery,
578
- query = _defaultQuery.query,
579
- options = _objectWithoutPropertiesLoose(_defaultQuery, ["query"]);
580
-
581
- if (query) {
582
- // adds defaultQuery's query to geo-query
583
- // to generate a map query
584
- defaultQuery = _extends({
585
- query: {
586
- must: [geoQuery, query]
587
- }
588
- }, options);
589
- }
590
- }
591
-
592
591
  this.setDefaultQuery(this.componentId, defaultQuery);
593
592
  }
594
593
  },
@@ -612,7 +611,7 @@ var ReactiveMap = {
612
611
  var west;
613
612
 
614
613
  if (mapBounds) {
615
- var _geo_bounding_box2;
614
+ var _geo_bounding_box;
616
615
 
617
616
  north = mapBounds.getNorthEast().lat();
618
617
  south = mapBounds.getSouthWest().lat();
@@ -624,7 +623,7 @@ var ReactiveMap = {
624
623
  };
625
624
  this.mapBoxBounds = boundingBoxCoordinates;
626
625
  var geoQuery = {
627
- geo_bounding_box: (_geo_bounding_box2 = {}, _geo_bounding_box2[this.dataField] = boundingBoxCoordinates, _geo_bounding_box2)
626
+ geo_bounding_box: (_geo_bounding_box = {}, _geo_bounding_box[this.dataField] = boundingBoxCoordinates, _geo_bounding_box)
628
627
  };
629
628
 
630
629
  if (this.$defaultQuery) {
@@ -667,7 +666,7 @@ var ReactiveMap = {
667
666
  var value = this.from + this.size;
668
667
  var options = getQueryOptions(this.$props);
669
668
  this.from = value;
670
- this.loadMoreAction(this.componentId, _extends(_extends({}, options), {}, {
669
+ this.loadMoreAction(this.componentId, _extends({}, options, {
671
670
  from: value
672
671
  }), true);
673
672
  }
@@ -695,13 +694,14 @@ var ReactiveMap = {
695
694
  base = _this$getAllData3.base;
696
695
 
697
696
  return results.map(function (result, index) {
698
- return _extends(_extends({}, result), {}, {
697
+ return _extends({}, result, {
699
698
  _click_id: base + index
700
699
  });
701
700
  });
702
701
  },
703
702
  toggleSearchAsMove: function toggleSearchAsMove() {
704
703
  this.searchAsMove = !this.searchAsMove;
704
+ this.$emit('search-as-move', this.searchAsMove);
705
705
  },
706
706
  renderErrorComponent: function renderErrorComponent() {
707
707
  var renderError = this.$scopedSlots.renderError || this.$props.renderError;
@@ -747,7 +747,7 @@ var ReactiveMap = {
747
747
  "className": getClassName(this.innerClass, 'label') || null,
748
748
  "for": this.$props.componentId + "-searchasmove"
749
749
  }
750
- }, ["Search as I move the map"])]);
750
+ }, [this.searchAsMoveLabel])]);
751
751
  }
752
752
 
753
753
  return null;
@@ -801,7 +801,7 @@ var ReactiveMap = {
801
801
 
802
802
  if (this.$props.defaultQuery) {
803
803
  this.$defaultQuery = this.$props.defaultQuery();
804
- options = _extends(_extends({}, options), getOptionsFromQuery(this.$defaultQuery)); // Override sort query with defaultQuery's sort if defined
804
+ options = _extends({}, options, getOptionsFromQuery(this.$defaultQuery)); // Override sort query with defaultQuery's sort if defined
805
805
 
806
806
  if (this.$defaultQuery.sort) {
807
807
  options.sort = this.$defaultQuery.sort;
@@ -815,7 +815,10 @@ var ReactiveMap = {
815
815
  var forceExecute = false; // Update default query for RS API
816
816
 
817
817
  this.setDefaultQueryForRSAPI();
818
- this.setMapData(this.componentId, this.$defaultQuery.query, persistMapQuery, forceExecute);
818
+ var meta = {
819
+ mapBoxBounds: this.mapBoxBounds
820
+ };
821
+ this.setMapData(this.componentId, this.$defaultQuery.query, persistMapQuery, forceExecute, meta);
819
822
  } else {
820
823
  // only apply geo-distance when defaultQuery prop is not set
821
824
  var query = this.getGeoDistanceQuery();
@@ -835,11 +838,11 @@ var ReactiveMap = {
835
838
 
836
839
  var center = this.center || this.defaultCenter;
837
840
  var coordinatesObject = this.getArrPosition(center);
838
- var meta = {
841
+ var _meta = {
839
842
  distance: this.defaultRadius,
840
843
  coordinates: coordinatesObject.lat + ", " + coordinatesObject.lon
841
844
  };
842
- this.setMapData(this.componentId, query, _persistMapQuery, _forceExecute, meta);
845
+ this.setMapData(this.componentId, query, _persistMapQuery, _forceExecute, _meta);
843
846
  }
844
847
  }
845
848
 
@@ -849,7 +852,7 @@ var ReactiveMap = {
849
852
  var h = arguments[0];
850
853
  var loader = this.$scopedSlots.loader || this.$props.loader;
851
854
  return h("div", {
852
- "style": _extends(_extends({}, style), this.$props.style),
855
+ "style": _extends({}, style, this.$props.style),
853
856
  "class": this.$props.className
854
857
  }, [this.renderErrorComponent(), this.isLoading && loader, this.hasCustomRender ? this.getComponent() : null, this.renderMap(this.getMapParams()), this.pagination ? this.renderPagination() : null]);
855
858
  }
@@ -893,9 +896,46 @@ ReactiveMap.install = function (Vue) {
893
896
 
894
897
  ReactiveMap.componentType = componentTypes.reactiveMap;
895
898
 
899
+ var InfoWindowWrapper = {
900
+ name: 'InfoWindowWrapper',
901
+ props: {
902
+ id: VueTypes.string,
903
+ renderPopover: VueTypes.func,
904
+ infoWindowProps: VueTypes.object,
905
+ events: VueTypes.object
906
+ },
907
+ data: function data() {
908
+ return {
909
+ infoWindowRef: null
910
+ };
911
+ },
912
+ mounted: function mounted() {
913
+ this.infoWindowRef = this.$refs[this.id + "-Info-Window"];
914
+ },
915
+ methods: {
916
+ handleClose: function handleClose() {
917
+ this.infoWindowRef.$infoWindowObject.close();
918
+ }
919
+ },
920
+ render: function render() {
921
+ var h = arguments[0];
922
+ var renderPopover = this.renderPopover,
923
+ events = this.events;
924
+ return h(InfoWindow, {
925
+ "ref": this.id + "-Info-Window",
926
+ "props": _extends({}, this.infoWindowProps),
927
+ "on": _extends({}, events)
928
+ }, [h("div", [renderPopover(this.handleClose)])]);
929
+ }
930
+ };
931
+
896
932
  var MarkerWithLabel = {
897
933
  name: 'MarkerWithLabel',
898
934
  props: {
935
+ metaData: {
936
+ type: Object,
937
+ "default": undefined
938
+ },
899
939
  marker: {
900
940
  type: Object,
901
941
  "default": undefined
@@ -995,6 +1035,7 @@ var MarkerWithLabel = {
995
1035
  var _this3;
996
1036
 
997
1037
  _this3 = _window$google$maps$O.call(this) || this;
1038
+ _this3.metaData = self.metaData;
998
1039
 
999
1040
  _this3.setMap(map2);
1000
1041
 
@@ -1160,47 +1201,17 @@ var MarkerWithLabel = {
1160
1201
  },
1161
1202
  "on": {
1162
1203
  "mouseover": this.handleMouseOver,
1163
- "focus": this.handleFocus,
1164
1204
  "mouseout": this.handleMouseOut,
1165
- "blur": this.handleBlur,
1166
1205
  "click": this.handleClick
1167
1206
  }
1168
1207
  }, [this.renderMarker()]);
1169
1208
  }
1170
1209
  };
1171
1210
 
1172
- function _templateObject3() {
1173
- var data = _taggedTemplateLiteralLoose(["\n\t&:hover,\n\t&:focus {\n\t\tz-index: 200;\n\t}\n"]);
1174
-
1175
- _templateObject3 = function _templateObject3() {
1176
- return data;
1177
- };
1178
-
1179
- return data;
1180
- }
1181
-
1182
- function _templateObject2() {
1183
- var data = _taggedTemplateLiteralLoose(["\n\tborder-color: rgba(0, 0, 0, 0.2);\n\tborder-style: solid;\n\tborder-width: 0 1px 1px 0;\n\tmargin-left: -6px;\n\tbackground-color: #fff;\n\tmargin-top: -6px;\n\twidth: 12px;\n\theight: 12px;\n\t-webkit-transform: rotate(45deg);\n\t-ms-transform: rotate(45deg);\n\ttransform: rotate(45deg);\n"]);
1184
-
1185
- _templateObject2 = function _templateObject2() {
1186
- return data;
1187
- };
1188
-
1189
- return data;
1190
- }
1191
-
1192
- function _templateObject() {
1193
- var data = _taggedTemplateLiteralLoose(["\n\theight: 24px;\n\twidth: auto;\n\tbackground-color: #fff;\n\tborder-radius: 2px;\n\tcolor: #222;\n\tbox-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.15);\n\tpadding: 3px 6px;\n\tfont-size: 15px;\n"]);
1194
-
1195
- _templateObject = function _templateObject() {
1196
- return data;
1197
- };
1198
-
1199
- return data;
1200
- }
1201
- var MapPin = styled('div')(_templateObject());
1202
- var MapPinArrow = styled('div')(_templateObject2());
1203
- var mapPinWrapper = css(_templateObject3());
1211
+ var _templateObject, _templateObject2, _templateObject3;
1212
+ var MapPin = styled('div')(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n\theight: 24px;\n\twidth: auto;\n\tbackground-color: #fff;\n\tborder-radius: 2px;\n\tcolor: #222;\n\tbox-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.15);\n\tpadding: 3px 6px;\n\tfont-size: 15px;\n"])));
1213
+ var MapPinArrow = styled('div')(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n\tborder-color: rgba(0, 0, 0, 0.2);\n\tborder-style: solid;\n\tborder-width: 0 1px 1px 0;\n\tmargin-left: -6px;\n\tbackground-color: #fff;\n\tmargin-top: -6px;\n\twidth: 12px;\n\theight: 12px;\n\t-webkit-transform: rotate(45deg);\n\t-ms-transform: rotate(45deg);\n\ttransform: rotate(45deg);\n"])));
1214
+ var mapPinWrapper = css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n\t&:hover,\n\t&:focus {\n\t\tz-index: 200;\n\t}\n"])));
1204
1215
 
1205
1216
  var recordResultClick$1 = Actions.recordResultClick;
1206
1217
  var GoogleMapMarker = {
@@ -1209,54 +1220,63 @@ var GoogleMapMarker = {
1209
1220
  index: VueTypes.number,
1210
1221
  marker: VueTypes.object.isRequired,
1211
1222
  getPosition: VueTypes.func.isRequired,
1212
- markerOnTop: VueTypes.string,
1213
1223
  defaultPin: VueTypes.string,
1214
1224
  renderItem: VueTypes.func,
1215
- setMarkerOnTop: VueTypes.func.isRequired,
1216
1225
  setOpenMarkers: VueTypes.func.isRequired,
1217
1226
  handlePreserveCenter: VueTypes.func.isRequired,
1218
1227
  autoClosePopover: VueTypes.bool,
1219
1228
  openMarkers: VueTypes.object,
1220
- renderPopover: VueTypes.func
1229
+ renderPopover: VueTypes.func,
1230
+ highlightMarkerOnHover: VueTypes.bool
1231
+ },
1232
+ data: function data() {
1233
+ return {
1234
+ zIndex: 0,
1235
+ markerIcon: null
1236
+ };
1221
1237
  },
1222
1238
  methods: {
1223
1239
  increaseMarkerZIndex: function increaseMarkerZIndex() {
1224
- var _this$$props = this.$props,
1225
- handleTopMarker = _this$$props.setMarkerOnTop,
1226
- handlePreserveCenter = _this$$props.handlePreserveCenter,
1227
- marker = _this$$props.marker;
1228
- handleTopMarker(marker._id);
1240
+ var handlePreserveCenter = this.$props.handlePreserveCenter;
1241
+
1242
+ if (this.highlightMarkerOnHover) {
1243
+ this.zIndex += 1;
1244
+ }
1245
+
1229
1246
  handlePreserveCenter(true);
1230
1247
  },
1231
1248
  removeMarkerZIndex: function removeMarkerZIndex() {
1232
- var _this$$props2 = this.$props,
1233
- handleTopMarker = _this$$props2.setMarkerOnTop,
1234
- handlePreserveCenter = _this$$props2.handlePreserveCenter;
1235
- handleTopMarker(null);
1249
+ var handlePreserveCenter = this.$props.handlePreserveCenter;
1250
+
1251
+ if (this.highlightMarkerOnHover) {
1252
+ this.zIndex -= 1;
1253
+ }
1254
+
1236
1255
  handlePreserveCenter(true);
1237
1256
  },
1238
1257
  openMarker: function openMarker() {
1239
1258
  var _ref, _extends2;
1240
1259
 
1241
- var _this$$props3 = this.$props,
1242
- handleOpenMarkers = _this$$props3.setOpenMarkers,
1243
- openMarkers = _this$$props3.openMarkers,
1244
- marker = _this$$props3.marker,
1245
- autoClosePopover = _this$$props3.autoClosePopover,
1246
- handlePreserveCenter = _this$$props3.handlePreserveCenter;
1260
+ var _this$$props = this.$props,
1261
+ handleOpenMarkers = _this$$props.setOpenMarkers,
1262
+ openMarkers = _this$$props.openMarkers,
1263
+ marker = _this$$props.marker,
1264
+ autoClosePopover = _this$$props.autoClosePopover,
1265
+ handlePreserveCenter = _this$$props.handlePreserveCenter;
1247
1266
  var id = marker._id;
1248
- var newOpenMarkers = autoClosePopover ? (_ref = {}, _ref[id] = true, _ref) : _extends(_extends({}, openMarkers), {}, (_extends2 = {}, _extends2[id] = true, _extends2));
1267
+ var newOpenMarkers = autoClosePopover ? (_ref = {}, _ref[id] = true, _ref) : _extends({}, openMarkers, (_extends2 = {}, _extends2[id] = true, _extends2));
1249
1268
  handleOpenMarkers(newOpenMarkers);
1250
1269
  handlePreserveCenter(true);
1251
1270
  this.triggerAnalytics();
1271
+ this.$emit('open-marker-popover', marker);
1252
1272
  },
1253
1273
  closeMarker: function closeMarker() {
1254
- var _this$$props4 = this.$props,
1255
- handleOpenMarkers = _this$$props4.setOpenMarkers,
1256
- marker = _this$$props4.marker,
1257
- autoClosePopover = _this$$props4.autoClosePopover,
1258
- handlePreserveCenter = _this$$props4.handlePreserveCenter,
1259
- openMarkers = _this$$props4.openMarkers;
1274
+ var _this$$props2 = this.$props,
1275
+ handleOpenMarkers = _this$$props2.setOpenMarkers,
1276
+ marker = _this$$props2.marker,
1277
+ autoClosePopover = _this$$props2.autoClosePopover,
1278
+ handlePreserveCenter = _this$$props2.handlePreserveCenter,
1279
+ openMarkers = _this$$props2.openMarkers;
1260
1280
  var id = marker._id;
1261
1281
 
1262
1282
  var del = openMarkers[id],
@@ -1265,6 +1285,7 @@ var GoogleMapMarker = {
1265
1285
  var newOpenMarkers = autoClosePopover ? {} : activeMarkers;
1266
1286
  handleOpenMarkers(newOpenMarkers);
1267
1287
  handlePreserveCenter(true);
1288
+ this.$emit('close-marker-popover', marker);
1268
1289
  },
1269
1290
  triggerAnalytics: function triggerAnalytics() {
1270
1291
  this.recordResultClick(this.index, this.marker._id);
@@ -1278,10 +1299,10 @@ var GoogleMapMarker = {
1278
1299
 
1279
1300
  var h = this.$createElement;
1280
1301
  var additionalProps = {};
1281
- var _this$$props5 = this.$props,
1282
- getPosition = _this$$props5.getPosition,
1283
- renderPopover = _this$$props5.renderPopover,
1284
- openMarkers = _this$$props5.openMarkers;
1302
+ var _this$$props3 = this.$props,
1303
+ getPosition = _this$$props3.getPosition,
1304
+ _renderPopover = _this$$props3.renderPopover,
1305
+ openMarkers = _this$$props3.openMarkers;
1285
1306
 
1286
1307
  if (includeExternalSettings) {
1287
1308
  // to render pop-over correctly with MarkerWithLabel
@@ -1294,19 +1315,32 @@ var GoogleMapMarker = {
1294
1315
  }
1295
1316
 
1296
1317
  if (item._id in openMarkers) {
1297
- return h(InfoWindow, {
1298
- "attrs": {
1299
- "zIndex": 500,
1300
- "position": additionalProps.position,
1301
- "options": additionalProps.defaultOptions
1302
- },
1318
+ return h(InfoWindowWrapper, {
1303
1319
  "key": item._id + "-InfoWindow",
1304
- "on": {
1305
- "closeclick": function closeclick() {
1306
- return _this.closeMarker();
1320
+ "attrs": {
1321
+ "id": item._id,
1322
+ "renderPopover": function renderPopover(_handleClose) {
1323
+ return _renderPopover({
1324
+ item: item,
1325
+ handleClose: function handleClose() {
1326
+ _handleClose();
1327
+
1328
+ _this.closeMarker();
1329
+ }
1330
+ });
1331
+ },
1332
+ "infoWindowProps": {
1333
+ zIndex: 500,
1334
+ position: additionalProps.position,
1335
+ options: additionalProps.defaultOptions
1336
+ },
1337
+ "events": {
1338
+ closeclick: function closeclick() {
1339
+ return _this.closeMarker();
1340
+ }
1307
1341
  }
1308
1342
  }
1309
- }, [h("div", [renderPopover(item)])]);
1343
+ });
1310
1344
  }
1311
1345
 
1312
1346
  return null;
@@ -1316,35 +1350,35 @@ var GoogleMapMarker = {
1316
1350
  var _this2 = this;
1317
1351
 
1318
1352
  var h = arguments[0];
1319
- var _this$$props6 = this.$props,
1320
- getPosition = _this$$props6.getPosition,
1321
- renderItem = _this$$props6.renderItem,
1322
- defaultPin = _this$$props6.defaultPin,
1323
- autoClosePopover = _this$$props6.autoClosePopover,
1324
- handlePreserveCenter = _this$$props6.handlePreserveCenter,
1325
- renderPopover = _this$$props6.renderPopover,
1326
- customMarkerProps = _this$$props6.markerProps,
1327
- marker = _this$$props6.marker,
1328
- markerOnTop = _this$$props6.markerOnTop;
1353
+ var _this$$props4 = this.$props,
1354
+ getPosition = _this$$props4.getPosition,
1355
+ renderItem = _this$$props4.renderItem,
1356
+ defaultPin = _this$$props4.defaultPin,
1357
+ renderPopover = _this$$props4.renderPopover,
1358
+ customMarkerProps = _this$$props4.markerProps,
1359
+ marker = _this$$props4.marker;
1329
1360
  var markerProps = {};
1330
1361
 
1331
- if (markerOnTop === marker._id) {
1332
- markerProps.zIndex = window.google.maps.Marker.MAX_ZINDEX + 1;
1362
+ if (this.zIndex) {
1363
+ markerProps.zIndex = window.google.maps.Marker.MAX_ZINDEX + this.zIndex;
1333
1364
  }
1334
1365
 
1335
1366
  if (renderItem) {
1367
+ marker.setIcon = function (icon) {
1368
+ _this2.markerIcon = icon;
1369
+ };
1370
+
1336
1371
  var data = renderItem(marker);
1337
1372
 
1338
1373
  if ('label' in data) {
1339
1374
  return h(MarkerWithLabel, {
1340
1375
  "key": marker._id,
1341
1376
  "attrs": {
1377
+ "metaData": marker,
1342
1378
  "marker": getPosition(marker),
1343
1379
  "labelAnchor": new window.google.maps.Point(0, 30),
1344
1380
  "handleMouseOver": this.increaseMarkerZIndex,
1345
- "handleFocus": this.increaseMarkerZIndex,
1346
1381
  "handleMouseOut": this.removeMarkerZIndex,
1347
- "handleBlur": this.removeMarkerZIndex,
1348
1382
  "handleClick": this.openMarker,
1349
1383
  "zIndex": markerProps.zIndex,
1350
1384
  "renderMarker": function renderMarker() {
@@ -1365,12 +1399,11 @@ var GoogleMapMarker = {
1365
1399
  return h(MarkerWithLabel, {
1366
1400
  "key": marker._id,
1367
1401
  "attrs": {
1402
+ "metaData": marker,
1368
1403
  "marker": getPosition(marker),
1369
1404
  "handleClick": this.openMarker,
1370
1405
  "handleMouseOver": this.increaseMarkerZIndex,
1371
- "handleFocus": this.increaseMarkerZIndex,
1372
1406
  "handleMouseOut": this.removeMarkerZIndex,
1373
- "handleBlur": this.removeMarkerZIndex,
1374
1407
  "zIndex": markerProps.zIndex,
1375
1408
  "renderMarker": function renderMarker() {
1376
1409
  return h("div", {
@@ -1392,18 +1425,19 @@ var GoogleMapMarker = {
1392
1425
  return h(Marker, {
1393
1426
  "key": marker._id,
1394
1427
  "attrs": {
1395
- "icon": markerProps.icon,
1396
1428
  "zIndex": markerProps.zIndex,
1397
- "position": getPosition(marker)
1429
+ "position": getPosition(marker),
1430
+ "options": {
1431
+ metaData: marker
1432
+ },
1433
+ "icon": this.markerIcon || markerProps.icon
1398
1434
  },
1399
1435
  "on": {
1400
1436
  "click": function click() {
1401
- return _this2.openMarker(marker._id, autoClosePopover || false, handlePreserveCenter);
1437
+ return _this2.openMarker();
1402
1438
  },
1403
1439
  "mouseover": this.increaseMarkerZIndex,
1404
- "focus": this.increaseMarkerZIndex,
1405
- "mouseout": this.removeMarkerZIndex,
1406
- "blur": this.removeMarkerZIndex
1440
+ "mouseout": this.removeMarkerZIndex
1407
1441
  },
1408
1442
  "props": _extends({}, customMarkerProps)
1409
1443
  }, [renderPopover ? this.renderPopoverClick(marker) : null]);
@@ -1422,34 +1456,60 @@ var GoogleMapMarkers = {
1422
1456
  resultsToRender: VueTypes.array,
1423
1457
  getPosition: VueTypes.func,
1424
1458
  renderItem: VueTypes.func,
1459
+ renderClusterPopover: VueTypes.func,
1425
1460
  defaultPin: VueTypes.string,
1426
1461
  autoClosePopover: VueTypes.bool,
1427
1462
  handlePreserveCenter: VueTypes.func,
1428
1463
  renderPopover: VueTypes.func,
1429
1464
  markerProps: VueTypes.object,
1430
- showMarkerClusters: VueTypes.bool
1465
+ clusterProps: VueTypes.object,
1466
+ showMarkerClusters: VueTypes.bool,
1467
+ highlightMarkerOnHover: VueTypes.bool
1431
1468
  },
1432
1469
  data: function data() {
1433
1470
  return {
1434
- markerOnTop: null,
1435
- openMarkers: {}
1471
+ openMarkers: {},
1472
+ clickedCluster: null,
1473
+ clusterMarkers: []
1436
1474
  };
1437
1475
  },
1438
1476
  methods: {
1439
- setMarkerOnTop: function setMarkerOnTop(markerOnTop) {
1440
- this.markerOnTop = markerOnTop;
1441
- },
1442
1477
  setOpenMarkers: function setOpenMarkers(openMarkers) {
1443
1478
  this.openMarkers = openMarkers;
1479
+ },
1480
+ getClusterMarkers: function getClusterMarkers() {
1481
+ if (this.clickedCluster && Array.isArray(this.clickedCluster.getMarkers())) {
1482
+ return this.clickedCluster.getMarkers().map(function (marker) {
1483
+ return marker.metaData;
1484
+ });
1485
+ }
1486
+
1487
+ return [];
1488
+ },
1489
+ getAdditionalProps: function getAdditionalProps() {
1490
+ return {
1491
+ position: {
1492
+ lat: this.clickedCluster.getCenter().lat(),
1493
+ lng: this.clickedCluster.getCenter().lng()
1494
+ },
1495
+ defaultOptions: {
1496
+ pixelOffset: new window.google.maps.Size(0, -30)
1497
+ }
1498
+ };
1499
+ },
1500
+ closeMarker: function closeMarker() {
1501
+ this.clickedCluster = null;
1502
+ this.clusterMarkers = [];
1503
+ this.$emit('close-cluster-popover');
1444
1504
  }
1445
1505
  },
1446
1506
  render: function render() {
1507
+ var _this = this;
1508
+
1447
1509
  var h = arguments[0];
1448
1510
  var resultsToRender = this.$props.resultsToRender;
1449
- var markerOnTop = this.markerOnTop,
1450
- openMarkers = this.openMarkers;
1511
+ var openMarkers = this.openMarkers;
1451
1512
  var markerProps = {
1452
- markerOnTop: markerOnTop,
1453
1513
  openMarkers: openMarkers,
1454
1514
  setMarkerOnTop: this.setMarkerOnTop,
1455
1515
  setOpenMarkers: this.setOpenMarkers,
@@ -1460,19 +1520,55 @@ var GoogleMapMarkers = {
1460
1520
  handlePreserveCenter: this.handlePreserveCenter,
1461
1521
  renderPopover: this.renderPopover,
1462
1522
  markerProps: this.markerProps,
1463
- showMarkerClusters: this.showMarkerClusters
1523
+ showMarkerClusters: this.showMarkerClusters,
1524
+ highlightMarkerOnHover: this.highlightMarkerOnHover
1464
1525
  };
1465
1526
 
1466
1527
  if (this.showMarkerClusters) {
1467
- return h(GmapCluster, [resultsToRender.map(function (marker, index) {
1528
+ return h("div", [h(GmapCluster, {
1529
+ "props": _extends({}, this.clusterProps),
1530
+ "on": {
1531
+ "click": function click(cluster) {
1532
+ _this.clickedCluster = cluster;
1533
+ _this.clusterMarkers = _this.getClusterMarkers();
1534
+
1535
+ _this.$emit('open-cluster-popover', _this.clusterMarkers);
1536
+ }
1537
+ },
1538
+ "ref": "clusterRef"
1539
+ }, [resultsToRender.map(function (marker, index) {
1468
1540
  return h(GoogleMapMarker$1, {
1469
1541
  "attrs": {
1470
1542
  "index": index,
1471
1543
  "marker": marker
1472
1544
  },
1473
- "props": _extends({}, markerProps)
1545
+ "props": _extends({}, markerProps),
1546
+ "on": _extends({}, _this.$listeners)
1474
1547
  });
1475
- })]);
1548
+ })]), this.clickedCluster && this.renderClusterPopover ? h(InfoWindowWrapper, {
1549
+ "attrs": {
1550
+ "id": "cluster",
1551
+ "infoWindowProps": {
1552
+ zIndex: 500,
1553
+ position: this.getAdditionalProps().position,
1554
+ options: this.getAdditionalProps().defaultOptions
1555
+ },
1556
+ "renderPopover": function renderPopover(_handleClose) {
1557
+ return _this.renderClusterPopover({
1558
+ markers: _this.clusterMarkers,
1559
+ cluster: _this.clickedCluster,
1560
+ handleClose: function handleClose() {
1561
+ _handleClose();
1562
+
1563
+ _this.closeMarker();
1564
+ }
1565
+ });
1566
+ },
1567
+ "events": {
1568
+ closeclick: this.closeMarker
1569
+ }
1570
+ }
1571
+ }) : null]);
1476
1572
  }
1477
1573
 
1478
1574
  return h("div", [resultsToRender.map(function (marker, index) {
@@ -1481,7 +1577,8 @@ var GoogleMapMarkers = {
1481
1577
  "index": index,
1482
1578
  "marker": marker
1483
1579
  },
1484
- "props": _extends({}, markerProps)
1580
+ "props": _extends({}, markerProps),
1581
+ "on": _extends({}, _this.$listeners)
1485
1582
  });
1486
1583
  })]);
1487
1584
  }
@@ -1493,19 +1590,22 @@ var ReactiveGoogleMap = {
1493
1590
  className: types.string,
1494
1591
  componentId: types.stringRequired,
1495
1592
  dataField: types.stringRequired,
1593
+ defaultQuery: VueTypes.func,
1496
1594
  loader: types.title,
1497
1595
  defaultZoom: VueTypes.number.def(13),
1498
1596
  react: types.react,
1499
1597
  size: types.number,
1500
1598
  sortBy: types.sortBy,
1501
- URLParams: types.bool,
1599
+ URLParams: VueTypes.bool,
1502
1600
  mapProps: VueTypes.object,
1503
1601
  showMarkers: VueTypes.bool.def(true),
1504
1602
  showMarkerClusters: VueTypes.bool.def(false),
1505
1603
  searchAsMove: VueTypes.bool.def(false),
1506
- markerProps: types.props,
1604
+ searchAsMoveLabel: VueTypes.string,
1605
+ markerProps: VueTypes.object,
1606
+ clusterProps: VueTypes.object,
1507
1607
  renderItem: VueTypes.func,
1508
- showSearchAsMove: types.bool.def(true),
1608
+ showSearchAsMove: VueTypes.bool.def(true),
1509
1609
  autoClosePopover: VueTypes.bool,
1510
1610
  pagination: VueTypes.bool,
1511
1611
  defaultPin: VueTypes.string,
@@ -1514,7 +1614,9 @@ var ReactiveGoogleMap = {
1514
1614
  center: types.location,
1515
1615
  defaultRadius: types.number,
1516
1616
  unit: types.string,
1517
- pages: VueTypes.number.def(5)
1617
+ pages: VueTypes.number.def(5),
1618
+ calculateMarkers: VueTypes.func,
1619
+ highlightMarkerOnHover: VueTypes.bool.def(true)
1518
1620
  },
1519
1621
  methods: {
1520
1622
  renderMap: function renderMap(_ref) {
@@ -1529,9 +1631,7 @@ var ReactiveGoogleMap = {
1529
1631
  renderSearchAsMove = _ref.renderSearchAsMove,
1530
1632
  handlePreserveCenter = _ref.handlePreserveCenter,
1531
1633
  getPosition = _ref.getPosition,
1532
- markerProps = _ref.markerProps,
1533
1634
  autoClosePopover = _ref.autoClosePopover,
1534
- renderPopover = _ref.renderPopover,
1535
1635
  defaultPin = _ref.defaultPin;
1536
1636
  var h = this.$createElement;
1537
1637
  var style = {
@@ -1564,8 +1664,10 @@ var ReactiveGoogleMap = {
1564
1664
  "attrs": {
1565
1665
  "resultsToRender": resultsToRender,
1566
1666
  "getPosition": getPosition,
1567
- "markerProps": markerProps,
1667
+ "markerProps": this.markerProps,
1668
+ "clusterProps": this.clusterProps,
1568
1669
  "handlePreserveCenter": handlePreserveCenter,
1670
+ "highlightMarkerOnHover": this.highlightMarkerOnHover,
1569
1671
  "renderItem": this.$scopedSlots.renderItem ? function () {
1570
1672
  return {
1571
1673
  custom: _this.$scopedSlots.renderItem
@@ -1573,9 +1675,11 @@ var ReactiveGoogleMap = {
1573
1675
  } : this.renderItem,
1574
1676
  "defaultPin": defaultPin,
1575
1677
  "autoClosePopover": autoClosePopover,
1576
- "renderPopover": renderPopover,
1678
+ "renderPopover": this.$scopedSlots.renderPopover,
1679
+ "renderClusterPopover": this.$scopedSlots.renderClusterPopover,
1577
1680
  "showMarkerClusters": this.showMarkerClusters
1578
- }
1681
+ },
1682
+ "on": _extends({}, this.$listeners)
1579
1683
  }) : null]), renderSearchAsMove()]);
1580
1684
  },
1581
1685
  getMapRef: function getMapRef() {
@@ -1592,8 +1696,6 @@ var ReactiveGoogleMap = {
1592
1696
  }
1593
1697
  },
1594
1698
  render: function render() {
1595
- var _this3 = this;
1596
-
1597
1699
  var h = arguments[0];
1598
1700
  return h(RMConnected, _mergeJSXProps([{
1599
1701
  "attrs": {
@@ -1610,31 +1712,20 @@ var ReactiveGoogleMap = {
1610
1712
  "uRLParams": this.URLParams,
1611
1713
  "defaultSearchAsMove": this.searchAsMove,
1612
1714
  "showSearchAsMove": this.showSearchAsMove,
1715
+ "searchAsMoveLabel": this.searchAsMoveLabel,
1613
1716
  "showMarkers": this.showMarkers,
1614
1717
  "markerProps": this.markerProps,
1615
1718
  "autoClosePopover": this.autoClosePopover,
1616
1719
  "defaultPin": this.defaultPin,
1617
- "renderPopover": this.$scopedSlots.renderPopover ? function (item) {
1618
- return _this3.$scopedSlots.renderPopover(item);
1619
- } : null,
1720
+ "defaultQuery": this.defaultQuery,
1620
1721
  "autoCenter": this.autoCenter,
1621
1722
  "defaultCenter": this.defaultCenter,
1622
1723
  "defaultRadius": this.defaultRadius,
1623
1724
  "unit": this.unit,
1624
1725
  "pages": this.pages,
1625
1726
  "center": this.center,
1626
- "loader": this.loader
1627
- },
1628
- "on": {
1629
- "zoomChanged": function zoomChanged(zoom) {
1630
- _this3.$emit('zoom-changed', zoom);
1631
- },
1632
- "idle": function idle() {
1633
- _this3.$emit('idle');
1634
- },
1635
- "dragEnd": function dragEnd() {
1636
- _this3.$emit('drag-end');
1637
- }
1727
+ "loader": this.loader,
1728
+ "calculateMarkers": this.calculateMarkers
1638
1729
  }
1639
1730
  }, {
1640
1731
  scopedSlots: this.$scopedSlots,