Skip to content

Commit 9ab65c4

Browse files
authored
fix(currentRefinedValues): unescape disjunctive facet refinement names (#1574)
following #1551, we also now need to unescape in currentRefinedValues widget because the refinement name is public API. fixes #1569
1 parent 8eeeeba commit 9ab65c4

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

src/lib/utils.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export {
1717
clearRefinementsFromState,
1818
clearRefinementsAndSearch,
1919
prefixKeys,
20+
escapeRefinement,
21+
unescapeRefinement,
2022
};
2123

2224
/**
@@ -171,7 +173,17 @@ function getRefinements(results, state) {
171173

172174
forEach(state.disjunctiveFacetsRefinements, (refinements, attributeName) => {
173175
forEach(refinements, name => {
174-
res.push(getRefinement(state, 'disjunctive', attributeName, name, results.disjunctiveFacets));
176+
res.push(
177+
getRefinement(
178+
state,
179+
'disjunctive',
180+
attributeName,
181+
// we unescapeRefinement any disjunctive refined value since they can be escaped
182+
// when negative numeric values search `escapeRefinement` usage in code
183+
unescapeRefinement(name),
184+
results.disjunctiveFacets
185+
)
186+
);
175187
});
176188
});
177189

@@ -233,3 +245,15 @@ function prefixKeys(prefix, obj) {
233245

234246
return undefined;
235247
}
248+
249+
function escapeRefinement(value) {
250+
if (typeof value === 'number' && value < 0) {
251+
value = String(value).replace(/^-/, '\\-');
252+
}
253+
254+
return value;
255+
}
256+
257+
function unescapeRefinement(value) {
258+
return String(value).replace(/^\\-/, '-');
259+
}

src/widgets/toggle/implementations/currentToggle.js

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import ReactDOM from 'react-dom';
44
import defaultTemplates from '../defaultTemplates.js';
55
import {
66
prepareTemplateProps,
7+
escapeRefinement,
8+
unescapeRefinement,
79
} from '../../../lib/utils.js';
810

911
// cannot use a function declaration because of
@@ -123,16 +125,4 @@ const currentToggle = ({
123125
};
124126
};
125127

126-
function escapeRefinement(value) {
127-
if (typeof value === 'number' && value < 0) {
128-
value = String(value).replace('-', '\\-');
129-
}
130-
131-
return value;
132-
}
133-
134-
function unescapeRefinement(value) {
135-
return String(value).replace(/^\\-/, '-');
136-
}
137-
138128
export default currentToggle;

0 commit comments

Comments
 (0)