commit 2de11853868430dcf48120cdac738975693f83e0
parent dfbd40d7a6ef15db10ed805a354c6851349fe93c
Author: brookjeynes <me@brookjeynes.dev>
Date: Sun, 3 May 2026 16:36:15 +1000
feat: artist lookup in new artist page
Signed-off-by: brookjeynes <me@brookjeynes.dev>
Diffstat:
5 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/internal/server/new-artist.go b/internal/server/new-artist.go
@@ -10,7 +10,7 @@ import (
)
type NewArtistForm struct {
- Name string `schema:"name"`
+ Name string `schema:"artist"`
Bio string `schema:"biography"`
}
diff --git a/internal/server/search-artist.go b/internal/server/search-artist.go
@@ -3,7 +3,9 @@ package server
import (
"lyrics/internal/db"
artistsearchdatalist "lyrics/internal/server/ui/partials/artist-search-datalist"
+ similarartistslist "lyrics/internal/server/ui/partials/similar-artists-list"
"net/http"
+ "strings"
)
func (ss *ServerState) SearchArtist(w http.ResponseWriter, r *http.Request) {
@@ -19,8 +21,15 @@ func (ss *ServerState) SearchArtist(w http.ResponseWriter, r *http.Request) {
return
}
- artistsearchdatalist.ArtistSearchDatalist(artistsearchdatalist.ArtistSearchDatalistParams{
- Artists: results,
- }).Render(r.Context(), w)
+ requestFromUrl := r.Header.Get("HX-Current-URL")
+ if strings.Contains(requestFromUrl, "/artist/new") {
+ similarartistslist.SimilarArtistsList(similarartistslist.SimilarArtistsListParams{
+ Artists: results,
+ }).Render(r.Context(), w)
+ } else {
+ artistsearchdatalist.ArtistSearchDatalist(artistsearchdatalist.ArtistSearchDatalistParams{
+ Artists: results,
+ }).Render(r.Context(), w)
+ }
}
}
diff --git a/internal/server/ui/partials/similar-artists-list/similar-artists-list.go b/internal/server/ui/partials/similar-artists-list/similar-artists-list.go
@@ -0,0 +1,7 @@
+package similarartistslist
+
+import "lyrics/internal/domain"
+
+type SimilarArtistsListParams struct {
+ Artists []domain.Artist
+}
diff --git a/internal/server/ui/partials/similar-artists-list/similar-artists-list.templ b/internal/server/ui/partials/similar-artists-list/similar-artists-list.templ
@@ -0,0 +1,9 @@
+package similarartistslist
+
+templ SimilarArtistsList(params SimilarArtistsListParams) {
+ <ul id="similar-artists">
+ for _, a := range params.Artists {
+ <li>{ a.Name }</li>
+ }
+ </ul>
+}
diff --git a/internal/server/ui/views/new-artist/new-artist.templ b/internal/server/ui/views/new-artist/new-artist.templ
@@ -14,14 +14,22 @@ templ NewArtist(params NewArtistParams) {
hx-disable-elt="#add-artist-btn"
>
<label>
- name:
+ artist:
<input
- name="name"
+ hx-get="/artist/search"
+ hx-trigger="input changed delay:500ms, load"
+ hx-target="#similar-artists"
+ hx-swap="outerHTML"
+ name="artist"
type="text"
pattern={ domain.NoTrailingOrLeadingSpaceRegex.String() }
required
/>
</label>
+ <div>
+ <span>similar artists</span>
+ <ul id="similar-artists"></ul>
+ </div>
<label>
biography:
<textarea