Skip to content

Commit

Permalink
🚑 Make search work
Browse files Browse the repository at this point in the history
  • Loading branch information
wesen committed Dec 31, 2024
1 parent ffa3789 commit 9116e96
Show file tree
Hide file tree
Showing 5 changed files with 199 additions and 201 deletions.
25 changes: 16 additions & 9 deletions pkg/server/handlers/prompt.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,16 +147,23 @@ func (h *Handlers) PromptContent() http.HandlerFunc {
func (h *Handlers) Search() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
query := r.URL.Query().Get("q")
if query == "" {
return
}

var matchingPrompts []pkg.Prompto
for _, repo := range h.state.Repos {
for _, prompt := range repo.GetPromptos() {
if strings.Contains(strings.ToLower(prompt.Name), strings.ToLower(query)) ||
strings.Contains(strings.ToLower(prompt.Group), strings.ToLower(query)) {
matchingPrompts = append(matchingPrompts, prompt)

if query == "" {
// Show all prompts when query is empty
repoNames := h.state.GetAllRepositories()
for _, repoName := range repoNames {
repo := h.state.Repos[repoName]
matchingPrompts = append(matchingPrompts, repo.GetPromptos()...)
}
} else {
// Search for matching prompts
for _, repo := range h.state.Repos {
for _, prompt := range repo.GetPromptos() {
if strings.Contains(strings.ToLower(prompt.Name), strings.ToLower(query)) ||
strings.Contains(strings.ToLower(prompt.Group), strings.ToLower(query)) {
matchingPrompts = append(matchingPrompts, prompt)
}
}
}
}
Expand Down
87 changes: 61 additions & 26 deletions pkg/server/templates/components/prompt_list.templ
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,68 @@ package components

import "github.com/go-go-golems/prompto/pkg"

script copyToClipboard(text string) {
copyToClipboard(text)
}

script addToFavorites(name string) {
addToFavorites(name)
}

templ PromptList(prompts []pkg.Prompto) {
<div id="prompt-list" class="list-group">
for _, prompt := range prompts {
<div class="list-group-item">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">{prompt.Name}</h5>
<small class="text-muted">{prompt.Group}</small>
</div>
<div class="mt-3">
<button
class="btn btn-primary me-2"
hx-post={"/prompts/" + prompt.Repository + "/" + prompt.Name}
hx-target="#prompt-content"
>
<i class="bi bi-eye me-1"></i>
View Prompt
</button>
<button
class="btn btn-outline-secondary"
hx-post={"/prompts/" + prompt.Repository + "/" + prompt.Name + "/favorite"}
hx-swap="outerHTML"
>
<i class="bi bi-star me-1"></i>
Favorite
</button>
</div>
for _, group := range getGroups(prompts) {
<div class="card mb-4">
<div class="card-header">
<h3 class="h5 mb-0">{ group }</h3>
</div>
<div class="list-group list-group-flush">
for _, prompt := range getPromptsByGroup(prompts, group) {
<div class="list-group-item">
<div class="d-flex justify-content-between align-items-center">
<a href={ templ.SafeURL("/prompts/" + prompt.Name) } class="text-decoration-none">
{ prompt.Name }
</a>
<div>
<button
class="btn btn-sm btn-outline-secondary me-2"
onclick={ copyToClipboard(prompt.Name) }
>
<i class="bi bi-clipboard"></i>
</button>
<button
class="btn btn-sm btn-outline-primary"
onclick={ addToFavorites(prompt.Name) }
>
<i class="bi bi-plus-lg"></i>
</button>
</div>
</div>
</div>
}
</div>
</div>
}
}

// Helper functions to group prompts
func getGroups(prompts []pkg.Prompto) []string {
groups := make(map[string]bool)
var result []string
for _, p := range prompts {
if !groups[p.Group] {
groups[p.Group] = true
result = append(result, p.Group)
}
}
return result
}

func getPromptsByGroup(prompts []pkg.Prompto, group string) []pkg.Prompto {
var result []pkg.Prompto
for _, p := range prompts {
if p.Group == group {
result = append(result, p)
}
</div>
}
return result
}
158 changes: 110 additions & 48 deletions pkg/server/templates/components/prompt_list_templ.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 7 additions & 33 deletions pkg/server/templates/pages/index.templ
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package pages
import (
"github.com/go-go-golems/prompto/pkg"
"github.com/go-go-golems/prompto/pkg/server/templates"
"github.com/go-go-golems/prompto/pkg/server/templates/components"
)

script copyToClipboard(text string) {
Expand Down Expand Up @@ -46,45 +47,18 @@ templ Index(repositories []string, repos map[string]*pkg.Repository) {
placeholder="Search prompts..."
class="form-control"
hx-get="/search"
hx-trigger="keyup changed delay:500ms"
name="q"
hx-trigger="keyup changed delay:200ms"
hx-target="#prompt-list"
hx-get-oob="true"
hx-get-oob-swap="true"
hx-get-oob-url="/"
/>
</div>
</div>
<div id="prompt-list">
for _, repo := range repositories {
for _, group := range repos[repo].GetGroups() {
<div class="card mb-4">
<div class="card-header">
<h3 class="h5 mb-0">{ group }</h3>
</div>
<div class="list-group list-group-flush">
for _, prompt := range repos[repo].GetPromptosByGroup(group) {
<div class="list-group-item">
<div class="d-flex justify-content-between align-items-center">
<a href={ templ.SafeURL("/prompts/" + prompt.Name) } class="text-decoration-none">
{ prompt.Name }
</a>
<div>
<button
class="btn btn-sm btn-outline-secondary me-2"
onclick={ copyToClipboard(prompt.Name) }
>
<i class="bi bi-clipboard"></i>
</button>
<button
class="btn btn-sm btn-outline-primary"
onclick={ addToFavorites(prompt.Name) }
>
<i class="bi bi-plus-lg"></i>
</button>
</div>
</div>
</div>
}
</div>
</div>
}
@components.PromptList(repos[repo].GetPromptos())
}
</div>
</div>
Expand Down
Loading

0 comments on commit 9116e96

Please sign in to comment.