diff --git a/app/Actions/TagRepo.php b/app/Actions/TagRepo.php index ab1b40677..a3298dc16 100644 --- a/app/Actions/TagRepo.php +++ b/app/Actions/TagRepo.php @@ -23,7 +23,6 @@ class TagRepo */ public function queryWithTotals(string $searchTerm, string $nameFilter): Builder { - $groupingAttribute = $nameFilter ? 'value' : 'name'; $query = Tag::query() ->select([ 'name', @@ -34,11 +33,15 @@ class TagRepo DB::raw('SUM(IF(entity_type = \'BookStack\\\\Book\', 1, 0)) as book_count'), DB::raw('SUM(IF(entity_type = \'BookStack\\\\BookShelf\', 1, 0)) as shelf_count'), ]) - ->groupBy($groupingAttribute) - ->orderBy($groupingAttribute); + ->orderBy($nameFilter ? 'value' : 'name'); if ($nameFilter) { $query->where('name', '=', $nameFilter); + $query->groupBy('value'); + } else if ($searchTerm) { + $query->groupBy('name', 'value'); + } else { + $query->groupBy('name'); } if ($searchTerm) { diff --git a/tests/Entity/TagTest.php b/tests/Entity/TagTest.php index db76cae5f..160dd62d8 100644 --- a/tests/Entity/TagTest.php +++ b/tests/Entity/TagTest.php @@ -145,6 +145,18 @@ class TagTest extends TestCase $resp->assertElementNotExists('.tag-item .tag-name'); } + public function test_tag_index_search_will_show_mulitple_values_of_a_single_tag_name() + { + /** @var Page $page */ + $page = Page::query()->first(); + $page->tags()->create(['name' => 'Animal', 'value' => 'Catfish']); + $page->tags()->create(['name' => 'Animal', 'value' => 'Catdog']); + + $resp = $this->asEditor()->get('/tags?search=cat'); + $resp->assertElementContains('.tag-item .tag-value', 'Catfish'); + $resp->assertElementContains('.tag-item .tag-value', 'Catdog'); + } + public function test_tag_index_can_be_scoped_to_specific_tag_name() { /** @var Page $page */