У меня возникла проблема при попытке отобразить отсортированные предложения с помощью response-bootstrap-typeahead.
JSON
{
"Code": "ABC",
"Name": "Random City, Town Office (ABC), Random Country",
"CityName": "Random City",
"CityCode": "ABC",
"CountryName": "Random Country",
"CountryCode": "XY",
"Field": "Town Office"
},
{
"Code": "CBA",
"Name": "Random City, Town Office (CBA), Random Country",
"CityName": "City",
"CityCode": "CBA",
"CountryName": "Country",
"CountryCode": "CC",
"Field": "Town Office"
}
Требуемый вывод должен быть найден по городам в алфавитном порядке, если он совпадает, еслине следует искать название страны, а затем выводимые данные должны быть отсортированы в алфавитном порядке.
Я попытался передать данные обратного вызова из filterBy из typeahead в массив и отсортировать их, но, поскольку JSON из службы являетсяне отсортированы и данные обратного вызова случайные, не могут достичь того же.
Есть ли другой способ добиться того же?
<Typeahead
{...this.state.typeProps}
labelKey="Name"
placeholder="Enter Origin..."
bsSize="large"
onChange={(selected) => {
this.setState({ selected });
}}
filterBy={(option, props) => {
if (this.filterAndPush(option, props)) {
return true;
}
return false;
}}
}}
options={this.state.originData}
selected={this.state.selected}
/>
filterData = (option, props) => {
const { text } = props;
const { CityName, CityCode } = option;
if (text) {
if (CityName.toLowerCase().includes(text.toLowerCase())) {
return true;
} else if (CityCode.toLowerCase().includes(text.toLowerCase())) {
return true;
}
return false;
}
return false;
}
filterAndPush = (option, props) => {
//debugger;
if (this.filterData(option, props)) {
debugger;
this.filterResultSet.push(option);
this.filterResultSet.sort((a, b) => {
if (a.CityName < b.CityName)
return -1;
if (a.CityName > b.CityName)
return 1;
return 0;
});
return true;
}
return false;
}