diff --git a/core_search_facets/src/Plugin/facets/query_type/CoreNodeSearchDate.php b/core_search_facets/src/Plugin/facets/query_type/CoreNodeSearchDate.php index 7a83fb4..9312f34 100644 --- a/core_search_facets/src/Plugin/facets/query_type/CoreNodeSearchDate.php +++ b/core_search_facets/src/Plugin/facets/query_type/CoreNodeSearchDate.php @@ -114,7 +114,8 @@ class CoreNodeSearchDate extends QueryTypePluginBase { $result->setActiveState(TRUE); // Sets the children for the current parent.. if ($parent) { - $parent->setChildren($result); + $children = array_merge($parent->getChildren(), [$result]); + $parent->setChildren($children); } else { $parent = $parent_facet_results[] = $result; @@ -180,7 +181,8 @@ class CoreNodeSearchDate extends QueryTypePluginBase { $parent = end($parent_facet_results); if ($parent instanceof ResultInterface) { foreach ($facet_results as $result) { - $parent->setChildren($result); + $children = array_merge($parent->getChildren(), [$result]); + $parent->setChildren($children); $this->facet->setResults($parent_facet_results); } } diff --git a/facets.libraries.yml b/facets.libraries.yml index 643be6f..8e08f96 100644 --- a/facets.libraries.yml +++ b/facets.libraries.yml @@ -30,6 +30,12 @@ drupal.facets.checkbox-widget: - core/drupal - core/jquery.once +drupal.facets.hierarchical: + version: VERSION + css: + theme: + css/hierarchical.css: {} + drupal.facets.dropdown-widget: version: VERSION js: diff --git a/js/checkbox-widget.js b/js/checkbox-widget.js index 7506685..7ca1934 100644 --- a/js/checkbox-widget.js +++ b/js/checkbox-widget.js @@ -21,6 +21,8 @@ // Find all checkbox facet links and give them a checkbox. var $links = $('.js-facets-checkbox-links .facet-item a'); $links.once('facets-checkbox-transform').each(Drupal.facets.makeCheckbox); + // Set indeterminate value on parents having an active trail + $('.facet-item--expanded.facet-item--active-trail > input').prop("indeterminate", true); }; /** diff --git a/src/Plugin/facets/url_processor/QueryString.php b/src/Plugin/facets/url_processor/QueryString.php index 1cbfcfd..0e7c491 100644 --- a/src/Plugin/facets/url_processor/QueryString.php +++ b/src/Plugin/facets/url_processor/QueryString.php @@ -93,6 +93,13 @@ class QueryString extends UrlProcessorPluginBase { unset($filter_params[$key]); } } + if($facet->getUseHierarchy()){ + // Enable parent id again if exists. + $parent_ids = $facet->getHierarchyInstance()->getParentIds($result->getRawValue()); + if($parent_ids[0]){ + $filter_params[] = $this->urlAlias . self::SEPARATOR . $parent_ids[0]; + } + } } // If the value is not active, add the filter string. else { diff --git a/src/Plugin/facets/widget/LinksWidget.php b/src/Plugin/facets/widget/LinksWidget.php index fe8cba0..7898812 100644 --- a/src/Plugin/facets/widget/LinksWidget.php +++ b/src/Plugin/facets/widget/LinksWidget.php @@ -34,6 +34,9 @@ class LinksWidget extends WidgetPluginBase { $build['#attached']['library'][] = 'facets/soft-limit'; $build['#attached']['drupalSettings']['facets']['softLimit'][$facet->id()] = $soft_limit; } + if($facet->getUseHierarchy()){ + $build['#attached']['library'][] = 'facets/drupal.facets.hierarchical'; + } return $build; } diff --git a/tests/src/Unit/Plugin/widget/LinksWidgetTest.php b/tests/src/Unit/Plugin/widget/LinksWidgetTest.php index 027b83a..1ea7d00 100644 --- a/tests/src/Unit/Plugin/widget/LinksWidgetTest.php +++ b/tests/src/Unit/Plugin/widget/LinksWidgetTest.php @@ -179,7 +179,7 @@ class LinksWidgetTest extends UnitTestCase { $child = new Result('snake', 'Snake', 5); $original_results[1]->setActiveState(TRUE); - $original_results[1]->setChildren($child); + $original_results[1]->setChildren([$child]); $facet = new Facet([], 'facets_facet'); $facet->setResults($original_results); @@ -201,8 +201,8 @@ class LinksWidgetTest extends UnitTestCase { $this->assertEquals($value, $output['#items'][$index]['#title']); $this->assertEquals('link', $output['#items'][$index]['#type']); if ($index === 1) { - $this->assertEquals('active-trail', $output['#items'][$index]['#attributes']['class']); - $this->assertEquals(['facet-item', 'expanded'], $output['#items'][$index]['#wrapper_attributes']['class']); + $this->assertEquals('is-active', $output['#items'][$index]['#attributes']['class']); + $this->assertEquals(['facet-item', 'facet-item--expanded'], $output['#items'][$index]['#wrapper_attributes']['class']); } else { $this->assertEquals(['facet-item'], $output['#items'][$index]['#wrapper_attributes']['class']);