all repos — searchix @ 82cfb98df7f9e38f295d3ea1d46b343914947307

Search engine for NixOS, nix-darwin, home-manager and NUR users

feat: support faceted navigation of search results

Alan Pearce
commit

82cfb98df7f9e38f295d3ea1d46b343914947307

parent

d3336c09a291673ab82e259741bd232baf1bbc07

1 file changed, 28 insertions(+), 2 deletions(-)

changed files
M internal/components/data.gointernal/components/data.go
@@ -2,6 +2,7 @@ package components
import ( "net/url" + "slices" "strconv" "alin.ovh/searchix/frontend"
@@ -23,8 +24,9 @@ }
type ResultData struct { TemplateData - Query string - Results *search.Result + Query string + FacetQueries url.Values + Results *search.Result } type SearchNav struct {
@@ -68,3 +70,27 @@ }
return u } + +func (u SearchNav) HasFacet(field string, term string) bool { + return slices.Contains(u.URL.Query()[field], term) +} + +func (u SearchNav) AddFacet(field string, term string) string { + nu := u.URL + q := nu.Query() + q.Add(field, term) + nu.RawQuery = q.Encode() + + return nu.String() +} + +func (u SearchNav) RemoveFacet(field string, term string) string { + nu := u.URL + q := nu.Query() + q[field] = slices.DeleteFunc(q[field], func(v string) bool { + return v == term + }) + nu.RawQuery = q.Encode() + + return nu.String() +}