instantsearch.js 4.40.3 → 4.40.4
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.
- package/CHANGELOG.md +9 -0
- package/cjs/connectors/current-refinements/connectCurrentRefinements.js +13 -1
- package/cjs/connectors/toggle-refinement/connectToggleRefinement.js +6 -6
- package/cjs/lib/utils/escapeFacetValue.js +23 -0
- package/cjs/lib/utils/getRefinements.js +10 -14
- package/cjs/lib/utils/index.js +7 -9
- package/cjs/lib/version.js +1 -1
- package/dist/instantsearch.development.js +54 -36
- package/dist/instantsearch.development.js.map +1 -1
- package/dist/instantsearch.production.min.js +2 -2
- package/dist/instantsearch.production.min.js.map +1 -1
- package/es/connectors/current-refinements/connectCurrentRefinements.js +13 -1
- package/es/connectors/toggle-refinement/connectToggleRefinement.js +7 -7
- package/es/lib/utils/escapeFacetValue.d.ts +4 -0
- package/es/lib/utils/escapeFacetValue.js +14 -0
- package/es/lib/utils/getRefinements.d.ts +22 -7
- package/es/lib/utils/getRefinements.js +10 -13
- package/es/lib/utils/index.d.ts +1 -2
- package/es/lib/utils/index.js +1 -2
- package/es/lib/version.d.ts +1 -1
- package/es/lib/version.js +1 -1
- package/package.json +3 -3
- package/cjs/lib/utils/escapeRefinement.js +0 -17
- package/cjs/lib/utils/unescapeRefinement.js +0 -13
- package/es/lib/utils/escapeRefinement.d.ts +0 -3
- package/es/lib/utils/escapeRefinement.js +0 -9
- package/es/lib/utils/unescapeRefinement.d.ts +0 -2
- package/es/lib/utils/unescapeRefinement.js +0 -5
|
@@ -187,7 +187,7 @@ function getOperatorSymbol(operator) {
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
function normalizeRefinement(refinement) {
|
|
190
|
-
var value =
|
|
190
|
+
var value = getValue(refinement);
|
|
191
191
|
var label = refinement.operator ? "".concat(getOperatorSymbol(refinement.operator), " ").concat(refinement.name) : refinement.name;
|
|
192
192
|
var normalizedRefinement = {
|
|
193
193
|
attribute: refinement.attribute,
|
|
@@ -211,4 +211,16 @@ function normalizeRefinement(refinement) {
|
|
|
211
211
|
return normalizedRefinement;
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
+
function getValue(refinement) {
|
|
215
|
+
if (refinement.type === 'numeric') {
|
|
216
|
+
return Number(refinement.name);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if ('escapedValue' in refinement) {
|
|
220
|
+
return refinement.escapedValue;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return refinement.name;
|
|
224
|
+
}
|
|
225
|
+
|
|
214
226
|
export default connectCurrentRefinements;
|
|
@@ -4,7 +4,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
4
4
|
|
|
5
5
|
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; }
|
|
6
6
|
|
|
7
|
-
import { checkRendering,
|
|
7
|
+
import { checkRendering, escapeFacetValue, createDocumentationMessageGenerator, find, noop, toArray } from "../../lib/utils/index.js";
|
|
8
8
|
var withUsage = createDocumentationMessageGenerator({
|
|
9
9
|
name: 'toggle-refinement',
|
|
10
10
|
connector: true
|
|
@@ -81,8 +81,8 @@ var connectToggleRefinement = function connectToggleRefinement(renderFn) {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
var hasAnOffValue = userOff !== undefined;
|
|
84
|
-
var on = toArray(userOn).map(
|
|
85
|
-
var off = hasAnOffValue ? toArray(userOff).map(
|
|
84
|
+
var on = toArray(userOn).map(escapeFacetValue);
|
|
85
|
+
var off = hasAnOffValue ? toArray(userOff).map(escapeFacetValue) : undefined;
|
|
86
86
|
var sendEvent;
|
|
87
87
|
|
|
88
88
|
var toggleRefinementFactory = function toggleRefinementFactory(helper) {
|
|
@@ -195,16 +195,16 @@ var connectToggleRefinement = function connectToggleRefinement(renderFn) {
|
|
|
195
195
|
var allFacetValues = results.getFacetValues(attribute, {}) || [];
|
|
196
196
|
var onData = on.map(function (v) {
|
|
197
197
|
return find(allFacetValues, function (_ref7) {
|
|
198
|
-
var
|
|
199
|
-
return
|
|
198
|
+
var escapedValue = _ref7.escapedValue;
|
|
199
|
+
return escapedValue === escapeFacetValue(String(v));
|
|
200
200
|
});
|
|
201
201
|
}).filter(function (v) {
|
|
202
202
|
return v !== undefined;
|
|
203
203
|
});
|
|
204
204
|
var offData = hasAnOffValue ? offValue.map(function (v) {
|
|
205
205
|
return find(allFacetValues, function (_ref8) {
|
|
206
|
-
var
|
|
207
|
-
return
|
|
206
|
+
var escapedValue = _ref8.escapedValue;
|
|
207
|
+
return escapedValue === escapeFacetValue(String(v));
|
|
208
208
|
});
|
|
209
209
|
}).filter(function (v) {
|
|
210
210
|
return v !== undefined;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare type FacetValue = string | number | undefined;
|
|
2
|
+
export declare function unescapeFacetValue<TFacetValue extends FacetValue>(value: TFacetValue): TFacetValue;
|
|
3
|
+
export declare function escapeFacetValue<TFacetValue extends FacetValue>(value: TFacetValue): TFacetValue;
|
|
4
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function unescapeFacetValue(value) {
|
|
2
|
+
if (typeof value === 'string') {
|
|
3
|
+
return value.replace(/^\\-/, '-');
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
export function escapeFacetValue(value) {
|
|
9
|
+
if (typeof value === 'number' && value < 0 || typeof value === 'string') {
|
|
10
|
+
return String(value).replace(/^-/, '\\-');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
@@ -1,24 +1,39 @@
|
|
|
1
1
|
import type { SearchParameters, SearchResults } from 'algoliasearch-helper';
|
|
2
2
|
export declare type FacetRefinement = {
|
|
3
|
-
type: 'facet' | '
|
|
3
|
+
type: 'facet' | 'disjunctive' | 'hierarchical';
|
|
4
4
|
attribute: string;
|
|
5
5
|
name: string;
|
|
6
|
+
escapedValue: string;
|
|
6
7
|
count?: number;
|
|
7
8
|
exhaustive?: boolean;
|
|
8
9
|
};
|
|
10
|
+
export declare type TagRefinement = {
|
|
11
|
+
type: 'tag';
|
|
12
|
+
attribute: string;
|
|
13
|
+
name: string;
|
|
14
|
+
};
|
|
9
15
|
export declare type QueryRefinement = {
|
|
10
16
|
type: 'query';
|
|
17
|
+
attribute: 'query';
|
|
11
18
|
query: string;
|
|
12
|
-
|
|
19
|
+
name: string;
|
|
20
|
+
};
|
|
13
21
|
export declare type NumericRefinement = {
|
|
14
22
|
type: 'numeric';
|
|
15
23
|
numericValue: number;
|
|
16
24
|
operator: '<' | '<=' | '=' | '!=' | '>=' | '>';
|
|
17
|
-
|
|
25
|
+
attribute: string;
|
|
26
|
+
name: string;
|
|
27
|
+
count?: number;
|
|
28
|
+
exhaustive?: boolean;
|
|
29
|
+
};
|
|
18
30
|
export declare type FacetExcludeRefinement = {
|
|
19
31
|
type: 'exclude';
|
|
20
32
|
exclude: boolean;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
33
|
+
attribute: string;
|
|
34
|
+
name: string;
|
|
35
|
+
count?: number;
|
|
36
|
+
exhaustive?: boolean;
|
|
37
|
+
};
|
|
38
|
+
export declare type Refinement = FacetRefinement | QueryRefinement | NumericRefinement | FacetExcludeRefinement | TagRefinement;
|
|
39
|
+
export default function getRefinements(results: SearchResults | Record<string, never>, state: SearchParameters, includesQuery?: boolean): Refinement[];
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import find from "./find.js";
|
|
2
|
-
import
|
|
2
|
+
import { unescapeFacetValue, escapeFacetValue } from "./escapeFacetValue.js";
|
|
3
3
|
|
|
4
4
|
function getRefinement(state, type, attribute, name) {
|
|
5
5
|
var resultsFacets = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
|
|
6
6
|
var res = {
|
|
7
7
|
type: type,
|
|
8
8
|
attribute: attribute,
|
|
9
|
-
name: name
|
|
9
|
+
name: name,
|
|
10
|
+
escapedValue: escapeFacetValue(name)
|
|
10
11
|
};
|
|
11
12
|
var facet = find(resultsFacets, function (resultsFacet) {
|
|
12
13
|
return resultsFacet.name === attribute;
|
|
@@ -40,20 +41,18 @@ function getRefinement(state, type, attribute, name) {
|
|
|
40
41
|
count = facet && facet.data && facet.data[res.name];
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
var exhaustive = facet && facet.exhaustive;
|
|
44
|
-
|
|
45
44
|
if (count !== undefined) {
|
|
46
45
|
res.count = count;
|
|
47
46
|
}
|
|
48
47
|
|
|
49
|
-
if (exhaustive !== undefined) {
|
|
50
|
-
res.exhaustive = exhaustive;
|
|
48
|
+
if (facet && facet.exhaustive !== undefined) {
|
|
49
|
+
res.exhaustive = facet.exhaustive;
|
|
51
50
|
}
|
|
52
51
|
|
|
53
52
|
return res;
|
|
54
53
|
}
|
|
55
54
|
|
|
56
|
-
function getRefinements(results, state) {
|
|
55
|
+
export default function getRefinements(results, state) {
|
|
57
56
|
var includesQuery = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
58
57
|
var refinements = [];
|
|
59
58
|
var _state$facetsRefineme = state.facetsRefinements,
|
|
@@ -88,9 +87,9 @@ function getRefinements(results, state) {
|
|
|
88
87
|
Object.keys(disjunctiveFacetsRefinements).forEach(function (attribute) {
|
|
89
88
|
var refinementNames = disjunctiveFacetsRefinements[attribute];
|
|
90
89
|
refinementNames.forEach(function (refinementName) {
|
|
91
|
-
refinements.push(getRefinement(state, 'disjunctive', attribute, // We unescape any disjunctive refined values with `
|
|
92
|
-
// they can be escaped on negative numeric values with `
|
|
93
|
-
|
|
90
|
+
refinements.push(getRefinement(state, 'disjunctive', attribute, // We unescape any disjunctive refined values with `unescapeFacetValue` because
|
|
91
|
+
// they can be escaped on negative numeric values with `escapeFacetValue`.
|
|
92
|
+
unescapeFacetValue(refinementName), results.disjunctiveFacets));
|
|
94
93
|
});
|
|
95
94
|
});
|
|
96
95
|
Object.keys(hierarchicalFacetsRefinements).forEach(function (attribute) {
|
|
@@ -134,6 +133,4 @@ function getRefinements(results, state) {
|
|
|
134
133
|
}
|
|
135
134
|
|
|
136
135
|
return refinements;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
export default getRefinements;
|
|
136
|
+
}
|
package/es/lib/utils/index.d.ts
CHANGED
|
@@ -7,8 +7,7 @@ export { default as prepareTemplateProps } from './prepareTemplateProps';
|
|
|
7
7
|
export { default as renderTemplate } from './renderTemplate';
|
|
8
8
|
export { default as getRefinements } from './getRefinements';
|
|
9
9
|
export { default as clearRefinements } from './clearRefinements';
|
|
10
|
-
export {
|
|
11
|
-
export { default as unescapeRefinement } from './unescapeRefinement';
|
|
10
|
+
export { escapeFacetValue, unescapeFacetValue } from './escapeFacetValue';
|
|
12
11
|
export { default as checkRendering } from './checkRendering';
|
|
13
12
|
export { checkIndexUiState } from './checkIndexUiState';
|
|
14
13
|
export { default as getPropertyByPath } from './getPropertyByPath';
|
package/es/lib/utils/index.js
CHANGED
|
@@ -7,8 +7,7 @@ export { default as prepareTemplateProps } from "./prepareTemplateProps.js";
|
|
|
7
7
|
export { default as renderTemplate } from "./renderTemplate.js";
|
|
8
8
|
export { default as getRefinements } from "./getRefinements.js";
|
|
9
9
|
export { default as clearRefinements } from "./clearRefinements.js";
|
|
10
|
-
export {
|
|
11
|
-
export { default as unescapeRefinement } from "./unescapeRefinement.js";
|
|
10
|
+
export { escapeFacetValue, unescapeFacetValue } from "./escapeFacetValue.js";
|
|
12
11
|
export { default as checkRendering } from "./checkRendering.js";
|
|
13
12
|
export { checkIndexUiState } from "./checkIndexUiState.js";
|
|
14
13
|
export { default as getPropertyByPath } from "./getPropertyByPath.js";
|
package/es/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: "4.40.
|
|
1
|
+
declare const _default: "4.40.4";
|
|
2
2
|
export default _default;
|
package/es/lib/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default '4.40.
|
|
1
|
+
export default '4.40.4';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "instantsearch.js",
|
|
3
|
-
"version": "4.40.
|
|
3
|
+
"version": "4.40.4",
|
|
4
4
|
"description": "InstantSearch.js is a JavaScript library for building performant and instant search experiences with Algolia.",
|
|
5
5
|
"homepage": "https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/",
|
|
6
6
|
"types": "es/index.d.ts",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@types/google.maps": "^3.45.3",
|
|
57
57
|
"@types/hogan.js": "^3.0.0",
|
|
58
58
|
"@types/qs": "^6.5.3",
|
|
59
|
-
"algoliasearch-helper": "^3.8.
|
|
59
|
+
"algoliasearch-helper": "^3.8.2",
|
|
60
60
|
"classnames": "^2.2.5",
|
|
61
61
|
"@algolia/events": "^4.0.1",
|
|
62
62
|
"hogan.js": "^3.0.2",
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
"bundlesize": [
|
|
155
155
|
{
|
|
156
156
|
"path": "./dist/instantsearch.production.min.js",
|
|
157
|
-
"maxSize": "70.
|
|
157
|
+
"maxSize": "70.25 kB"
|
|
158
158
|
},
|
|
159
159
|
{
|
|
160
160
|
"path": "./dist/instantsearch.development.js",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
function escapeRefinement(value) {
|
|
9
|
-
if (typeof value === 'number' && value < 0) {
|
|
10
|
-
value = String(value).replace(/^-/, '\\-');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return value;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
var _default = escapeRefinement;
|
|
17
|
-
exports.default = _default;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
function unescapeRefinement(value) {
|
|
9
|
-
return String(value).replace(/^\\-/, '-');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
var _default = unescapeRefinement;
|
|
13
|
-
exports.default = _default;
|