vitalybaev/react-dadata

Расширения облости фильтрации

emargin opened this issue · 4 comments

В официальной доке DaData существует следующая конструкция, дабы расширить поиск до всех стран мира
$element.suggestions({ type: "ADDRESS", constraints: { locations: { country: "*" } } });

существует ли нечто подобное в вашем компоненте?

Да, вы можете использовать следующие пропсы:

  • filterLocations для locations в запросе
  • filterLocationsBoost для locations_boost в запросе

То есть в вашем примере это будет выглядеть так:

<AddressSuggestions
  token={API_KEY}
  filterLocations={[{ country: "*" }]}
/>

Пример на CodeSandbox

Обратите внимание - здесь передавать locations нужно как массив, что правильнее с точки зрения официальной документации.

Спасибо большое.
А как мне комбинировать несколько пропсов?
Например, в случае если я использую в своем компоненте
filterFromBound="city" filterToBound="city"
то возращаемые данные выглядят следующим образом

 г Москва
 г Киров 
 г Пенза 

поиск проводиться только по России, если же я добавляю
filterLocations={[{ country: "*" }]}
поиск начинает проводиться по всем странам, но возвращаемые данные принимают вид

 $страна, $штат, $город
 $страна, $регион, $город
 $страна, $штат/регион, $город

хотелось бы добиться поведения как в том случае, когда отсуствует пропс
filterLocations={[{ country: "*" }]}

Пытаюсь я достичь филтрации по всем городам мира и желаю получать данные в виде

$город

Точно так же и комбинируете:

<AddressSuggestions
  token={API_KEY}
  filterFromBound="city"
  filterToBound="city"
  filterLocations={[{ country: "*" }]}
/>

Результатом будет как вы уже написали данные вида:

 $страна, $штат, $город
 $страна, $регион, $город
 $страна, $штат/регион, $город

То есть данные то возвращаются корректные, filter* оперирует сущностями: то есть какие сущности будут возвращаться в результатах. Вы указали - только города - именно они и возвращаются.
Просто по умолчанию они отображаются в такой форме и здесь уж придется передавать колбек, который на основе объекта дадаты вернет компонент ячейки, например самый простой способ:

<AddressSuggestions
  token={API_KEY}
  filterFromBound="city"
  filterToBound="city"
  filterLocations={[{ country: "*" }]}
  renderOption={(suggestion) => {
    return suggestion.data.city;
  }}
/>

CleanShot 2021-12-16 at 14 59 37@2x

И здесь действительно нет такой возможности чтобы после выбора опции была компактная запись. Можно будет такое добавить

Но будьте аккуратны, мир большой и если использовать короткую запись, то может случиться так, что будет сложно выбирать:

CleanShot 2021-12-16 at 15 02 35@2x

Виталий, огромное спасибо!