From d6dc2a7bbeacbd1774ca38699649308062517fe9 Mon Sep 17 00:00:00 2001 From: Roozen <93673944+Roozenlz@users.noreply.github.com> Date: Mon, 18 Dec 2023 13:22:14 +0800 Subject: [PATCH] Support getting parent category by child name in theme (#5002) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind feature /kind api-change #### What this PR does / why we need it: add getParentByName method to CategoryFinder interface #### Which issue(s) this PR fixes: Fixes # #### Special notes for your reviewer: ${categoryFinder.getParentByName(anyChild.metadata.name)} #### Does this PR introduce a user-facing change? ```release-note NONE ``` --- .../halo/app/theme/finders/CategoryFinder.java | 2 ++ .../theme/finders/impl/CategoryFinderImpl.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/application/src/main/java/run/halo/app/theme/finders/CategoryFinder.java b/application/src/main/java/run/halo/app/theme/finders/CategoryFinder.java index 9f95646a5..f8023fb6c 100644 --- a/application/src/main/java/run/halo/app/theme/finders/CategoryFinder.java +++ b/application/src/main/java/run/halo/app/theme/finders/CategoryFinder.java @@ -28,4 +28,6 @@ public interface CategoryFinder { Flux listAsTree(); Flux listAsTree(String name); + + Mono getParentByName(String name); } diff --git a/application/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java b/application/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java index 07a89f9c2..43502d798 100644 --- a/application/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java +++ b/application/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java @@ -81,6 +81,23 @@ public class CategoryFinderImpl implements CategoryFinder { return this.toCategoryTreeVoFlux(name); } + @Override + public Mono getParentByName(String name) { + if (StringUtils.isBlank(name)) { + return Mono.empty(); + } + return client.list(Category.class, + category -> { + List children = category.getSpec().getChildren(); + if (children == null) { + return false; + } + return children.contains(name); + }, + defaultComparator()) + .next().map(CategoryVo::from); + } + Flux toCategoryTreeVoFlux(String name) { return listAll() .collectList()