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 return "/" + string(language) + path
} }
type HtmxGetRoute struct { type CommonHtmxRoute struct {
Paths LanguagePaths Paths LanguagePaths
RouteFunc HtmxRouteFunc RouteFunc HtmxRouteFunc
PathParams []HtmxPathParam PathParams []HtmxPathParam
ActivePath *ActivePath 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) h.RouteFunc(c)
} }
func (h HtmxGetRoute) SetActivePath(activePath *ActivePath) HtmxRoute { func (h CommonHtmxRoute) SetActivePath(activePath *ActivePath) HtmxRoute {
h.ActivePath = activePath h.ActivePath = activePath
return h return h
} }
func NewHtmxGetRoute(routeFunc HtmxRouteFunc, paths LanguagePaths) *HtmxGetRoute { func (h CommonHtmxRoute) AddWithMethod(method string, server *http.ServeMux) {
return &HtmxGetRoute{RouteFunc: routeFunc, Paths: paths}
}
func (h HtmxGetRoute) Add(server *http.ServeMux) {
for language, path := range h.Paths { 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) context := NewHtmxContext(req, res, language)
if h.ActivePath != nil { if h.ActivePath != nil {
context.SetActivePath(h.ActivePath) 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 h.PathParams = params
return h 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) path := addLanguageToPath(h.Paths[language], language)
if len(h.PathParams) == 0 { if len(h.PathParams) == 0 {
return path return path
@@ -144,8 +151,22 @@ func (h HtmxGetRoute) ToUrl(language Language, queryParams ...HtmxPathParam) str
return path return path
} }
func (h HtmxGetRoute) GetHtmx(language Language, queryParams ...HtmxPathParam) gomponents.Node { type HtmxHttpMethodFunction func(url string) gomponents.Node
return htmx.Get(h.ToUrl(language, queryParams...))
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) { func HandleStaticAndDefaultPath(server *http.ServeMux, defaultRoute HtmxRoute, defaultLanguage Language) func(http.ResponseWriter, *http.Request) {