github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/controller/clib/search.go (about) 1 // Package clib - Content managed by Project Forge, see [projectforge.md] for details. 2 package clib 3 4 import ( 5 "fmt" 6 "net/http" 7 8 "github.com/kyleu/dbaudit/app" 9 "github.com/kyleu/dbaudit/app/controller" 10 "github.com/kyleu/dbaudit/app/controller/cutil" 11 "github.com/kyleu/dbaudit/app/lib/search" 12 "github.com/kyleu/dbaudit/views/vsearch" 13 ) 14 15 const searchKey = "search" 16 17 func Search(w http.ResponseWriter, r *http.Request) { 18 controller.Act(searchKey, w, r, func(as *app.State, ps *cutil.PageState) (string, error) { 19 q := r.URL.Query().Get("q") 20 params := &search.Params{Q: q, PS: ps.Params} 21 results, errs := search.Search(ps.Context, params, as, ps) 22 ps.SetTitleAndData("Search Results", results) 23 if q != "" { 24 ps.Title = fmt.Sprintf("[%s] %s", q, ps.Title) 25 } 26 if len(results) == 1 && results[0].URL != "" { 27 return controller.FlashAndRedir(true, "single search result found", results[0].URL, w, ps) 28 } 29 ps.DefaultNavIcon = searchKey 30 bc := []string{"Search||/search"} 31 if q != "" { 32 bc = append(bc, q) 33 } 34 return controller.Render(w, r, as, &vsearch.Results{Params: params, Results: results, Errors: errs}, ps, bc...) 35 }) 36 }