Add CommonHtmxRoute making it easy to create a Post method

This commit is contained in:
Achim Rohn
2025-08-13 14:16:59 +02:00
parent 723d2d0e72
commit f1c0055710
+34 -13
View File
@@ -96,29 +96,32 @@ func addLanguageToPath(path string, language Language) string {
return "/" + string(language) + path
}
type HtmxGetRoute struct {
type CommonHtmxRoute struct {
Paths LanguagePaths
RouteFunc HtmxRouteFunc
PathParams []HtmxPathParam
ActivePath *ActivePath
Method string
HtmxMethod HtmxHttpMethodFunction
}
func (h HtmxGetRoute) Execute(c HtmxContext) {
func NewCommonHtmxRoute(routeFunc HtmxRouteFunc, paths LanguagePaths, method string,
htmxMethod HtmxHttpMethodFunction) *CommonHtmxRoute {
return &CommonHtmxRoute{RouteFunc: routeFunc, Paths: paths, Method: method, HtmxMethod: htmxMethod}
}
func (h CommonHtmxRoute) Execute(c HtmxContext) {
h.RouteFunc(c)
}
func (h HtmxGetRoute) SetActivePath(activePath *ActivePath) HtmxRoute {
func (h CommonHtmxRoute) SetActivePath(activePath *ActivePath) HtmxRoute {
h.ActivePath = activePath
return h
}
func NewHtmxGetRoute(routeFunc HtmxRouteFunc, paths LanguagePaths) *HtmxGetRoute {
return &HtmxGetRoute{RouteFunc: routeFunc, Paths: paths}
}
func (h HtmxGetRoute) Add(server *http.ServeMux) {
func (h CommonHtmxRoute) AddWithMethod(method string, server *http.ServeMux) {
for language, path := range h.Paths {
server.HandleFunc("GET "+addLanguageToPath(path, language), func(res http.ResponseWriter, req *http.Request) {
server.HandleFunc(method+" "+addLanguageToPath(path, language), func(res http.ResponseWriter, req *http.Request) {
context := NewHtmxContext(req, res, language)
if h.ActivePath != nil {
context.SetActivePath(h.ActivePath)
@@ -128,12 +131,16 @@ func (h HtmxGetRoute) Add(server *http.ServeMux) {
}
}
func (h HtmxGetRoute) WithPathParams(params ...HtmxPathParam) HtmxRoute {
func (h CommonHtmxRoute) Add(server *http.ServeMux) {
h.AddWithMethod(h.Method, server)
}
func (h CommonHtmxRoute) WithPathParams(params ...HtmxPathParam) HtmxRoute {
h.PathParams = params
return h
}
func (h HtmxGetRoute) ToUrl(language Language, queryParams ...HtmxPathParam) string {
func (h CommonHtmxRoute) ToUrl(language Language, queryParams ...HtmxPathParam) string {
path := addLanguageToPath(h.Paths[language], language)
if len(h.PathParams) == 0 {
return path
@@ -144,8 +151,22 @@ func (h HtmxGetRoute) ToUrl(language Language, queryParams ...HtmxPathParam) str
return path
}
func (h HtmxGetRoute) GetHtmx(language Language, queryParams ...HtmxPathParam) gomponents.Node {
return htmx.Get(h.ToUrl(language, queryParams...))
type HtmxHttpMethodFunction func(url string) gomponents.Node
func (h CommonHtmxRoute) GetHtmxFromMethod(method HtmxHttpMethodFunction, language Language, queryParams ...HtmxPathParam) gomponents.Node {
return method(h.ToUrl(language, queryParams...))
}
func (h CommonHtmxRoute) GetHtmx(language Language, queryParams ...HtmxPathParam) gomponents.Node {
return h.GetHtmxFromMethod(h.HtmxMethod, language, queryParams...)
}
func NewHtmxGetRoute(routeFunc HtmxRouteFunc, paths LanguagePaths) HtmxRoute {
return NewCommonHtmxRoute(routeFunc, paths, "GET", htmx.Get)
}
func NewHtmxPostRoute(routeFunc HtmxRouteFunc, paths LanguagePaths) HtmxRoute {
return NewCommonHtmxRoute(routeFunc, paths, "POST", htmx.Post)
}
func HandleStaticAndDefaultPath(server *http.ServeMux, defaultRoute HtmxRoute, defaultLanguage Language) func(http.ResponseWriter, *http.Request) {