appbaseio / appbaseio/reactivecore

autosuggest fails on null values

Open
#69 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
33
Forks
27
PR merge metrics
No merged PRs in 30d

Description

We are utilizing `reactivesearch` to query some Elastic data. We are utilizing the `showMissing` prop option on several filters that are using `MultiList`. Our understanding is that missing/null data is necessary for `showMissing` to function and this is all working.

There is also a `DataSearch`. Today, I was asked to connect the `DataSearch` to more `dataFields` and some of those fields are null for some records. For the `showMissing` to function, I can't (as far as I know) avoid having these `null` values. When I added the additional fields to the `DataSearch`'s `dataFields`, the app would crash as soon as I typed anything into the input.

Stack trace showed it was crashing at the `str.replace` in `replaceDiacritics` (in suggestions.js) because `str` had a value of `null`:
```javascript
function replaceDiacritics(s) {
let str = s ? String(s) : s;

const diacritics = [
/[\300-\306]/g, /[\340-\346]/g, // A, a
/[\310-\313]/g, /[\350-\353]/g, // E, e
/[\314-\317]/g, /[\354-\357]/g, // I, i
/[\322-\330]/g, /[\362-\370]/g, // O, o
/[\331-\334]/g, /[\371-\374]/g, // U, u
/[\321]/g, /[\361]/g, // N, n
/[\307]/g, /[\347]/g, // C, c
];

const chars = ['A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', 'N', 'n', 'C', 'c'];

for (let i = 0; i < diacritics.length; i += 1) {
str = str.replace(diacritics[i], chars[i]); // crash here
}

return str;
}
```

I won't say this is the best fix, but I put a band-aid on the issue by changing
```javascript
const populateSuggestionsList = (val, parsedSource, source) => {
// check if the suggestion includes the current value
// and not already included in other suggestions
const isWordMatch = skipWordMatch || currentValue
.....
```
into
```javascript
const populateSuggestionsList = (val, parsedSource, source) => {
// check if the suggestion includes the current value
// and not already included in other suggestions
val = val ? val : ''; // new
const isWordMatch = skipWordMatch || currentValue
.....
```

There may be reasons I'm not aware of that you wouldn't want to support the possibility of autosuggest encountering `null` values, but I thought I would open the issue to inquire if this was the intended behavior.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.