lyrics

lyrics
git clone git://brookjeynes.dev/bjeynes/lyrics.git
Log | Files | Refs

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:
Minternal/server/new-artist.go | 2+-
Minternal/server/search-artist.go | 15++++++++++++---
Ainternal/server/ui/partials/similar-artists-list/similar-artists-list.go | 7+++++++
Ainternal/server/ui/partials/similar-artists-list/similar-artists-list.templ | 9+++++++++
Minternal/server/ui/views/new-artist/new-artist.templ | 12++++++++++--
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