From 08aa5b8a2d42c23ba6e91b4578f8c9a5d64822a6 Mon Sep 17 00:00:00 2001 From: droideparanoico Date: Thu, 2 Jul 2026 16:11:38 +0200 Subject: [PATCH] Fix search dropdown, async artist add, OOB swaps - Fix search results dropdown: absolute position relative to search wrapper - Make release group fetching async via Vert.x executeBlocking (avoid blocking add) - Add OOB swap for artist list so +Add works from any page - Simplify search-results template styling - Add Response type for combined OOB responses --- .../java/com/discdrop/web/ArtistController.java | 17 ++++++++++++++--- .../templates/fragments/artist-list.html | 17 ++++++++++++----- .../templates/fragments/search-results.html | 6 +++--- src/main/resources/templates/layouts/base.html | 14 +++++++++----- 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/discdrop/web/ArtistController.java b/src/main/java/com/discdrop/web/ArtistController.java index 6f5a995..3f53403 100644 --- a/src/main/java/com/discdrop/web/ArtistController.java +++ b/src/main/java/com/discdrop/web/ArtistController.java @@ -9,9 +9,11 @@ import com.discdrop.service.ReleaseGroupService; import io.quarkus.qute.Location; import io.quarkus.qute.Template; import io.quarkus.qute.TemplateInstance; +import io.vertx.core.Vertx; import jakarta.inject.Inject; import jakarta.ws.rs.*; import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.util.ArrayList; import java.util.List; @@ -27,6 +29,9 @@ public class ArtistController { @Inject FeedService feedService; + @Inject + Vertx vertx; + @Inject @Location("fragments/search-results") Template searchResultsTemplate; @@ -55,12 +60,18 @@ public class ArtistController { @POST @Path("/{mbid}/track") @Produces(MediaType.TEXT_HTML) - public TemplateInstance trackArtist(@PathParam("mbid") String mbid) { + public Response trackArtist(@PathParam("mbid") String mbid) { var artist = artistService.addArtist(mbid); var types = getMonitoredTypes(artist); - releaseGroupService.fetchAndCache(artist.mbid(), artist.name(), types); + vertx.executeBlocking(promise -> { + releaseGroupService.fetchAndCache(artist.mbid(), artist.name(), types); + promise.complete(); + }); var allArtists = artistService.findAll(); - return artistListTemplate.data("artists", allArtists); + var listHtml = artistListTemplate.data("artists", allArtists).render(); + var emptySearch = searchResultsTemplate.data("artists", List.of()).render(); + var combined = emptySearch + listHtml; + return Response.ok(combined).build(); } @DELETE diff --git a/src/main/resources/templates/fragments/artist-list.html b/src/main/resources/templates/fragments/artist-list.html index 652f2db..3989515 100644 --- a/src/main/resources/templates/fragments/artist-list.html +++ b/src/main/resources/templates/fragments/artist-list.html @@ -1,3 +1,4 @@ +
{#if artists.isEmpty()}

No artists tracked yet

@@ -30,35 +31,40 @@ + hx-target="#artist-list" + hx-swap="innerHTML"> Album
@@ -78,3 +84,4 @@
{/if} + diff --git a/src/main/resources/templates/fragments/search-results.html b/src/main/resources/templates/fragments/search-results.html index 5f9c43c..f14c48d 100644 --- a/src/main/resources/templates/fragments/search-results.html +++ b/src/main/resources/templates/fragments/search-results.html @@ -1,4 +1,4 @@ -
+
{#if artists.isEmpty()}
No artists found
{#else} @@ -18,9 +18,9 @@ {#else} {/if} diff --git a/src/main/resources/templates/layouts/base.html b/src/main/resources/templates/layouts/base.html index fef2817..07a3196 100644 --- a/src/main/resources/templates/layouts/base.html +++ b/src/main/resources/templates/layouts/base.html @@ -7,12 +7,16 @@