dsfr_typesense-2.1.x-dev/src/Plugin/Block/TypeSenseSearchBlock.php
src/Plugin/Block/TypeSenseSearchBlock.php
<?php
namespace Drupal\dsfr_typesense\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\search_api\IndexInterface;
use Drupal\search_api_typesense\AiModels;
use Drupal\search_api_typesense\Api\SearchApiTypesenseException;
use Drupal\search_api_typesense\Plugin\search_api\backend\SearchApiTypesenseBackend;
use Drupal\search_api\Entity\Index;
/**
* Provides a "Typesense Search" block.
*
* @Block(
* id = "dsfr_typesense_search_block",
* admin_label = @Translation("DSFR Typesense Search Block")
* )
*/
class TypesenseSearchBlock extends BlockBase {
/**
* {@inheritdoc}
*
* @param \Drupal\search_api\IndexInterface $search_api_index
* The search index.
*/
public function build() {
$search_api_index = Index::load('typesense_index');
$backend = $search_api_index->getServerInstance()->getBackend();
$configuration = $backend->getConfiguration();
$typesense_client = $backend->getTypesenseClient();
$all_fields = $typesense_client->getFields($search_api_index->id());
$query_by_fields = $typesense_client->getFieldsForQueryBy($search_api_index->id());
$facet_number_fields = $typesense_client->getFieldsForFacetNumber($search_api_index->id());
$facet_string_fields = $typesense_client->getFieldsForFacetString($search_api_index->id());
$schema = $backend->getSchema($search_api_index->id())?->getSchema();
$query_by_weights = $schema['fields'] ? $typesense_client->getQueryByWeight($schema['fields']) : '';
$sort_by_fields = $typesense_client->getFieldsForSortBy($schema['fields']);
$search_api_typesense = [
'api_key' => $configuration['admin_api_key'],
'host' => $configuration['nodes'][0]['host'],
'port' => $configuration['nodes'][0]['port'],
'protocol' => $configuration['nodes'][0]['protocol'],
'index' => $search_api_index->id(),
'all_fields' => $all_fields,
'query_by_fields' => \implode(',', $query_by_fields),
'query_by_weights' => \implode(',', $query_by_weights),
'sort_by_fields' => \implode(',', $sort_by_fields),
'facet_number_fields' => $facet_number_fields,
'facet_string_fields' => $facet_string_fields,
];
return [
'#theme' => 'search_api_typesense_search',
'#attached' => [
'library' => [
// 'search_api_typesense/search',
'dsfr_typesense/search',
],
'drupalSettings' => [
'search_api_typesense' => $search_api_typesense
],
],
'#facet_number_fields' => $facet_number_fields,
'#facet_string_fields' => $facet_string_fields,
];
}
}
