diff --git a/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php b/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php index db8ba5c..d1c3cc6 100644 --- a/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php +++ b/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php @@ -220,7 +220,8 @@ public function getFields() { $facet_fields = $this->getDefaultFields(); // Get the allowed field types. - $allowed_field_types = \Drupal::moduleHandler()->invokeAll('facets_core_allowed_field_types', array($field_types = [])); + $allowed_field_types = \Drupal::moduleHandler() + ->invokeAll('facets_core_allowed_field_types', [$field_types = []]); // Get the current field instances and detect if the field type is allowed. $fields = FieldConfig::loadMultiple(); @@ -359,7 +360,17 @@ public function calculateDependencies() { * {@inheritdoc} */ public function getDataDefinitions() { - // Get and return an array field definitions. + $fields = $this->getFields(); + $field_configs = FieldConfig::loadMultiple(); + $definitions = []; + foreach ($field_configs as $id => $config) { + if (isset($fields[$config->getName()])) { + $definitions[] = \Drupal::typedDataManager() + ->getDefinition('field_item:' . $config->getFieldStorageDefinition()->getType()); + } + } + + return $definitions; } } diff --git a/src/Plugin/facets/processor/ListItemProcessor.php b/src/Plugin/facets/processor/ListItemProcessor.php index caf5a44..14cc0f1 100644 --- a/src/Plugin/facets/processor/ListItemProcessor.php +++ b/src/Plugin/facets/processor/ListItemProcessor.php @@ -180,13 +180,13 @@ public function build(FacetInterface $facet, array $results) { * The changed results. */ protected function overWriteDisplayValues(array $results, array $replacements) { - /** @var \Drupal\facets\Result\ResultInterface $a */ - foreach ($results as &$a) { - if (isset($replacements[$a->getRawValue()])) { - $a->setDisplayValue($replacements[$a->getRawValue()]); + return array_map(function ($item) use ($replacements) { + /** @var \Drupal\facets\Result\ResultInterface $item */ + if (isset($replacements[$item->getRawValue()])) { + $item->setDisplayValue($replacements[$item->getRawValue()]); } - } - return $results; + return $item; + }, $results); } } diff --git a/tests/src/Kernel/Entity/FacetFacetSourceTest.php b/tests/src/Kernel/Entity/FacetFacetSourceTest.php index feb62d2..7071a2b 100644 --- a/tests/src/Kernel/Entity/FacetFacetSourceTest.php +++ b/tests/src/Kernel/Entity/FacetFacetSourceTest.php @@ -143,15 +143,21 @@ public function testDataDefinitions() { $display_name = 'search_api:views_page__search_api_test_view__page_1'; $entity->setFacetSourceId($display_name); + // Test that ::getDataDefinitions returns an array with the defined fields, + // check on a couple of the fields. $dataDefinitions = $entity->getFacetSource()->getDataDefinitions(); $this->assertInternalType('array', $dataDefinitions); $this->assertArrayHasKey('name', $dataDefinitions); $this->assertArrayHasKey('type', $dataDefinitions); $this->assertArrayHasKey('category', $dataDefinitions); + $this->assertInstanceOf(DataDefinitionInterface::class, $dataDefinitions['name']); + $this->assertInstanceOf(DataDefinitionInterface::class, $dataDefinitions['type']); + $this->assertInstanceOf(DataDefinitionInterface::class, $dataDefinitions['category']); + // Check the return value of ::getDataDefinition. $this->assertInstanceOf(DataDefinitionInterface::class, $entity->getFacetSource()->getDataDefinition('id')); - // When giving a field that doesn't exist, we should throw an error. + // When trying to get a field that doesn't exist, an error should be thrown. $this->setExpectedException(Exception::class); $entity->getFacetSource()->getDataDefinition('llama'); }