From b85162a1cdb229f92c134f9a6c9fd30de832eb86 Mon Sep 17 00:00:00 2001 From: JohnNiang Date: Wed, 3 Jul 2024 12:16:04 +0800 Subject: [PATCH] Support search view Signed-off-by: JohnNiang --- build.gradle | 4 +- .../run/halo/search/widget/SearchView.java | 47 +++++++++++++++++++ src/main/resources/plugin.yaml | 2 +- 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/main/java/run/halo/search/widget/SearchView.java diff --git a/build.gradle b/build.gradle index 1b4bc0a..2cafbb6 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ repositories { } dependencies { - implementation platform('run.halo.tools.platform:plugin:2.10.0-SNAPSHOT') + implementation platform('run.halo.tools.platform:plugin:2.17.0-SNAPSHOT') compileOnly 'run.halo.app:api' testImplementation 'run.halo.app:api' @@ -45,5 +45,5 @@ tasks.named('build').configure { } halo { - version = "2.12.0" + version = "2.17.0" } diff --git a/src/main/java/run/halo/search/widget/SearchView.java b/src/main/java/run/halo/search/widget/SearchView.java new file mode 100644 index 0000000..40cc4cd --- /dev/null +++ b/src/main/java/run/halo/search/widget/SearchView.java @@ -0,0 +1,47 @@ +package run.halo.search.widget; + +import org.springframework.context.annotation.Bean; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.server.*; +import reactor.core.publisher.Mono; +import run.halo.app.search.SearchOption; +import run.halo.app.search.SearchService; + +import java.util.Map; + +@Component +public class SearchView { + + private final SearchService searchService; + + public SearchView(SearchService searchService) { + this.searchService = searchService; + } + + @Bean + RouterFunction searchView() { + return RouterFunctions.route() + .GET("/search", RequestPredicates.accept(MediaType.TEXT_HTML), this::performSearch) + .build(); + } + + private Mono performSearch(ServerRequest serverRequest) { + var keyword = serverRequest.queryParam("keyword").orElse(""); + var limit = serverRequest.queryParam("limit") + .map(Integer::parseInt) + .orElse(10); + var includeTypes = serverRequest.queryParams().get("includeTypes"); + var option = new SearchOption(); + option.setKeyword(keyword); + option.setLimit(limit); + option.setFilterExposed(true); + option.setFilterPublished(true); + option.setFilterRecycled(false); + option.setIncludeTypes(includeTypes); + var result = searchService.search(option); + return ServerResponse.ok().render("search", Map.of( + "searchResult", result + )); + } +} diff --git a/src/main/resources/plugin.yaml b/src/main/resources/plugin.yaml index 61f24c0..03aceb6 100644 --- a/src/main/resources/plugin.yaml +++ b/src/main/resources/plugin.yaml @@ -8,7 +8,7 @@ metadata: "store.halo.run/app-id": "app-DlacW" spec: enabled: true - requires: ">=2.10.0" + requires: ">=2.17.0" author: name: Halo website: https://github.com/halo-dev