instantsearch.js 4.54.0 → 4.55.0

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 (104) hide show
  1. package/cjs/components/Hits/Hits.js +16 -7
  2. package/cjs/components/InfiniteHits/InfiniteHits.js +13 -2
  3. package/cjs/components/Pagination/Pagination.js +35 -17
  4. package/cjs/components/Template/Template.js +6 -3
  5. package/cjs/connectors/autocomplete/connectAutocomplete.js +1 -1
  6. package/cjs/connectors/geo-search/connectGeoSearch.js +1 -1
  7. package/cjs/connectors/hierarchical-menu/connectHierarchicalMenu.js +1 -1
  8. package/cjs/connectors/hits/connectHits.js +1 -1
  9. package/cjs/connectors/infinite-hits/connectInfiniteHits.js +39 -31
  10. package/cjs/connectors/menu/connectMenu.js +1 -1
  11. package/cjs/connectors/numeric-menu/connectNumericMenu.js +1 -1
  12. package/cjs/connectors/rating-menu/connectRatingMenu.js +7 -3
  13. package/cjs/connectors/refinement-list/connectRefinementList.js +1 -1
  14. package/cjs/connectors/toggle-refinement/connectToggleRefinement.js +14 -4
  15. package/cjs/helpers/highlight.js +5 -0
  16. package/cjs/helpers/insights.js +3 -4
  17. package/cjs/helpers/reverseHighlight.js +5 -0
  18. package/cjs/helpers/reverseSnippet.js +5 -0
  19. package/cjs/helpers/snippet.js +5 -0
  20. package/cjs/lib/InstantSearch.js +18 -2
  21. package/cjs/lib/insights/listener.js +43 -36
  22. package/cjs/lib/routers/history.js +1 -0
  23. package/cjs/lib/server.js +60 -0
  24. package/cjs/lib/stateMappings/simple.js +1 -0
  25. package/cjs/lib/stateMappings/singleIndex.js +1 -0
  26. package/cjs/lib/utils/createSendEventForFacet.js +12 -2
  27. package/cjs/lib/utils/createSendEventForHits.js +34 -11
  28. package/cjs/lib/utils/index.js +11 -0
  29. package/cjs/lib/utils/walkIndex.js +18 -0
  30. package/cjs/lib/version.js +1 -1
  31. package/cjs/middlewares/createInsightsMiddleware.js +135 -33
  32. package/cjs/middlewares/createMetadataMiddleware.js +17 -5
  33. package/cjs/middlewares/createRouterMiddleware.js +5 -1
  34. package/cjs/widgets/hits/hits.js +1 -2
  35. package/cjs/widgets/infinite-hits/infinite-hits.js +1 -2
  36. package/cjs/widgets/pagination/pagination.js +51 -39
  37. package/cjs/widgets/panel/panel.js +0 -2
  38. package/dist/instantsearch.development.d.ts +94 -12
  39. package/dist/instantsearch.development.js +543 -312
  40. package/dist/instantsearch.development.js.map +1 -1
  41. package/dist/instantsearch.production.d.ts +94 -12
  42. package/dist/instantsearch.production.min.d.ts +94 -12
  43. package/dist/instantsearch.production.min.js +2 -2
  44. package/dist/instantsearch.production.min.js.map +1 -1
  45. package/es/components/Hits/Hits.d.ts +5 -5
  46. package/es/components/Hits/Hits.js +15 -5
  47. package/es/components/InfiniteHits/InfiniteHits.d.ts +3 -2
  48. package/es/components/InfiniteHits/InfiniteHits.js +13 -2
  49. package/es/components/Pagination/Pagination.js +34 -17
  50. package/es/components/Panel/Panel.d.ts +1 -1
  51. package/es/components/Template/Template.js +6 -3
  52. package/es/connectors/autocomplete/connectAutocomplete.js +1 -1
  53. package/es/connectors/geo-search/connectGeoSearch.js +1 -1
  54. package/es/connectors/hierarchical-menu/connectHierarchicalMenu.js +1 -1
  55. package/es/connectors/hits/connectHits.js +1 -1
  56. package/es/connectors/infinite-hits/connectInfiniteHits.js +39 -31
  57. package/es/connectors/menu/connectMenu.js +1 -1
  58. package/es/connectors/numeric-menu/connectNumericMenu.js +1 -1
  59. package/es/connectors/rating-menu/connectRatingMenu.js +7 -3
  60. package/es/connectors/refinement-list/connectRefinementList.js +1 -1
  61. package/es/connectors/toggle-refinement/connectToggleRefinement.js +13 -3
  62. package/es/helpers/highlight.d.ts +3 -0
  63. package/es/helpers/highlight.js +5 -0
  64. package/es/helpers/insights.d.ts +2 -1
  65. package/es/helpers/insights.js +3 -3
  66. package/es/helpers/reverseHighlight.d.ts +3 -0
  67. package/es/helpers/reverseHighlight.js +5 -0
  68. package/es/helpers/reverseSnippet.d.ts +3 -0
  69. package/es/helpers/reverseSnippet.js +5 -0
  70. package/es/helpers/snippet.d.ts +3 -0
  71. package/es/helpers/snippet.js +5 -0
  72. package/es/lib/InstantSearch.d.ts +11 -1
  73. package/es/lib/InstantSearch.js +18 -2
  74. package/es/lib/insights/listener.d.ts +10 -6
  75. package/es/lib/insights/listener.js +42 -36
  76. package/es/lib/routers/history.d.ts +1 -0
  77. package/es/lib/routers/history.js +1 -0
  78. package/es/lib/server.d.ts +10 -0
  79. package/es/lib/server.js +53 -0
  80. package/es/lib/stateMappings/simple.js +1 -0
  81. package/es/lib/stateMappings/singleIndex.js +1 -0
  82. package/es/lib/utils/createSendEventForFacet.js +12 -2
  83. package/es/lib/utils/createSendEventForHits.d.ts +8 -0
  84. package/es/lib/utils/createSendEventForHits.js +33 -11
  85. package/es/lib/utils/index.d.ts +1 -0
  86. package/es/lib/utils/index.js +1 -0
  87. package/es/lib/utils/walkIndex.d.ts +5 -0
  88. package/es/lib/utils/walkIndex.js +12 -0
  89. package/es/lib/version.d.ts +1 -1
  90. package/es/lib/version.js +1 -1
  91. package/es/middlewares/createInsightsMiddleware.d.ts +12 -12
  92. package/es/middlewares/createInsightsMiddleware.js +136 -34
  93. package/es/middlewares/createMetadataMiddleware.d.ts +3 -1
  94. package/es/middlewares/createMetadataMiddleware.js +17 -5
  95. package/es/middlewares/createRouterMiddleware.js +5 -1
  96. package/es/types/insights.d.ts +19 -1
  97. package/es/types/middleware.d.ts +16 -0
  98. package/es/types/router.d.ts +8 -0
  99. package/es/widgets/hits/hits.js +2 -3
  100. package/es/widgets/infinite-hits/infinite-hits.js +2 -3
  101. package/es/widgets/pagination/pagination.d.ts +12 -5
  102. package/es/widgets/pagination/pagination.js +51 -39
  103. package/es/widgets/panel/panel.js +0 -2
  104. package/package.json +6 -6
@@ -4,9 +4,10 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = void 0;
7
+ exports.default = Hits;
8
8
  var _uiComponentsShared = require("@algolia/ui-components-shared");
9
9
  var _preact = require("preact");
10
+ var _listener = require("../../lib/insights/listener");
10
11
  var _utils = require("../../lib/utils");
11
12
  var _Template = _interopRequireDefault(require("../Template/Template"));
12
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -16,18 +17,24 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
16
17
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
17
18
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
18
19
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
19
- var Hits = function Hits(_ref) {
20
+ function Hits(_ref) {
20
21
  var results = _ref.results,
21
22
  hits = _ref.hits,
23
+ insights = _ref.insights,
22
24
  bindEvent = _ref.bindEvent,
23
25
  sendEvent = _ref.sendEvent,
24
26
  cssClasses = _ref.cssClasses,
25
27
  templateProps = _ref.templateProps;
28
+ var handleInsightsClick = (0, _listener.createInsightsEventHandler)({
29
+ insights: insights,
30
+ sendEvent: sendEvent
31
+ });
26
32
  if (results.hits.length === 0) {
27
33
  return (0, _preact.h)(_Template.default, _extends({}, templateProps, {
28
34
  templateKey: "empty",
29
35
  rootProps: {
30
- className: (0, _uiComponentsShared.cx)(cssClasses.root, cssClasses.emptyRoot)
36
+ className: (0, _uiComponentsShared.cx)(cssClasses.root, cssClasses.emptyRoot),
37
+ onClick: handleInsightsClick
31
38
  },
32
39
  data: results
33
40
  }));
@@ -41,7 +48,11 @@ var Hits = function Hits(_ref) {
41
48
  templateKey: "item",
42
49
  rootTagName: "li",
43
50
  rootProps: {
44
- className: cssClasses.item
51
+ className: cssClasses.item,
52
+ onClick: function onClick(event) {
53
+ handleInsightsClick(event);
54
+ sendEvent('click:internal', hit, 'Hit Clicked');
55
+ }
45
56
  },
46
57
  key: hit.objectID,
47
58
  data: _objectSpread(_objectSpread({}, hit), {}, {
@@ -54,6 +65,4 @@ var Hits = function Hits(_ref) {
54
65
  sendEvent: sendEvent
55
66
  }));
56
67
  })));
57
- };
58
- var _default = Hits;
59
- exports.default = _default;
68
+ }
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _uiComponentsShared = require("@algolia/ui-components-shared");
9
9
  var _preact = require("preact");
10
+ var _listener = require("../../lib/insights/listener");
10
11
  var _utils = require("../../lib/utils");
11
12
  var _Template = _interopRequireDefault(require("../Template/Template"));
12
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -19,6 +20,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
19
20
  var InfiniteHits = function InfiniteHits(_ref) {
20
21
  var results = _ref.results,
21
22
  hits = _ref.hits,
23
+ insights = _ref.insights,
22
24
  bindEvent = _ref.bindEvent,
23
25
  sendEvent = _ref.sendEvent,
24
26
  hasShowPrevious = _ref.hasShowPrevious,
@@ -28,11 +30,16 @@ var InfiniteHits = function InfiniteHits(_ref) {
28
30
  isLastPage = _ref.isLastPage,
29
31
  cssClasses = _ref.cssClasses,
30
32
  templateProps = _ref.templateProps;
33
+ var handleInsightsClick = (0, _listener.createInsightsEventHandler)({
34
+ insights: insights,
35
+ sendEvent: sendEvent
36
+ });
31
37
  if (results.hits.length === 0) {
32
38
  return (0, _preact.h)(_Template.default, _extends({}, templateProps, {
33
39
  templateKey: "empty",
34
40
  rootProps: {
35
- className: (0, _uiComponentsShared.cx)(cssClasses.root, cssClasses.emptyRoot)
41
+ className: (0, _uiComponentsShared.cx)(cssClasses.root, cssClasses.emptyRoot),
42
+ onClick: handleInsightsClick
36
43
  },
37
44
  data: results
38
45
  }));
@@ -54,7 +61,11 @@ var InfiniteHits = function InfiniteHits(_ref) {
54
61
  templateKey: "item",
55
62
  rootTagName: "li",
56
63
  rootProps: {
57
- className: cssClasses.item
64
+ className: cssClasses.item,
65
+ onClick: function onClick(event) {
66
+ handleInsightsClick(event);
67
+ sendEvent('click:internal', hit, 'Hit Clicked');
68
+ }
58
69
  },
59
70
  key: hit.objectID,
60
71
  data: _objectSpread(_objectSpread({}, hit), {}, {
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
  var _uiComponentsShared = require("@algolia/ui-components-shared");
8
8
  var _preact = require("preact");
9
9
  var _utils = require("../../lib/utils");
10
+ var _Template = _interopRequireDefault(require("../Template/Template"));
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
12
  function Pagination(props) {
11
13
  function createClickHandler(pageNumber) {
12
14
  return function (event) {
@@ -27,7 +29,8 @@ function Pagination(props) {
27
29
  ariaLabel: "First",
28
30
  className: props.cssClasses.firstPageItem,
29
31
  isDisabled: props.isFirstPage,
30
- label: props.templates.first,
32
+ templates: props.templates,
33
+ templateKey: "first",
31
34
  pageNumber: 0,
32
35
  createURL: props.createURL,
33
36
  cssClasses: props.cssClasses,
@@ -36,7 +39,8 @@ function Pagination(props) {
36
39
  ariaLabel: "Previous",
37
40
  className: props.cssClasses.previousPageItem,
38
41
  isDisabled: props.isFirstPage,
39
- label: props.templates.previous,
42
+ templates: props.templates,
43
+ templateKey: "previous",
40
44
  pageNumber: props.currentPage - 1,
41
45
  createURL: props.createURL,
42
46
  cssClasses: props.cssClasses,
@@ -47,7 +51,8 @@ function Pagination(props) {
47
51
  ariaLabel: "Page ".concat(pageNumber + 1),
48
52
  className: props.cssClasses.pageItem,
49
53
  isSelected: pageNumber === props.currentPage,
50
- label: "".concat(pageNumber + 1),
54
+ templates: props.templates,
55
+ templateKey: "page",
51
56
  pageNumber: pageNumber,
52
57
  createURL: props.createURL,
53
58
  cssClasses: props.cssClasses,
@@ -57,7 +62,8 @@ function Pagination(props) {
57
62
  ariaLabel: "Next",
58
63
  className: props.cssClasses.nextPageItem,
59
64
  isDisabled: props.isLastPage,
60
- label: props.templates.next,
65
+ templates: props.templates,
66
+ templateKey: "next",
61
67
  pageNumber: props.currentPage + 1,
62
68
  createURL: props.createURL,
63
69
  cssClasses: props.cssClasses,
@@ -66,7 +72,8 @@ function Pagination(props) {
66
72
  ariaLabel: "Last",
67
73
  className: props.cssClasses.lastPageItem,
68
74
  isDisabled: props.isLastPage,
69
- label: props.templates.last,
75
+ templates: props.templates,
76
+ templateKey: "last",
70
77
  pageNumber: props.nbPages - 1,
71
78
  createURL: props.createURL,
72
79
  cssClasses: props.cssClasses,
@@ -74,7 +81,8 @@ function Pagination(props) {
74
81
  })));
75
82
  }
76
83
  function PaginationLink(_ref) {
77
- var label = _ref.label,
84
+ var templates = _ref.templates,
85
+ templateKey = _ref.templateKey,
78
86
  ariaLabel = _ref.ariaLabel,
79
87
  pageNumber = _ref.pageNumber,
80
88
  className = _ref.className,
@@ -87,18 +95,28 @@ function PaginationLink(_ref) {
87
95
  createClickHandler = _ref.createClickHandler;
88
96
  return (0, _preact.h)("li", {
89
97
  className: (0, _uiComponentsShared.cx)(cssClasses.item, className, isDisabled && cssClasses.disabledItem, isSelected && cssClasses.selectedItem)
90
- }, isDisabled ? (0, _preact.h)("span", {
91
- className: cssClasses.link,
92
- dangerouslySetInnerHTML: {
93
- __html: label
98
+ }, isDisabled ? (0, _preact.h)(_Template.default, {
99
+ rootTagName: "span",
100
+ rootProps: {
101
+ className: cssClasses.link
102
+ },
103
+ templateKey: templateKey,
104
+ templates: templates,
105
+ data: {
106
+ page: pageNumber + 1
94
107
  }
95
- }) : (0, _preact.h)("a", {
96
- className: cssClasses.link,
97
- "aria-label": ariaLabel,
98
- href: createURL(pageNumber),
99
- onClick: createClickHandler(pageNumber),
100
- dangerouslySetInnerHTML: {
101
- __html: label
108
+ }) : (0, _preact.h)(_Template.default, {
109
+ rootTagName: "a",
110
+ rootProps: {
111
+ className: cssClasses.link,
112
+ 'aria-label': ariaLabel,
113
+ href: createURL(pageNumber),
114
+ onClick: createClickHandler(pageNumber)
115
+ },
116
+ templateKey: templateKey,
117
+ templates: templates,
118
+ data: {
119
+ page: pageNumber + 1
102
120
  }
103
121
  }));
104
122
  }
@@ -46,9 +46,12 @@ var Template = /*#__PURE__*/function (_Component) {
46
46
  key: "render",
47
47
  value: function render() {
48
48
  var _this = this;
49
- process.env.NODE_ENV === 'development' ? (0, _utils.warning)(Object.keys(this.props.templates).every(function (key) {
50
- return typeof _this.props.templates[key] === 'function';
51
- }), "Hogan.js and string-based templates are deprecated and will not be supported in InstantSearch.js 5.x.\n\nYou can replace them with function-form templates and use either the provided `html` function or JSX templates.\n\nSee: https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/#upgrade-templates") : void 0;
49
+ if (process.env.NODE_ENV === 'development') {
50
+ var nonFunctionTemplates = Object.keys(this.props.templates).filter(function (key) {
51
+ return typeof _this.props.templates[key] !== 'function';
52
+ });
53
+ process.env.NODE_ENV === 'development' ? (0, _utils.warning)(nonFunctionTemplates.length === 0, "Hogan.js and string-based templates are deprecated and will not be supported in InstantSearch.js 5.x.\n\nYou can replace them with function-form templates and use either the provided `html` function or JSX templates.\n\nString-based templates: ".concat(nonFunctionTemplates.join(', '), ".\n\nSee: https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/#upgrade-templates")) : void 0;
54
+ }
52
55
  var RootTagName = this.props.rootTagName;
53
56
  var useCustomCompileOptions = this.props.useCustomCompileOptions[this.props.templateKey];
54
57
  var compileOptions = useCustomCompileOptions ? this.props.templatesConfig.compileOptions : {};
@@ -41,7 +41,7 @@ var connectAutocomplete = function connectAutocomplete(renderFn) {
41
41
  renderState.indices.forEach(function (_ref3) {
42
42
  var sendEvent = _ref3.sendEvent,
43
43
  hits = _ref3.hits;
44
- sendEvent('view', hits);
44
+ sendEvent('view:internal', hits);
45
45
  });
46
46
  renderFn(_objectSpread(_objectSpread({}, renderState), {}, {
47
47
  instantSearchInstance: instantSearchInstance
@@ -137,7 +137,7 @@ var connectGeoSearch = function connectGeoSearch(renderFn) {
137
137
  widgetState.internalToggleRefineOnMapMove = createInternalToggleRefinementOnMapMove(renderArgs, this.render.bind(this));
138
138
  widgetState.internalSetMapMoveSinceLastRefine = createInternalSetMapMoveSinceLastRefine(renderArgs, this.render.bind(this));
139
139
  var widgetRenderState = this.getWidgetRenderState(renderArgs);
140
- sendEvent('view', widgetRenderState.items);
140
+ sendEvent('view:internal', widgetRenderState.items);
141
141
  renderFn(_objectSpread(_objectSpread({}, widgetRenderState), {}, {
142
142
  instantSearchInstance: instantSearchInstance
143
143
  }), isFirstRendering);
@@ -161,7 +161,7 @@ var connectHierarchicalMenu = function connectHierarchicalMenu(renderFn) {
161
161
  }
162
162
  if (!_refine) {
163
163
  _refine = function _refine(facetValue) {
164
- sendEvent('click', facetValue);
164
+ sendEvent('click:internal', facetValue);
165
165
  helper.toggleFacetRefinement(hierarchicalFacetName, facetValue).search();
166
166
  };
167
167
  }
@@ -40,7 +40,7 @@ var connectHits = function connectHits(renderFn) {
40
40
  renderFn(_objectSpread(_objectSpread({}, renderState), {}, {
41
41
  instantSearchInstance: renderOptions.instantSearchInstance
42
42
  }), false);
43
- renderState.sendEvent('view', renderState.hits);
43
+ renderState.sendEvent('view:internal', renderState.hits);
44
44
  },
45
45
  getRenderState: function getRenderState(renderState, renderOptions) {
46
46
  return _objectSpread(_objectSpread({}, renderState), {}, {
@@ -6,7 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _utils = require("../../lib/utils");
9
- var _excluded = ["page"];
9
+ var _excluded = ["page"],
10
+ _excluded2 = ["clickAnalytics", "userToken"];
10
11
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11
12
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
13
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -30,17 +31,24 @@ function getStateWithoutPage(state) {
30
31
  rest = _objectWithoutProperties(_ref, _excluded);
31
32
  return rest;
32
33
  }
34
+ function normalizeState(state) {
35
+ var _ref2 = state || {},
36
+ clickAnalytics = _ref2.clickAnalytics,
37
+ userToken = _ref2.userToken,
38
+ rest = _objectWithoutProperties(_ref2, _excluded2);
39
+ return rest;
40
+ }
33
41
  function getInMemoryCache() {
34
42
  var cachedHits = null;
35
43
  var cachedState = null;
36
44
  return {
37
- read: function read(_ref2) {
38
- var state = _ref2.state;
45
+ read: function read(_ref3) {
46
+ var state = _ref3.state;
39
47
  return (0, _utils.isEqual)(cachedState, getStateWithoutPage(state)) ? cachedHits : null;
40
48
  },
41
- write: function write(_ref3) {
42
- var state = _ref3.state,
43
- hits = _ref3.hits;
49
+ write: function write(_ref4) {
50
+ var state = _ref4.state,
51
+ hits = _ref4.hits;
44
52
  cachedState = getStateWithoutPage(state);
45
53
  cachedHits = hits;
46
54
  }
@@ -60,15 +68,15 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
60
68
  // @TODO: this should be a generic, but a Connector can not yet be generic itself
61
69
 
62
70
  return function (widgetParams) {
63
- var _ref4 = widgetParams || {},
64
- _ref4$escapeHTML = _ref4.escapeHTML,
65
- escapeHTML = _ref4$escapeHTML === void 0 ? true : _ref4$escapeHTML,
66
- _ref4$transformItems = _ref4.transformItems,
67
- transformItems = _ref4$transformItems === void 0 ? function (items) {
71
+ var _ref5 = widgetParams || {},
72
+ _ref5$escapeHTML = _ref5.escapeHTML,
73
+ escapeHTML = _ref5$escapeHTML === void 0 ? true : _ref5$escapeHTML,
74
+ _ref5$transformItems = _ref5.transformItems,
75
+ transformItems = _ref5$transformItems === void 0 ? function (items) {
68
76
  return items;
69
- } : _ref4$transformItems,
70
- _ref4$cache = _ref4.cache,
71
- cache = _ref4$cache === void 0 ? getInMemoryCache() : _ref4$cache;
77
+ } : _ref5$transformItems,
78
+ _ref5$cache = _ref5.cache,
79
+ cache = _ref5$cache === void 0 ? getInMemoryCache() : _ref5$cache;
72
80
  var showPrevious;
73
81
  var showMore;
74
82
  var sendEvent;
@@ -99,7 +107,7 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
99
107
  // avoid updating the browser URL when the user displays the previous page.
100
108
  helper.overrideStateWithoutTriggeringChangeEvent(_objectSpread(_objectSpread({}, helper.state), {}, {
101
109
  page: getFirstReceivedPage(helper.state, cache.read({
102
- state: helper.state
110
+ state: normalizeState(helper.state)
103
111
  }) || {}) - 1
104
112
  })).searchWithoutTriggeringOnStateChange();
105
113
  };
@@ -107,7 +115,7 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
107
115
  var getShowMore = function getShowMore(helper) {
108
116
  return function () {
109
117
  helper.setPage(getLastReceivedPage(helper.state, cache.read({
110
- state: helper.state
118
+ state: normalizeState(helper.state)
111
119
  }) || {}) + 1).search();
112
120
  };
113
121
  };
@@ -124,19 +132,19 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
124
132
  renderFn(_objectSpread(_objectSpread({}, widgetRenderState), {}, {
125
133
  instantSearchInstance: instantSearchInstance
126
134
  }), false);
127
- sendEvent('view', widgetRenderState.currentPageHits);
135
+ sendEvent('view:internal', widgetRenderState.currentPageHits);
128
136
  },
129
137
  getRenderState: function getRenderState(renderState, renderOptions) {
130
138
  return _objectSpread(_objectSpread({}, renderState), {}, {
131
139
  infiniteHits: this.getWidgetRenderState(renderOptions)
132
140
  });
133
141
  },
134
- getWidgetRenderState: function getWidgetRenderState(_ref5) {
135
- var results = _ref5.results,
136
- helper = _ref5.helper,
137
- parent = _ref5.parent,
138
- existingState = _ref5.state,
139
- instantSearchInstance = _ref5.instantSearchInstance;
142
+ getWidgetRenderState: function getWidgetRenderState(_ref6) {
143
+ var results = _ref6.results,
144
+ helper = _ref6.helper,
145
+ parent = _ref6.parent,
146
+ existingState = _ref6.state,
147
+ instantSearchInstance = _ref6.instantSearchInstance;
140
148
  var isFirstPage;
141
149
  var currentPageHits = [];
142
150
  /**
@@ -146,7 +154,7 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
146
154
  */
147
155
  var state = parent.getPreviousState() || existingState;
148
156
  var cachedHits = cache.read({
149
- state: state
157
+ state: normalizeState(state)
150
158
  }) || {};
151
159
  if (!results) {
152
160
  showPrevious = getShowPrevious(helper);
@@ -176,7 +184,7 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
176
184
  if (cachedHits[_page] === undefined && !results.__isArtificial && instantSearchInstance.status === 'idle') {
177
185
  cachedHits[_page] = transformedHits;
178
186
  cache.write({
179
- state: state,
187
+ state: normalizeState(state),
180
188
  hits: cachedHits
181
189
  });
182
190
  }
@@ -198,8 +206,8 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
198
206
  widgetParams: widgetParams
199
207
  };
200
208
  },
201
- dispose: function dispose(_ref6) {
202
- var state = _ref6.state;
209
+ dispose: function dispose(_ref7) {
210
+ var state = _ref7.state;
203
211
  unmountFn();
204
212
  var stateWithoutPage = state.setQueryParameter('page', undefined);
205
213
  if (!escapeHTML) {
@@ -209,8 +217,8 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
209
217
  return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, undefined));
210
218
  }, {}));
211
219
  },
212
- getWidgetUiState: function getWidgetUiState(uiState, _ref7) {
213
- var searchParameters = _ref7.searchParameters;
220
+ getWidgetUiState: function getWidgetUiState(uiState, _ref8) {
221
+ var searchParameters = _ref8.searchParameters;
214
222
  var page = searchParameters.page || 0;
215
223
  if (!page) {
216
224
  // return without adding `page` to uiState
@@ -223,8 +231,8 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
223
231
  page: page + 1
224
232
  });
225
233
  },
226
- getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref8) {
227
- var uiState = _ref8.uiState;
234
+ getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref9) {
235
+ var uiState = _ref9.uiState;
228
236
  var widgetSearchParameters = searchParameters;
229
237
  if (escapeHTML) {
230
238
  widgetSearchParameters = searchParameters.setQueryParameters(_utils.TAG_PLACEHOLDER);
@@ -127,7 +127,7 @@ var connectMenu = function connectMenu(renderFn) {
127
127
  var _helper$getHierarchic = helper.getHierarchicalFacetBreadcrumb(attribute),
128
128
  _helper$getHierarchic2 = _slicedToArray(_helper$getHierarchic, 1),
129
129
  refinedItem = _helper$getHierarchic2[0];
130
- sendEvent('click', facetValue ? facetValue : refinedItem);
130
+ sendEvent('click:internal', facetValue ? facetValue : refinedItem);
131
131
  helper.toggleFacetRefinement(attribute, facetValue ? facetValue : refinedItem).search();
132
132
  };
133
133
  }
@@ -143,7 +143,7 @@ var connectNumericMenu = function connectNumericMenu(renderFn) {
143
143
  if (!connectorState.refine) {
144
144
  connectorState.refine = function (facetValue) {
145
145
  var refinedState = getRefinedState(helper.state, attribute, facetValue);
146
- connectorState.sendEvent('click', facetValue);
146
+ connectorState.sendEvent('click:internal', facetValue);
147
147
  helper.setState(refinedState).search();
148
148
  };
149
149
  }
@@ -41,10 +41,13 @@ var createSendEvent = function createSendEvent(_ref) {
41
41
  instantSearchInstance.sendEventToInsights(args[0]);
42
42
  return;
43
43
  }
44
- var eventType = args[0],
45
- facetValue = args[1],
44
+ var facetValue = args[1],
46
45
  _args$ = args[2],
47
46
  eventName = _args$ === void 0 ? 'Filter Applied' : _args$;
47
+ var _args$0$split = args[0].split(':'),
48
+ _args$0$split2 = _slicedToArray(_args$0$split, 2),
49
+ eventType = _args$0$split2[0],
50
+ eventModifier = _args$0$split2[1];
48
51
  if (eventType !== 'click') {
49
52
  return;
50
53
  }
@@ -54,6 +57,7 @@ var createSendEvent = function createSendEvent(_ref) {
54
57
  insightsMethod: 'clickedFilters',
55
58
  widgetType: $$type,
56
59
  eventType: eventType,
60
+ eventModifier: eventModifier,
57
61
  payload: {
58
62
  eventName: eventName,
59
63
  index: helper.getIndex(),
@@ -129,7 +133,7 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
129
133
  return emptyState;
130
134
  }
131
135
  var toggleRefinement = function toggleRefinement(helper, facetValue) {
132
- sendEvent('click', facetValue);
136
+ sendEvent('click:internal', facetValue);
133
137
  helper.setState(getRefinedState(helper.state, facetValue)).search();
134
138
  };
135
139
  var connectorState = {
@@ -178,7 +178,7 @@ var connectRefinementList = function connectRefinementList(renderFn) {
178
178
  widgetType: this.$$type
179
179
  });
180
180
  triggerRefine = function triggerRefine(facetValue) {
181
- sendEvent('click', facetValue);
181
+ sendEvent('click:internal', facetValue);
182
182
  helper.toggleFacetRefinement(attribute, facetValue).search();
183
183
  };
184
184
  searchForFacetValues = createSearchForFacetValues(helper, this);
@@ -1,16 +1,22 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = void 0;
7
8
  var _utils = require("../../lib/utils");
8
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
9
9
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
10
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
11
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
12
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
13
13
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
15
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
16
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
18
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
19
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
20
  var withUsage = (0, _utils.createDocumentationMessageGenerator)({
15
21
  name: 'toggle-refinement',
16
22
  connector: true
@@ -29,10 +35,13 @@ var createSendEvent = function createSendEvent(_ref) {
29
35
  instantSearchInstance.sendEventToInsights(args[0]);
30
36
  return;
31
37
  }
32
- var eventType = args[0],
33
- isRefined = args[1],
38
+ var isRefined = args[1],
34
39
  _args$ = args[2],
35
40
  eventName = _args$ === void 0 ? 'Filter Applied' : _args$;
41
+ var _args$0$split = args[0].split(':'),
42
+ _args$0$split2 = _slicedToArray(_args$0$split, 2),
43
+ eventType = _args$0$split2[0],
44
+ eventModifier = _args$0$split2[1];
36
45
  if (eventType !== 'click' || on === undefined) {
37
46
  return;
38
47
  }
@@ -44,6 +53,7 @@ var createSendEvent = function createSendEvent(_ref) {
44
53
  insightsMethod: 'clickedFilters',
45
54
  widgetType: $$type,
46
55
  eventType: eventType,
56
+ eventModifier: eventModifier,
47
57
  payload: {
48
58
  eventName: eventName,
49
59
  index: helper.getIndex(),
@@ -90,7 +100,7 @@ var connectToggleRefinement = function connectToggleRefinement(renderFn) {
90
100
  },
91
101
  isRefined = _ref3.isRefined;
92
102
  if (!isRefined) {
93
- sendEvent('click', isRefined);
103
+ sendEvent('click:internal', isRefined);
94
104
  if (hasAnOffValue) {
95
105
  off.forEach(function (v) {
96
106
  return helper.removeDisjunctiveFacetRefinement(attribute, v);
@@ -7,6 +7,10 @@ exports.default = highlight;
7
7
  var _suit = require("../lib/suit");
8
8
  var _utils = require("../lib/utils");
9
9
  var suit = (0, _suit.component)('Highlight');
10
+
11
+ /**
12
+ * @deprecated use html tagged templates and the Highlight component instead
13
+ */
10
14
  function highlight(_ref) {
11
15
  var attribute = _ref.attribute,
12
16
  _ref$highlightedTagNa = _ref.highlightedTagName,
@@ -14,6 +18,7 @@ function highlight(_ref) {
14
18
  hit = _ref.hit,
15
19
  _ref$cssClasses = _ref.cssClasses,
16
20
  cssClasses = _ref$cssClasses === void 0 ? {} : _ref$cssClasses;
21
+ process.env.NODE_ENV === 'development' ? (0, _utils.warning)(false, "`instantsearch.highlight` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `Highlight` component.\n\nFor more information, visit https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/?client=html+tagged+templates#upgrade-templates") : void 0;
17
22
  var highlightAttributeResult = (0, _utils.getPropertyByPath)(hit._highlightResult, attribute);
18
23
 
19
24
  // @MAJOR fallback to attribute value if highlight is not found
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = insights;
7
- exports.hasDataAttributes = hasDataAttributes;
8
7
  exports.readDataAttributes = readDataAttributes;
9
8
  exports.writeDataAttributes = writeDataAttributes;
10
9
  var _utils = require("../lib/utils");
11
10
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
11
+ /** @deprecated use bindEvent instead */
12
12
  function readDataAttributes(domElement) {
13
13
  var method = domElement.getAttribute('data-insights-method');
14
14
  var serializedPayload = domElement.getAttribute('data-insights-payload');
@@ -25,9 +25,8 @@ function readDataAttributes(domElement) {
25
25
  throw new Error('The insights helper was unable to parse `data-insights-payload`.');
26
26
  }
27
27
  }
28
- function hasDataAttributes(domElement) {
29
- return domElement.hasAttribute('data-insights-method');
30
- }
28
+
29
+ /** @deprecated use bindEvent instead */
31
30
  function writeDataAttributes(_ref) {
32
31
  var method = _ref.method,
33
32
  payload = _ref.payload;
@@ -7,6 +7,10 @@ exports.default = reverseHighlight;
7
7
  var _suit = require("../lib/suit");
8
8
  var _utils = require("../lib/utils");
9
9
  var suit = (0, _suit.component)('ReverseHighlight');
10
+
11
+ /**
12
+ * @deprecated use html tagged templates and the ReverseHighlight component instead
13
+ */
10
14
  function reverseHighlight(_ref) {
11
15
  var attribute = _ref.attribute,
12
16
  _ref$highlightedTagNa = _ref.highlightedTagName,
@@ -14,6 +18,7 @@ function reverseHighlight(_ref) {
14
18
  hit = _ref.hit,
15
19
  _ref$cssClasses = _ref.cssClasses,
16
20
  cssClasses = _ref$cssClasses === void 0 ? {} : _ref$cssClasses;
21
+ process.env.NODE_ENV === 'development' ? (0, _utils.warning)(false, "`instantsearch.reverseHighlight` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `ReverseHighlight` component.\n\nFor more information, visit https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/?client=html+tagged+templates#upgrade-templates") : void 0;
17
22
  var highlightAttributeResult = (0, _utils.getPropertyByPath)(hit._highlightResult, attribute);
18
23
 
19
24
  // @MAJOR fallback to attribute value if highlight is not found
@@ -7,6 +7,10 @@ exports.default = reverseSnippet;
7
7
  var _suit = require("../lib/suit");
8
8
  var _utils = require("../lib/utils");
9
9
  var suit = (0, _suit.component)('ReverseSnippet');
10
+
11
+ /**
12
+ * @deprecated use html tagged templates and the ReverseSnippet component instead
13
+ */
10
14
  function reverseSnippet(_ref) {
11
15
  var attribute = _ref.attribute,
12
16
  _ref$highlightedTagNa = _ref.highlightedTagName,
@@ -14,6 +18,7 @@ function reverseSnippet(_ref) {
14
18
  hit = _ref.hit,
15
19
  _ref$cssClasses = _ref.cssClasses,
16
20
  cssClasses = _ref$cssClasses === void 0 ? {} : _ref$cssClasses;
21
+ process.env.NODE_ENV === 'development' ? (0, _utils.warning)(false, "`instantsearch.reverseSnippet` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `ReverseSnippet` component.\n\nFor more information, visit https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/?client=html+tagged+templates#upgrade-templates") : void 0;
17
22
  var snippetAttributeResult = (0, _utils.getPropertyByPath)(hit._snippetResult, attribute);
18
23
 
19
24
  // @MAJOR fallback to attribute value if snippet is not found