FIX: back-links in bearbeiten-Formularen

This commit is contained in:
Simon Martens
2026-01-29 14:16:57 +01:00
parent ff85e83dc7
commit 459c15b409
22 changed files with 591 additions and 525 deletions

View File

@@ -80,6 +80,7 @@ func (p *AlmanachContentsEditPage) GET(engine *templating.Engine, app core.App)
data["musenalm_types"] = dbmodels.MUSENALM_TYPE_VALUES
data["pagination_values"] = paginationValuesSorted()
data["agent_relations"] = dbmodels.AGENT_RELATIONS
data["cancel_url"] = cancelURLFromHeader(e)
if msg := popFlashSuccess(e); msg != "" {
data["success"] = msg
@@ -160,6 +161,7 @@ func (p *AlmanachContentsEditPage) GETItemEdit(engine *templating.Engine, app co
data["agent_relations"] = dbmodels.AGENT_RELATIONS
data["agents"] = agentsMap
data["content_agents"] = contentAgentsMap[content.Id]
data["cancel_url"] = cancelURLFromHeader(e)
data["prev_content"] = prevContent
data["next_content"] = nextContent
data["content_index"] = contentIndex
@@ -205,6 +207,7 @@ func (p *AlmanachContentsEditPage) GETNew(engine *templating.Engine, app core.Ap
data["agents"] = map[string]*dbmodels.Agent{}
data["content_agents"] = []*dbmodels.RContentsAgents{}
data["is_new"] = true
data["cancel_url"] = cancelURLFromHeader(e)
return engine.Response200(e, TEMPLATE_ALMANACH_CONTENTS_ITEM_EDIT, data, p.Layout)
}
@@ -225,6 +228,7 @@ func (p *AlmanachContentsEditPage) renderError(engine *templating.Engine, app co
data["pagination_values"] = paginationValuesSorted()
data["agent_relations"] = dbmodels.AGENT_RELATIONS
data["error"] = message
data["cancel_url"] = cancelURLFromHeader(e)
data["edit_content_id"] = strings.TrimSpace(e.Request.URL.Query().Get("edit_content"))
data["new_content"] = strings.TrimSpace(e.Request.URL.Query().Get("new_content"))
return engine.Response200(e, p.Template, data, p.Layout)
@@ -299,6 +303,7 @@ func (p *AlmanachContentsEditPage) renderItemError(engine *templating.Engine, ap
data["content_index"] = contentIndex
data["content_total"] = contentTotal
data["error"] = message
data["cancel_url"] = cancelURLFromHeader(e)
return engine.Response200(e, TEMPLATE_ALMANACH_CONTENTS_ITEM_EDIT, data, p.Layout)
}

View File

@@ -66,6 +66,7 @@ func (p *AlmanachEditPage) GET(engine *templating.Engine, app core.App) HandleFu
data["item_types"] = dbmodels.ITEM_TYPE_VALUES
data["agent_relations"] = dbmodels.AGENT_RELATIONS
data["series_relations"] = dbmodels.SERIES_RELATIONS
data["cancel_url"] = cancelURLFromHeader(e)
if msg := popFlashSuccess(e); msg != "" {
data["success"] = msg

View File

@@ -82,6 +82,7 @@ func (p *AlmanachNewPage) GET(engine *templating.Engine, app core.App) HandleFun
data["agent_relations"] = dbmodels.AGENT_RELATIONS
data["series_relations"] = dbmodels.SERIES_RELATIONS
data["is_new"] = true
data["cancel_url"] = cancelURLFromHeader(e)
return engine.Response200(e, p.Template, data, p.Layout)
}

View File

@@ -362,62 +362,9 @@ func (p *BaendePage) buildResultData(app core.App, ma pagemodels.IApp, e *core.R
return data, fmt.Errorf("failed to get users from cache")
}
// Determine active filter (only one at a time)
activeFilterType := ""
activeFilterValue := ""
switch {
case status != "":
activeFilterType = "status"
activeFilterValue = status
person = ""
user = ""
yearStr = ""
place = ""
case person != "":
activeFilterType = "person"
activeFilterValue = person
user = ""
yearStr = ""
place = ""
case user != "":
activeFilterType = "user"
activeFilterValue = user
yearStr = ""
place = ""
case yearStr != "":
activeFilterType = "year"
activeFilterValue = yearStr
place = ""
case place != "":
activeFilterType = "place"
activeFilterValue = place
}
if activeFilterType != "" {
search = ""
letter = ""
}
// Apply search/letter/filters
var filteredEntries []*dbmodels.Entry
if activeFilterType != "" {
switch activeFilterType {
case "status":
filteredEntries = filterEntriesByStatus(allEntries, status)
case "person":
filteredEntries = filterEntriesByAgent(allEntries, entryAgentsMap, person)
case "user":
filteredEntries = filterEntriesByEditor(allEntries, user)
case "year":
yearVal, err := strconv.Atoi(yearStr)
if err != nil {
filteredEntries = []*dbmodels.Entry{}
} else {
filteredEntries = filterEntriesByYear(allEntries, yearVal)
}
case "place":
filteredEntries = filterEntriesByPlace(allEntries, place)
}
} else if search != "" {
filteredEntries := allEntries
if search != "" {
trimmedSearch := strings.TrimSpace(search)
if utf8.RuneCountInString(trimmedSearch) >= 3 {
entries, err := searchBaendeEntries(app, trimmedSearch)
@@ -429,11 +376,30 @@ func (p *BaendePage) buildResultData(app core.App, ma pagemodels.IApp, e *core.R
filteredEntries = filterEntriesBySearch(allEntries, itemsMap, trimmedSearch)
}
data["search"] = trimmedSearch
} else if letter != "" {
// Apply letter filter
filteredEntries = filterEntriesByLetter(allEntries, letter)
} else {
filteredEntries = allEntries
}
if letter != "" {
filteredEntries = filterEntriesByLetter(filteredEntries, letter)
}
if status != "" {
filteredEntries = filterEntriesByStatus(filteredEntries, status)
}
if person != "" {
filteredEntries = filterEntriesByAgent(filteredEntries, entryAgentsMap, person)
}
if user != "" {
filteredEntries = filterEntriesByEditor(filteredEntries, user)
}
if yearStr != "" {
yearVal, err := strconv.Atoi(yearStr)
if err != nil {
filteredEntries = []*dbmodels.Entry{}
} else {
filteredEntries = filterEntriesByYear(filteredEntries, yearVal)
}
}
if place != "" {
filteredEntries = filterEntriesByPlace(filteredEntries, place)
}
// Apply sorting based on sort parameter
@@ -513,11 +479,14 @@ func (p *BaendePage) buildResultData(app core.App, ma pagemodels.IApp, e *core.R
data["has_more"] = hasMore
data["next_offset"] = nextOffset
data["letter"] = letter
data["status"] = status
data["person"] = person
data["user"] = user
data["year"] = yearStr
data["place"] = place
data["sort_field"] = sort
data["sort_order"] = order
data["csrf_token"] = req.Session().Token
data["active_filter_type"] = activeFilterType
data["active_filter_value"] = activeFilterValue
// Keep letters array for navigation
letters := []string{

14
controllers/cancel_url.go Normal file
View File

@@ -0,0 +1,14 @@
package controllers
import (
"strings"
"github.com/pocketbase/pocketbase/core"
)
func cancelURLFromHeader(e *core.RequestEvent) string {
if e == nil || e.Request == nil {
return ""
}
return strings.TrimSpace(e.Request.Header.Get("HX-Current-URL"))
}

View File

@@ -108,6 +108,7 @@ func (p *OrtEditPage) GET(engine *templating.Engine, app core.App) HandleFunc {
req := templating.NewRequest(e)
data["csrf_token"] = req.Session().Token
data["cancel_url"] = cancelURLFromHeader(e)
if msg := popFlashSuccess(e); msg != "" {
data["success"] = msg
@@ -134,6 +135,7 @@ func (p *OrtEditPage) renderError(engine *templating.Engine, app core.App, e *co
req := templating.NewRequest(e)
data["csrf_token"] = req.Session().Token
data["cancel_url"] = cancelURLFromHeader(e)
return engine.Response200(e, p.Template, data, p.Layout)
}

View File

@@ -71,6 +71,7 @@ func (p *OrtNewPage) renderPage(engine *templating.Engine, app core.App, e *core
data["result"] = result
data["csrf_token"] = req.Session().Token
data["cancel_url"] = cancelURLFromHeader(e)
data["is_new"] = true
if message != "" {
data["error"] = message

View File

@@ -124,6 +124,7 @@ func (p *PersonEditPage) GET(engine *templating.Engine, app core.App) HandleFunc
req := templating.NewRequest(e)
data["csrf_token"] = req.Session().Token
data["cancel_url"] = cancelURLFromHeader(e)
if msg := popFlashSuccess(e); msg != "" {
data["success"] = msg
@@ -150,6 +151,7 @@ func (p *PersonEditPage) renderError(engine *templating.Engine, app core.App, e
req := templating.NewRequest(e)
data["csrf_token"] = req.Session().Token
data["cancel_url"] = cancelURLFromHeader(e)
return engine.Response200(e, p.Template, data, p.Layout)
}

View File

@@ -75,6 +75,7 @@ func (p *PersonNewPage) renderPage(engine *templating.Engine, app core.App, e *c
data["result"] = result
data["csrf_token"] = req.Session().Token
data["cancel_url"] = cancelURLFromHeader(e)
data["is_new"] = true
if message != "" {
data["error"] = message

View File

@@ -130,6 +130,7 @@ func (p *ReiheEditPage) GET(engine *templating.Engine, app core.App) HandleFunc
req := templating.NewRequest(e)
data["csrf_token"] = req.Session().Token
data["cancel_url"] = cancelURLFromHeader(e)
if msg := popFlashSuccess(e); msg != "" {
data["success"] = msg
@@ -156,6 +157,7 @@ func (p *ReiheEditPage) renderError(engine *templating.Engine, app core.App, e *
req := templating.NewRequest(e)
data["csrf_token"] = req.Session().Token
data["cancel_url"] = cancelURLFromHeader(e)
return engine.Response200(e, p.Template, data, p.Layout)
}

View File

@@ -75,6 +75,7 @@ func (p *ReiheNewPage) renderPage(engine *templating.Engine, app core.App, e *co
data["result"] = result
data["csrf_token"] = req.Session().Token
data["cancel_url"] = cancelURLFromHeader(e)
data["is_new"] = true
if message != "" {
data["error"] = message