diff --git a/src/Plugin/facets/widget/CheckboxWidget.php b/src/Plugin/facets/widget/CheckboxWidget.php index 6d8bf49..997c928 100644 --- a/src/Plugin/facets/widget/CheckboxWidget.php +++ b/src/Plugin/facets/widget/CheckboxWidget.php @@ -46,32 +46,43 @@ class CheckboxWidget implements WidgetInterface { public function build(FacetInterface $facet) { /** @var \Drupal\facets\Result\Result[] $results */ $results = $facet->getResults(); - $items = []; + $form = [ + '#type' => 'form', + '#method' => 'get', + ]; + $options = []; $configuration = $facet->get('widget_configs'); $show_numbers = (bool) $configuration['show_numbers']; + $form[$facet->getFieldAlias()] = [ + '#type' => 'checkboxes', + '#title' => $facet->getName(), + ]; + foreach ($results as $result) { - if ($result->getCount()) { - // Get the link. - $text = $result->getDisplayValue(); - if ($show_numbers) { - $text .= ' (' . $result->getCount() . ')'; - } - if ($result->isActive()) { - $text = '(-) ' . $text; - } - $link = $this->linkGenerator()->generate($text, $result->getUrl()); - $items[] = $link; + $text = $result->getDisplayValue(); + if ($show_numbers) { + $text .= ' (' . $result->getCount() . ')'; + } + + $options[$result->getRawValue()] = $text; + + if ($result->isActive()) { + $form[$facet->getFieldAlias()]['#default_value'] = $result->getRawValue(); } } - $build = [ - '#theme' => 'item_list', - '#items' => $items, - ]; - $build['#prefix'] = $this->t('Checkboxes'); - return $build; + $form[$facet->getFieldAlias()]['#options'] = $options; + + return $form; + } + + /** + * {@inheritdoc} + */ + public function getQueryType($query_types) { + return $query_types['string']; } /** @@ -95,13 +106,6 @@ class CheckboxWidget implements WidgetInterface { } /** - * {@inheritdoc} - */ - public function getQueryType($query_types) { - return $query_types['string']; - } - - /** * Gets the link generator. * * @return \Drupal\Core\Utility\LinkGeneratorInterface diff --git a/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php b/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php index 7b3c6c1..fcbdd91 100644 --- a/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php +++ b/tests/src/Unit/Plugin/widget/CheckboxWidgetTest.php @@ -53,19 +53,11 @@ class CheckboxWidgetTest extends UnitTestCase { } $this->originalResults = $original_results; - $link_generator = $this->getMockBuilder('\Drupal\Core\Utility\LinkGenerator') - ->disableOriginalConstructor() - ->getMock(); - $link_generator->expects($this->atLeastOnce()) - ->method('generate') - ->will($this->returnArgument(0)); - $string_translation = $this->getMockBuilder('\Drupal\Core\StringTranslation\TranslationManager') ->disableOriginalConstructor() ->getMock(); $container_builder = new ContainerBuilder(); - $container_builder->set('link_generator', $link_generator); $container_builder->set('string_translation', $string_translation); \Drupal::setContainer($container_builder); @@ -78,15 +70,21 @@ class CheckboxWidgetTest extends UnitTestCase { public function testDefaultSettings() { $facet = new Facet([], 'facet'); $facet->setResults($this->originalResults); + $facet->setFieldIdentifier('test_field'); $output = $this->widget->build($facet); $this->assertInternalType('array', $output); - $this->assertCount(4, $output['#items']); + $this->assertCount(4, $output['test_field']['#options']); - $expected_links = ['Llama', 'Badger', 'Duck', 'Alpaca']; + $expected_links = [ + 'llama' => 'Llama', + 'badger' => 'Badger', + 'duck' => 'Duck', + 'alpaca' => 'Alpaca', + ]; foreach ($expected_links as $index => $value) { - $this->assertEquals($value, $output['#items'][$index]); + $this->assertEquals($value, $output['test_field']['#options'][$index]); } } @@ -97,15 +95,21 @@ class CheckboxWidgetTest extends UnitTestCase { $facet = new Facet([], 'facet'); $facet->setResults($this->originalResults); $facet->set('widget_configs', ['show_numbers' => 1]); + $facet->setFieldIdentifier('test_field'); $output = $this->widget->build($facet); $this->assertInternalType('array', $output); - $this->assertCount(4, $output['#items']); + $this->assertCount(4, $output['test_field']['#options']); - $expected_links = ['Llama (10)', 'Badger (20)', 'Duck (15)', 'Alpaca (9)']; + $expected_links = [ + 'llama' => 'Llama (10)', + 'badger' => 'Badger (20)', + 'duck' => 'Duck (15)', + 'alpaca' => 'Alpaca (9)', + ]; foreach ($expected_links as $index => $value) { - $this->assertEquals($value, $output['#items'][$index]); + $this->assertEquals($value, $output['test_field']['#options'][$index]); } }